OmniAICreator/Qiita-1.07M huggingface dataset:
UnityでTexturePackerを使う方法

#概要
メモリの削減やファイルサイズの削減のためのツールとしてTexturePackerが人気ですが、
操作に迷う機会があったので備忘録として操作方法をまとめます。
Windowsを前提とした操作方法です。Macの場合は異なる可能性があります。

#前提
使用するツールは以下の3点。TexturePackerの使用には有料ライセンスが必要です。
ライセンス取得はこちら。2016年9月時点で4400円程です。
https://www.codeandweb.com/store/texturepacker-single

- Unity 5.4
- TexturePacker 4.2.3  
https://www.codeandweb.com/texturepacker
- TexturePacker Importer 4.0.8（Unityのアセット）  
https://www.assetstore.unity3d.com/jp/#!/content/16641

#使い方
1. Unityでプロジェクトファイルを作ります。（既に作ってある場合は省略可能）
2. Unityのアセットストアから「TexturePacker Importer」をインポートします。
3. インポートが完了したら、一旦Unityは終了します。
4. TexturePackerを起動し、パッケージ化したい素材を画面中央にドラッグ・アンド・ドロップします。  

![image](https://qiita-image-store.s3.amazonaws.com/0/93944/a8566b0d-5718-87f0-451b-3bcc3f5c73ac.png)
  　  
5. Basic settingsの設定を行っていきます。もし下記設定項目がなかった場合は画面右下にあるBasic settingsをクリックして下さい。
![image](https://qiita-image-store.s3.amazonaws.com/0/93944/12f68d10-6f11-d3a2-745e-ec8cccfdef68.png)

- Framework
    - 「Unity Texture2D sprite sheet」を選択します。
- Data file
    - 1で作成したプロジェクトファイル内のAseets内を選択し、任意の名前を付けます。
- Texture format
    - 「PNG-32」を選択します。
- Pixel format
    - 「RGBA8888」を選択します。
- Algorithm
    - 「MaxRects」を選択します。
- Max size
    - 「1024」を選択します。場合によっては2048でも可能。
- Trim mode
    - 「Polygon outline」を選択します。

6.　次にAdvanced settingsの設定を行っていきます。下記ボタンを押すと設定画面が切り替わります。
![image](https://qiita-image-store.s3.amazonaws.com/0/93944/ea81a450-5a0d-4ae0-cd99-fca3af985a5f.png)

- Size constraints
    - 「POT(Power of 2)」を選択します。

7.　設定変更が完了したら「Publish sprite sheet」ボタンを押すと書き出し完了です。
![image](https://qiita-image-store.s3.amazonaws.com/0/93944/c021dd95-eb7c-9b9e-b7cc-4f275f27d3b1.png)  
8. 書き出しが成功すると、1のプロジェクト内にパッケージ化されたpng画像と拡張子がtpsheetのファイルが生成されます。
9. Unityを起動し、1で作成したプロジェクトを開きます。
10. Project内に生成されたファイルを確認し、既に分割された状態でパッケージ化されていたら成功です。
この時、single状態で格納されていた場合は、どこかで失敗しています。
![image](https://qiita-image-store.s3.amazonaws.com/0/93944/c04b75a9-c565-d611-0f62-7914e6345c55.png)

#SpritePackerとの違い
同じようなことを実現するためのツールとしてSpritePackerというのがあります。
Unityに標準で付いている無料の機能で、TexturePackerと同じようにメモリ削減などの実現ができます。
ただ、Resourcesフォルダに入れているとPackage化できない、設定が大変等の理由から個人的にはまだ使い勝手がよくない印象です。
DigitalColor Meter の 存在を思い出してみる


開発中に、画面上にあるカラーコードを知りたいことってよくあると思います。
色々とツールを活用して探すことが多かったのですが、Macに入っている **DigitalColor Meter** で十分だった。

というか楽すぎて神アプリかと思った。

## DigitalColor Meter を使ってみる

![DigitalColor000.png](https://qiita-image-store.s3.amazonaws.com/0/6311/3061cb84-10ef-1962-e964-273549e77412.png "DigitalColor000.png")

普段、Dockには入っておらず、 *その他* に分類されており、なかなか見つけづらい。
こんなときはSpotlightを利用しましょう。

Ctrl + Space で Spotlightを起動し、 DigitalColor と入力するとヒットします。

![DigitalColor003.png](https://qiita-image-store.s3.amazonaws.com/0/6311/91853a64-5507-edfd-2f64-55c5d7628b1d.png "DigitalColor003.png")


起動後、カラーコードを取得したい個所に合わせて・・・

![DigitalColor005.png](https://qiita-image-store.s3.amazonaws.com/0/6311/bd95bf2b-2d97-91ac-673c-08d3a599d849.png "DigitalColor005.png")

Command + Shift + C

で、コピーできちゃいます。

Command + Option + C

だと、カラーイメージが画像でコピーできます。

## 便利な設定

見慣れない値で表示されるため、
L*a*bで表示＞汎用のRGBで表示を選択します。
![DigitalColor001.png](https://qiita-image-store.s3.amazonaws.com/0/6311/afcd7f00-a5fd-87ae-320e-dc2c0dc3aaf6.png "DigitalColor001.png")


DigitalColor Meter は、デフォルトでは16進数で保存されないため、
表示＞値を表示＞16進にチェックを入れておきます。

![DigitalColor002.png](https://qiita-image-store.s3.amazonaws.com/0/6311/ad6fbdc6-7cbf-cd8d-654a-d76ade1ef236.png "DigitalColor002.png")

これでDigitalColor MeterもDock入りが確定ですね！
SassとかCSSのメモ


#Sassのファイルの読み込み方にも各々癖がある

Sassを使うメリットの一つは、共通フッターやヘッダーなどのパーツ部分を@importで読み込めること。
でも人によって結構くせがあるんだな、とも思う。
例えば `index.html` と `detail.html` の２つのHTMLファイルにSass（scss）を適応するとする。

##1. @importするファイル専用のファイルを使う場合

```scss:common.scss
@import "./_header.scss"
@import "./_footer.scss"
```
を作って、それぞれのファイルで読み込む

```scss:index.scss
@import "./common.scss"

.l-mainContent {
・・・
```

```scss:detail.scss
@import "./common.scss"

.l-detailContent {
・・・
```

###メリット
- `common.scss` を読み込むだけでいいのでスッキリしたコードになる

###デメリット
- 少し読み込むファイルが違ったりすると、その部分は直接@importしないといけない
- 各々のファイル構成がわかりにくくなる

メリット・デメリットは完全なる私の主観です。
~~個人的には次の方法の方が好き。~~

####追記

jadeやLaravelのBladeのようにテンプレートエンジンを使う場合、`<head></head>`部分は共通だったりする。
その場合、読み込むCSSは１つだけの方にしておくほうが都合が良いということに気づいたのでやはりこの方法のが良いかもしれない。

##2. それぞれのファイルで毎回@importする場合

```scss:index.scss
@import "./_header.scss"
@import "./_footer.scss"

.l-mainContent {
・・・
```

```scss:detail.scss
@import "./_header.scss"
@import "./_footer.scss"

.l-detailContent {
・・・
```

###メリット
- ~~ファイル構成がわかりやすい~~
- 必要なcssの要素がわかりやすい

###デメリット
- いちいち読み込ませるのがめんどくさい

~~いちいち書くのが面倒だけど、ファイル構成がわかりやすい方が好きなので私はこっちを普段使ってる。~~
~~（でも本当は１つめのやり方のほうがいいんだろうな、とも思う）~~

##どちらにせよ、人が書いたコードの構成は初めにちゃんと理解しておくべき

そして、他の人がコードを触る時はできるだけその人のルールに則って手直ししたりしたいなぁと思います。

#HTML構造を使って詳細度の高いCSS（Sass）を書くとレイアウト変更時に困るかも

```scss:index.scss
.l-main {
	width: 80VW;
	height: 50VW;
	.contentBox {
		color: blue;
		width: 80px;
		height: 40px;
		.contentBox_title {
			color: red;
			text-decoration: underline;
		}
	}
}
```
```html:index.html
<div class="l-main">
	<div class="contentBox">
		<h1 class="contentBox_title">タイトル</h1>
	</div>
</div>
```

もし、このhtmlが次のように変更された場合。

```html:index.html
<div class="l-main">
	<div class="contentBox">
		<div class="contentBox_subBox>
			<h1 class="contentBox_subBox_title">タイトル</h1>
		</div>
	</div>
</div>
```

scssはこうなる。

```scss:index.scss
.l-main {
	width: 80VW;
	height: 50VW;
	.contentBox {
		color: blue;
		width: 80px;
		height: 40px;
		.contentBox_subBox {		
			.contentBox_subBox_title {
				color: red;
				text-decoration: underline;
			}
		}
	}
}
```

`.contentBox_subBox{}` についてはなくてもいいんだけど、一旦ネストしまくるコードを書き出すと途中で変えると変な感じがしてつい書いてしまう。
そしてネストが深すぎるコードはややこしい。

##解決策：ネストを浅くする

はじめからこうしておくと

```scss:index.scss
.l-main {
	width: 80VW;
	height: 50VW;
	.contentBox {
		color: blue;
		width: 80px;
		height: 40px;
	}
	.contentBox_title {
		color: red;
		text-decoration: underline;
	}
}
```

変更時もスマート。そして見やすい。

```scss:index.scss
.l-main {
	width: 80VW;
	height: 50VW;
	.contentBox {
		color: blue;
		width: 80px;
		height: 40px;
	}
	.contentBox_subBox_title {
		color: red;
		text-decoration: underline;
	}
}
```

BEMを利用して名前を付けておけばネストしなくても親子関係は十分わかる。
次からはちゃんとこの書き方にしよう。
PyQt5のウインドウを画面キャプチャ(QGraphicsViewの場合)

## 目的
僕がPyQt5で画面キャプチャをしたかった時に詰まったので，解決法を共有します．
結果だけ見てしまえば単純なんです．

しかし，この記事を書いた時点ではネット上にPyQt4の情報が多く情報が混在していたため，書いておきます．

## 環境
- Python: 3.5.2
- PyQt: 5.7
- OS: MacOS 10.11.6 (Windows 10でも動作確認しました．)

## 依存
- PyQt5 (Pythonモジュール)

## 結論
### QGraphicsViewの場合
```
import sys
from PyQt5.QtWidgets import QApplication, QGraphicsView

if __name__ == '__main__':
    app  = QApplication(sys.argv)
    view = QGraphicsView()
    view.show()
    view.grab().save("test.png")
    print("test.png is saved!")
    sys.exit(app.exec_())
```

## PyQt4との違い
PyQt4においては，grabWindow()で現在のウインドウを取得し，それをQPixmapに渡して出力していたようです．
しかし，参考文献からわかるようにその機能がPyQt5で使われなくなり，上のように簡易的な表現となっています．

返り値を見てみると，内部的な受け渡しではQPixmapが使われていますが，
現在の結果を出力するだけであれば，ユーザが明示的にQPixmapを定義する必要は無くなりました．

PyQt4のソースコードを乗せると結論が分かりにくくなるので，ここには書かないことにします．

## 参考文献
- http://doc.qt.io/qt-5/qpixmap-obsolete.html
- (回答番号3番)　http://stackoverflow.com/questions/10705712/screenshot-of-a-window-using-python
Golangのbundleコマンド

Golangの[`bundle`コマンド](https://godoc.org/golang.org/x/tools/cmd/bundle)に関する困惑をTwitterで見かけた．おそらくRubyの[bundler](http://bundler.io/)と名前が衝突するためだろう．

ただこのコマンドはおそらく多くのひとは今後使うことはないため気にする必要はない．これは[Go1.6でHTTP/2をぶっ込む](https://golang.org/doc/go1.6#http2)ときにx/toolsに入れられたパワー系コマンドである（もともとはRuss Cox氏が[作っていた](https://code.google.com/p/rsc/source/browse/cmd/bundle/main.go)）．インストールしているのはおそらくこの対応の経緯を追っていた人だと思う（ちなみに僕はこれをインストールしたのを忘れていてRubyの`bundle`を実行したつもりがGolangのほうを実行してしまったことがある）．

## bundleコマンドとは何か?

bundleはパッケージを別パッケージとして1つのファイルにするコマンド．以下のように使われる．

```golang
$ bundle golang.org/x/net/http2 net/http http2
```

上記のコマンドを実行すると`golang.org/x/net/http2`パッケージを`net/http`パッケージの中に`http2`というprefixをつけて1つのファイルとしてぶっ込むことができる．

## なぜbundleコマンドが必要だったか?

上でも述べたがこのコマンドは[Go1.6のHTTP/2対応](https://golang.org/doc/go1.6#http2)にてx/toolsに導入された．Go1.6のHTTP/2対応の目標は「APIの変更なしに」すぐ使えることだった．

単純に考えれば[golang.org/x/net/http2](https://godoc.org/golang.org/x/net/http2)をvendoringすれば良さそうだが，これをすると

- `x/net/http2` -> `net/http` (Handlerを実装するのに必要)
- `net/http` -> `x/net/http2`（APIを変更しないために必要）


でimport cycleが発生してしまう．この問題を解決しつつ目標を達成するための選択肢が`bundle`コマンドだった．というのが経緯になる．より詳しくは["http -> http2 -> http import cycle"](https://groups.google.com/forum/#!topic/golang-dev/8Qjr03xf07U)を見ると良い（`bundle`はテストを無視するため現在でもメインの開発は[golang.org/x/net/http2](https://godoc.org/golang.org/x/net/http2)で行われ定期的に標準パッケージの方に`bundle`されている）．

## どのようにインストールするのか?

（追記）

x/toolsには`guru`や`gorename`などGopherに必要なツールがたくさん揃っている．基本的にこれらは必要なものをそれぞれインストールするのがプラクティスになっている．例えば`bundle`コマンドは以下のようにインストールする．

```bash
$ go get golang.org/x/tools/cmd/bundle
```

このプラクティスに従っていれば無意識のうちに名前被り問題が発生することはない．が以下のような横着をしてx/toolsの全てのコマンドをインストールすると気づかないうちに問題が発生してしまうかもしれない．

```bash
$ go get golang.org/x/tools/...
```

x/toolsは必要なものを一つずつインストールしましょう．

## まとめ

使われどころを知ればおそらく多くのひとにとって必要無いことがわかるのではないでしょうか．使われることも少ないので特に衝突などは考慮していなかったのだと思います．
Railsで404エラーメッセージを出すために

railsアプリを作っている最中に404エラーがでないなぁと思い、調べてみると色々と
必要な作業があったので忘れないようにしておきます！

railsには「rescue_from」という便利なメソッドがあったので今回はこれを使います！

`rescue_from`を使えばコントローラーで例外をキャッチして、その例外発生時に特定のアクションを実行させることができるそうです！

applicationコントローラーに設定を書いていきます。

```ruby:application_controller.rb
class ApplicationController < ActionController::Base
  
  #ハンドルしきれなかったエラーは500エラー扱い
  if !Rails.env.development?
    rescue_from Exception,                        with: :render_500
    rescue_from ActiveRecord::RecordNotFound,     with: :render_404
    rescue_from ActionController::RoutingError,   with: :render_404
  end

  def routing_error
    raise ActionController::RoutingError.new(params[:path])
  end

  def render_404(e = nil)
    logger.info "Rendering 404 with exception: #{e.message}" if e

    if request.xhr?
      render json: { error: '404 error' }, status: 404
    else
      format = params[:format] == :json ? :json : :html
      render file: Rails.root.join('public/404.html'), status: 404, layout: false, content_type: 'text/html'
    end
  end

  def render_500(e = nil)
    logger.info "Rendering 500 with exception: #{e.message}" if e 

    if request.xhr?
      render json: { error: '500 error' }, status: 500
    else
      format = params[:format] == :json ? :json : :html
      render file: Rails.root.join('public/500.html'), status: 500, layout: false, content_type: 'text/html'
    end
  end
  
end
```

public配下にある404.htmlと500.htmlをカスタマイズすれば自分だけのエラーメッセージを出すことが出来ます。

ローカルでエラーメッセージを確認するためには`config/environments/development.rb`を修正する。

```rails:config/environments/development.rb
config.consider_all_requests_local       = false
```

これでローカルでもエラーメッセージを確認出来ます！
[小ネタ] MacやiPhoneのカレンダーに他の人のgoogleカレンダーを連携する

# 何がしたい
会社でgoogleAppsを使っています。
同僚のカレンダーって便利ですよね。この人今大丈夫かな？とかさらっと確認できますし。

web画面上からだと横で検索すれば一発ですけど、わざわざブラウザを開くのもメンドクサイ・・・
私はMaｃに入ってるカレンダーを画面上に出しているのでここで確認できれば便利です。

今回はそんな時のやり方です

# 手順
- Macに使用するgoogleのアカウントを連携させます。iPhoneでも同様です。（やり方は省略します）
- webブラウザーで使用するGoogleのアカウントにログインします。
- ログインした状態で[ここを開きます](https://calendar.google.com/calendar/syncselect)

すると、下記のような画面が表示されて、webのカレンダーで表示している同僚のカレンダー一覧が表示されます。
表示したいカレンダーにチェックを入れて保存することでmacやiPhoneのカレンダーで確認することが出来ます。

<img width="1192" alt="スクリーンショット_2016-09-21_11_39_25.jpg" src="https://qiita-image-store.s3.amazonaws.com/0/52141/184aa343-940e-c381-29ed-ae29abc0f4dd.jpeg">
macOS Sierraに更新したらHomebrewで入れたtmuxでエラーが出てきた

2016/10/14 追記

直ったっぽいので下記手順は古いと思います。

```
$ brew info tmux
tmux: stable 2.3 (bottled), HEAD
Terminal multiplexer
https://tmux.github.io/
/usr/local/Cellar/tmux/2.2 (9 files, 639.8K)
  Poured from bottle on 2016-09-30 at 12:01:37
/usr/local/Cellar/tmux/2.3 (9 files, 650.5K)
  Poured from bottle on 2016-10-03 at 10:12:30
/usr/local/Cellar/tmux/2.3_1 (10 files, 652.4K) *
  Poured from bottle on 2016-10-13 at 22:59:50
From: https://github.com/Homebrew/homebrew-core/blob/master/Formula/tmux.rb
==> Dependencies
Build: pkg-config ✔
Required: libevent ✔, utf8proc ✔
==> Caveats
Example configuration has been installed to:
  /usr/local/opt/tmux/share/tmux

Bash completion has been installed to:
  /usr/local/etc/bash_completion.d
```




---

# tmux使おうとするとエラーが

```
[warn] kq_init: detected broken kqueue; not using.: File exists
```
無視して使えたけど気持ち悪い


# ググったら解決方法あった

https://github.com/tmux/tmux/issues/475

下記コマンド実行でなおった

```
$ brew uninstall --force tmux
$ brew install --HEAD tmux
```
IntelliJ IDEA,PhpStorm,WebStorm,AppCodeなどの使用可能メモリ量を増やす方法

#最近のPhpStorm等の使用可能メモリ量の設定

最近（２０１６.x ？）のIntelliJ IDEA,PhpStorm,WebStorm, AppCodeの使用可能メモリ(ヒープ)を増やすにはメニューから **Help > Edit Custom VM Options** でカスタムのvmoptionsを修正するようです。

![vmoption.png](https://qiita-image-store.s3.amazonaws.com/0/100465/60d60952-ffe1-9590-ceb5-ec4b88051337.png)


```phpstorm.vmoptions
-Xms128m
-Xmx2048m
-XX:ReservedCodeCacheSize=240m
-XX:+UseCompressedOops
```

※ 使用可能メモリ量 -Xmx750m → 2048m にしました。

PhpStorm再起動後に使用可能メモリ量が増えています。

![phpstorm_memup.png](https://qiita-image-store.s3.amazonaws.com/0/100465/57c04a0d-67cb-11c7-9cd9-0d1faaa48f80.png)



#参考

[PhpStormのメモリを増やす方法\(IntelliJ IDEA、PhpStorm、WebStorm\)](https://ah-2.com/?p=4665&preview=true)

[IntelliJ IDEA 2016.2 Help　Increasing Memory Heap](https://www.jetbrains.com/help/idea/2016.2/increasing-memory-heap.html)

[PhpStorm 2016.2 Help Tuning PhpStorm](https://www.jetbrains.com/help/phpstorm/2016.2/tuning-phpstorm.html)

[WebStorm 2016.2 Help Tuning WebStorm](https://www.jetbrains.com/help/webstorm/2016.2/tuning-webstorm.html)

[AppCode 3.3 Help Tuning AppCode](https://www.jetbrains.com/help/objc/3.3/tuning-appcode.html?origin=old_help)
【メモ】Faster R-CNN デモ実行

# はじめに

特定物体認識（画像内の物体を検出して名称をつけるやつ）をやってみたいので、Faster R-CNN のデモを動かします。
幸運にもソースコードが GitHub に公開されていて、インストール手順が書かれています。

参考 https://github.com/rbgirshick/py-faster-rcnn

# 必要パッケージ

cython
python-opencv
easydict

# インストール手順

リポジトリを取得します。

> git clone --recursive https://github.com/rbgirshick/py-faster-rcnn.git

環境変数を設定します。

> export FRCN_ROOT=~/py-faster-rcnn

ビルドします。

> cd $FRCN_ROOT/lib
> make
> 
> cd $FRCN_ROOT/caffe-fast-rcnn
> cp Makefile.config.example Makefile.config

今回は python を使う ＆ CPU で実行するので Makefile.config の CPU_ONLY と WITH_PYTHON_LAYER をコメントアウトします。

> make -j8 && make pycaffe

ここで、HDF5関係で怒られたので、Makefile.config と Makefile を修正します。

> Makefile.config
> 前：INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
> 後：INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial

再度実行します。今度は通りました。

> make -j8 && make pycaffe

# デモの実行

デモのために学習済みのモデルを取得します。

> cd $FRCN_ROOT
> ./data/scripts/fetch_faster_rcnn_models.sh

デモを実行します。

> cd $FRCN_ROOT
> ./tools/demo.py

そして怒られます。なんてこったい！

> Traceback (most recent call last):
>   File "./tools/demo.py", line 18, in <module>
>     from fast_rcnn.test import im_detect
>   File "/home/test-pc/py-faster-rcnn/tools/../lib/fast_rcnn/test.py", line 16, in <module>
>     import caffe
>   File "/home/test-pc/py-faster-rcnn/tools/../caffe-fast-rcnn/python/caffe/__init__.py", line 1, in <module>
>     from .pycaffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, RMSPropSolver, AdaDeltaSolver, AdamSolver
>   File "/home/test-pc/py-faster-rcnn/tools/../caffe-fast-rcnn/python/caffe/pycaffe.py", line 13, in <module>
>     from ._caffe import Net, SGDSolver, NesterovSolver, AdaGradSolver, \
> ImportError: /home/test-pc/py-faster-rcnn/tools/../caffe-fast-rcnn/python/caffe/../../build/lib/libcaffe.so.1.0.0-rc3: undefined symbol: _ZN2cv8imencodeERKNSt7__cxx1112basic_stringIcSt11char_traitsIcESaIcEEERKNS_11_InputArrayERSt6vectorIhSaIhEERKSB_IiSaIiEE
【メモ】chainer インストール

【chainer のインストール】

■ ライブラリのインストール

sudo apt-get install python2.
sudo apt-get install python-numpy
sudo apt-get install libhdf5-dev
sudo pip install -U setuptools
sudo pip install -U cython

■ CUDA の環境変数設定

export CUDA_ROOT=/usr
export PATH=$PATH:/usr/bin
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib64:/usr/lib

* cudaの保存先によって変わる。
* 今回は、/cuda 以下をを全部/usr 以下に移動したパターン

■ サンプルコードのダウンロード

sudo git clone https://github.com/pfnet/chainer.git

■ サンプルの実行

cd ~/chainer/examples/mnist
python train_mnist.py

* chainerモジュールがないと怒られた場合
export PYTHONPATH=/usr/local/lib/python2.7/dist-packages

* filelockモジュールがないと怒られた場合
conda install filelock

【Caffe の学習済みモデルのインポート】

■ 必要なライブラリのインストール

sudo pip install pillow
sudo pip install protobuf

■ ネットワークのダウンロード

cd ~/chainer/examples/modelzoo
python download_model.py googlenet
python download_mean_file.py

■ Caffeモデルの評価（これはうまくいってない）

python evaluate_caffe_net.py test.txt googlenet bvlc_googlenet.caffemodel -b ./ -B 1

* No module named google.protobuf.internal と怒られる
apt-get install python-protobuf でもダメ
【メモ】caffe インストール

■ 関連ライブラリのインストール

sudo apt-get install libatlas-base-dev
sudo apt-get install python-opencv
sudo apt-get install libprotobuf-dev libleveldb-dev libsnappy-dev libopencv-dev libhdf5-serial-dev
sudo apt-get install --no-install-recommends libboost-all-dev
sudo apt-get install libgflags-dev libgoogle-glog-dev liblmdb-dev protobuf-compiler

■ Caffe のインストール

git clone https://github.com/BVLC/caffe.git
cd caffe
cp Makefile.config.example Makefile.config
make all
make test
make runset

* HDF5関係で怒られた場合、Makefile.config と Makefile を修正する

Makefile.config
前：INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include
後：INCLUDE_DIRS := $(PYTHON_INCLUDE) /usr/local/include /usr/include/hdf5/serial

Makefile
前：LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_hl hdf5
後：LIBRARIES += glog gflags protobuf boost_system boost_filesystem m hdf5_serial_hl hdf5_serial

* Makefile.config の CPU_ONLY のコメントアウトを外す

■ Python で実行するために

make pycaffe
* caffe のディレクトリで

■ 環境変数の追加

export CAFFE_ROOT=~/caffe
export PYTHONPATH=~/caffe/python/:$PYTHONPATH

■ デモ実行

データセットの用意
sh data/mnist/get_mnist.sh
sh examples/mnist/create_mnist.sh

学習開始
./build/tools/caffe train --solver examples/mnist/lenet_solver.prototxt

* examples/mnist/lenet_solver.prototxt は solver_mode を GPU から CPU　に変更

学習再開
./build/tools/caffe train --solver examples/mnist/lenet_solver.prototxt
JSHint Options に未定義のワーニングコード(W138 みたいなの)をjshintrc で無視する

[riot](http://riotjs.com) + [babel](https://babeljs.io/docs/learn-es2015/) でes6が書きたかったんです。
静的チェックにjshint導入したんですが、[デフォルト引数](https://developer.mozilla.org/ja/docs/Web/JavaScript/Reference/Functions_and_function_scope/Default_parameters) 実装したら、"Regular parameters should not come after default parameters." ってワーニングが出ちゃってて困りました。
.jshintrc でどうにかできないかって調べたのですが、[ここ](http://jshint.com/docs/options/)にあるやり方では制御できないというか、未定義のようでした。
実装はとっくにされてるっぽい。
https://www.bountysource.com/issues/629001-support-default-parameters-in-es6-and-moz
どうやらコマンドラインで実行するときは ``` jshint -W138 ``` みたいな感じで制御できる模様(しかしためしてはない)

# [JSHint Options](ttp://jshint.com/docs/options/) に未定義のワーニングコード(W138 みたいなワーニングコード) を.jshintrc で無視する方法

## 結論

.jshintrcのキーに ```[+-]{無視したいコード}``` を記述する

- 例

```
    // suppless warnings "Regular parameters should not come after default parameters."
    "-W138": true,
```

## 根拠？文献？

jshintのソース読んでみました。構文チェックエラー処理のところで以下のような実装がありました。

```
        var match = /^([+-])(W\d{3})$/g.exec(key);
        if (match) {
          // ignore for -W..., unignore for +W...
          state.ignored[match[2]] = (match[1] === "-");
          return;
        }
```

設定に "-" + {ワーニングコード} のキーが定義されてたら、そのワーニングは無視されるらしい。


# まとめ

ソース読めば分かるOSSさいこー！ｗ
今更ながら[ESLint](http://eslint.org)のほうがよかったんじゃないか疑惑。ていうか、つぎはESLintにしよう。
Zabbix Agentとやり取りしよう

## Zabbix Agent
Zabbix Agentは最新とします。
http://www.zabbix.com/jp/download.php
コンパイル済みZabbixエージェント
最新：3.0

## Zabbix Agentプロトコル
日本語ドキュメント
https://www.zabbix.com/documentation/2.2/jp/manual/appendix/items/activepassive
3.x用は日本語ドキュメントがありませんが、英語版を確認した限り変わっていません。
「パッシブチェック」を使用します。

参考資料(手書きで申し訳ありません) 
<img width="1366" alt="201605_ZabbixAgent接続.png" src="https://qiita-image-store.s3.amazonaws.com/0/23378/6a5ef746-9bae-b7de-3f52-8cf106ecc85c.png">

## Example
- リクエスト
 - 「vm.memory.size\n」がリクエスト
 - 「vm.memory.size」を装置パターンのOid相当に設定する。

- レスポンス
 - 「5A 42 58 44 01 0A 00 00 00 00 00 00 00 32 31 30 38 32 35 32 31 36 30 」
 - 14バイト目からが値となります。
 - 抜出：2108252160
 - 数字が文字で返ってきます。※0は0x30ということ。

```java:ExampleCode
import java.io.BufferedReader;
import java.io.InputStream;
import java.io.InputStreamReader;
import java.io.OutputStream;
import java.io.OutputStreamWriter;
import java.net.Socket;
 
public class Empty {
    public static void main(String[] args) {
        try(Socket s = new Socket("10.0.0.142", 10050);
            InputStream is = s.getInputStream();
            OutputStream os = s.getOutputStream();
            InputStreamReader isr = new InputStreamReader(s.getInputStream());
            BufferedReader br = new BufferedReader(isr);
            OutputStreamWriter osw = new OutputStreamWriter(s.getOutputStream());) {

            osw.write("vm.memory.size\n");
            osw.flush();
            int c;
            int i = 0;
            StringBuffer sb = new StringBuffer();
            while((c = br.read()) != -1) {
                i++;
                System.out.print(String.format("%02X", c));
                if(i > 13) {
                    sb.append((char)c);
                }
                System.out.print(" ");
            }
            System.out.println();
            System.out.println(sb);
        }
        catch(Exception e) {
            System.out.println(e);
        }
    }
}
```

## アイテムキー情報
- リクエスト(アイテムキー)一覧
 -  https://www.zabbix.com/documentation/2.2/jp/manual/config/items/itemtypes/zabbix_agent
- OS別リクエスト(アイテムキー)一覧
 - https://www.zabbix.com/documentation/2.2/jp/manual/appendix/items/supported_by_platform
- Windows特有リクエスト(アイテムキー)一覧
 - https://www.zabbix.com/documentation/2.2/jp/manual/config/items/itemtypes/zabbix_agent/win_keys
区間内の経過時間をとる簡単なログ出力クラス

雑な1ファイルのPHPスクリプトの処理時間を計測したいと言われた。
既存ライブラリは古くて入らなかったり、
計測処理内容を引数に取る形だったり、
出力フォーマットがご満足いただけないようだったので、書捨てクラスを作った。

ご要望は

* 時刻は`Y年m月d日 H:i:s`形式
* できれば1行で表示
* 作業ごとの開始時間と終了時間を記録する
* 作業ごとの経過時間を記録する(開始時間の差分が0sになるのは許容いただいた)
* 記録範囲全体の総経過時間を記録する
* ある作業を計測中に別作業の計測を開始してもなんとかなる
* 既存コードをできるだけ加工しない(間にロギング用コードを仕込む)
* 結果はファイルに出力する(特別なオーダー無し)

だったので、差分は`microtime(true)`の差分で出すとして、
スクリプトの最初にインスタンス生成、スクリプト終了の`destruct`で全体を取ることにした。
なのでクラス横断もできる`static`なまともなロガーには全然勝てない。
使い捨てでライブラリ入れるのが面倒なときとかに。

```php
<?php

class SaveLog
{

    private $marks = array();

    public function __construct()
    {
        $this->start('ロギング');
    }

    public function __destruct()
    {
        $this->end('ロギング');
    }

    public function start($tag)
    {
        $this->marks[$tag] = microtime(true);

        $this->log($tag . '開始');

    }

    public function end($tag)
    {
        $this->log($tag . '完了', microtime(true) - $this->marks[$tag]);
    }

    private function log($tag, $diff = 0)
    {
        $now = new DateTime();
        $text = $now->format('Y年m月d日 H:i:s : ') . sprintf("(%.10f s)", $diff) . ' : ' . sprintf("%s\n", $tag);
        file_put_contents('./log', $text, FILE_APPEND);
    }
}

```

```php:テストコード
<?php

$log = new SaveLog;

$log->start('sleep');
sleep(10);
$log->end('sleep');

$log->start('for');
for ($i = 0; $i < 5; ++$i) {
    $log->start('loop' . $i);
    sleep(1);
    // hogehoge
    $log->end('loop' . $i);
}
$log->end('for');
```

```text:出力
2016年09月21日 10:27:25 : (0.0000000000 s) : ロギング開始
2016年09月21日 10:27:25 : (0.0000000000 s) : sleep開始
2016年09月21日 10:27:38 : (12.8896620274 s) : sleep完了
2016年09月21日 10:27:38 : (0.0000000000 s) : for開始
2016年09月21日 10:27:38 : (0.0000000000 s) : loop0開始
2016年09月21日 10:27:39 : (1.0011038780 s) : loop0完了
2016年09月21日 10:27:39 : (0.0000000000 s) : loop1開始
2016年09月21日 10:27:40 : (1.0008089542 s) : loop1完了
2016年09月21日 10:27:40 : (0.0000000000 s) : loop2開始
2016年09月21日 10:27:41 : (1.0008041859 s) : loop2完了
2016年09月21日 10:27:41 : (0.0000000000 s) : loop3開始
2016年09月21日 10:27:42 : (1.0007710457 s) : loop3完了
2016年09月21日 10:27:42 : (0.0000000000 s) : loop4開始
2016年09月21日 10:27:43 : (1.0009260178 s) : loop4完了
2016年09月21日 10:27:43 : (5.0053570271 s) : for完了
2016年09月21日 10:27:43 : (17.9945080280 s) : ロギング完了
```

秒数による位置ズレは許してもらえた。
横幅とりすぎると見づらくなるし…。
最初は作業名を頭に、と言われたが、半角・全角のズレが酷くて全部全角にする変換をかけたりしていた。
開始から終了までまとめて1行にしたり開始の差分は消したりした方がいいかもしれないけど、そこら辺は利用者に応じる。
scheme毎にGoogleService-Info.plistを切り替える

とあるiOSアプリのプロジェクトで、下記のような環境を用意しました。

- サーバ側では、開発・ステージング・本番の3環境が用意されている。
  - 開発者は"開発"環境のサーバを利用する。
  - テスターに配布する際には、"ステージング"のサーバを利用する。
  - 本番申請時は、"本番"のサーバを利用する。
- schemeを3つ定義しておき、それにより向き先を切り替えられるようにする。（CIなどでそれぞれのipaを作れるように）
- Google Analyticsのtracking idは2つ用意されており、本番申請用とそれ以外で分ける。

tracking idの指定には、`GoogleService-Info.plist`を利用するのがイマドキのようです。
https://developers.google.com/analytics/devguides/collection/ios/v3/?ver=swift&hl=ja

ただ、これをschemeで切り替えるような仕組みは標準では存在していないようです。
Androidであれば、build type毎に `google-services.json` 切り替えることが、標準で可能だったりします。 https://developers.google.com/android/guides/google-services-plugin#adding_the_json_file

そのため、Run Scriptを利用する形で無理やり実現しました。

## 前提

| Scheme | 用途 | Configuration |
|:-:|:-:|:-:|
| app_dev | 開発用 | Debug |
| app_stg | ステージング用 | Staging |
| app_prd | 本番用 | Release |

上記のようなscheme、Configurationになっていることを前提とします。


## それぞれのファイルを配置

適当なディレクトリに、2つのplistを配置します。

```Configuration/GoogleService-Info-debug.plist
...
	<key>TRACKING_ID</key>
	<string>UA-FOO-1</string>
...
```

```Configuration/GoogleService-Info-release.plist
...
	<key>TRACKING_ID</key>
	<string>UA-BAR-2</string>
...
```

これらは、Xcode上でAdd Filesしておく必要がありません。（しても、ipaファイルに含まれてしまうだけですが）

## Run Scriptに追加する

対象のtargetに下記のようなスクリプトを追加します。

```sh
if [ "${CONFIGURATION}" == "Release" ]; then
cp "${PROJECT_DIR}/${PROJECT_NAME}/Configuration/GoogleService-Info-release.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist"
echo "Production GoogleService-Info copied."
else
cp "${PROJECT_DIR}/${PROJECT_NAME}/Configuration/GoogleService-Info-debug.plist" "${BUILT_PRODUCTS_DIR}/${PRODUCT_NAME}.app/GoogleService-Info.plist"
echo "Development GoogleService-Info copied."
fi
```

ここでは、生成するapp内に`GoogleService-Info.plist`を生成するのですが、
"Release" configurationの場合は`GoogleService-Info-release.plist`を、
それ以外のconfigurationの場合は`GoogleService-Info-debug.plist`をもとにします。

それ以外は、 https://developers.google.com/analytics/devguides/collection/ios/v3/?ver=swift&hl=ja に書いてあるように実装していけば、よいかと。
Unity5.4 MovieTextureの再生方法

* mp4をImport
* マテリアルを作成してテクスチャ部分にmp4を設定
* Planeなどをシーンに配置し、そのマテリアルを設定
* そのPlaneに下記コードを付けてPlay

```csharp
using UnityEngine;
using System.Collections;

public class PlayMovieTexture : MonoBehaviour {

	MovieTexture movieTexture;

	void Start () {
		movieTexture = (MovieTexture)(GetComponent<Renderer>().material.mainTexture);
		movieTexture.Play();
	}
}
```
誰でもわかる、Pythonの仮想環境を構築する 2016年9月（pyenv + virutalenv）

# はじめに
本投稿は、Python + pyenv + virutalenvがインストールできている前提で記載します。
上記のインストールがまだの方は、下記の投稿をご参考にしてください。

* 誰でもわかる、MacでPythonの環境構築をする方法 2016年9月（pyenv + virutalenv + IPython notebook）
http://qiita.com/tomoyaito16/items/f26fcc63652741a48562



# 仮想環境を構築する目的
OSで標準に入ってるPythonは、OSに含まれているライブラリやアプリのために用意されています。そのため、ユーザーが自由にプログラミングをするために使った場合、依存しているアプリやライブラリに問題が発生するリスクがあります。上記を回避するために、プログラミングするときは、仮想環境を作った方がよいです。



# 実行すること
環境はMac OSX 10.10.5で、Xcodeとhomebrewがインストールされている前提で進めます。
* virutalenvで、仮想環境を構築する
* pyenvで、仮想環境上にディレクトリを作成する



## 実行手順

### はじめに環境のパスを確認する

まず、pyenv配下のPythonにパスが通っているか確認します。

```
$ pyenv which python
$ pyenv which pip
```

上記コマンドを実行して、Pythonとpipが.pyenvの配下にあることを確認できればOKです。
※逆に、/usr/bin/pythonの配下に無いことを確認します。



### virutalenvで仮想環境を構築する

Pythonバージョンと仮想環境名を指定して実行します。
※Pythonバージョン[3.5.2]、仮想環境名[test_3.5.2]としています。
※下記コマンドの実行場所は、どこでもOKです。

```
$ pyenv virtualenv 3.5.2 test_3.5.2
```



### pyenvで仮想環境とディレクトリを紐付ける

まずは、virtualenv上にディレクトリを作成します。ディレクトリを作成する場所は、どこでもOKです。
※Documents以下に、[test_project]を作成しました。

```
$ mkdir ~/Documents/test_project
```

作成したディレクトリまで移動します。

```
$ cd ~/Documents/test_project
```

virtualenvの仮想環境とディレクトリを紐付けます。

```
$ pyenv local test_3.5.2
```



# 補足
virutalenvで構築した仮想環境は、下記で削除できます。

```
$ pyenv uninstall test_3.5.2
```



# おわりに
何かご不明な点、誤りなどございましたらコメントお願いします。私が友人から教えてもらったことが、より多くの方の役に立てば幸いです。
SoftLayerでHourly GPUをオーダーする方法

#内容
2016年9月20日付で、SoftLayerの時間課金型ベアメタルのラインナップで、GPU付きのものが提供開始となりましたので、確認します。

#一覧
Hourly Serverの一覧はこちらから確認できます。
https://manage.softlayer.com/Store/serverListHourly
![gpu-qiita1.png](https://qiita-image-store.s3.amazonaws.com/0/101361/5453deae-d0d5-0f73-67ec-df313ba7ba74.png)


#K2カード2枚挿し
下から2番目の行に該当するHourlyベアメタルです。
![gpu-qiita4.png](https://qiita-image-store.s3.amazonaws.com/0/101361/0271a4a2-25c6-49cc-6cb7-7219a572ea78.png)


- 東京データセンターも選べる
- GRID K2 カードが2枚
- 約$3.8/Hour
- 10GbEも選べる

![gpu-qiita2.png](https://qiita-image-store.s3.amazonaws.com/0/101361/3c6b3cd3-5f04-f9ea-06ad-12aff63db69d.png)


#K80カード2枚挿し
一番下の行に該当するHourlyベアメタルです。
![gpu-qiita5.png](https://qiita-image-store.s3.amazonaws.com/0/101361/39e031d7-4fc9-8174-c6f9-0d88b4cb5dc2.png)


- 東京データセンターも選べる
- GRID K80 カードが2枚
- SSD搭載
- 約$5.3/Hour
- 10GbEも選べる

![gpu-qiita3.png](https://qiita-image-store.s3.amazonaws.com/0/101361/060d010c-41d7-7303-ac32-5c1cc04fb0ac.png)

#まとめ
Deep Learningのフレームワークも複数ノードに対応したものが出てきていますので、そんな時にこのHourly GPU ベアメタルを並べて、学習させるとかなり効率的だと思います。
Visual Studio CodeでGoのデバッグ環境作ろうとしたら失敗した件

## はじめに

http://dev.classmethod.jp/go/visual-studio-code-golang-debug/

とかを参考に、

- Windows 7 64bit
- Go (version go1.7.1 windows/amd64)
- Visual Studio Code (version 1.5.2)

という環境で、Goのデバッグ環境を作ろうしたら失敗した。
これはその解決までのメモ

## 起こったエラー

一通りインストール・設定を終えて、GoコードをVisual Studio Codeでデバッグしようとすると、
`can't load package: package internal: no buildable Go source files in %GOROOT%\src\internal`
とエラーとなった。

![goerr.png](https://qiita-image-store.s3.amazonaws.com/0/26693/a0cef4da-101a-4db0-5e07-dfbef8a4b3d8.png)

ここでコマンドラインで以下を確認

```
go build .\main.go
```

→成功

```
dlv debug .\main.go
```

→失敗(以下のようにVisual Studio Codeと似たようなエラーが出た）

```
can't load package: package internal: no buildable Go source files in D:\go\src\internal
can't load package: package ****/main.go: cannot find package "****/main.go" in any of:
        ****\main.go (from $GOROOT)
        ****\main.go (from $GOPATH)
exit status 1
```

## 解決策

stackoverflowで同じ悩みを持つ人がいた。

http://stackoverflow.com/questions/39458526/how-to-fix-delve-cant-load-package-package-internal-error

この人のとおり、ちょっと昔のコードを自前でビルドすることにした。

※なお、delveのプロジェクトで割りと最近（2016/9/20時点）で以下の似たようなIssueが出ているのでもう少ししたら解決するのかも？
https://github.com/derekparker/delve/issues/634

### 1. cygwin・mingw環境の準備

私は、[mobaXterm](https://www.google.co.jp/url?sa=t&rct=j&q=&esrc=s&source=web&cd=1&cad=rja&uact=8&ved=0ahUKEwiFkuLKyJ3PAhUCKB4KHSsXBNoQFggeMAA&url=http%3A%2F%2Fmobaxterm.mobatek.net%2F&usg=AFQjCNFIes6M8iS_0iHFNFymtm-GbRSZow)を使っていたのですでに導入済みだった。
※使いやすいよ！

ただし、makeとかgccとか入ってなかったのでインストール

```bash
apt-get install gcc-core
apt-get install make
```

### 2. delveレポジトリへの移動と、昔のコードのcheckout

`go get`して取得していたdelveのレポジトリに移動します。

```
cd $GOPATH/src/github.com/derekparker/delve
```

そして、過去のコミットにチェックアウトします。
私の場合は、`51c39ed17132372144eaedc29b0248c5f30f71a1`にチェックアウトしました。

```
git checkout 51c39ed17132372144eaedc29b0248c5f30f71a1
```


### 3. delveのビルド・インストール

正常に動いていた（と思われる）版をビルド、インストールします。
これで、dlv.exeが入れ替わります。

```
make build
make install
```

```
go build -ldflags="-X main.Build=51c39ed17132372144eaedc29b0248c5f30f71a1" github.com/derekparker/delve/cmd/dlv
go install -ldflags="-X main.Build=51c39ed17132372144eaedc29b0248c5f30f71a1" github.com/derekparker/delve/cmd/dlv
```

## 解決  

やったね！:ok_hand:
![gook.png](https://qiita-image-store.s3.amazonaws.com/0/26693/140452fc-96d5-fd5e-2c47-a8fba5fce2cb.png)
Cloud9 IDEのApacheのルートフォルダを変更


Cloud9で静的サイトを開発していいて、１つのワークスペースに複数のアプリケーションフォルダが存在しているときにそのうちの一つだけを開発サーバーで公開したいなってときに使いました。

#Apacheサーバーのルートフォルダ変更

ターミナルで以下のコマンドを入力してviエディタでApache設定ファイルを開く

`sudo vi /etc/apache2/sites-enabled/001-cloud9.conf `


#設定ファイル編集
設定ファイルを開いたら

`DocumentRoot 公開したいフォルダパス`

の部分を自分の設定したいパスへ変更して保存します。

#再起動

サーバーを再起動します。

`sudo service apache2 restart`

#サーバー起動

そしたら"Run"ボタンでいつも通りサーバーを起動して、URLへアクセスすると設定したパスがルートとして開かれます。
ちなみにURLを知りたかったらIDEの右上にある"Share"ボタンを押して、"Link to share"以下にある"Application:" という項目のURLがそうです。"Public"にチェックしていれば公開設定になってます。

こんな感じでCloud9で開発中の見たいアプリだけ公開することができます。



######参考

[How to change apache root folder](https://community.c9.io/t/how-to-change-apache-root-folder/4243)
Python 俺めも 基本編

スマートPythonプログラミングを読んだメモ書き

#シバン

```
#!/usr/bin/env python
```
/usr/bin/env経由でpythonインタプリタを指定することで、その環境でデフォルトとなってるpythonインタプリタを特定のパスに依存すること無く呼び出せる。※しかし環境によって異なるので良し悪し。

#エンコード宣言

```
# -*- coding: utf-8 -*-
```
ソースコードをどの文字コードを使って解釈するか指定。
※python3ではデフォルトがUTF-8、Python2ではASCII


#特殊属性 name

```
if __name__ == '__main__':
  main()
```
アンダースコアが前後に２つ連続して付いた名前を持つ変数やメソッドはPythonでは特殊な振る舞いをすることを示している。
`__name__`にはそのモジュールの名前が文字列で格納される。モジュールがスクリプトとして実行された際に「`__main__`」という値が入り、 別のモジュールから呼び出された時には、自身のモジュール名が入るので実行されない、という仕組み。

#モジュール
PythonではPythonファイル（.py)そのものがモジュール。

#パッケージ
パッケージは配下に複数のモジュールを持つことのできるモジュールで、`__init__.py`のファイルが入ったディレクトリ。`__init__.py`はパッケージ自身を表すモジュール。モジュールの追加はディレクトリ配下にPythonファイルを置くだけ。

#printのバージョン互換

```
print('Hello')
```
Python2系では分だが、Python3では関数なので、丸括弧で囲むことで文と関数両方として解釈できるようにする。

#コーディングスタイル
PEP8に従う。
３分でできる！動くQRコード(GIF)の作り方！

動くQR-Codeってなんだ？と思った方、次のQR-Codeをご確認ください。
![pichu_animacion_by_dark_clefita_qrcode.gif](https://qiita-image-store.s3.amazonaws.com/0/115198/039aba28-4fc0-31ec-784f-83dcddea4d6b.gif)
![giphy_qrcode.gif](https://qiita-image-store.s3.amazonaws.com/0/115198/322a9b2d-2e78-7a50-564c-ef6fc5a16b8c.gif)

他にも普通に画像を元にした、QR-Codeも作ることもできます。

![neko_qrcode.png](https://qiita-image-store.s3.amazonaws.com/0/115198/e7e2ebde-60b7-92c7-1eb3-951a9f2bf411.png)

可愛くないですか！！こんなにかわいくて、目を引くこと間違いなしのQR-Codeが１分で作れてしまいます。（pythonを使える環境であれば）
pythonがすぐに使うことができないけど試してみたい。また、とりあえず読むまえに試してみたいという方は、お試しサイトを作ったのでぜひ使ってみてください。

[gif-qrcode](http://gif-qrcode.club//)


それでは説明には入ります。
まず、普通のQR-Codeの作り方。
次に、静止画像を元にQR-Codeを作る方法。
次に、GIF画像を用いて動くQR-Codeを作る方法を説明していきます。

#1.インストール
pip(3) install myqr(or MyQR)

#2.使用法

```python:summary
myqr Words
     [-v {1,2,3,...,40}]
     [-l {L,M,Q,H}]
     [-n output-filename]
     [-d output-directory]
     [-p picture_file]
     [-c]
     [-con contrast]
     [-bri brightness]
```

```Words```,```-v```,```-l```,```-n```,```-d``` に関しては```2.1 QR-Code```
```-p```,```-c```,```-con```,```-bri``` に関しては```2.2  デザインQR-Code```
で、説明しています。



##2.1 QR-Code
### #1 Words

```
#1 Words
myqr https://github.com
```

Wordsには、URLや文章を入れます。
できたQR-Codeは'qrcode.png'という名前で、カレントディレクトリに保存されます。

### #2 -v, -l

```
#2 -v, -l
myqr https://github.com -v 10 -l Q
```

####-v: サイズ

１から４０の間でサイズを指定することができます。
デフォルトでは、文字数によって大きさは決まります。

####-l: エラー修正レベル
エラー修正レベルを ```L```,```M```,```Q```,```H``` の中から選ぶことができます。
Lが一番レベルが低く、Hが最もレベルが高いです。

>エラー修正レベルとは、QR-Codeがコードで汚れていたり、破損していていた場合の、コード自身でデータを復元する能力を示しています。レベルを上げると、誤り訂正能力は向上しますが、データは増え、コードのサイズは大きくなります。

### #3 -n, -d

```
#3 -n, -d
myqr https://github.com   -n github_qr.jpg   -d .../paths/
```

デフォルトでは、作成したQR-Codeの名前は、'qrcode.png'で、ファイルはカレントディレクトリに保存されます。


#### -n: ファイル名と形式
作成したQR-Codeのファイル名を指定することができます。
形式は、```.jpg```,```.png```,```.bmp```,```.gif``` の中から指定することができます。

#### -d: ディレクトリ
保存するディレクトリを指定することができます。

#2.2 デザインQR-Code
### #1 -p

```
#1 -p
myqr https://github.com -p github.jpg
```

-p を使うことで、ディレクトリにある画像を元にQR-Codeを作成することができます。デフォルトでは、白黒のQR-Codeが作成されます。

### #2 -c

```
#2 -c
myqr https://github.com -p github.jpg -c
```

-c を使うことで、白黒ではなくカラーのQR-Codeを作成することができます。

### #3 -con, -bri

```
#3 -con, -bri
myqr https://github.com -p github.jpg [-c] -con 1.5 -bri 1.6
```

#### -con: コントラスト
画像のコントラストを変化させることができます。
デフォルト値は、1.0 です。

#### -bri: 明るさ
画像の明るさを変化させることができます。
デフォルト値は、1.0 です。
 
##2.3 動くGIF QR-Code
2.2のデザインQR-Codeで、元となる画像をGIF画像にすると、動くGIF　QR-Codeをつくることができます。
カラーや出力されるファイル名を変更するオプションなどは、デザインQR-Codeと同じです
。ただし、出力されるファイルもGIF形式でなければいけません。

#3 必要なライブラリ
[pillow](https://pypi.python.org/pypi/Pillow/3.3.1)
[numpy](https://pypi.python.org/pypi/numpy)
[imageio](https://pypi.python.org/pypi/imageio)

#4 おわり
予想以上に簡単だったと思います。
サイトに貼っても、インパクト絶大だと思いますし、
友達に見せてみても面白いでしょう！！
ぜひ、QR-Code lifeを！！

#5 （宣伝
自分でやるからいいという方も是非一度試してみてくださいね
[gif-qrcode](http://gif-qrcode.club//)
オブジェクト指向の「オブジェクト」とは何か、の考察


[このような記事](http://qiita.com/sjuny/items/79907370c55ea72978e2)を見つけたので、個人的な見解を少し。

本文が英語で、完全に意図をくみ取れているかは微妙ですが、要は

**巷であふれている、人や車や動物のたとえ話が、オブジェクト指向の説明になっているとは思わない！**

といったところでしょうか。
ネット上でも、たびたび目にすることだとは思いますが、個人的には、説明に用いることはできると思います。
さらに言えば、人や車、動物は、まさに「オブジェクト指向」の産物、といえると思っています。

細かい話をすると、すごく長くなるので、すごくざっくりと「オブジェクト」とは何かに焦点を絞ってみます。
「オブジェクト指向」とは、「オブジェクト至上主義」ということで
オブジェクトを中心に据えた考え方なので、「オブジェクト」が何かがわかれば問題ないかと思います。
（実際の設計上でのテクニックは抜きにして…）

結論から言いますと、「オブジェクト」とは、「性質（特徴）の集合体」といえます。
例えば、人。私たちが、「人」をどのように認識しますか？
2足歩行？姿？会話？人によってさまざまかと思いますが、必ず何かを基準にして「人」を認識しています。
その、認識基準そのものが、オブジェクトの中身になり、
そして、それに名称がついたとき、それが「オブジェクト」となりえるわけです。
技術英語 > Several control constructs exist in a hazy twilight zone somewhere between being [leading-edge] and being [discredited] and [disproved]... / The MIT Media lab, where the cutting edge is horned.

@ Code Complete (No. 12962 / 36077)

> Several control constructs exist in a hazy twilight zone somewhere between being <font color=red>leading-edge</font> and being <font color=red>discredited</font> and <font color=red>disproved</font>...

### leading-edge

http://ejje.weblio.jp/content/leading+edge
> (翼・プロペラの)先端、前縁、(技術・発展などの)最前線、先端

僕が2000年ころに覚えたのはこちらの方。

http://ejje.weblio.jp/content/cutting+edge
> 最前線、先頭

cutting edge technologyとしてMITメディアラボの説明の文章を2000年ころのEnglish Expressで読んだ。

> The MIT Media lab, where the cutting edge is horned.


### discredited
http://ejje.weblio.jp/content/discredited
> (…を)疑う、 信用しない

creditの前に否定のdisが付いた形のようだ。

### disproved
http://ejje.weblio.jp/content/disproved
> (…の)反証をあげる、 誤っていることを示す、 (…を)論駁(ろんばく)する

provedの前にdisが付いて否定となっている。
LINQで結合

#Joinを使って2つのListを結合

```csharp:Company.cs
class Company
{
    public string Name { get; set; }
    public string Market { get; set; }

    public Company(string name, string market)
    {
        Name = name;
        Market = market;
    }
}
```

```csharp:Stock.cs
class Stock
{
    public string Name { get; set; }
    public int Price { get; set; }

    public Stock(string name, int price)
    {
        Name = name;
        Price = price;
    }
}
```

```csharp
List<Company> companys = new List<Company>();

companys.Add(new Company("あいうえ株式会社", "東証1部"));
companys.Add(new Company("株式会社かきくけ", "東証2部"));

List<Stock> stocks = new List<Stock>();

stocks.Add(new Stock("あいうえ株式会社", 1055));
stocks.Add(new Stock("株式会社かきくけ", 7832));

foreach(var item in companys.Join(stocks, c => c.Name, c => c.Name, (p1, p2) => new { p1.Name, p1.Market, p2.Price}))
{
    Debug.WriteLine($"{item.Name} {item.Market} {item.Price} 円");
}
```
LINQでグループ分け

#GroupByを使ってグループ分け
株式市場に応じて、会社をグループ分けする。

```csharp:Company.cs
class Company
{
    public string Name { get; set; }
    public string Market { get; set; }

    public Company(string name, string market)
    {
        Name = name;
        Market = market;
    }
}
```

```csharp
List<Company> companys = new List<Company>();

companys.Add(new Company("あいうえ株式会社", "東証1部"));
companys.Add(new Company("株式会社かきくけ", "東証2部"));
companys.Add(new Company("株式会社さしすせ", "東証1部"));

foreach(var m in companys.GroupBy(c => c.Market))
{
    Debug.WriteLine($"market: {m.Key}");
    foreach(var c in m)
    {
        Debug.WriteLine($"company: {c.Name}");
    }
}
```
[Unity]DontDestroyOnLoadでオブジェクトが増えていく

# 環境
下記の環境を使用しています。
1. Unity 5.4.0
2. C# 

# 起きたこと
ゲーム開発時にシーンを頻繁に移動するような構成で開発が進んでいた。
しかし、どうしても恒常的に使いたいオブジェクトがある。ということで

```DontDestroy.cs
void Awake()
{
    DontDestroyOnLoad(this.gameObject);
}
```
このようなコードを記述し、使用していた。
最初は使い勝手がとてもよく感じていたのだがある時とんでもないことに気付く。

![1.png](https://qiita-image-store.s3.amazonaws.com/0/141550/6c220a13-85db-b0f1-286f-81d2355ad48a.png)

同じオブジェクトがめっちゃ増えてるやんけ！！
思い切りホニャララコントローラーだのに使っていたので本当に酷い気持ちになりました。

# 原因
1. 編集中の**scene1**の中に**DontDestroy**になるオブジェクトがある
2. 実行時DontDestroyOnLoadが呼び出され専用のシーンに突っ込まれる。
3. その後**scene1**に戻ってきたとき**(2.)**と同じことが起こる。

と、だいたいこんな感じの流れで往復するほど増えていく。
非常によろしくない。

# 解決方法1
(解決方法2がオススメです)
例えばプロジェクトが下記のようなシーン構成だった場合
>- title（ここにDontDestroyにしたいオブジェクトがいる）
>- game
>- ending

これを、下記のような構成に変える

>- ***preload*** (ここにDontDestroyにしておきたいオブジェクトをおく）
>- title(こちらのDontDestroyは削除しておく)
>- game
>- ending

preloadはゲーム起動時に1度だけ通りそれ以降は読み込まないようにする。
~~と言う対応にするのが一番楽だった。~~

# 解決方法2(2016/09/22追記)
コメントで「常にたったひとつだけしか存在しないシングルトンという扱いになる」という回答とコードを頂きました。
僕の場合は下記のURLの一番下に乗っているコードを参考にシングルトンとして使っていたのですが、
[テラシュールブログ：Unityで少しだけ高速なシングルトン(Singleton)](http://tsubakit1.hateblo.jp/entry/20140709/1404915381)

```SingletonBehaviour.cs
	protected bool CheckInstance()
	{
		...省略

		Destroy(this);
		return false;
}
```

だとオブジェクト自体は残っていたので

```SingletonBehaviour.cs
	protected bool CheckInstance()
	{
		...省略

		Destroy(this.gameObject);
		return false;
}
```
に変更してオブジェクトごとDestroyするようにしました。

# 課題点
- ~~Unityで各シーンを編集、実行してみるときにpreloadから持ってくるべきオブジェクトを一々追加しなくてはならない（予め読み込んでおけば解決出来そう・・・？）~~
- そもそもDontDestroyなオブジェクトが必要な構成が悪い？
Android StudioのLayout Editorで、Rendering Problems (Failed to find textEditSuggestionItemLayout) が発生する時

#現象　Android StudioのLayout Editorで、Rendering Problemsが発生する
> Rendering Problems
> Missing styles. ～
>
> Failed to find '?attr/textEditSuggestionItemLayout' in current theme.

※実機(API10)では、問題なく表示できます。
あくまで、レイアウトエディタの問題。

#環境　Android Studio 2.2など

##レイアウトエディタで、API14未満を選択すると発生する
※textEditSuggestionItemLayoutはAPI14～
https://developer.android.com/reference/android/R.attr.html#textEditSuggestionItemLayout

##スタイルの設定によっては、API14以上を選択しても発生する
###API14以上でも発生する例
※ようするに、API14以前の (属性textEditSuggestionItemLayoutを含まない) Theme。
> \<style name="AppTheme" parent="android:Theme">
> \</style>

###API14以上では発生しない例 1
※この例を試す場合は、support.v7ライブラリが必要です。
> \<style name="AppTheme" parent="Theme.AppCompat">
> \</style>

###API14以上では発生しない例 2
※この場合は、API10に切替えても、Holoのまま表示されます(正しく切り替わらない)。ただし、textEditSuggestionItemLayoutのエラーは表示されなくなります。
> \<style name="AppTheme" parent="android:Theme.Holo">
> \</style>

###検証に使用したレイアウトファイル
※LinearLayoutのみの(TextViewを含まない)レイアウトでも、本現象は発生します。
> \<LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"
> android:orientation="vertical"
> android:layout_width="match_parent"
> android:layout_height="match_parent">
> \</LinearLayout>

#対処法　・・(API14以上でプレビューする以外)なし？
レイアウトエディタが。APIレベルごとのThemeの切替えをうまく扱えずに、存在しない属性(textEditSuggestionItemLayout)を見に行こうとするのが原因と思われます。
従って、API14以上でプレビューするしかなさそうです。
※API14以上でもandroid:Themeなどを使っている場合を除く。

#補足
過去にも同じ現象が発生していたらしい。
(Fix内容の詳細は確認していませんが、このIssueは、入れ忘れ系の問題かと思います。特定のAPIレベルだけ、あるいは、特定のThemeだけで発生する場合は、入れ忘れの線でIssueなどを探してみましょう。)
[Android Open Source Project - Issue Tracker]
Issue 203392: 	Theme attribute missing in N sdk preview
https://code.google.com/p/android/issues/detail?id=203392
NetBeansをソースからビルドする

NetBeansをソースからビルドする手順をまとめる
ソースの取得に手間取ったが、正解が解れば難しくない。

## 対象バージョン
NetBeans IDE 8.1

## ソースからのビルド手順（公式）
http://wiki.netbeans.org/WorkingWithNetBeansSources


## 必要な構成
JDK８
Ant 1.9.6
~~Mercurial 3.6  on Python 2.5.1以上~~

## 注意点
mercurialからcloneは時間がかかるため、以下からzipファイルをダウンロードした。
https://netbeans.org/downloads/zip.html

* netbeans-8.1-201510222201-src.zip


## ビルド手順 
上記 ソースのzipファイルを任意のディレクトリに展開 → 以降、ディレクトリ名 main とする

```
cd main
ant -Dpermit.jdk8.builds=true
```
※ プロキシを通す必要が有る場合は、別途プロキシ設定が必要、詳しくは上述の公式ビルド手順を参照

## 起動確認

```
cd main
ant tryme
```

![image](https://qiita-image-store.s3.amazonaws.com/0/139049/f3e123a3-a4a4-f8ec-4b1e-9035b7b349ff.png)


## NetBeansでのデバッグ方法
別途ダウンロードした、NetBeansを使って、プロジェクトを開くメニューからも開くことも可能。

main以下の任意のプロジェクトをどれでも開いて、テスト実行などが可能

プロジェクトを開く （任意のプロジェクトを選択）
![image](https://qiita-image-store.s3.amazonaws.com/0/139049/6a7a95c0-add4-8764-1297-3c66b137a6cd.png)

ファイルをテストで任意のユニットテストを実行
![image](https://qiita-image-store.s3.amazonaws.com/0/139049/24c5f490-e762-d8d5-bd1e-6bbde74b9699.png)

プロジェクト実行/デバッグで、新しくNetBeansを起動
![image](https://qiita-image-store.s3.amazonaws.com/0/139049/961e041e-3c25-d29c-13f7-2340f2bc9fa2.png)
セカイイチのエンジニアが毎日してるかもしれないこと

#平日編

##朝 5:30
トイレに行った後はすぐにGithub のTrendingを見る。
https://github.com/trending

面白そうなリポジトリにstarをつけて、その中でも、気になるものがあったらソースをざっと眺めて理解する。エバーノートやOneNoteなどにメモしとくとなお良いかもしれない。
##5:45~6:30までランニングとPokemonGO
エンジニアは健康が命なので、自分は音楽を奏でる楽器だと思ってチューニングやメンテナンスは欠かさず行おう。その時は必ずスマートフォンかスマートウォッチを携帯しよう。自分の運動の記録をしよう。
そして可能なら効率的に運動する方法も考えよう。そして効率的なポケストップの回り方なども。

##7:00家を出る。
電車の中でははてなブックマークなどを見て意識を高めとく。
あんまりここで頑張りすぎても会社の仕事で疲れてしまうのもダメなので軽いブログなどが良い。
もちろんQiitaなどの投稿を見ることも勉強になるしちょうどいいだろう。
http://b.hatena.ne.jp/hotentry/it
http://b.hatena.ne.jp/entrylist/it/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0

##8時には会社の前のスターバックスで自分の気になっているサービスを触ってみる。
会社の始まりまで１時間から１時間３０分あるので、この時間は重要である。
機械学習や苦手なデザインなどを勉強しよう。
ここで朝起きてすぐに見たGithubのTrendingで気になったものを実際に動かしても良い。
私の場合は毎朝電車の中では英語でニュースを聞いたり見たりしている。最新のドキュメントはほぼ全て英語であるので英語ができないと話にならないからだ。

##10時~13時まで
実際に仕事が始まる。どんな会社でも一応は仕事をしている風を装わなければならないため、
業務以外のことはしづらいので、Twitterをデスクトップに表示しながら、フォロワーの興味のあるサービスなどを見ながら仕事をしよう。(もしもあなたの会社がTwitterも見れない会社ならてんsjlkslf。まあ頑張れ)
##13時から14時までのお昼時間
ここではできる限りはできる部下やできる上司を誘ってご飯に行こう。
仕事以外の話をしよう。お昼は仕事から解放される日本国民の権利の時間だ。
自分が作っているライブラリの話、はまっている健康管理の方法。キャベツの切り方。なんでもいい

##15時から16時
昼ごはんを食べてきて眠たくなる時間帯だ。会社がグーグルなら固定オフィスから、別の部屋に移動しよう。外の空気を吸いながらプログラムを書くのも良い。気分を切り替える環境を選ぼう。
固定デスクのお堅い会社ならスタンディングデスクにしよう。
もしも高さが変えられないデスクなら(てんshっj具fldkしよう。おっとなんでもない)コーヒでも飲もう。

##17時には今日やれる範囲を決めて、作業のまとめ
今日何をやったかなどをまとめて、もっと効率良く明日できるように考える。
もちろん進捗が良くなければ相談をすることなども必要である。そこはマネジメントに触れるので本記事では割愛する。

##18時。退勤
優秀なエンジニアなら定時で退勤しよう。時間はお金では買えない。
やる気があるなら、残業ではなく決まった時間で仕事を終えよう。時間をマネジメントできれば納期も守れるエンジニアになるだろう。

##19時、本屋に行く
気になる本を買う。自分の専門の技術の新書が出ていたら迷わず買おう。
書籍は最高の自分への投資です。ケチらず買いまくろう。

##20時には晩飯を食べよう。
平日なら自分でキャベツなどを切って焼きそばやラーメンなどにでも入れて食べよう。
金曜日なら同期や先輩、できる部下などと一緒に居酒屋に行って席でラップトップを広げながら雑談とライトなハッカソンでもして親交を深めよう。

##23時、寝ろ
徹夜は社会人には毒だ。ささっと寝ろ。


#休日編
休日の前日は多少は寝ることが遅くなるし、金曜日の夜は一番作業がしやすいだろう。私は少なくともそう思う。
##勉強会の出席に関して
エンジニアは常に最新の技術に触れる必要がある。そしてできれば勉強会に出席するといいと思う。
しかし、毎週必ず一つ以上には出る！！という目標はどうかと思う。勉強会というのはあくまで最近の動向をリアルに聞けるというのがメリットであり、勉強会という名前ではあるが勉強をするところではない。
休日は勉強しろ、である。

日頃から新しいことを自分の目や手で感じ取って、自分の知識の確認くらいの感覚で参加すれば良いのではないかと思う。


----
随時追加していきます。**セカイイチのエンジニアはこんなことしているぜorしていそうなどあったらコメントしてください。お願いします。**
こんなエンジニアがいたらきっと最強だなというのを想像上書いています。
※実在する人物とは一切関係ないフィクションです。
ISUCON6参加記録とふりかえり #isucon


## ISUCONとは

> ![ISUCON6](http://isucon.net/parts/logo.png)
> お題となるWebサービスを決められたレギュレーションの中で限界まで高速化を図るチューニングバトル、それがISUCONです。過去の実績も所属している会社も全く関係ない、結果が全てのガチンコバトルです。 
> [ISUCON公式ブログ](http://isucon.net/archives/46239949.html)

## チーム

バナナマンリターンズというチームで去年と同じメンバーで参加。全員普段はアプリエンジニア
去年の参加記録 [ISUCON5に初参加してきた](http://qiita.com/asflash8/items/cd85651df5bbf2668bc1)

事前に役割分担をざっくり決めておいた

- ぴろ：DB周り担当
- ちゃんまー：アプリ改修担当
- @asflash8（自分）：インフラ・ミドルウェア・プロファイリング担当

言語は全員書けるRubyで臨んだ

## モチベーション

- 去年悔しい思いをしたので今年こそは爪あとを残したい
- 1年でどれだけ成長したのか腕試し
- ギョウムにはない刺激を求めて

## 結果を先に

| 初期スコア | ベスト | 最終 |
|:-:|:-:|:-:|
| 0 | 15639  | 14442  |

去年よりは向上したものの予算通過ラインの90000には遠く及ばず悔しい結果に

## タイムライン

以下私の視点での記録。アプリ周りのことはチームメンバーが書いてくれたので[こちら](http://qiita.com/yamamoto_hiroya/items/b8113931a662721e6bf5)が詳しい


### 事前準備

- 社内インフラエンジニアによるAzure勉強会
- 計測用ツール（Kataribe、pt-query-digest）のインストールスクリプトの準備
- my.cnfとnginx.confの準備（後にこれで盛大にハマる）
- 去年アプリの反映ミスで悔しい思いをしたのでデプロイ&プロセス再起動の自動スクリプト準備
    - [ISUCON予選突破を支えたオペレーション技術](http://blog.yuuk.io/entry/web-operations-isucon)を大いに参考にさせていただきました

### 当日朝

無事会社に出社。9:30には全員集まる。朝時間通りに集まれてエラい

### 10:00~10:30

インスタンス起動とBitbucketのリポジトリへのpushやssh設定など
初期ベンチ実行 perlで2610（去年の最終スコアよりいいじゃん！）、rubyで無事0を記録

### 10:30~12:00

- 計測ツールのインストールで手間取る
    - percona-toolkitのインストール→成功
    - kataribeのダウンロード→成功
    - kataribeのunzip→unzipが無くて失敗
    - unzipのインストール→何故か失敗
    - go getでインストールに切替→成功
    - bundle installでrack-lineprof→失敗
        - `.bundle/config`の`BUNDLE_FROZEN: 1`が原因でした

結局アプリのプロファイラなしで挑むことになり、これが最大の敗因だったと思う

### 12:00~13:00

- htmlifyの処理内でkeywordを取得してN+1になっている部分を修正
	- 5000点超え
	- 瞬間的に5位に！
- keywordの`select *`を`select keyword`に変更
- updated_atにindex付与
- ↑2つはあまり効果がでず
- この間私はnginxで静的ファイルを返す&キャッシュを試みるもnginx.confの設定にハマる無能
    - 結局2時間溶かした


デプロイとプロセス再起動の自動化スクリプトが役に立った

### 13:00~15:00

- お昼食べつつ試行錯誤するも点数変わらず
- ようやくnginxで静的ファイルのレスポンスとキャッシュ設定が通るように
	- むしろ点数が下がる（Kataribeのレスポンスでは早くなっているのに）
	- /へのアクセスが増えたことで全体が詰まって点数が下がったと思っている

### 15:30~16:30

- keywordsのソートをSQLからRubyに→変わらず
- `htmlify`が遅いことはわかっていて、インフラ・ミドルウェアでできることがあまりなくなったので自分もアプリを見始める
- `htmlify`をキャッシュする実装を反映
	- 6000→15000に大幅UP。この日最高のテンション

### 16:30~18:00

- keywordの変換結果をキャッシュ→変わらず
- select * の撲滅→変わらず
- isudaのワーカー数を5→8に→変わらず
- MySQLのスロークエリを外す→変わらず

という感じでhtmlifyのキャッシュ以降目立った効果が上げられずFinish

## まとめ

- デプロイ&プロセス再起動の自動化はやっておいてよかった
- やったことないことは本番でもできない。予習はやっておこう
- 瞬間最高5位はとてもうれしい。最後までここに残れるようにがんばろう

## 爪あと

![スクリーンショット 2016-09-17 12.14.35.png](https://qiita-image-store.s3.amazonaws.com/0/1823/3a70685d-ff99-31d7-36e6-645fb8edc982.png)
pip のインストール

pip はPython 2.7.9 以降、Python 3.4以降からデフォルトで付属するパッケージ管理システムです。インストールは get-pip.py にて行います。 linux 環境であれば以下の１行でインストールすることができます。

```
 curl -kL https://bootstrap.pypa.io/get-pip.py | python
```