OmniAICreator/Qiita-1.07M huggingface dataset:
docker fluent memo

たぶんいろんな方がやっていると思いますが、Ubuntu16.04LTS+Docker+Fluentdを動かそうとしてます。それで、RasPi2からのNetFlowを受ける予定。

■メインどころの参考ページ
Fluentd の Docker イメージを動かした際のメモ
http://tatsuyafw.hatenablog.jp/entry/2016/08/30/000038
・とこれを組み合わせてやってみることに(5/4)
【Docker】FluentdとElasticsearchとKibanaの環境構築
http://qiita.com/narumi_/items/ec1c4cbbc65ec26b46f8

■事前作業
Dockerイメージとコンテナの削除方法
http://qiita.com/tifa2chan/items/e9aa408244687a63a0ae
Dockerの不要なボリュームを削除する
http://zashikiro.hateblo.jp/entry/2016/08/16/201633


Dockerfileにnetflowのpluginを記述する

```:Dockerfile
FROM fluent/fluentd
RUN fluent-gem install fluent-plugcin-netflow
RUN fluent-gem install fluent-plugin-elasticsearch
```
保存したら
`sudo docker build -t custom-fluentd:latest ./`
実行は
`sudo docker run -d -p 24224:24224 -p 24224:24224/udp -v /home/fluentd/log:/fluentd/log -v /home/fluentd:/fluentd/etc -e FLUENTD_CONF=fluentd.conf custom-fluentd`

fluent.confはこんな感じ

```fluent:fluentd.conf
<source>
  type netflow
  tag netflow.event
  port 24224
</source>
#<match **>
#  @type stdout
#</match>
<match docker.**>
  @type file
  @id   output1
   path         /fluentd/log/dockerdata.*.log
   symlink_path /fluentd/log/dockerdata.log
   append       true
   time_slice_format %Y%m%d
   time_slice_wait   1m
   time_format       %Y%m%dT%H%M%S%z
</match>
<match netflow.event>
  @type file
   path         /fluentd/log/data.*.log
   symlink?path /fluentd/log/data.log
   append       true
</match>
#<match **>
#  type file
#  path /home/fluentd
#</match>
```
Dockerについて基本から最近追加された機能までまとめ
http://qiita.com/tigberd/items/b94ae2bf7d78685cd6f5


この辺から始め
・Dockerコンテナ(Ubuntu 16.04 xenial)へのtd-agentの導入
http://qiita.com/RyoMa_0923/items/8f6f5e2bffaafe0fbebc
・(古いけど)Dockerコンテナのロギング機能を使ってみる
http://knowledge.sakura.ad.jp/knowledge/6752/
・(非Docker)職場でよく耳にするfluentdを試してみました
http://qiita.com/mitzi2funk/items/8ef7e3c2707124adc739
・(非Docker)GrafanaによるNetFlow v9トラフィック分析
http://qiita.com/ishizaghi/items/b0ecd9fa50e503362165

・公式
http://docs.fluentd.org/v0.12/categories/installation
http://docs.fluentd.org/v0.12/articles/install-by-docker
・Netflowコレクターを無償のFluend＋ElasticSearch＋Kibanaで構築する
http://komeiy.hatenablog.com/entry/2014/09/26/212000
・Netflow plugin for Fluentd
https://github.com/repeatedly/fluent-plugin-netflow
http://blog.takanabe.tokyo/2015/12/24/2021/

Docker ドキュメント日本語化プロジェクト
http://docs.docker.jp
fluentd最低限のメモ
http://qiita.com/zaburo/items/dbd943d370afe8e4a304
docker-composeでfluentd + elasticsearch + kibana4　環境をつくるhttp://qiita.com/cgetc/items/345e3c686910b30ba49f
【Docker】FluentdとElasticsearchとKibanaの環境構築
http://qiita.com/narumi_/items/ec1c4cbbc65ec26b46f8
Dockerコンテナのロギング機能を使ってみる
http://knowledge.sakura.ad.jp/knowledge/6752/
Dockerコンテナのファイルディスクリプタ設定
http://qiita.com/kazunori279/items/5aedb6ed548225545a3c

ログファイルが書き込めないのはこの辺
http://qiita.com/marufeuille/items/91c68e2bafb8a4c1d889#コンテナの起動
RasPi2 B+ を Open vSwitch でNetFlowをしゃべる Bridge として使う方法

こんなことをする目的ですが、NetFlowの実験のためです。
OpwnvSwitchでNetFlowをしゃべってくれるという話を聞いたので。

手順：
1.あらかじめ取っておいたOVS240のクリーンイメージを、SDにddコピーで書き戻す。
sudo dd if=/Users/yohichi/Desktop/20160319_RaspJessieOVS240comp.img of=/dev/disk1

最初は、ここを参考にしようと思っていたが、
・KVM環境でLinux標準ブリッジの代わりにOpen vSwitchを利用する
http://knqyf263.hatenablog.com/entry/2013/12/30/220214
どうも情報が古すぎるようで、
・Ubuntu14.04でopenvswitch-brcompatを使わずにKVMをopen vSwitchで外部ネットワークに接続する・その2(解決編)
https://spicebeat.net/blog/archives/465
こちらを参考に始めるつもりが4/16の夜。

そして4/22の夜。
interfacesの設定までは行わず、ovs−vsctlのみで設定。
ただ、Raspbianでは微妙に不安定。理由はわからないけど、L2 bridgeとして設定したnetflow-brにDHCPでIPが振られないと、安定しないらしい。
ちなみに、LED付きUSB−NICドングルを使うと上手くいかない気がするので、1コはMAC同一中華NICを使わざるをえず。

さて、次はDockerでfluentを動かす番だ。
NetFlow on Open vSwitch
http://blog.shin.do/2014/12/netflow-on-open-vswitch-3/
を参考にOVS側を定義。
ovs-vsctl -- set Bridge netflow−br netflow=@nf -- --id=@nf create NetFlow targets=\"192.168.0.110:5566\"

エラー　撃沈
ovs-vsctl: no row "netflow−br" in table Bridge

とりあえず、参考３つ。
https://github.com/osrg/openvswitch/blob/master/FAQ
http://openvswitch.org/support/dist-docs/ovs-vswitchd.conf.db.5.html
http://manpages.ubuntu.com/manpages/trusty/en/man8/ovs-controller.8.html


でも、結論は全然別のところに、、、
原因は、ブリッジ名のハイフンでした。
"netflow-br"
OVSのブリッジ名としては有効ですが、NetFlowの定義での引数としては不可です。
ここで5/16。毎日取り組んでいたわけはないですが、一ヶ月はかかり過ぎ。。。


受け側Fluentd参考---
NetFlow to fluentd にはRuby環境が必要(gem)ということでここを参考にインストール。
Ruby on Rails 4.2 を Ubuntu にインストールする手順をかなり丁寧に説明してみました
https://www.oiax.jp/rails/zakkan/rails_4_2_installation_on_ubunt.html
Rubyのインストール20分もかかったよ・・・


参考リンク
Netflowコレクターを無償のFluend＋ElasticSearch＋Kibanaで構築する
http://komeiy.hatenablog.com/entry/2014/09/26/212000
sflowもFluentd+Elastic Searchに入れて可視化してみた
http://komeiy.hatenablog.com/entry/2015/09/02/235512
Fluent-plugin-sflow でっちあげた
http://enukane.github.io/blog/2017/03/24/fluent-plugin-sflow-release/
TensorFlowの基本演算の表示

#TensorFlowの基本演算の表示

TensorFlowの基本演算は単純に`print(tf.div(2, 3))`のようには表示できません。TensorFlowで基本演算などを表示させるには次のようにします。


```python:print.py
import tensrflow as tf
sess = tf.Session()

print(sess.run(tf.div(2, 3)))
# div():戻り値は入力の型と同じ型になります。

print(sess.run(tf.truediv(2, 3)))
# truediv():python3の除算と同じです。

print(sess.run(tf.floordiv(2.0, 3.0)))
# floordiv():これは演算結果を最も近い整数に丸めこみます。
```

上記にTensorFlowでの演算を示しました。
まずは`import tensorflow as tf`でtensorflowライブラリを読み込みます。
`sess = tf.Session()`によりセッションを開始します。
セッションはtensorflowを使用するためのおまじないのようなものだと最初のうちは思っておいてください。

`print(sees.run(表示したい演算処理))`により表示することができます。

以上がTensorFlowで演算を表示する方法です。
以下にTensorFlowの基礎をまとめている参照先を貼っておきます。

#参考
https://qiita.com/rindai87/items/4b6f985c0583772a2e21 (TensorFlowの基礎)
プログラミング 7 か月目

プログラミングを始めて 7 か月が経とうとしています。

　フロントエンドを効率化する言語を学習したので、今月はそれを使ってコーディングの効率化や可読性の向上を図っていました。今回も前回と同様に書きたいと思います。

#:pencil2: 進捗状況
**Progate**

JavaScript 道場編Ⅰ: ヒントを使わずに完走できました
SQL Ⅰ: 今月の上旬に登場。Paiza のおかげか割と出来たような気がします

**ドットインストール**

Emmet 入門 : HTML と CSS を略語で素早く書けるようになりました
Vue.js 入門 : JS フレームワーク


**その他**

CSS 設計 (OOCSS・SMACSS・BEM）
GitHub Flow


#:pencil2: 新着事項
　7 か月目で新たに取り入れたことや、プログラミングで意識したことを書いていこうと思います。

###:arrow_forward: ポートフォリオサイトの見直し

　 先月に学習したフロントエンドを効率化させる言語を使って、今まで作ったポートフォリオサイトのコーディングを見直すとともに、ejs,sass をメインにポートフォリオサイトを組み込んでみました

　**ejs**: 「テンプレートエンジン」と呼ばれているもので、HTML を効率的にコーディングできるものです。WordPress でいうテンプレートタグやインクルードファイルのように使うことができます。約 300 行にわたる HTML も、ejs でかなり見通しが良くなりました。 

　**sass**: CSS にプログラミング言語の要素（計算、条件分岐、ループ処理、関数等）を合体させたようなメタ言語。同じようなところを使い回せるのでとても便利です。最近学習した CSS 設計と併せて、可読性を向上させました。


###:wrench:　見直しをしてみて

 　最初はとにかく完成させようということで、特に意識せずコーディングをしていました。そのこともあって仕方ないとは思いますが、改めて見直してみるとぐちゃぐちゃにコードを書いていることが分かりました。

　CSS に関しては、指定したクラス名をダブらせて書いていたり、何をスタイリングしているのか分からないようなクラスをつけていたりと可読性がよろしくない書き方をしているのが分かりました。可読性が低い書き方をすると、かなりの時間をとられてしまうことも今回の見直して体験できたような気がします。


　最近学習した Gulp や ejs 、sass 、CSS 設計（OOCSS・SMACSS・BEM）をポートフォリオサイトに組み込むのには時間がかかりましたが、なんとか形にはなったような気がします。可読性が高いコーディングを意識してすることも効率化の一つになると思います。


#:star: 最後に
　
　ポートフォリオサイトの見直しがてらに、Glup や ejs 等を試してみました。効率化はもちろんのことですが HTML や CSS だけでは気付かなかったことにたくさん気づくことが出来たような気がします。 スキルアップとともにとても便利であることを実感しましたが、まだまだ改善の余地はありそうです

　まだ分からないことがたくさんありますが、一日でも早く上達できるように頑張りたいと思います。
独自の julia docker image を作ってみる

## モチベーション
julia lang の和書が２０１７／１０／１にNTSから出版されました。

[Juliaデータサイエンス](http://www.nts-book.co.jp/item/detail/summary/it/20171001_35.html)

これを機に触れてみようと思い立ち、
書籍では v0.4.x
最新は　v0.6.0 とのことでこの二つのカーネルを
jupyter-notebook で実行できるようにすることがゴールです。
ついでに v0.6.0 環境には CmdStan を入れておきます。

## 調査
まったく julia について知らなかったので
公式をチェック
[公式 julialang.org](https://julialang.org)
juliabox.com という素敵なサービスも発見
容量が500MBまでとのこと. また, CmdStan も使えない.
[juliabox.com](https://www.juliabox.com)
公式 docker image を参考に、Dockerfile を作ってみます

- [公式 docker image](https://hub.docker.com/r/julialang/julia/)
- [ JuliaDockerImages/base/v0.6/Dockerfile ](https://github.com/JuliaDockerImages/base/v0.6/Dockerfile  )

## 作ったDockerfile
[datarefine/julialang-docker](https://hub.docker.com/r/datarefine/julialang-docker/)

### docker run

```bash
docker pull datarefine/julialang-docker:latest
docker run --rm -it -p 8888:8888 --name julia datarefine/julialang-docker:latest
```

```docker run``` 実行後、下記のログが標準出力に表示されるので、そのＵＲＬへアクセスする

```
[C 15:41:32.244 NotebookApp]
 Copy/paste this URL into your browser when you connect for the first time,
 to login with a token:
   http://0.0.0.0:8888/?token=xxxxxx
```

### オプションについて
- ```--rm```: コンテナを止めた後に、そのまま削除
- ```-i```: attach していなくても標準出力につないだままにしてくれる
- ```-t```: 仮のttyに割り当ててくれる
- ```--name```: コンテナの名前をつける
- ```-p host_port:container_port```: デフォルトではネットワークは bridge であり,host側のポートとcontainer側のポートをつないでくれる
- ```--cpuset-cpus=""```: 0-3/1,3など, どの CPU で container を実行するか指定
- ```--memory=""```: 4g,8g,など container が使うメモリ数

### その他
```bash
docker run --rm -it --name julia datarefine/julialang-docker:latest /bin/bash
```
で```bash```が起動し, ```julia```コマンドが使えます

container 上で実行しているのでcontainer を止めると、
jupyter にアップロードしたファイルは消えます。

## 公式と変更した点
- BaseImage ubuntu:16.04 -> [phusion/baseimage](https://github.com/phusion/baseimage-docker)
 - プロセスコントロールとしてrunitが導入されている.
- miniconda -> miniconda3
  - ENV[CONDA_JL_HOME"]="/path/to/miniconda3"
  - この環境変数により IJulia や Conda のパッケージインストールの時に、指定したminiconda3を利用する([Using an already existing Conda installation](https://github.com/JuliaPy/Conda.jl#using-an-already-existing-conda-installation))
- jupyter-notebook 上で v0.4.7 と v0.6.0 のカーネルを利用できるように.
- [CmdStan](http://mc-stan.org/users/interfaces/cmdstan) をインストール. julia から使えるように.
  - ついでに clang++-4.0 をインストール
  - gcc が同居する環境だと clang が libc++ を見つけられないらしい([CmdStanでコンパイルエラー](http://discourse.mc-stan.org/t/error-in-compiling-cmdstan-cstddef-string-not-found/1874))

### 課題
- libcairo2 によって x11 が入ってしまって、イメージサイズが大きくなってしまう ->小さくしたい

~~(windows への docker 実行環境導入は別記事で書きます)~~
書きました.
https://qiita.com/ysaito8015@github/items/1ec358275227d32cbd44
スナップショットテストのすゝめ

## 変更履歴

- 2018/6/1　jest@23について追記

## はじめに

- 勉強会で使ったスライドをそのまま公開したものです
- TDDとかする時にスナップショットテストするといいよ、という話

---

## 前置き

---

## ユニットテスト書いてますか？

1. TDDで常にメンテ
1. 危なそうなとこだけ書く
1. 男は黙って手動テスト

---

## テストコードはコストが高い？

- テストコードを書く工数が確保できない

    ->

- テストコードのメンテが面倒

    ->

---

## テストコードはコストが高い？

- テストコードを書く工数が確保できない
    
    -> *テストフェーズの工数を前借りする*

- テストコードのメンテが面倒

    -> *メンテを普段の開発フローに組み込む*

*（テストコード実装 + テスト実行時間） < （コンパイル/起動時間 + 手動テストの工数）*のとき、テストコードを書いた方が生産性が高い

+テストコードがあるとCIでリグレッションテストとして使える

---

## TDD

- テスト駆動開発

1. 失敗するテストを書く
1. できる限り早く、テストに通るような最小限のコードを書く -> 動くクソコードを書く
1. リファクタリングする -> 動く綺麗なコードにする

---

## テストケースの修正、特に期待値の修正が大変

---

## 本題

---

## スナップショットテスト

- 最初のテスト実行時にテストケースのアウトプットが保存（スナップショット）される
- スナップショットを目視で確認して期待通りならOK
- 2回目以降はアウトプットとスナップショットを比較して一致していればOK
- スナップショットファイルをgit管理する

---

## テストフレームワーク

- JavaScript, TypeScript
    - Jest
        - facebook製
        - Reactと特に相性がいい
        - expect(output).toMatchSnapshot()
- PHP
    - https://github.com/spatie/phpunit-snapshot-assertions
- Python
    - https://github.com/syrusakbary/snapshottest
- etc...

---

## なければ作る

- スナップショットアサーションの中身
  1. スナップショットファイルを探しに行く。
  1. if 上書きフラグあり or スナップショットがない
      - アウトプットをシリアライズしてスナップショットファイル作成/上書き
  1. else 
      - アウトプットをシリアライズしてスナップショットと比較する

---

## スナップショットテストを行うようになって

- ロジックに集中できるようになった
- ロジックを変えた時にテスト結果でスナップショットとのDiffが出るから期待値の確認が楽
- テストコードに時間かけてないからポイ捨てが簡単（もったいないからという理由で動かない/使わないテストが残されている場合がある）

---

## 運用時に気をつけるべき点

- スナップショットファイルの受け入れは期待値が明確になってから行う（当たり前）

    -> 間違った期待値をスナップショットにしてしまいがち

- テスト実行タイミングに依存する値を含めてはいけない

    -> 全く同じプロパティ・値を比較しているため
    -> 可変値は普通のアサーションで評価する

    > <p>2018/6/1追記 jest@23について</p>
    <p>jestの場合、v23でスナップショットの内一部のみ型一致を評価するように指定できるようになったみたいなので別のアサーションを組み合わせる必要がなくなりました。</p> [Snapshot Property Matchers](https://facebook.github.io/jest/blog/2018/05/29/jest-23-blazing-fast-delightful-testing.html#snapshot-property-matchers)

- スナップショットの更新は1ファイルずつ行う

    -> 意図しない更新で間違った期待値になってしまう場合がある

---

## サンプルっぽいもの

- https://github.com/kentt8046/snapshot-testing-sample
    - NodeJS + TypeScript + Jest

---

## スナップショットテストで幸せなテストを
Unity 2017.2にしたらCocoaPodsでコケる

以下のようなエラーがでて、iOS書き出しが通らない。
`iOS framework addition failed due to a Cocoapods installation failure. This will will likely result in an non-functional Xcode project.
`

デバッグトレースの下のほうみると、
`ArgumentError - invalid byte sequence in US-ASCII`
って書いてある。

なので、
~/.bash_profileに、以下を追加。

`export LC_ALL="en_US.UTF-8"`

で、
source ~/.bash_profile
で読み込めばオッケー。
[Android] KotlinでRecyclerViewを制御する

# はじめに
2017年5月17日にGoogleI/OでKotlinをサポートされることが正式に発表されました。
この発表を気にKotlinの勉強会・自主学習で勉強していき、かつSampleアプリを作りましたので共有していきます。


## 開発環境
1. Mac Book Pro 2013モデル
2. Android Stduio

## ライブラリ
利用したライブラリを以下に記載します。

```
com.android.support:appcompat-v7:25.2.0
com.android.support:design:25.2.0
com.android.support:recyclerview-v7:25.3.1
com.android.support:cardview-v7:25.3.1
com.android.support.constraint:constraint-layout:1.0.0-beta4
```

## サンプルプロジェクト
githubで公開しています。
https://github.com/forestliveDev/SampleKotlinRecycleView

## 動画
[![ビデオが開けなかった場合に表示されるテキスト](http://img.youtube.com/vi/D4WNKvSLS1g/0.jpg)](https://www.youtube.com/watch?v=D4WNKvSLS1g)
WebSpeechApi

WebSpeechApiとかいう音声認識APIがあるとかないとかって聞いてやってみたメモ

```html:index.html
<!doctype html>
<html>
<head>
  <meta charset="utf-8" />
  <title>Web Speech APIサンプル</title>
  <style>
    body {
      padding: 15px 5px;
      text-align: center;
    }
    li {
      list-style-type: none;
    }
    #btn {
      width: 150px;
      height: 50px;
      margin-bottom: 20px;
    }
  </style>
</head>
<body>
  <h3>Web Speech APIサンプル</h3>
  <button id="btn">開始</button>
  <div id="content"></div>
  <script src="app.js"></script>
</body>
</html>
```
```js:app.js
var btn = document.getElementById('btn');
var content = document.getElementById('content');

//音声認識API
var speech = new webkitSpeechRecognition();

//日本語
speech.lang = "ja";

//ボタンクリックで開始
btn.addEventListener('click', function() {
  speech.start();
});

//音声をテキスト表示
speech.addEventListener('result', function(e) {
  console.log(e);
  var text = e.results[0][0].transcript;
  getTextContents(text);
});

//テキスト表示
function getTextContents(text) {
  content.innerHTML = '<p>あなたが話した言葉</p>' +
                   '<input type="text" value="' + text + '">';
}
```

Chromeだとマイクの設定を許可してあげればできた。
結構精度いいらしい。

これだけで音声認識できるなんてすごいなあ

完
ちょっとずつ読むドメイン駆動設計 第ニ部 モデル駆動設計の構成要素 第六章 ドメインオブジェクトのライフサイクル9(リポジトリ その3)

[その1](https://qiita.com/YasuhiroKimesawa/items/54a2adbc79bfc062e3f4)、[その２](https://qiita.com/YasuhiroKimesawa/items/713d79b196424103ba62)の続きです。

## リポジトリに対して問い合わせる

クエリにどんなものがあるか？
- 識別子を用いてエンティティを取り出す
- 特定の属性やパラメータの複雑な組み合わせを用いてオブジェクトのコレクションを要求
- 値の範囲(日付の範囲など)に基いてオブジェクを選択
- 何らかの計算を実行
などなど

## クライアントのコードはリポジトリの実装を無視するが、開発者はそうではない

アプリケーション層などリポジトリを使う側から見れば実装がどうなっているか気にする必要がないが、もちろん裏側の実装は開発されなければならない。。。当然ですよね。

インフラストラクチャにありがちなパフォーマンス問題やメモリ問題などの問題には取り組まなければならず、

> カプセル化されたふるまいを使用した際の影響について、理解する必要がある(第二部第六章より)

## リポジトリを実装する

> クライアントコードが、データの格納場所に関わらず同じになることだ。(第二部第六章より)

裏でどんな実装をしても、使う側からみたら同じになることが理想ですね。

以下、実装で覚えておくべき懸案を整理しておきます。

- 型は階層における抽象基底クラスでも構わない

データベースでは、多態性を実現することは困難ですが、型に多態性を求めてもいいとのことです。もちろん、データベースの制約をなんとかする必要があるのはその通りですね。

- クライアントから切り離す利点を活かす

クライアントのコードを変えずに、性能問題に取り組んだり、永続化の戦略を変更したり、さらに、テストにモックを利用することもできますね。

- トランザクション制御をクライアントに委ねる

トランザクションの制御はインフラストラクチャで行うのではなく、アプリケーション層などのクライアントで実施すること。

## フレームワーク

SpringやRailsなどアーキテクチャフレームワークの選択には注意。
特にフルスタックのフレームワークでは、インフラストラクチャ層までカバーしているものもあるが、それがリポジトリパターンと同等に使えるかどうかが問題になりそう。

リポジトリパターンと同等に使えない場合、フレームワークをそのまま使うか、ドメイン駆動に沿うように頑張るか。。。

> 一般的に言えることだが、使っているフレームワークとは争わないこと。フレームワークと対立してしまった時には、ドメイン駆動設計の基本を保ちながら、詳細は捨て去る方法を模索すること。ドメイン駆動設計の概念とフレームワークの概念に似通った部分がないか探すこと。(第二部第六章より)

どうしてもドメイン駆動設計の概念をきちんと利用していこうと思ったら、そういうフレームワークを選択しないことを一度検討した方が良さそうですね。

明日さらにリポジトリを読んでいきます。
ECMAScript 6でforループは使わずに任意の要素数の配列をつくる

新しい`Array`クラスのメソッドを用いると、`for`ループは使わずに配列要素が処理できます。ただ、もとになる配列がないとき、必要な要素が納められた配列をどのようにつくればよいか考えなければなりません。

#forループでCanvasに描画するサンプルコード
お題にする`for`ループを使った関数がつぎのコード001です(「[スタイルと色を適用する](https://developer.mozilla.org/docs/Web/Guide/HTML/Canvas_tutorial/Applying_styles_and_colors)」参照)。色相が変化した小さい正方形を、Canvasにタイル状に並べます。引数は小さい正方形の一辺の長さと、縦横に並べる個数です。`draw(25, 4)`で呼び出すと、Canvasには以下の図001の図形が描かれます。jsdo.itに「[Drawing squares on Canvas with for loop](http://jsdo.it/FumioNonaka/Ak47V)」として掲げました。

####コード001■forループを使ってCanvasに描画する
```js
function draw(side, count) {
	var context2d = document.getElementById('myCanvas').getContext('2d');
	var amount = count * count;
	var angle = 360 / (amount - 1);
	for (var i = 0; i < count; i++) {
		for (var j = 0; j < count; j++) {
			context2d.fillStyle = 'hsl(' + angle * (i * count + j) + ', 100%, 50%)';
			context2d.fillRect(j * side, i * side, side, side);
			console.log(angle * (i * count + j));
		}
	}
}
```

####図001■色相の変化した正方形がタイル状に並ぶ
![1710002_001.png](https://qiita-image-store.s3.amazonaws.com/0/128949/7ccb9d96-3ffc-b068-302f-c6c21f0c7d78.png)

思いつくのは、`Array()`コンストラクタで長さを決めてつくった配列に、要素は[`Array.map()`メソッド](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/map)で加えるやり方です。ところが、返されるのは空の配列です。`Array.map()`メソッドは、[値が(`undefined`にしても)代入されていない要素については、コールバックを呼び出さない](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Global_Objects/Array/map#説明)からです。

```js
new Array(amount).map(() => 0)  // []
```

#Array.fill()メソッドで配列要素を埋める
ECMAScript 6に備わった[`Array.fill()`メソッド](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/fill)メソッドは、引数の値を指定したインデックスに代入します。これで、長さを定めた配列の要素は埋められますから、`Array.map()`メソッドが呼び出せます。

前掲コード001の`for`文を使った処理は、つぎのコード002のように`Array`クラスのメソッドで替えられるのです。jsdo.itにも「[ES6: Drawing squares on Canvas with Array methods](http://jsdo.it/FumioNonaka/e23i)」を掲げました。

####コード002■for文は使わずにArrayクラスのメソッドで処理する
```js
function draw(side, count) {
	const context2d = document.getElementById('myCanvas').getContext('2d');
	const amount = count * count;
	const angle = 360 / (amount - 1);
	new Array(amount).fill(0, 0).map((data, i) => ({
		color: `hsl(${angle * i}, 100%, 50%)`,
		x: i % count * side,
		y: Math.floor(i / count) * side
	}))
	.forEach((data) => {
		context2d.fillStyle = data.color;
		context2d.fillRect(data.x, data.y, side, side);
	});
}
```


#Array.from()メソッドで新たな要素の配列をつくる
ECMAScript 2015の`Array`クラスには、[`Array.from()`メソッド](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Global_Objects/Array/from)も加わりました。配列型(array-like)あるいは反復可能(iterable)オブジェクトから、新たに`Array`インスタンスをつくるのがもともとの役割です。けれどさらに、第2引数にマップのためのコールバック関数が与えられます。そして、第1引数が長さを決めただけの要素のない配列でも、コールバック関数が呼び出せるのです。

前掲コード002は、`Array.from()`メソッドを使ってつぎのように書き替えることもできます。

```js
// new Array(amount).fill(0, 0).map((data, i) => ({
Array.from(new Array(amount), (data, i) => ({
	// プロパティ
}))
```
#スプレッド演算子で配列要素を分ける
ECMAScript 2015に[スプレッド演算子`...`](https://developer.mozilla.org/docs/Web/JavaScript/Reference/Operators/Spread_operator)が備わりました。配列要素を分けて親配列の要素にできるのです。この演算子を使って、前掲コード002はつぎのように書き替えることもできます。

```js
[...new Array(amount)].map((data, i) => ({
	// プロパティ
}))
```

[2018年1月23日: 本項を追記]
[React Native]IOSのキーボードを閉じたい

# ReactNativeでiosのキーボードの閉じるボタンがほしい

## 背景

- デフォルトだと閉じるボタンがなくてどう閉じたらいいのか分からない

## 解決策

- `TextInput`のオプションで簡単にできた
- `returnKeyType`に値をセットすると表示されるようになる
- https://facebook.github.io/react-native/docs/textinput.html#returnkeytype

![keyboard.gif](https://qiita-image-store.s3.amazonaws.com/0/175213/54222d9f-2e90-7495-3f6a-ac7d1b2791fe.gif)
オブジェクトの回転角度から単位方向ベクトルを求める

オブジェクトの回転角度からオブジェクトの向いている方向を表す単位方向ベクトルを求める方法です。
つまり、角度からtranform.forwardのような向きを表す大きさ１のベクトルを求めたいわけです。
例えば、x軸周りに-45度、y軸周りに30度の角度から求めるには次のように書けばよいです。

```csharp
var angles = new Vector3(-45, 30, 0);
var direction = Quaternion.Euler(angles) * Vector3.forward;
```

# 解説
原理としてはtransform.forwardが次のように求められているということがあります。

```csharp
var forward = transform.rotation * Vector3.forward;
```
transform.rotationはそのオブジェクトの回転の4元数(Quaternion)なので、同様に4元数をかけてやればいいということがわかります。
ただ、実際に使う角度は3次元のオイラー角なのでQuaternion.Eulerで4元数に変換してあげる必要があるというわけです。
# 効用
例えば指定方向に移動させたいけど、その方向がオブジェクトの正面方向とは限らない(transform.forwardを使わない)場合に使えたりします。
正面に進みつつ任意の方向に弾を撃ちたい場合がそうです。

単に移動させるだけなら、

```
transform.position += direction * speed * Time.deltaTime;
```
とUpdateなどの中に書けばよいです。

任意の方向に速度を持たせたいなら

```
_rigidbody.velocity = direction * speed;
```
任意の方向に加速させたいなら

```
_rigidbody.AddForce(direction * thrust);
```
と書けばよいです。

※speed, thrustはfloat型の値です
# 参考
http://tsubakit1.hateblo.jp/entry/2014/08/02/030919
Rancher Server を起動

Rancher を使ってみたかったので、手元のマシンに、Rancher Server のコンテナを起動した。


```コマンドライン.

docker run -d -p 8080:8080 rancher/server:ここにバージョン

```

いつも忘れてしまうのだけれど
 -p オプションの 8080(ホスト側):8080(コンテナ側)
の関係。

http://ホストのIP:8080

コレだけで Rancher Server 起動できる。すごい。


## データの永続化
Rancher Server の起動についてはわかったけど､データはどこに保存されるのかわからなかったので､調べてみたらオフィシャルに書かれていた｡

http://rancher.com/docs/rancher/v1.6/en/installing-rancher/installing-server/#launching-rancher-server---single-container---bind-mount-mysql-volume

### docker-compose.yml ファイルにしておく
設定が見やすいと思うので､docker-composeにしておきたい｡
docker-compose したいときは､以下のパスをvolumesに追加してあげればいいっぽい｡

```docker-compose.yml
version: '2'
services:
    rancher_server:
        image: rancher/server:v1.6.10
        volumes:
            - ./data/mysql:/var/lib/mysql
        ports:
            - "8080:8080"
        restart: always
```



### コンテナの起動
上記のファイルを作成して､

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

docker-compose した時にデータフォルダは自動で作成される｡
-d でデタッチモード｡付け忘れると､ターミナルを閉じると止まってしまうので､
特に理由がなければ､つけるようにしよう｡


### 動作を確認したいとき(ログの表示)
デタッチモードで起動しないと､画面にログが流れる(設定でログを標準出力されている場合)
デタッチモードでも

```
docker-compose logs -f
```
とすると､ログを tailf っぽく流してくれる｡
node.jsとexpress

某Amazonの無料で本読めるやつに、いまからフロントサイド開発をはじめるなんたらかんたらっていう本があって読んでみたのでメモ

ターミナルから`brew install nodebrew`でやってみたけどうまくいかなかったので[公式サイト](https://nodejs.org/ja/)からダウンロードしました。

次に`npm init`をうってバージョンとかいろいろ聞かれるので適当に答える。
package.jsonができればおｋ。

次に`npm install --save express`でexpressをインストール
app.jsとかいうのをつくって中身書いていく。

```js:app.js
var experss = require('express');
var app = experss();

// ルートパスにアクセスするとHello Worldを返す
app.get("/", function(req, res) {
    res.send('Hello World');
});

// サーバ起動
app.listen(3000, function() {
    console.log('Example app listening on port 3000!');
});
```

かけたらnodeコマンドでサーバ立ち上げる。

```
$node app.js
Example app listening on port 3000!
```

http://localhost:3000/ にアクセスすると`Hello World`が表示されたらおｋ

完
Watsonで有名人の関係を分析しよう! Discovery Newsデモアプリケーション

# Discovery News サンプルアプリケーション
Watson Discovery Newsは、情報検索・探索用APIであるWatson Discovery上にIBMが自ら世界中のニュースを収集し、情報サービスとして提供しているものです。  
(Discoveryは日本語対応済みですが、Discovery Newsは現時点では英語版のサービスとなっています)

このアプリケーションはWatson Discovery Newsの機能を簡単に確認するためのものです。  
ニュース記事の中から検索のキーとなっている人物を含むものを選択し、この中に出ている他の人物の名称を集計します。    
その人物名を元の人物の周りに配置して、その根拠となった記事一覧を右側の欄に表示します。
新しく出てきた人物を表すノードをクリックすると、その人物を検索キーに同じ処理を行い、新たな人物関係を画面上に表記します。  
右側のリストは元記事へのリンクとなっていて、クリックすると元記事を参照できます。  


デモ画面
![relation-demo.png](https://qiita-image-store.s3.amazonaws.com/0/206130/9c0dd89e-6827-ce4c-1ce3-d7d7fa044c70.png)

下記のリンク先に、ソースファイルと導入手順が記載されています。
とても簡単に導入できるので、是非一度お試しを。
(2017-10-21 Githubのリンク先を変更しました)
(2018-08-07 Discovery News日本語化に対応しました)

[Github上のREADME.mdへのリンク](https://github.com/makaishi2/discovery-news-relation/blob/master/README.md)
Watsonでニュース記事の評判分析をしよう! 

# Discovery News サンプルアプリケーション
Watson Discovery Newsは、情報検索・探索用APIであるWatson Discovery上にIBMが自ら世界中のニュースを収集し、情報サービスとして提供しているものです。
このアプリケーションはWatson Discovery Newsの機能を簡単に確認するためのものです。  
(現時点では英語版のサービスとなっています)

* 次のようなことが可能です
    * 検索条件に会社名を入力し、その会社に関係するニュースの評判分析を行います
    * 検索時は、開始日、終了日を条件として指定できます
    * 検索結果は、日ごとに集計した好意的(青)、否定的(赤)、中立(黄色)の3本の折れ線グラフで表示されます
    * グラフ上の点にマウスポインタをあわせてクリックすると、評判の根拠になった記事へのリンクが右側に表示されます
    * 右側のリンクをクリックすると、元記事そのものに飛ぶことができます

デモ画面  
![news-demo.gif](https://qiita-image-store.s3.amazonaws.com/0/206130/13bbedc4-ec58-519e-4d11-1a1727a35769.gif)

下記のリンク先に、ソースファイルと導入手順が記載されています。
とても簡単に導入できるので、是非一度お試しを。
(2017-10-21 Githubのリンク先を修正しました)

[Github上へのREADME.mdへのリンク](https://github.com/makaishi2/discovery-news-sentiment/blob/master/README.md)
30分ですぐ動く! Watson Assistant(旧Conversation)用サンプルアプリ

# Watson Assistant用サンプルアプリケーション
Watson APIのAssistant(旧Conversation)は、機械学習モデルによる意図分類を含んだチャットボットのフローを簡単に作れるAPIです。
しかし、このフローを本番の環境で動かすためには、APIの機能でカバーできていないユーザーインターフェイス用のアプリケーションサーバーを別途立てる必要があり、そのための開発も必要でした。
このサンプルアプリケーションは、この問題を解決するためのものです。
具体的には、Waston Developers Cloud上で公開されている[サンプルアプリ][conv_simple]を本番で使えるよう修正した上で、いくつかの便利機能を追加しています。

次の点が特徴となっています。  

  
- 本番ですぐに使えるUI
元のサンプルアプリではデバッグ用のペインが表示されていて本番利用が難しかったのですが、この表示をなくし、すぐに本番運用で使えるUIを提供しています。

- ログ取得
Cloudant DBのインスタンスを作成し、必要な設定をするだけで、会話ログを自動的に保存可能です。
保存したデータは、Bluemix上の設定でdashDBと連携すればCSVにexportすることもできます。

- 外部システム連携のひな形
Conversation APIと外部システムの連携を行う場合の雛形コードが含まれています。 
外部連携に関するより詳細な解説はこれから別途作成予定です。

- デバッグ表示も可能
オリジナルサンプルで使えたデバッグ用のペインを表示することも可能です。  


デモ画面  

![conv-demo.gif](https://qiita-image-store.s3.amazonaws.com/0/206130/52f5332a-6835-0909-0070-eb85be2646c3.gif)
  
ログサンプル  

![conv-log.png](https://qiita-image-store.s3.amazonaws.com/0/206130/f1bd1ed8-9ce0-0643-b0a2-bcaa2ff62d9f.png)

cloudantのデータをdashDBに複製した結果 (CSV exportも可能)  

![dashDB.png](https://qiita-image-store.s3.amazonaws.com/0/206130/2c360de5-c7cc-e07e-32d0-222361a0d39b.png)

ソースと導入手順が記載されているGitHubのリンクは下記です。
是非一度試してみて下さい。(2017-10-21 Githubのリンク先を変更しました)

[Github上へのREADME.mdへのリンク](https://github.com/makaishi2/conv-ui-sample/blob/master/README.md)

[conv_simple]: https://github.com/watson-developer-cloud/conversation-simple
スマホでWatson! iPhone/iPadで簡単に試せるWatson Visual Recognition

# Visual Recognition サンプルアプリ 

このアプリケーションはWatsonの画像認識APIである、Visual Recognitionの機能を簡単に確認するものです。  
次の特徴を持っています。

* 日本語対応
* スマホから撮った写真をすぐに解析可能  
ブラウザのアプリケーションですが、iPhone/iPadの場合、Safariを使うことでカメラの利用が可能です。
* 複数の機能を同時に呼出し可能  
一つのイメージに対して以下の機能を同時に呼び出すことが可能です。  
どの機能を呼び出すかは、画面のチェックボックスで指定します。

対応している機能  

* 一般種別分類 (分類器名=default)
* 食品種別分類 (分類器名=food)
* カスタム分類
* 顔認識
* 文字認識 (英数字のみ、開発版)

デモ画面 
![vr-demo.gif](https://qiita-image-store.s3.amazonaws.com/0/206130/3f5cea54-024b-077c-0fd8-ddc4fa0cf056.gif)

サンプルアプリのソースコードと導入手順は、以下のリンク先のGithub上にあります。
是非一度、お試し下さい!
(2017-10-21 Githubへのリンクを修正しました)

[Github上のREADME.mdへのリンク](https://github.com/makaishi2/vr-camera/blob/master/README.md)

※ 個別機能のうち、文字認識は開発版、食品種別分類はベータ版です。将来の製品化を保証するものでない点をご了解下さい。
Watsonと会話しよう! - 音楽演奏機能付きcar dashboard日本語版 -

# Conversation サンプルアプリケーション

![car-dash-jp.gif](https://qiita-image-store.s3.amazonaws.com/0/206130/ef52891e-ac48-b453-4916-82a448df8d38.gif)


このアプリケーションはWaston Developers Cloud上で公開されている[サンプルアプリ car dashboard][car-dashboad]を日本語対応(※)した上で音楽演奏機能を追加したものです。  
Watson APIのうち、Conversation, Speech to Text, Text to Speechを使っており、この3つのAPIの機能を確認できるアプリケーションとなっています。  
音声認識も利用する場合は、ブラウザにFirefoxを使うようにして下さい。  
なお、サンプルの音楽はすべて著作権フリーのものを利用しています。  
音楽データ差替えの方法は、当READMEの最後に記載しました。  

このデモでアプリは、次のような会話が可能です。  
 
### 機器の操作 (「ライトをつけて」など)
ライト、ワイパー、クーラー、ヒーターの ON / OFF
### 音楽の演奏 (「音楽を演奏して」など)  
曲のジャンル: ロック、クラシック、ジャズ、ポップス、演歌
### レストランの案内 (「おなかがすいた」など)
レストランの種類: 和食、中華、イタリアン  

(※) 日本語化するにあたっては、英語のオリジナルと比較して、インテント、インテントの例文、フローなど簡略化を行っています。

ソースと導入手順は、リンク先にあります。
無料アカウントで導入可能ですので、是非一度お試しを!
(2017-10-21 Githubのリンク先を変更しました)

[Github上のREADME.mdへのリンク](https://github.com/makaishi2/car-dashboard-jp/blob/master/README.md)

[car-dashboad]: https://github.com/watson-developer-cloud/car-dashboard
Electron.NETを使ってみた

[Electron.NET](https://github.com/ElectronNET/Electron.NET)が公開されました。
ASP.NET CoreでElectronなアプリを作れるようです。macで試してみました。

```bash
$ dotnet --version
2.0.2
$ npm -v
5.5.1
```
Eletronアプリを作るのに[electron-packager](https://www.npmjs.com/package/electron-packager)というのも必要なようなので、npmでインストールします。

```bash
$ npm i -g electron-packager
```

あとは、[README](https://github.com/ElectronNET/Electron.NET)の通りにやっていくだけでいけました。

まず、テンプレートを作成

```bash
$ mkdir electron-net-sample; cd electron-net-sample
$ dotnet new mvc
```

`.csproj`ファイルに以下を追加

```xml
<PackageReference Include="ElectronNET.API" Version="*" />
<DotNetCliToolReference Include="ElectronNET.CLI" Version="*" />
```

`Program.cs`の`BuildWebHost`メソッドを以下に変更
(`using ElectronNET.API;`の追加も忘れずに。)

```csharp
public static IWebHost BuildWebHost(string[] args)
{
    return WebHost.CreateDefaultBuilder(args)
        .UseElectron(args)
        .UseStartup<Startup>()
        .Build();
}
```

`Startup.cs`の`configure`メソッドを以下に変更
(`using ElectronNET.API;`の追加も忘れずに。)

```csharp
public void Configure(IApplicationBuilder app, IHostingEnvironment env)
{
    if (env.IsDevelopment())
    {
        app.UseDeveloperExceptionPage();
        app.UseBrowserLink();
    }
    else
    {
        app.UseExceptionHandler("/Home/Error");
    }

    app.UseStaticFiles();

    app.UseMvc(routes =>
    {
        routes.MapRoute(
            name: "default",
            template: "{controller=Home}/{action=Index}/{id?}");
    });

    // Open the Electron-Window here
    Task.Run(async () => await Electron.WindowManager.CreateWindowAsync());
}
```
リストアを実行

```
$ dotnet restore
```
Electron.NETの初期化をする。

```bash
$ dotnet electronize init
```

Electron.NETをビルドする

```bash
$ dotnet electronize build osx
```

ビルドされたElectron.NETを起動

```bash
$ open ./bin/desktop/ElectronNET.Host-darwin-x64/ElectronNET.Host.app
```
![スクリーンショット 2017-11-06 23.41.13.jpg](https://qiita-image-store.s3.amazonaws.com/0/4633/0f0b308f-9878-f328-0ea9-09bd89c5a0ec.jpeg)


完成！！さぁ、これで何作ろう。。。
Windows  パフォーマンス オブジェクトを開けませんに悩まされる

# データ セクションの最初の 4 バイト (DWORD) に、状態コードが含まれています。というメッセージがログに出力される
　管理者権限で レジストリ エディタ を起動し、以下の値を追加する。
　HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\PerfNet\Performance 
　追加する値 
　値の名前: Disable Performance Counters 
　値の種類: DWORD 
　値のデータ: 1 
　※ 値: 0(有効), 1(無効) 
　※ 設定後、再起動を行うことで設定が反映される
　※ パフォーマンスオブジェクトを無効にするという解決策
herokuのアプリケーション立上げ方

herokuにてアプリケーションの立ち上げを行いたのですが、
URLへ移行すると下記のような表示がされます！

Heroku | Welcome to your new app!
Refer to the documentation if you need help deploying.

gemは下記のようになってます。
問題が何かわかる方ご教示ください。
よろしくお願いいたします。

gem

source 'https://rubygems.org'

git_source(:github) do |repo_name|
  repo_name = "#{repo_name}/#{repo_name}" unless repo_name.include?("/")
  "https://github.com/#{repo_name}.git"
end


# Bundle edge Rails instead: gem 'rails', github: 'rails/rails'
gem 'rails', '~> 5.0.6'
# Use sqlite3 as the database for Active Record
gem 'sqlite3'
# Use Puma as the app server
gem 'puma', '~> 3.0'
# Use SCSS for stylesheets
gem 'sass-rails', '~> 5.0'
# Use Uglifier as compressor for JavaScript assets
gem 'uglifier', '>= 1.3.0'
# Use CoffeeScript for .coffee assets and views
gem 'coffee-rails', '~> 4.2'
# See https://github.com/rails/execjs#readme for more supported runtimes
# gem 'therubyracer', platforms: :ruby

# Use jquery as the JavaScript library
gem 'jquery-rails'
# Turbolinks makes navigating your web application faster. Read more: https://github.com/turbolinks/turbolinks
gem 'turbolinks', '~> 5'
# Build JSON APIs with ease. Read more: https://github.com/rails/jbuilder
gem 'jbuilder', '~> 2.5'
# Use Redis adapter to run Action Cable in production
# gem 'redis', '~> 3.0'
# Use ActiveModel has_secure_password
# gem 'bcrypt', '~> 3.1.7'

# Use Capistrano for deployment
# gem 'capistrano-rails', group: :development

group :development, :test do
  # Call 'byebug' anywhere in the code to stop execution and get a debugger console
  gem 'sqlite3', '1.3.13'
  gem 'byebug', platform: :mri
end

group :development do
  # Access an IRB console on exception pages or by using <%= console %> anywhere in the code.
  gem 'web-console', '>= 3.3.0'
  gem 'listen', '~> 3.0.5'
  # Spring speeds up development by keeping your application running in the background. Read more: https://github.com/rails/spring
  gem 'spring'
  gem 'spring-watcher-listen', '~> 2.0.0'
end

group :production do
  gem 'pg', '0.20.0'
end

# Windows does not include zoneinfo files, so bundle the tzinfo-data gem
gem 'tzinfo-data', platforms: [:mingw, :mswin, :x64_mingw, :jruby]
卒業制作の世界観とロゴ制作開始

G's ACADEMY TOKYO　DEV8期生の不動産大好き野郎です。

自分のプロダクトを制作していく卒業制作の本格開始まで、後12日。
本格開始となると、休み？何それ？の精神でコードを打ちまくらないといけません。

卒業制作のメインの機能の半分ちょっとを実装できたので、
一旦は、コードを打つ時間よりも下記の事に時間を確保していこうと思います。
確保する事としては、


<br>



webの【デザインとレイアウト】

<br>





です！！！

<br>

大学の頃から、上記の2つがあまりにも苦手すぎて、
現実逃避の為、ラーメンを食べる頻度が極端に増えます。
（九州生まれのラーメン大好き野郎なので、ストレス解消でラーメンを食べる変人野郎です。）

マジで1日3食、麺類になる頭おかしい野郎です。

とりあえず、ラーメン食べながら、レイアウトを考えています。
どうでもいいけど、蒙古タンメン中本おいしいよね。



<br>
<br>

大学は、一応デザインの大学出身（いや、本当にデザイン学んできたと自分が言っていいのか疑問ですが。。）
<br>

大学で「雑誌を作る」課題等があったのですが、
その時にレイアウトとデザインを決める上でやりやすかった順番としては

<br>
「世界観」を決めて取り組んだ方が非常にやりやすかったです。

（本当は、絶対に違う順番だと思うのですが、そこから勉強すると間に合わないので、学生の時の経験でやっていこうと思います。）

<br>


その為、今回も、まずはそこを決めてから取り組んでいこうと思っています。

<br>

○プロダクトの世界観（使用する人たち）＝40後半～ご年配の方々

○文字が小さいと見るのが嫌になる人たち

○派手な色を使ったら、その世界の住人は離れていってしまう。

○配色は3色以内（出来れば2色）

○2日徹夜した満身創痍の人でも、考える必要がない位、使い勝手が良い
＝文字を削りまくるのが絶対条件


<br>

メインの世界観を上記のようにしておこうかと思っています。
細かい世界観は割愛します。

<br>



世界観を決めた後に、取り組んだ方が良かったのが、


「ロゴの制作」


<br>

上記のロゴなしでレイアウトを進めると、後々、レイアウトの配色を変えないといけないわ、
全体のレイアウトを微調整しないといけないわで大変だったので、まずはロゴを
取り組んでいこうと思います。
（絶対に、このやり方も違うと思います。本当すいません。。。。）
<br>


このロゴ制作を3日～4日は時間を確保して取り組んでいこうと思います。
（ロゴ制作のプロの方に誤解がないように申し上げますと、素人が3日、4日で制作するなんて、本当に申し訳ないと思っています。
あくまで、卒業制作の為に、仮のプロダクトロゴを作るのが目標です。）

<br>
自分は、文字の書き起こしやロゴのイラストを描く技術が皆無なので、素材を探して、それを組み合わせて作りたいと思います。

<br>
ロゴの素材は
自分の大学時代の友人Ｋ君が勤めている
アマナイメージで探そうかと思います。
https://amanaimages.com/home.aspx

いや～本当に良い素材を提供しているところです。
（その分、素材の値段が高いけど。。。。。）

<br>

とりあえず、今週は、コードを打つ時間よりも
イラストレーターとフォトショップを使う毎日になりそうです。。。。

そして、明日も勿論ですが、ラーメン食べます。
大勝軒おいしいよね。
MacでEclipseの補完を設定する方法

**環境**
OS : macOS Sierra Version 10.12.6
Eclipse : Neon.3 Release (4.6.3)

### `Command + Space`で補完できるようにする
- 問題1. 補完のショートカットは、デフォルト`Control + Space`である。
- 問題2. `Control + Space`はMacのspotlight検索のショートカットが優先されて使えない。
- 問題3. `Command + Space`はMacのショートカットに使われていて設定画面で入力できない。

1. Macのショートカットを変更します。
    - [System Preference] > [Keybord] > [Shortcuts] > [Input Source] > [Select the previous input source] > OFF
    - ![image.png](https://qiita-image-store.s3.amazonaws.com/0/159761/07e267c6-292b-7035-bc0c-d34ca7d7157e.png)
2. Eclipseのショートカットを変更します。
    - [Eclipse] > [Prefarence] > [General] > [Keys] > 「Content Assist」で検索 > [Bind] > `Command + Space` > [Apply]
    - ![Screen Shot 2017-11-06 at 23.24.14.png](https://qiita-image-store.s3.amazonaws.com/0/159761/2b501b6b-53dd-5b77-64da-792dca0be580.png)

### 補完を強化する
1. [Eclipse] > [Prefarence] > [Java] > [Editor] > [Content Assist] > [Auto Activation]
2. [Auto Activation delay (ms):(自動有効化遅延])に`100`を設定します。
3. [Auto Activation triggers for Java(Javaの自動有効化トリガー)]に`abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_.`を追加します。![image.png](https://qiita-image-store.s3.amazonaws.com/0/159761/e814cf3b-624d-b2af-a008-7871dfb88eca.png)
railsにおけるインスタンス、クラス、オブジェクトについて

一言で言うとオブジェクト指向で出てくる概念の一つで設計図(クラス)を具現化した「実体」のことです。

オブジェクト指向は「『モノ』に注目した考え方」です。
「どんな奴で、どう動く」に注目した考え方です。

それを踏まえて、オブジェクト指向で出てくる用語のひとつで「実際に作ったもの」に相当するものが「インスタンス」です。プログラミング的な話をすると「クラスをnewしたもの」を指します。

簡単に説明すると
・クラス：設計図
・インスタンス：実際に作った物
・オブジェクト：モノ（クラスとかインスタンスとかをふんわりと表現したもの）

違う表現をするならば
・クラス：概念
・インスタンス：物体
・オブジェクト：概念や物体をふんわりと表現したもの

プログラミングで説明するなら
クラス：属性（プロパティ）と操作（メソッド）を定義したもの
インスタンス：クラスをnewしたもの
オブジェクト：クラスとかインスタンスとかのこと
Python開発環境構築 on Mac + VSCode

pythonを使って機械学習・ディープラーニングの勉強を始めるにあたり、Macで開発環境を構築しました。
勉強目的でpython3のバージョンを特に使い分ける予定はないため、pyenvは入れませんでした。

## 環境について

+ Mac OS X Sierra
+ python 3.6.3
+ Visual Studio Code 1.17.2

## python3のインストール

pythonの複数バージョンを使い分ける必要がないため、
公式ホームページから最新版をダウンロードしてインストール。

https://www.python.org/downloads/


### python仮想環境(venv)の構築

勉強用にsystem環境を汚さずにライブラリなどを自由に入れられるように仮想環境を構築する。

```
$ python3 -m venv env
```

と実行すると現在のディレクトリ以下にenvというディレクトリが作成される。
このディレクトリ名はenv以外でも良く、好きに決めて良い。

### 作成した仮想環境envの有効化

以下を実行すると仮想環境が有効になり、プロンプトが切り替わる。

```
 $ source env/bin/activate
 (env) $
```

この状態でpip installすれば、System環境を汚さずに仮想環境envにライブラリなどをインストールできる。

また、仮想環境内では、python3 と打つ必要はなく、 pythonでpython3が実行されるようになる。

### 仮想環境の無効化

以下を実行すると通常のプロンプトに戻る。

```
 (env) $ deactivate
 $ 
```


## Visual Studio Codeのインストール

https://code.visualstudio.com

最新版をダウンロードしてインストール

### 拡張機能のインストール

コマンドパレット（command + shift + p）を開いて以下を入力する。
途中まで入力すれば補間されます。

```
>Extensions: Install extentions
```

拡張機能の検索窓に Python と入力。
Python 0.7.0 (2017/11/6現在）をインストール。作者はDon Jayamanneさん。

pylintのインストール時に権限(permission)で怒られたら以下を実行する。

```
$ sudo chown -R $USER /Library/Python/2.7
```

### VSCodeを使う理由
仕事ではC/C++, javascriptなどをWindows + VSCodeで開発しているため、使い慣れたVSCodeをMacでも使いたいというだけの理由です。


### 追記＠2017/11/13

IntelliSenseを使えるようにvenvで作った仮想環境にパスを通す。
コマンドパレットからworkspaceの設定を開いて

```
>open workspace settings
```

以下でpythonとlibraryへのパスを追記。

```
{
    "python.pythonPath": "/your/path/to/venv/bin/python",
    "python.autoComplete.extraPaths": [
        "/Your/path/to/venv/lib/"
    ]
}
```
Touchbarアプリを作ってみる

##動機
普段使わないTouchbarの有効活用したかった（）

注意：Swift初心者です。お見苦しい所があるかもしれません。お許し下さい。

#開発環境
Xcode 9.2 beta (9C32c)/Swift４

#XcodeProgectの作成

1.CocoaAppを選択
![image.png](https://qiita-image-store.s3.amazonaws.com/0/185109/291583ae-7164-a093-9ebf-fdc4c33f3eb9.png)

2.Main.storyboardを選択


3.NSTouchBarをViewControllerにドラッグ&ドロップ
<img width="1396" alt="Main_storyboard.png" src="https://qiita-image-store.s3.amazonaws.com/0/185109/d8f7217a-3091-0e42-0549-fc54ed2af5ff.png">


4.ButtonまたはLabelを選択,配置
![image.png](https://qiita-image-store.s3.amazonaws.com/0/185109/fb95204e-6b1f-9605-32f3-831417531003.png)

5.新しいViewControllerを作成

私の場合、`WindowController`ファイルを作りました。

6.コードの記述

`NSWindowController`を追記

<img width="445" alt="WindowController_swift.png" src="https://qiita-image-store.s3.amazonaws.com/0/185109/356e4a50-a6c5-5b53-270f-05b666db9447.png">

面倒くさいのでControlキーを押しながらドラッグ&ドロップ
<img width="1399" alt="Banners_and_Alerts_と_WindowController_swift_—_Edited_と_WindowController_swift.png" src="https://qiita-image-store.s3.amazonaws.com/0/185109/878e1a44-29b6-40f2-0e81-ba0dbd54a290.png">

ConnectionはActionを選択、Nameは適当にどうぞ。
![image.png](https://qiita-image-store.s3.amazonaws.com/0/185109/85ca3039-749d-0057-1f12-3d3dd0bad24e.png)

あとは中身の記述をするだけです。

<img width="1396" alt="WindowController_swift.png" src="https://qiita-image-store.s3.amazonaws.com/0/185109/63730c0e-38f0-f4b0-a9e9-fa549ea01e16.png">

#実行

![Screen Recording 2017-11-06 at 10.59 午後.gif](https://qiita-image-store.s3.amazonaws.com/0/185109/4393a64e-dfb4-9599-a6a9-68f4d7000e8c.gif)


以上になります。

#追記

何故かわからないんですが、一度RunするごとにNSTouchBarがStoryboardから消えてしまうんですよねー…バグなのか何なのか。分かる方がいらっしゃいましたらコメント等で教えてくださると有難いです😭😭😭
Kotlin(2.5) if,for,while

# 書いてから気づいた
`if`, `for`, `while`についてやってなかったorz
ということで追加します

# if文
2つの使い方があります
## 普通の使い方

```
if(条件){
    真の場合
}else{
    偽の場合
}
```
例文

```kotlin
fun main(args: Array<String>){
    val a = 5
    val b = 8

    // ifの普通の使い方
    if (a < b){
        println("a < b is True!")
    }else{
        println("a < b is False!")
    }
}
```

## 関数的な使い方
結果を直接で変数に代入できます

```
[変数] = if (条件) 真の場合の値 else 偽の場合の値
```
例文（関数の戻り値として）

```kotlin
fun main(args: Array<String>){
    // ifの関数的な使い方
    val c = -10
    println("abs(c) = ${abs(c)}")
}

// 絶対値を求める関数
fun abs(a: Int) = if (a >= 0) a else -a
```

# for文
## リストから
他の言語で言うforeachです

```
for (変数名 in リスト){
    // 変数にループごとにリストの中身が渡される
}
```

例文

```kotlin
// for文
fun main(args: Array<String>){
    // listOf(...) <- 中身をリストにまとめてくれる
    val list = listOf("banana", "apple", "tomato", "potato")
    for (item in list){
        println(item)
    }
}
```
## 回数で指定

```
for (変数名 in 開始値..終了値 [step 増分]){
    // 変数にループごとに開始力終了地までの値が渡される
    // []の中はは省略できます
}
```
例文

```kotlin
fun main(args: Array<String>){
    // for文(回数で指定)
    for (i in 1..10){
        println("i = $i")
    }
}
```

# while文
while文は他の言語と同じ感じです

```
while (条件) {
    // 真の場合ループ
}
```
例文

```kotlin
fun main(args: Array<String>){
    // while文
    var i = 1
    while (i <= 10){
        println("i = $i")
        i++
    }
}
```

# 感想
ifなどで独特な表現が多いですがなれるととても書きやすいです。

# 次回
[関数！](https://qiita.com/pe-Daniel/items/000407df1c7d5206e0ef)
Hash の値が空文字のキーを除去したい

ActiveSupport の `Hash#compact` は 値が `nil` のものしか除去してくれない。 例えば、
 `Rack::Utils.parse_query` などの戻り値から値が空文字のものを除去したいときに、ど忘れするのでメモしておく。

```irb
> { a: 1,  b: "" , c: " ",  d: nil, e: true, f: false }.transform_values(&:presence).compact
=> {:a=>1, :b=>"", :c=>" ", :e=>true, :f=>false}
``` 

`Hash#compact` と `Hash#transform_values` は元々 ActiveSupport にあったメソッドで、 Ruby 2.4 で追加されたメソッド。 `Object#presence` は Ruby 本体にはなく、 ActiveSupport の拡張。
Reveal.jsを使ってスライドを作成する方法


自分用にメモ。

## インストール
1. [GitHubリポジトリ](https://github.com/hakimel/reveal.js/)からmasterブランチを適当な場所にclone
2. `cd reveal.js; && npm install` する
2. index.htmlを以下のように編集

```html:index.html
<div class="reveal">
	<div class="slides">
    	<section data-markdown="slides/slide1.md"
       		data-separator="\n---\n$"
           data-vertical="\n--\n">
			<script type="text/template">
			</script>
		</section>
	</div>
</div>
```

3. ディレクトリ、ファイル作成

```
$ mkdir slides
$ touch slides/slide1.md
```

4. ローカルで見る

```
$ npm start
```
fortranでもオブジェクト指向したい！

##はじめに
「数値計算のための手続き型言語」というイメージが強いfortranだが、fortran2003でオブジェクト指向プログラミングが導入されている。

日本語で簡単なドキュメントがなかったので、とりあえず使ってみる程度のことをまとめてみたいと思う。

##クラスとメソッド
fortranにもclass文があるが、クラスの定義には構造体と同じtype文を用いる。インスタンス変数の定義は構造体と全く同じだ。区切り文字には"."ではなく"%"を用いる。

メソッドの実装は**type文の中にcontains文を使い、その下にtypeの外へのサブルーチンへのポインタをprocedure文で定義**する、という形をとる。そして**実際の処理は外のサブルーチンで**書く。この時サブルーチンの中でそのクラス型の引数を宣言しなければならないが、このときにtype文ではなくclass文を用いる[^1]。

``` fortran:mod_myclass.f90
type myclass
   character(len=60) :: name
   integer :: id
contains
   procedure :: set_name => myclass_set_name   
end type myclass
!...
subroutine myclass_set_name(self,str)
   class(myclass) self
   character(len=60) str
   !...
end subroutine myclass_set_name

```

##コンストラクタ
メソッドの中でも、コンストラクタは少しややこしい。
具体的には、オーバーロードというものを用いる。interface文でクラスの別名のようなものを定義しておき、その別名でクラスを返す関数を定義することで、インスタンスの生成のような機能を実装することができる。
一般の言語ではコンストラクタも他のメンバ関数と同じような定義をするが、fortranは**コンストラクタのみselfを引数にとらない**ことに注意。


```fortran:mod_myclass.f90
   interface myclass
      module procedure init_myclass
   end interface myclass
   !...
contains
   type(myclass) function init_myclass()
      !...
   end function init_myclass     
```
##サンプルコード
ここでは例として、

 * nameという変数
 * set_nameというnameを変更するメソッド

を持つクラス「idol」を定義し、実際にメソッドを使うところまで実装したコードを示す。

```fortran:mod_class.f90
module mod_class
implicit none
!---------------------------------------------------
! クラス idolの宣言部
type idol
   private !とりあえず隠蔽しておく
   character(len=60) :: name = "noname"
contains
   procedure :: set_name => idol_set_name   
   procedure :: return_name => idol_return_name
end type idol

!コンストラクタの宣言
interface idol
   module procedure init_idol
end interface idol

contains

!---------------------------------------------------
! idolの実装部
!   コンストラクタ
type(idol) function init_idol()
   write(6,*) "idol instance is generated."
end function init_idol 

! コンストラクタ以外のメソッド
subroutine idol_set_name(self,new_name)
   class(idol) self
   character(len=*) new_name 

   !メソッドならprivateでもアクセスできる
   self%name = new_name 

end subroutine idol_set_name

character(len=60) function idol_return_name(self)
   class(idol) self
   idol_return_name = self%name
end function idol_return_name

end module mod_class
```
```sample.f90
program main
   use mod_class
   implicit none

   type(idol) my_fav_idol

   my_fav_idol = idol()

!メソッドを使ってみる
   call my_fav_idol%set_name("Momoka")
   write(6,*) my_fav_idol%return_name()

end program main
```
コードの見栄えはよろしくないですが、カプセル化されたライブラリができました。

#注意点
* ~~インスタンス変数に配列を使った場合、コンストラクタでallocateすることはできないようです。init_idolときちんと書いてやるとallocateできます。なぜでしょう？？？~~
なぜかはよくわかりませんができました。

続編→https://qiita.com/Bluepost59/items/8d4b7d7713676fe06472

##参考にしたサイト
http://fortranwiki.org/fortran/show/Object-oriented+programming
https://gist.github.com/YukiYamashina/11366391

[^1]: 変数の名前は自分はpython上がりなのでselfとしているが、別にthisでもなんでも構わない。
Daydream対応端末 スペックまとめ

**2017/11時点の情報をまとめました。**

以下のページを元に調査しています。
[Daydream – Daydream-ready phones](https://vr.google.com/daydream/smartphonevr/phones/)

# 対応端末一覧

| 端末             |       解像度 |    GPU           | 販売キャリア  |
|:-----------------:|:------------:|:-----------------:|:-----------:|
| Galaxy S8        | 2960 x 1440 | Adreno 540 / Mali G71 | docomo / au |
| Galaxy S8+       | 2960 x 1440 | Adreno 540 / Mali-G71| docomo / au |
| Galaxy Note8     | 2960 x 1440 | Adreno 540 / Mali G71| docomo      |
| LG V30           | 2880 x 1440 | Adreno 540 | docomo      |
| ZenFone AR       | 2560 × 1440 | Adreno 530 | |
| Moto Z           | 2560 x 1440 | Adreno 530 | |
| AXON 7           | 2560 x 1440 | Adreno 530 | |
| Pixel            | 1920 x 1080 | Adreno 530 | |
| Pixel XL         | 2560 x 1440 | Adreno 530 | |
| Pixel 2          | 1920 x 1080 | Adreno 540 | |
| Pixel 2 XL       | 2880 x 1440 | Adreno 540 | |
| Mate 9 Pro       | 2560 × 1440 | Mali-G71   | |


*※ GalaxyシリーズのMali G71を搭載するExynos 8895板は日本未発売*


# 参考

[スペック | Galaxy S8/S8+ | スマートフォン - Galaxy Mobile Japan 公式サイト](http://www.galaxymobile.jp/galaxy-s8/specs/)

[LG V30 Specs: Camera, Display, Design & More | LG USA](http://www.lg.com/us/mobile-phones/v30/specs)

[スペック | Galaxy Note8 | スマートフォン - Galaxy Mobile Japan 公式サイト](http://www.galaxymobile.jp/galaxy-note8/specs/)

[Galaxy Note 8 vs Note 7仕様比較。何が変わった？ - Engadget 日本版](http://japanese.engadget.com/2017/08/23/galaxy-note-8-vs-note-7/)

[ZenFone AR (ZS571KL) | スマートフォン | ASUS 日本](https://www.asus.com/jp/Phone/ZenFone-AR-ZS571KL/Tech-Specs/)

[ZTE AXON 7 | SIMフリースマートフォン | ZTE](http://www.ztemobile.jp/products/axon7.html)

[Pixel 2 の技術仕様 - Google ストア](https://store.google.com/us/product/pixel_2_specs?hl=ja-JP)
【Go】URLクエリパラメータをパースする

＊11/7　[kyoh86](https://qiita.com/kyoh86)さんに指摘して頂いた部分を修正致しました。

# はじめに

Goでクエリパラメータ(クエリ文字列)をパースしたかったのだが、ソースを見る以外情報が見つからなかったのでメモ。

# 結論

net/urlの[Queryメソッド](https://golang.org/pkg/net/url/#URL.Query)を呼ぶことで`map[string][]string`型にパースできます。

```go
import "net/url"
u, _ := url.Parse("https://xxx.com?a=AAA&b=BBB&c=CCC&d=DDD")
query := u.Query()
// query -> map[a:[AAA] b:[BBB] c:[CCC] d:[DDD]]
```

# 解説

Queryメソッドの[ソース](https://golang.org/src/net/url/url.go?s=27226:27254#L964)を確認してみると、RawQueryフィールドをParseQueryに渡していることがわかります。

```net/url/url.go
// Query parses RawQuery and returns the corresponding values.
// It silently discards malformed value pairs.
// To check errors use ParseQuery.
func (u *URL) Query() Values {
  v, _ := ParseQuery(u.RawQuery)
  return v
}
```

## RawQueryフィールド

[net/url.URL構造体](https://golang.org/pkg/net/url/#URL)は、RawQueryというstringフィールドを持っており、生クエリを保持しています。
[ソースコード](https://golang.org/src/net/url/url.go#L336)には以下のように記載されています。

```net/url/url.go
RawQuery   string    // encoded query values, without '?'
```

## ParseQuery関数

net/url#ParseQueryは、`map[string][]string`型の値を返します。
[公式リファレンス](https://golang.org/pkg/net/url/#ParseQuery)には以下のように記載されています。
>ParseQueryはURLエンコードされたクエリ文字列を解析し、各キーに指定された値をリストしたマップを返します。 ParseQueryは常に見つかったすべての有効なクエリパラメータを含む非nilマップを返します。 errがもしあれば、遭遇した最初の復号誤りを記述します。

>クエリは、アンパサンドまたはセミコロンで区切られたkey = valueの設定のリストであると予想されます。 等号のない設定は、空の値に設定されたキーとして解釈されます。
pythonSDK(Macユーザー必見)

## はじめに 

pythonSDKを入れる前に、
<img width="667" alt="スクリーンショット 2017-11-06 21.38.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/211722/2de27398-1f5d-c5b6-7901-3a7a0a82227c.png">
で、pythonの実行ファイルの参照先を見てください。
私の場合は参照先が
/Users/hk/.pyenv/shims/python
となっておりますので、こちらのpathをメモしておいてください。
なお、画像の2行目のpathが

/usr/bin/python

の方は、macにデフォルトでインストールされているpythonを使っているので、補足部分は見なくて大丈夫だと思います。

また、pythonSDKのマックバージョンを以下の
https://developer.softbankrobotics.com/jp-ja/downloads/pepper
からダウンロードして、任意のフォルダに解凍してください。

##本題

ALDEBARAN DOCUMENTATION
http://doc.aldebaran.com/2-4/dev/python/install_guide.html
には、

・Use the release of Python 2.7 that comes by default with your MacOS.
・Do not use a Python version downloaded from Python.org

と書いてありますが、実は、https://www.python.org からpython2.7系をダウンロードする必要があります！
なぜかと言いますと、

/pynaoqi-python2.7-2.5.5.5-mac64/lib/python2.7/site-packages/

にあるバイナリファイル(_qi.so)をのぞいてみると、pythonの参照先が

/Library/Frameworks/Python.framework/Versions/2.7/

となっています。このディレクトリにpythonがインストールされていないと、pythonSDKは動きません。https://www.python.org からダウンロードすると、先ほど述べたディレクトリにpython2.7.14(2017.11.6(現在))がインストールされます。

また、pynaoqi-python2.7-2.5.5.5-mac64のディレクトリの構成が以前と変わっています。ターミナルで

export PYTHONPATH=${PYTHONPATH}:/yourpath/pynaoqi-python2.7-2.5.5.5-mac64/lib/python2.7/site-packages

export DYLD_LIBRARY_PATH=${DYLD_LIBRARY_PATH}:/yourpath/pynaoqi-python2.7-2.5.5.5-mac64/lib

を実行してください。yourpathには、pynaoqi-python2.7-2.5.5.5-mac64が置いてあるフォルダまでのpathを記述してください。
毎回export文を書くのが面倒な方は、bash_profileに追加しましょう。

最後に、OS X El Capitan 以降の方は、
 System Integrity Protection(SIP) という新しいセキュリティー機能が原因で、Python SDK が使えないようです。
対象の方は、以下のurl

https://qiita.com/zaburo/items/c650cda45c858fe856a9

を参照してください。


##補足

https://www.python.org
でインストールすると、そのpythonしか実行できなくなります。
私はpyenvでpythonを管理していたので、非常に困りました。
その理由は、bash_profileに勝手に

PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}"

が追加されるからです。
私は、pythonSDKが使えるpythonと、以前使っていたpythonを使い分けたかったので、その方法について書きたいと思います。
まずは、bash_profileに勝手に追加された

PATH="/Library/Frameworks/Python.framework/Versions/2.7/bin:${PATH}"

を消してください。
その後、ターミナルでwhich pythonと入力すると、

/usr/local/bin/python

と出力されますが、こちらは/Library/Frameworks/Python.framework/Versions/2.7/bin/python を参照先とするシンボリックリンク(ソフトリンク)となっているため、リンク先を変更する必要があります。ターミナルで

rm /usr/local/bin/python

と入力してください。その後、以前使っていたpythonのpathに対してシンボリックリンクを貼る必要があります。私の場合は

ln -s  /Users/hk/.pyenv/shims/python　/usr/local/bin/python 

としました。
また、pythonSDKが入ったpythonを実行するには、私の場合
/Library/Frameworks/Python.framework/Versions/2.7/bin/python
と入力する必要がありますが、面倒くさいので、シンボリックリンクを貼って、
pythonsと入力すれば起動するように設定します。

ln -s          　/Library/Frameworks/Python.framework/Versions/2.7/bin/python /usr/local/bin/pythons

こうすることで、

<img width="492" alt="スクリーンショット 2017-11-06 21.33.14.png" src="https://qiita-image-store.s3.amazonaws.com/0/211722/091946e8-d935-20ce-9461-104604056503.png">

<img width="508" alt="スクリーンショット 2017-11-06 21.33.39.png" src="https://qiita-image-store.s3.amazonaws.com/0/211722/41e35178-2b18-a6cb-61bf-badc05335174.png">
このように使い分けることが可能となります。

何か質問等がございましたら、コメントよろしくお願い致します！


アトリエ秋葉原スタッフ