OmniAICreator/Qiita-1.07M huggingface dataset:
Ruby使いなら知っておくべきgemたち―Pry

# 概要

## 名前
Pry

## URL
http://pryrepl.org/

# 解説
今更ながら、`pry`を解説。
以前に記事をいくつか書いているのでそちらも参照のこと。
[wtf!!!!!!!!!!!!!!!!!!!!!!??????????????????](http://qiita.com/okuramasafumi/items/1e0415a10dc5d4a3ea90)
[Pryコンソールのプロンプトをカラフルかつ便利にする](http://qiita.com/okuramasafumi/items/900286cd4f07c1bbbb5d)

## irbとの比較
`irb`の代替として使われる・言及されることの多いgemで、実際そうなのですが、使ってみると用途がだいぶ違うことに気づきます。`pry`は高機能ながら起動時間が遅いのと、エディタやデバッガとの連携機能などもあるので、常に開きっぱなしにして都度何かを実行する、という運用になりやすいです。一方の`irb`は起動が爆速なので（JRuby除く…）、簡単な実験をしてすぐに終了するような使い方が多くなります。

## 機能
公式を訳しただけですが…

+ ソースコードブラウジング (`pry-doc`gemがあればCのコードも対象)
+ 状態ナビゲーション (`cd`, `ls`など)
+ Rubiniusのコードブラウジング
+ ドキュメンテーションブラウジング
+ ライブヘルプ
+ エディタでメソッドを編集 (`edit-method Class#method`)
+ シンタックスハイライト
+ コマンドライン統合 (`git`, `rake`, エディタの起動が可能)
+ Gist統合
+ ランタイムからの起動 (開発コンソールまたはデバッガとしての利用)
+ 特殊なオブジェクトのサポート (BasicObject instances, IClasses, ...)
+ 強力かつ柔軟なコマンドシステム
+ 履歴の表示・編集
+ IPythonやSmalltalkなどの高度なREPLにインスパイアされた高度なコマンド群

## 利点
とにかく異常に高機能なので、やりたいことはたいていできる。
`binding.pry`は必ずお世話になるし、`ls`なんかもうまく使えば強力なデバッグツールとなる。

## 欠点
できることが多すぎて何から覚えていいかわからない。

# まとめ
使わない理由がない。

## 参考リンク
https://github.com/rweng/pry-rails (Railsで使うならこちら)
DjangoとPostgreSQLの初期設定

DjangoとPostgreSQLの初期設定で困りそうなところを

技術メモとして残しておきます

・ もし、No module named psycopg2エラーが発生した場合には、psycopg2モジュールをインストールする必要があります。pipがインストールされている場合には、sudo pip install psycopg2でインストール出来ます。

・python manage.py syncdbは現在のDjangoのバージョンでは使用できないので、python manage.py migrateを使用する

・マイグレーションに成功した場合の画面

Operations to perform:
  Apply all migrations: admin, contenttypes, auth, sessions
Running migrations:
  Rendering model states... DONE
  Applying contenttypes.0001_initial... OK
  Applying auth.0001_initial... OK
  Applying admin.0001_initial... OK
  Applying admin.0002_logentry_remove_auto_add... OK
  Applying contenttypes.0002_remove_content_type_name... OK
  Applying auth.0002_alter_permission_name_max_length... OK
  Applying auth.0003_alter_user_email_max_length... OK
  Applying auth.0004_alter_user_username_opts... OK
  Applying auth.0005_alter_user_last_login_null... OK
  Applying auth.0006_require_contenttypes_0002... OK
  Applying auth.0007_alter_validators_add_error_messages... OK
  Applying sessions.0001_initial... OK
Realmまだよくわかってないけどこれだけ入れておかないといけないメソッド


そう、マイグレーションですね。
これがないとModelを変更した時に落ちます。

```swift

let config = Realm.Configuration(
     schemaVersion: 1,
     migrationBlock: { migration, oldSchemaVersion in
          // 最初のマイグレーションの場合、`oldSchemaVersion`は0です
           if (oldSchemaVersion < 1) {
         }
    })

```

schemeVersionに変更があるとマイグレーションしてくれるので、Modelをいじったらあげましょう。
ビルドバージョンから算出するようにするとクレバーな気がしたけどどうだろう？？
WRF / WPS > namelistの設定 > gridの指定 > e_we / e_sn / dx /dy

WRF(Weather Research and Forecasting Model)とその前処理であるWPS。

設定ファイルであるnamelist.wps, namelist.inputにおいて、どの部分を変更すればgridの大きさと解像度を変更できるかを調べた。


## e_we / e_sn / dx /dy

https://coawstmodel.sourcerepo.com/coawstmodel/data/training_23jul2012/presentations/monday/5_COAWST_Tutorial_WRF.pdf
のpage10に以下の説明がある。

> e_we, e_sn, e_vert:
> – Model grid dimensions (staggered) in X, Y and Z directions
> dx, dy: 
> – grid distances: in meters for ARW

e_weとe_snでgridのサイズ (例: 300 x 300など)を指定する。

各グリッドの分解能は dx, dyにてm単位で指定する。

## 例

http://www2.mmm.ucar.edu/wrf/OnLineTutorial/Basics/GEOGRID/geogrid_namelist.htm

上記のリンク先にそれぞれの設定値の例があり、e_weなどにマウスオーバーするとその設定に基づく計算グリッド範囲の例が表示される。

こちらにも同じような説明がある。
http://www2.mmm.ucar.edu/wrf/users/namelist_best_prac_wps.html


## さらに詳細な情報

さらに詳細な情報は以下に記載されているが、理解しやすい書き方ではない。

http://www2.mmm.ucar.edu/wrf/users/docs/user_guide_V3/users_guide_chap3.htm#_Description_of_the_1
paizaで問題のデータの読み方


paizaの問題の入力データを読み込む書き方がモヤモヤしていたがいい書き方があったのでメモっておく。

```input.txt
3
1 2 3
4 5 6 
7 8 9
```

```main.py
n = int(raw_input()) 

for i in range(n):
	a,b,c = map(int, raw_input().split())
	
	f(a,b,c)

def f(a,b,c):
	pass

```
Node-REDのhttp-inでBASIC認証(簡易版)

## 要件
知らないアクセスを簡易的にはじきたくてBASIC認証を簡易的に使いたい。Custom Node [node-red-contrib-httpauth](http://flows.nodered.org/node/node-red-contrib-httpauth) もあるけれど、簡易的に実施したい場合。

## Flow
![basicAuth.png](https://qiita-image-store.s3.amazonaws.com/0/25932/a23351f1-59ef-9cb0-5b4e-1492bc51b169.png)

<pre> [{"id":"ed9fe57c.324f5","type":"http in","z":"7a0185dd.0a030c","name":"","url":"/autht","method":"get","swaggerDoc":"","x":176.5,"y":143.5,"wires":[["73231d07.6fbe64"]]},{"id":"a19a9fce.199a6","type":"http response","z":"7a0185dd.0a030c","name":"","x":504.5,"y":143,"wires":[]},{"id":"73231d07.6fbe64","type":"function","z":"7a0185dd.0a030c","name":"","func":"var auth = msg.req.get('Authorization');\n\nif(auth === undefined) { // 認証情報なし\n    msg.statusCode = 401;\n    msg.headers = {'WWW-Authenticate':'Basic realm=\\\"SECRET AREA\\\"'};\n    msg.payload = \"not auth\";\n}\nelse if (auth.indexOf('Basic ')===0) { // BASIC認証\n    msg.base64 = auth.slice(6);\n    if(msg.base64 === 'dXNlcjpwYXNzd29yZDEyMw==') { //echo -n 'user:password123' | base64 -e \n        msg.statusCode = 200;\n        msg.payload = 'logged in';\n    }\n    else { // 認証情報合ってない\n        msg.statusCode = 401;\n        msg.headers = {'WWW-Authenticate':'Basic realm=\\\"SECRET AREA\\\"'};\n        msg.payload = \"not auth\";\n    }\n}\nelse { // 違う認証方法だった \n    msg.statusCode = 401;\n    msg.headers = {'WWW-Authenticate':'Basic realm=\\\"SECRET AREA\\\"'};\n    msg.payload = \"not auth\";\n}\nreturn msg;","outputs":1,"noerr":0,"x":334.5,"y":143.5,"wires":[["a19a9fce.199a6","cf34f627.b61478"]]},{"id":"cf34f627.b61478","type":"debug","z":"7a0185dd.0a030c","name":"","active":true,"console":"false","complete":"base64","x":435.666748046875,"y":90.55555725097656,"wires":[]}] </pre>

## Function Nodeのコード

```js:function
var auth = msg.req.get('Authorization');

if(auth === undefined) { // 認証情報なし
    msg.statusCode = 401;
    msg.headers = {'WWW-Authenticate':'Basic realm=\"SECRET AREA\"'};
    msg.payload = "not auth";
}
else if (auth.indexOf('Basic ')===0) { // BASIC認証
    msg.base64 = auth.slice(6);
    if(msg.base64 === 'dXNlcjpwYXNzd29yZDEyMw==') { //echo -n 'user:password123' | base64 -e 
        msg.statusCode = 200;
        msg.payload = 'logged in';
    }
    else { // 認証情報合ってない
        msg.statusCode = 401;
        msg.headers = {'WWW-Authenticate':'Basic realm=\"SECRET AREA\"'};
        msg.payload = "not auth";
    }
}
else { // 違う認証方法だった 
    msg.statusCode = 401;
    msg.headers = {'WWW-Authenticate':'Basic realm=\"SECRET AREA\"'};
    msg.payload = "not auth";
}
return msg;
```
【FileMaker】PC,iPadでレイアウトを統一する

なんのこっちゃ、、、という声が聞こえそうですが、割と現場というか修正する現場からの声があったりします。

# 前振り
PCとiPadのレイアウト、同じになりませんかね〜

という声が。

結論から言えば、

「できる」

んですけどね。
ただ、注意点として、PCとiPadで使えない関数とかあるので、その辺注意というところでしょうか。
あと、画面構成的にPCでてんこ盛り表示したい方には、同じレイアウト構成はお勧めできないです。
iPadでそんなてんこ盛りは誤タッチの恐れがありますから。

# なんで？
なぜこんな声が聞こえるかというと、PCとiPadで同じような画面レイアウトなのに、機能追加や修正がある場合に、両方のレイアウトを修正しなければならないからです。
他言語であれば、プラグインのように共通機能として切り出してあれば一機能だけ修正すればいいんですけど、画面ありきのFileMakerだと、プラグインのような開発はちょっと難しいですね。
大きく盛っても別ウィンドウにするとかでしょうか。。。（私の頭ではそれくらいしか。。。）

# こういう提案をしている
なので、PC,iPadなど複数媒体で運用する場合、できるかぎりiPadのレイアウトに統一するのはどうでしょうかね？と提案しています。
PC,iPadで役割分担が違う（操作する対象が違ったり盛り込む機能が違う）場合は、この提案はしていません。

# こんな感じで
まずはレイアウトを作成する際、画面サイズをiPadサイズに統一します。
そして、ファイルオープンの際に、PC,iPadで媒体チェックをし、PCの場合はメニューを出さないなどの処理を加えています。
![20170729open.png](https://qiita-image-store.s3.amazonaws.com/0/60538/22794454-37cb-09af-8a17-28c3a41e2ac4.png)

それから、PCでも、iPadやiPhoneで構築するボタンバーツールを活用して、PCでは物足りない感じのする画面サイズでも情報を提供できるようにしています。
![20170729menu.png](https://qiita-image-store.s3.amazonaws.com/0/60538/01bcd896-be9b-af51-7b56-1a4856775c85.png)
ちなみに、ボタンバーツールを活用することで、ボタンのレイアウトを考えなくてもいいし乱立しなくてもよくなるので、見た目も良くなります(^_^)v

PCでファイルを開くと、この↓ような感じです。
![20170729pc.png](https://qiita-image-store.s3.amazonaws.com/0/60538/7902b4fb-2aa4-94bf-7577-a9e8059a95c7.png)

iPadでファイルを開くと、この↓ような感じです。
![20170729ipad.png](https://qiita-image-store.s3.amazonaws.com/0/60538/10ac970a-4536-b208-8a44-f3aaa5cf8ad1.png)

どうでしょう？
見た目は同じというかレイアウトが同じなので、注意点を気にしながらですが、かなり修正の手間は少なくなると思います。
Apache Poiで大容量のExcelファイルを読み込みたいとき

# 普通にApache Poiを使うと

こんな感じのコードが基本になる。
[Javaでexcelを読み書きするサンプル(Apache POIの使い方まとめ)](http://web.plus-idea.net/2016/01/how_to_read_excel_java_apache_poi/)
しかし、これだと、大容量のExcelファイルを読み込もうとするとOutOfMemoryErrorを吐いて落ちてしまう。

# ではどうする？
そもそも大容量のExcelファイルをApachePoiで読むのが間違っているということにしてフォーマットを変えてもらう、のが一番だが、そうはいかないこともある。

Stack Overflowにも質問があり、回答が付いていた。
[java - How to load a large xlsx file with Apache POI?](http://stackoverflow.com/questions/11891851/how-to-load-a-large-xlsx-file-with-apache-poi)
[excel-streaming-reader](https://github.com/monitorjbl/excel-streaming-reader) というのがあるとのこと。

# サンプル
githubにサンプルコードが載っているので、そちらを読んで頂いた方が確実。


# 使ってみた感想
- 大容量のExcelファイルを読み込んでも落ちなくなったので有り難い。
- githubにも記載されているが、実装されていないメソッドを読み込むと、NotSupportedExceptionで落ちるので注意。
    - どのメソッドがサポートされているかどうか、は実装コードを読まないと分からない。
    - 実装されていないととっても困る、というものは無いはず。

# まとめ
そもそも、大容量のExcelファイルを読まないといけない、という前提が間違っている。
データ移行はともかく、通常運用では使わなくて済む方向にもっていくべし。

#おまけ
[Apache POIを使って、ちょっと大きなExcelを作りたいときはこちら](http://d.hatena.ne.jp/Kazuhira/20141011/1413019742)
WRF / WPS > Link > 設定ファイルの解説PDF

WRF(Weather Research and Forecasting Model)とその前処理であるWPS。

設定ファイルの各種項目の説明について、以下の資料が本家の資料よりも分かりやすい。
https://coawstmodel.sourcerepo.com/coawstmodel/data/training_23jul2012/presentations/monday/5_COAWST_Tutorial_WRF.pdf

入門時にはこちらを先に読んだ方がいいかもしれない。
設定ファイル場所(Unix)

#### php.ini
`/etc/php.ini`

#### vimrc
`~/.vimrc`

#### my.cnf
`/etc`

#### httpd.conf
`/etc/apache2`

#### httpd-vhosts.conf
`/etc/apache2/extra`

#### hosts
`/etc`

#### mysql.sock
`/var/lib/mysql/mysql.sock`
WindowsホストのDocker環境でTensorFlowと音声処理ライブラリPyAudioを使う

WindowsホストのDocker環境でTensorFlowを使っているが、音声処理をしたいと思ってPyAudioライブラリを導入しようとしたところつまづいたのでメモを走り書き

後で書き直すかも

環境
WindowsホストのDocker使用の仮想環境

要はUbuntuだったらできるだろうと思われる

目的
TensorFlowとPyAudioを同時に使いたい


まず、いつもはどのような手順で仮想環境を環境を立ち上げてるかと言うと

//////////////////////////////////////////////////////////
>-Docker Quickstart Terminalを立ち上げる(仮想マシン[default]が起動)

Oracle VM VirtualBox マネージャーで
[いつも使ってる仮想マシン名]を起動

次を実行
$ docker-machine ssh [いつも使ってる仮想マシン名]

boot2dockerで次を実行

$ docker run -v //c/Users/********/tensorflow:/root -it b.gcr.io/tensorflow/tensorflow:latest-devel

(上記設定により下記のディレクトリがwindowsとtensorflowで共有される
C:\Users\********\tensorflow)

これでpythonを、1行ずつ実行は
$ python

テキストファイルで実行は
$ python file名
//////////////////////////////////////////////////////////

pyaudioをインストールしたいが、

$ pip pyaudio --proxy=http://**************:8080

とやってもうまくインストールできなかった
portaudioが必要とか何とか色々あるが…

どうやらapt-get と言うやつを使うらしい

必要ならプロキシ設定をしておく
$ export http_proxy="http://your.proxy.address:8080/"

インストールできるライブラリのリストをとりにいく
$ apt-get update

リスト内にpyaudioがあるか検索
$ apt-cache search portaudio

pyaudioらしきもの(python-pyaudio)があったのでインストール
$apt-get install python-pyaudio

pip listで確認してみると
$pip list

ちゃんとPyAudio(0.2.7)があった！

しかしここで、コンテナを落してから上の仮想環境起動の
$ docker run -v //c/Users/********/tensorflow:/root -it b.gcr.io/tensorflow/tensorflow:latest-devel

をやると、PyAudioのインストールされていない新しいコンテナが立ち上がるだけ。試しに
$ pip list

をやるとPyAudio(0.2.7)がないはず

なので、さきほどと同じコンテナを立ち上げる

今まで作成したコンテナを確認する
$ docker ls -a

PyAudioをインストールしたコンテナを見つけ、コンテナ名を確認する。仮の名前がついている。

>docker@*****:~$ docker ps -a
CONTAINER ID        IMAGE                                         COMMAND
      CREATED             STATUS                         PORTS               NAM
ES
017422a67b2e        b.gcr.io/tensorflow/tensorflow:latest-devel   "/bin/bash"
      About an hour ago   Exited (0) About an hour ago                       stu
pefied_einstein
c2dffdeba366        b.gcr.io/tensorflow/tensorflow:latest-devel   "/bin/bash"
      About an hour ago   Exited (0) 12 seconds ago                          tco
ntainer
9b29177d149a        simage                                        "/bin/bash"
      About an hour ago   Exited (0) About an hour ago                       sco
ntainer

何分前にコンテナから抜けたかで探す。ここではstupefied_einsteinとかtcontainerとかscontainerが名前

名前をわかりやすい名前に変えておく

$ docker rename 旧名前 新しい名前

コンテナをstartで起動してattachで入る

$ docker start 新しい名前
$ docker attach 新しい名前

しっかりpyaudioがインストールされているか
dockerとwindowsでファイル共有できているか
など確認
$ pip list
ちゃんとPyAudioがある

$ touch test
ちゃんと共有したフォルダ（ここではC:\Users\********\tensorflow）にtestファイルができた

~~PyAudioはサウンドカードを使うみたいなので
VirtualBoxの設定からオーディオ、オーディオを有効化にチェックがいるかも、仮想マシンを落としてから設定しておく~~
音を鳴らすのは試行錯誤中
WRF / WPS > Link > namelist.wps / namelist.input > Best practices

WRF(Weather Research and Forecasting Model)とその前処理であるWPSで使う設定ファイル

- namelist.wps
- namelist.input

以下に設定ファイルの項目の説明とBest practicesがある。

http://www2.mmm.ucar.edu/wrf/users/namelist_best_prac_wps.html
http://www2.mmm.ucar.edu/wrf/users/namelist_best_prac_wrf.html

上記のページをサイトからたどろうとするとサイトのリンクがところどころ切れていて、Not Foundになる。

google検索で見つけた。
テキストサイズに依存したUIの作成

<font color="red">**※[ここ](http://docs.unity3d.com/ja/current/Manual/HOWTO-UIFitContentSize.html)に書かれている事をやっているだけです。**</font>




フォントサイズの異なる分母分子の値を2つのTextコンポーネントを用いて表示する。

<img width="326" alt="スクリーンショット 2016-07-29 15.43.16.png" src="https://qiita-image-store.s3.amazonaws.com/0/46707/4b383082-39d6-e2e2-7d0f-6f5755c8c073.png">

この状態で分母が99になると、

<img width="329" alt="スクリーンショット 2016-07-29 15.48.45.png" src="https://qiita-image-store.s3.amazonaws.com/0/46707/bc3e7982-c6b8-a40d-02ea-6f8741f68943.png">

以上のようにスペースができてしまいカッコ悪いので、分母部分の表示に合わせて分子の座標を調整する。
調整する方法は沢山あるが、uGUIの機能を使う。

1. 分母のTextオブジェクトにContentSizeFitterを付けて、パラメータをPreferredSizeにする。
2. 分子オブジェクトを分母オブジェクトの子にする。
3. 分子オブジェクトのアンカーを左にする、つまり親オブジェクトの左辺に依存して座標が変わるようにする。

1.
<img width="346" alt="スクリーンショット 2016-07-29 15.55.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/46707/ddf48edd-f25c-9f3d-4bdd-e58cc9eef1e3.png">

2.
<img width="135" alt="スクリーンショット 2016-07-29 15.58.11.png" src="https://qiita-image-store.s3.amazonaws.com/0/46707/62f1c56d-df07-82be-f370-d1b53745e685.png">

3.
<img width="305" alt="スクリーンショット 2016-07-29 16.01.53.png" src="https://qiita-image-store.s3.amazonaws.com/0/46707/e4e3e3ac-ced5-ff18-1794-7b4d24c9d7b8.png">

以上で分母の桁数を変えると、それに応じて分子が移動するようになる。


※実際に綺麗に表示するにはピボットや座標の微調整が必要になると思いますが、そこは省略しています。
WEBを支える技術まとめ


#WEBとは

ハイパーメディアにより構成された分散システムである


#RESTアーキテクチャスタイル
- クライアント/サーバ
 クライアントとサーバに分離して処理をすることで、クライアントをマルチプラットフォームにできる

- ステートレスサーバ
 サーバにアプリケーション状態を持たない
 それにより、サーバの実装を簡略化できる
 RESTから見るとCookieを使ったセッション管理は間違った運用
 必要最低限で使用するようにする

- キャッシュ
 一度取得したリソースをクライアントで使い回す
 サーバとクライアント間の通信を減らすことでネットワークの帯域や処理時間を縮小し、効率的に処理する

- 統一インターフェース
 URIで指定したリソースに対する操作を、統一した限定的なインタフェースで行う
 HTTPではGET、POSTなどの8個のメソッドだけに限定されている
 インタフェースを統一することでクライアントとサーバの実装の独立性が上がる

- 階層化システム
　システムをいくつかの階層に分離する

- コードオンデマンド
 プログラムコードをサーバからダウンロードし、クライアント側で実行する
　クライアントを後から拡張できる

 ULCODC$SS

 RESTを無理やり採用する必要はない
 より適したアーキテクチャスタイルを採用するのが賢明

#URI

クールなURI
 ***URIは変わらないのが理想***
 プログラム言語に依存した拡張子やパスを含めない
 メソッド名やセッションIDを含めない
 URIはリソースを表現する名詞にする

 少ない文字数や人にわかりやすい文字を使うことがクールなURI

 URIを変えたい時は古いURIから新しいURIにリダイレクトするようにする
 
 URIはクライアントにとって不透明
 
#HTTP

- HTTPとは
ハイパーテキストの転送用プロトコル
実際には、画像や音声、動画やプログラムファイルなどコンピュータで扱えるデータであればなんでも転送できる

- HTTPはステートレス性
サーバはクライアントの状態を覚えずに処理に必要な情報を毎回転送させる
サーバはクライアントのアプリケーション状態を覚える必要がない為、サーバ側のシステムは単純になる
但し、送信するデータ量が多くなったり、認証などのサーバに負荷がかかる処理を繰り返してしまう
通信エラーの場合、複数回同じ処理をしてしまうことがある

　ステートフルだと、サーバが増えると複数のサーバ間でアプリケーション状態を同期するのが大変
　セッション管理が可能

#HTTPメソッド
- GET
リソースの取得

- POST
 リソースの作成、追加
- PUT
 リソースの更新、作成
- DELETE
 リソースの削除
- HEAD
 リソースのヘッダの取得
- OPTION
 リソースがサポートしているメソッドの取得

リソースの作成はPOSTで行いURIもサーバ側で決定する

いざとなればPOSTでなんでもできる

#べき等性と安全

***べき等性とは***
同じ処理を何度繰り返しても結果が同じになること

***安全とは***
操作対象のリソースの状態を変化させないこと

|  | べき等 | 安全 |
|:-:|:-:|:-:|
|  GET | ◯  | ◯  |
|  POST |   |   |
|  PUT | ◯  |   |
|  DELETE | ◯  |   |
| HEAD|◯ | ◯|

#ハイパーメディアフォーマット

##HTML 
マークアップ言語
webの基本的な技術

##microformats
HTMLの中でさらに意味のあるデータを表現するための技術
プログラムから見てわかりやすくする

##Atom
拡張性のあるフィード

##JSON
様々なプログラム言語から扱いやすいデータ構造を記述できる
そのため、プログラム言語間でデータを受け渡すことができる

###クロスドメイン通信
AjaxのXMLHttpRequestは、セキュリティ上の制限からJavaScriptファイルを取得したのと同じサーバとしか通信ができない
不特定多数のドメインに属するサーバにアクセスすることを**クロスドメイン通信**と呼ぶ

###XMLHttpRequestではクロスドメイン通信ができない
HTMLの\<script>要素を用いると、複数のサイトからJavaScriptファイルが読み込める
```
<script src="http://hogehoge.jp/foo.js"></script>
```
みたいな

##JSONP
JSONPは\<script>要素を使いクロスドメイン問題を回避する
オリジナルのJSONをクライアントが指定したコールバック関数名でラップして、ドメインの異なるサーバからデータを取得する
(一度はまったことがあったので、この説明はありがたかった)

#WEBサービスの設計
人からもプログラムからもわかりやすい構造を心がける

#最後に
まだまだ理解があまりできていないところもあるので、何度か読んでいこうと思う
[Excel]文字をCode関数でコードに置き換えた場合の一覧


セルに入力されている文字種のチェックなどで使うことがある、文字種とコードの対比表です。
CODE関数で文字それぞれのコードを調べました。

例えばセルA1に入力された文字が半角数字かどうか判定したい場合

```
= IF(AND(CODE(A1)>=48,CODE(A1)<=57),TRUE,FALSE)
```

といった感じに利用します。

> ※CODE関数は最初の1文字に対して処理されるので、
　厳密にはこれだけではダメです。

## 対比表

| 種類 | 内容 | CODE範囲 |
| --- | --- | --- |
| 半角数字 | 0123456789 | 48-57 |
| 半角英字 | ABCDEFGHIJKLMNOPQRSTUVWXYZ | 65-90 |
| 半角英字 | abcdefghijklmnopqrstuvwxyz | 97-122 |
| 半角記号 | [\]^_` | 91-96 |
| 半角記号 | {\|}- | 123-128 |
| 半角記号 | !"#$%&'()*+,-./ | 33-47 |
| 半角カナ | ｡｢｣､･ｦｧｨｩｪｫｬｭｮｯｰｱｲｳｴｵｶｷｸｹｺｻｼｽｾｿﾀﾁﾂﾃﾄﾅﾆﾇﾈﾉﾊﾋﾌﾍﾎﾏﾐﾑﾒﾓﾔﾕﾖﾗﾘﾙﾚﾛﾜﾝﾞﾟ | 161-223 |
| 全角数字 | ０１２３４５６７８９ | 9007-9018 |
| 全角英字 | ａｂｃｄｅｆｇｈｉｊｋｌｍｎｏｐｑｒｓｔｕｖｗｘｙｚ | 9057-9082 |
| 全角英字 | ＡＢＣＤＥＦＧＨＩＪＫＬＭＮＯＰＱＲＳＴＵＶＷＸＹＺ | 9025-9050 |
| 全角記号 | ─│┌┐┘└├┬┤┴┼━┃┏┓┛┗┣┳┫┻╋┠┯┨┷┿┝┰┥┸╂ | 10273-10304 |
| 全角記号 | 、。，．・：；？！゛゜´｀¨＾￣＿ヽヾゝゞ〃仝々〆〇ー―‐／＼～∥｜…‥‘’“”（）〔〕［］｛｝〈〉《》「」『』【】＋－±×÷＝≠＜＞≦≧∞∴♂♀°′″℃￥＄￠￡％＃＆＊＠§☆★○●◎◇ | 8482-8574 |
| 全角カナ | ァアィイゥウェエォオカガキギクグケゲコゴサザシジスズセゼソゾタダチヂッツヅテデトドナニヌネノハバパヒビピフブプヘベペホボポマミムメモャヤュユョヨラリルレロヮワヰヱヲンヴヵヶ | 9505-9590 |
| 全角ひらがな | ぁあぃいぅうぇえぉおかがきぎくぐけげこごさざしじすずせぜそぞただちぢっつづてでとどなにぬねのはばぱひびぴふぶぷへべぺほぼぽまみむめもゃやゅゆょよらりるれろゎわゐゑをん | 9249-9331 |
| 半角スペース |  | 32 |
| 全角スペース |  | 8481 |
| 改行(ctrl+j) |  | 10 |
| タブ |  | 9 |

ちなみに、

- CODE関数で2バイト文字を指定して返されるコードはJISコードです。
- コードから文字を返す関数はCHAR関数です。


おかしな点や補足情報などありましたら、コメントいただけるとありがたいです！
一ヶ月、若手社員に送った記事（7月編）

# 今月も続けました

[一ヶ月、若手社員に送った記事（6月編）](http://qiita.com/kenji-yokoi/items/f3f78792e4b845fce810) の続きです。
今月もまるっと人質なままなので、「おつかれさまの挨拶代わりに記事を一つずつ送ってみる」を継続しました。
問題は7月一杯で戻される予定だったのに、8月まで延長されたこと。
ネタが続けれるような切れそうな・・・。

# 記事一覧

【ダム経営(松下幸之助氏が提唱する、資金に余裕のある経営)を目指す】経営コラム　Vol.2
http://www.kawasaka-tax.com/gallery/gallery-400-50365.html

アンチパターン・データベース編 - Strategic Choice
http://d.hatena.ne.jp/asakichy/20160615/1465941416

トランザクション分離レベルについて極力分かりやすく解説してみた[SQL]
http://gyouza-daisuki.hatenablog.com/entry/2013/11/19/150838

なぜ状態遷移表を使うと、品質の良い開発ができるのか 
http://monoist.atmarkit.co.jp/mn/articles/1205/23/news001.html

状態遷移表を使用した要求分析モデル
http://monoist.atmarkit.co.jp/mn/articles/1207/11/news001.html

状態遷移表を使用した設計モデル（拡張階層化状態遷移表）
http://monoist.atmarkit.co.jp/mn/articles/1209/24/news004.html

状態遷移表を使用したテスト手法【前編】
http://monoist.atmarkit.co.jp/mn/articles/1212/20/news002.html

状態遷移表を使用したテスト手法【後編】
http://monoist.atmarkit.co.jp/mn/articles/1301/31/news005.html

第6回　TCP/IP始めの一歩
http://www.atmarkit.co.jp/ait/articles/0210/17/news002.html

第14回　信頼性のある通信を実現するTCPプロトコル（その1）
http://www.atmarkit.co.jp/ait/spv/0312/25/news001_2.html

第15回　信頼性のある通信を実現するTCPプロトコル（2）
http://www.atmarkit.co.jp/ait/articles/0401/29/news080.html

なぜ、いま「セキュアコーディング」なのか？
http://www.atmarkit.co.jp/ait/articles/1210/24/news005.html

Cでポピュラーな脆弱性とバッファオーバーフロー（前編）
http://www.atmarkit.co.jp/ait/articles/1212/26/news006.html

Cでポピュラーな脆弱性とバッファオーバーフロー（後編）
http://www.atmarkit.co.jp/ait/articles/1302/18/news013.html

小手先の時間管理術では、生産性を高められない
http://www.itmedia.co.jp/bizid/articles/1404/02/news009.html

アイデアにつまったら、「オズボーンのチェックリスト」を試してみる
http://www.itmedia.co.jp/bizid/articles/1405/21/news022.html
http://ideakey.jp/osborn/

アイデアが湧き出す「３１のSCAMPER質問リスト」を作ってみました。
http://ideakey.jp/scamper/

自律的に現場を改善できるチームをつくるための「ふりかえり」の進め方 ～ KPTと進め方のノウハウ
http://kuranuki.sonicgarden.jp/2013/05/kpt.html
ホワイトボード用のペンが、いつもインク切れな時の対処方法

# 昨日も切れてたよね :angry: 

ホワイトボードのペンが、インク切れしています。
しかも、たいていは昨日も切れていました。

問題は、**「切れたペンを またトレイに戻す」**からです。

# 解決方法

ホワイトボードに透明の袋を吊り下げて、切れたペンを入れておきましょう。補充が必要な事が分かるようにします。
あと、すり切れかかっているのに、補充せずにいつまでも使い続けないこと。

![whiteboard.png](https://qiita-image-store.s3.amazonaws.com/0/114529/7b466754-4141-c6a0-3543-77b1197c1d60.png)
EC2 CentOSで日付表示 (dateコマンドなど)を日本時間で表示する

いつも「あれー？どうだったっけ」となるのでもう書き出すことに。
確認環境
AWS EC2 CentOS 7

```
sudo cp /usr/share/zoneinfo/Japan /etc/localtime

date
2016年  7月 29日 金曜日 15:39:14 JST
```

たったこれだけなんですが、記憶に残らない・・・
スキルは四位一体で磨く

# スキルアップをどう考えていますか？

スキルアップしようと考えた時、頭の中でどういう図を思い描いていますでしょうか？
ある専門知識に特化したプロフェッショナルを目指していますか？

![scm1.png](https://qiita-image-store.s3.amazonaws.com/0/114529/60a24840-cfd2-3be6-9002-05e58536ee5c.png)

# ミクロ視点よりマクロ視点の方が重宝されます

ある部分に特化したスーパーエンジニアは確かに凄いのですが、下の図のような四位一体でスキルアップを目指して欲しいと思います。

* もちろん専門的な固有技術
* プロジェクト・マネジメントやセルフ・マネジメントといった管理技術
* 全体を俯瞰するためのサプライチェーン
* プロフェッショナルな振る舞いをするための習慣や原則

![scm2.png](https://qiita-image-store.s3.amazonaws.com/0/114529/fb4c95ce-69bd-e38b-3d90-41866e14dde4.png)

# なぜ「サプライチェーン」なのか。

開発現場では全体を俯瞰できるマクロ視点を養っておいた方が良いです。
いろいろな案件を検討するにも、クレーム対応するにも、改善活動するにも。
では、マクロな視点ってどうやって養えば良いのでしょう。
個人的には「サプライチェーン・マネジメント」はありかと思います。

サプライチェーン・マネジメントは、モノを売るための単純な考えではありません。
スループットを高めるために常に全体最適することが目的です。
ソフトウェア開発に当てはめると、いつも根本問題に目を向けようとしたり、細かい問題なんて気にしなくなります。

「ザ・ゴール」を読んでみたり、TOC思考プロセス[^1]に取り組んでみてください。

---

[^1]: [TOC思考プロセス](http://www.goal-consulting.com/solution/t-process.html)
hamlのcoffeeフィルタがおっそい


Railsで作っているアプリの本番サーバのRailsログを読んでいた時に、大した処理もしていなさそうなのにレンダリングに200msもかかっているパーシャルがあった。

## 結論

HAMLには[filter](http://haml.info/docs/yardoc/file.REFERENCE.html#filters)という機能があって、直接CoffeeScript、JavaScirpt、他にも色々な言語を直接HAML内に書くことができる。
結論を言ってしまうと、そのレンダリングに時間のかかるパーシャルの中で使われていたCoffeeScriptのフィルタが怪しいなぁと思い、そのCoffeScriptのフィルタをJavaScriptのフィルタに変更したところ、本来の速度になったという話。

## 測定する

新しくRailsアプリを作って測定してみた。コードはgithubにプッシュした次のもの。
https://github.com/ttakuru88/filter-bench

単純にviewが次のようになっている２つのページを用意した。

```coffee.html.haml
%h1 :coffee

:coffee
  console.log('hi');
```

```javascript.html.haml
%h1 :javascript

:javascript
  console.log('hi');
```

この２つのページにそれぞれを20回ほどアクセスして平均を取ってみると次のようになった。

| 回数 | /coffee| /javascript |
| --- | --- | --- |
| 1 | 155.8 | 2.1 |
| 2 | 150.5 | 1.4 |
| 3 | 179.1 | 2.2 |
| 4 | 161 | 1.7 |
| 5 | 160.1 | 1.1 |
| 6 | 156.4 | 2.9 |
| 7 | 165.8 | 1.5 |
| 8 | 166.5 | 1.2 |
| 9 | 167.7 | 3.8 |
| 10 | 175.5 | 2 |
| 11 | 159.5 | 0.9 |
| 12 | 165.6 | 1.4 |
| 13 | 169.6 | 1.2 |
| 14 | 159.5 | 2.1 |
| 15 | 165.7 | 1.2 |
| 16 | 168.3 | 1.5 |
| 17 | 168.1 | 1.6 |
| 18 | 174.5 | 1.5 |
| 19 | 155.3 | 1.2 |
| 20 | 165.6 | 1.2 |
| <strong>平均</strong> | <strong>164.505</strong> | <strong>1.685</strong> |

coffeeフィルタを使うだけで100倍近く時間かかってる :scream: 

というわけで、CoffeeScriptはあまり使わなくなってくるようだし、こんなフィルタは使わないようにしたい。
PostGISをpostgresql9.4に追加

##概要
[PostGISとは](http://lets.postgresql.jp/documents/tutorial/PostGIS/1/
)

postgresql9.4
CentOS6.8

##必要な物をインストール
###EPELインストール
```
$ sudo yum install epel-release
```

###projインストール
```
$ sudo yum install -y proj proj-devel proj-epsg
```
###gdalインストール
たくさん入る

```
$ sudo yum --enablerepo=epel install gdal
```

###postGISをインストール
```
$ sudo yum --enablerepo=epel install postgis2_94.x86_64
```

##確認
postgresqlから使用できるか確認

```
$ sudo su - postgres
-bash-4.1$ createdb test
-bash-4.1$ psql -d test -c "CREATE EXTENSION postgis;"
CREATE EXTENSION
-bash-4.1$ psql -d test -c "CREATE EXTENSION postgis_topology;"
CREATE EXTENSION
-bash-4.1$ psql -d test -c "\dx;"
                                         List of installed extensions
       Name       | Version |   Schema   |                             Description

------------------+---------+------------+-----------------------------------------------------------
----------
 plpgsql          | 1.0     | pg_catalog | PL/pgSQL procedural language
 postgis          | 2.1.8   | public     | PostGIS geometry, geography, and raster spatial types and
functions
 postgis_topology | 2.1.8   | topology   | PostGIS topology spatial types and functions
(3 rows)
```

バージョンを確認

```
gis_db=# select * from postgis_version();
            postgis_version
---------------------------------------
 2.1 USE_GEOS=1 USE_PROJ=1 USE_STATS=1
(1 行)
```

##参考
[CentOSにPostGISをyumでインストール（CentOS7.2, PostgreSQL9.5, PostGIS2.2）](http://qiita.com/SOJO/items/216b6897104354a0c3fb)
[PostGISをインストール[PostgreSQL9.2 – Cent6.4]](https://jpusergis.wordpress.com/2013/09/02/postgis%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%ABpostgresql9-2-cent6-4/)
Carbonで月日を変える時は、setDate()を使う

## やりたいこと

* Carbon で「2016-07-31」を指定
* この日付から同じ年の「4月1日」を取得したい

## 発生した問題

下記のように、`month()`と`day()`で、4月1日を指定すると、なぜか`2016-05-01`となる。

```php
<?php
namespace Acme;

use Carbon\Carbon;

require_once __DIR__ . '/vendor/autoload.php';

$date = Carbon::createFromDate(2016, 7, 31);
$date->month(4);
$date->day(1);

echo $date->format('Y-m-d'), PHP_EOL;
// 2016-05-01
```

これは、`month(4)`を実行した時点で、`2016-04-31`となってしまうため、これが`2016-05-01`に変換されてしまう。（これは、基底クラスの DateTime の挙動）

ここに、`day(1)`を実行しても日は変わらないので、結果として、`2016-05-01`となる。

## 対応1

`month()`を実行した時点で、存在しない日となるのが原因なので、`day()`を先に実行すれば、動作としては正常になります。

```php
<?php
namespace Acme;

use Carbon\Carbon;

require_once __DIR__ . '/vendor/autoload.php';

$date = Carbon::createFromDate(2016, 7, 31);
// 日を先に変えておけば、挙動としては正しい
$date->day(1);
$date->month(4);

echo $date->format('Y-m-d'), PHP_EOL;
// 2016-04-01
```


## 対応2

`setDate()`で、アトミックに月と日を指定すれば、ok。

```php
<?php
namespace Acme;

use Carbon\Carbon;

require_once __DIR__ . '/vendor/autoload.php';

$date = Carbon::createFromDate(2016, 7, 31);
$date->setDate($date->year, 4, 1);

echo $date->format('Y-m-d'), PHP_EOL;
// 2016-04-01
```

## どちらで対応するか

どちらの対応でも動作しますが、対応1は、実行順を意識しておく必要があるのが難点です。「4月1日にする」という仕様だと、直感的には`month()`から実行したくなるのに、その反対の実装が必要となります。

その点、対応2の場合、単に`setDate()`を呼ぶだけなので、特段意識する必要はありません。

特別な理由が無い限りは、素直に対応2で実装するのが良いでしょう。
SlideShareに日本語のファイルをアップロード


# SlideShareに日本語のファイルをアップロードする手順

普段良くslideshareを使うのですが、日本語を含むファイルをアップロードするとおかしくなることが多いので対応方法について調べたことの覚書です。

keynoteファイルはpdfに変換し、以下のコマンドを実行することで綺麗にアップロードできます。

```
$ LANG=C LC_ALL=C sed -i '' s'|/Registry (Adobe) /Ordering (Japan1) /Supplement [0-9]|/Registry(Adobe) /Ordering(Identity) /Supplement 0|g' /path/to/pdf
```
EC-CUBEでAjax

EC-CUBE (v2.13.5)
PHP (v5.6.10)

サンプルとして
セレクトボックス変更で複数のセレクトボックスの選択肢をかえる場合

Smartyはよく分からんので
分かればもっと綺麗になるやもしれんね

```html:sample.tpl
<script type="text/javascript">
$(function($) {
	$('select[name=A]').change(function() {
	    $.ajax({
	        type: "POST",
	        url:  "/ajax/index.php",
	        data: {value:$(this).val()},
	        dataType: "json",
	        success: function(r) {
	            //console.log(r);
				$.each(r, function(k, v) {
					var $select = $("select[name="+k+"]");
					$select.text("");
					$.each(v, function(k2, v2) {
						$select.append("<option value=\""+v2['id']+"\">"+v2['name']+"</option>");
					})
	            })
	        },
	        error: function(){
	        }
	    });
	});
});
</script>

<select name="A">
<option value="1">A1<option>
<option value="2">A2<option>
<option value="3">A3<option>
</select>


<select name="B">
<option value="">-<option>
</select>

<select name="C">
<option value="">-<option>
</select>
```

```php:/html/ajax/index.php
<?php
require_once '../require.php';
require_once CLASS_REALDIR . 'pages/ajax/LC_Page_Ajax.php';
$objPage = new LC_Page_Ajax();
$objPage->init();
$objPage->process();
```

```php:/data/class/pages/ajax/LC_Page_Ajax.php
<?php
class LC_Page_Ajax {

	public function init() {}

	public function process() {
		$this->action();
	}

	public function action() {
		$data = self::sample();
		@header('Content-Type: application/json; charset=utf-8');
		echo json_encode($data);
		return;
	}

	public function sample() {
		$value = $_POST['value'];
		$relations = ['B', 'C'];

		$query = new SC_Query();
		foreach ($relations as $r) {
			$cols = "id, name";
			$from = "**table**";
			$where = "**where**";
			$data[$r] = $query->select($cols, $from, $where);
		}
		return $data;
	}

}
```

セキュリティ云々は各々追記してください。
MacでF7みたいにカタカナに一発で変換する方法（半角英数も）

Windowsのときは文字入力の時にカタカナにしたいときはF7で一発で変換できましたね。
しかしMacではF7を押してもできません。
なんだMacはできないのか。と思っている方、Macでもとっても簡単にできます

#やり方
[ **control　＋　k** ]

これだけです。
commandではないので気をつけてください。
また、KはカタカナのKと覚えると忘れにくいです！

#変換まとめ
|変換|キー|
|:-:|:-:|
|ひらがな|ctrl + j|
|カタカナ|ctrl + k|
|全角英数|ctrl + l|
|半角英数|ctrl + ;|

実は全てホームポジションから打てるのもにくいですね。

#追記：他のやり方（こっちの方が簡単かも）
[ **fn + F7**]
でもできます。
また、システム環境設定で
<img width="668" alt="キーボード.png" src="https://qiita-image-store.s3.amazonaws.com/0/126861/fa01e2e8-a44f-261a-aa3c-36c462d22772.png">
チェックを入れれば直接F7で変換できます。
xampp + ssl + vhosts + windows オレオレ証明書のインストール

【備忘録】
****************手順****************
①オレオレ証明書を作成する
②apacheにインストールする
③vhostsの設定をする
	A：httpd-vhosts.conf
	B：httpd-ssl.conf
	C：hosts

****************詳細****************
①オレオレ証明書を作成する
	参考：http://d.hatena.ne.jp/ozuma/20130511/1368284304

	秘密鍵（Private Key）作成
	$ openssl genrsa 2048 > oreore_server.key
		内容確認：$ openssl rsa -text < oreore_server.key

	証明書署名要求（CSR）作成
	$ openssl req -new -key oreore_server.key > oreore_server.csr
		※以下は初期値のままでも構わない
		Country Name		：国(JP)
		State or Province Name	：都道府県
		Locality Name		：市区町村
		Organization Name	：企業名
		Organization Unit Name	：所属
		Common Name		：取得したいドメイン名※1（共通）
		Email Address		：管理者メールアドレス
		A challenge password	：証明書を破棄する際に必要になるパスワードの設定
		An optional company name：別の組織名
		内容確認：$ openssl req -text < oreore_server.csr
	
	サーバー証明書作成
	$ openssl x509 -req -days 3650 -signkey oreore_server.key < oreore_server.csr >oreore_server.crt
		-days 3650	有効期限3650日
		内容確認：$ openssl x509 -text < oreore_server.crt

②apacheにインストール
	「xampp/apache/conf/ssl.crt」に「oreore_server.crt」をコピー
	「xampp/apache/conf/ssl.key」に「oreore_server.key」をコピー

③vhostsの設定
	A：httpd-vhosts.confの編集
		以下の行を追加する
		>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		<VirtualHost *:80>
			ServerName test.com.localhost	←ドメイン名※1（共通）
			DocumentRoot C:\xampp\htdocs\test.com\html	←ドキュメントルートを指定※2（共通）
		</VirtualHost>
		<Directory "C:\xampp\htdocs\test.com\html">	←ドキュメントルート※2（共通）
			order deny,allow
			allow from ALL
			Require all granted
		</Directory>
		<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

	B：httpd-ssl.confの編集
		以下のように編集する
		>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		#<VirtualHost _default_:443>
		NameVirtualHost *:443
		<VirtualHost *:443>

		ServerName test.com.localhost	←ドメイン名※1（共通）
		#ServerName www.example.com:443

		DocumentRoot "C:\xampp\htdocs\test.com\html"	←ドキュメントルート※2（共通）
		#DocumentRoot "C:/xampp/htdocs"

		SSLCertificateFile "conf/ssl.crt/oreore_server.crt"
		#SSLCertificateFile "conf/ssl.crt/server.crt"

		SSLCertificateKeyFile "conf/ssl.key/oreore_server.key"
		#SSLCertificateKeyFile "conf/ssl.key/server.key"
		<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<

	C：hostsファイルの編集
		C:\Windows\System32\drivers\etc\hostsをメモ帳などで開いて追記
		>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
		127.0.0.1	test.com.localhost
		<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
	
	xampp-control.exeでapacheを再起動
	証明書のインストールが確認されればOK（信頼はされていない）
GitHub実践入門


GitHubによるソースコード管理の方法を解説した入門書です。
GitHubの利用はGitが前提になっているのですが、本書はGitについても必要最低限の機能は解説して有るので、本書だけで、Gitの使い方とGitHubの使い方の両方の基本が修得できます。関連するサービスやGistについても解説して有るので、とりあえず本書を見ながらGitHubでソース管理をなんとかできるようには慣れます。Gitの入門、解説書もいくつもありますが、本書があればGitHubを使ったバージョン管理をとりあえずスタートできるでしょう。
ただ、GitHubをサポートするクライアントとしてGitHub for Mac, GitHub for Windows とSourceTreeが紹介されていますが、できればこちらのクライアントの使い方にもう少しページを割いて欲しいと思いました。
さらに、できればMacの開発環境XCodeのようにGitに対応した環境での使い方も解説してあるとうれしいところです。
実際には、単一ファイルのバージョン管理をGitHubで行うことはほとんどなく、複数のファイルをまとめたプロジェクト（フォルダ）単位でのバージョン管理が通常なので、プロジェクトをまとめて管理するというところまでしっかり解説してあるととても有用な入門書になったと想います。

![IMG_0420.jpg](https://qiita-image-store.s3.amazonaws.com/0/60473/d95ae8df-d09a-4e83-afa7-2252338983c1.jpeg "IMG_0420.jpg")
シェルスクリプトで変数のインクリメント

ループのたびに1加算する方法のメモ
いくつも書き方があって面白い

`expr`を使う例
一番一般的なのかな？

```bash:sample1.sh
#!/bin/bash
count=0
while true
do
  echo $count
  count=`expr $count + 1`
  if [ $count -eq 10 ]; then
    exit 0
  fi
done
```

`bc`を使う例
個人的には`expr`より`bc`のほうが複雑なことができるので好き

```bash:sample2.sh
#!/bin/bash
count=0
while true
do
  echo $count
  count=`echo "$count+1" | bc`
  if [ $count -eq 10 ]; then
    exit 0
  fi
done
```

括弧()を使う例
shでは使えないらしいです(未検証)。

```bash:sample3.sh
#!/bin/bash
count=0
while true
do
  echo $count
  count=$((count++))
  if [ $count -eq 10 ]; then
    exit 0
  fi
done
```

[]を使う例
こちらもshでは使えないらしいです。未検証

```bash:sample4.sh
#!/bin/bash
count=0
while true
do
  echo $[count++]
  if [ $count -eq 10 ]; then
    exit 0
  fi
done
```

実行結果

```実行結果
$ ./sample1.sh
0
1
2
3
4
5
6
7
8
9
```
Elastic Beanstalkでnginx_statusを設定

# What
SolutionStack: `64bit Amazon Linux 2016.03 v2.1.3 running Ruby 2.3 (Puma)`の場合

# Where
nginx用の設定はファイルは`/etc/nginx/conf.d/webapp_healthd.conf`だけど、こいつはsymlinkなので、実体は`/opt/elasticbeanstalk/support/conf/webapp_healthd.conf `

# How

`.ebextensions`を使う

```yaml:.ebextensions/nginx.config
commands:
  01_nginx_status:
    command: |
      sed -i -e ':loop; N; $!b loop; ;s/r healthd;\n\n  location \/ {/r healthd;\n\n  location  \/nginx_status {\n    stub_status on;\n    access_log off;\n    allow 127.0.0.1;\n    deny all;\n  }\n\n  location \/ {/g' /opt/elasticbeanstalk/support/conf/webapp_healthd.conf

```

これが

```nginx:/opt/elasticbeanstalk/support/conf/webapp_healthd.conf 
  access_log  /var/log/nginx/access.log  main;
  access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd;

  location / {
    proxy_pass http://my_app; # match the name of upstream directive which is defined above
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }

```

こうなる

```nginx:/opt/elasticbeanstalk/support/conf/webapp_healthd.conf 
  access_log  /var/log/nginx/access.log  main;
  access_log /var/log/nginx/healthd/application.log.$year-$month-$day-$hour healthd;

  location  /nginx_status 
    stub_status on;
    access_log off;
    allow 127.0.0.1;
    deny all;
  }

  location / {
    proxy_pass http://my_app; # match the name of upstream directive which is defined above
    proxy_set_header Host $host;
    proxy_set_header X-Forwarded-For $proxy_add_x_forwarded_for;
  }
```

ある程度冪等性を考慮してるので、毎回実行されても問題ない。
JSONをブラウザで見やすくする

# やりたいこと
APIなどで取れる、JSONをブラウザで見やすくしたい

## CHROMEのエクステンションを使おう

chromeの拡張機能ことエクステンションにあるJSONVIEWをインスコ

・[JSONview](https://chrome.google.com/webstore/detail/jsonview/chklaanhfefbnpoihckbnefhakgolnmc)

## JSONview使い方

chromeにインストするだけ。それ以外の設定は不要。
JSONファイルを開くとそれっぽく成形して表示してくれます。


## 例

facebookのgraphAPIに愚直に投げた結果を使って説明。
( https://graph.facebook.com/?id=http://www.yahoo.co.jp )


```json
{ id: "http://www.yahoo.co.jp", shares: 312158, comments: 33 }
```

↓

```json
{
  id: "http://www.yahoo.co.jp",
  shares: 312158,
  comments: 33
}
```

ね。見やすい。
TeXLive2016～で使える全エンジン共用プリアンブル

# まえがき
最近の日本語TeXエンジンは、従来pLaTeXだけでしたが、現在はupLaTX、XeLaTeX、LuaLaTeXという機種依存文字・Unicodeも扱える新しい物が登場しています。そのため、エンジン同士の比較を行ったり、乗り換えたりするために、比較的文書の変更が最小限で済むようなプリアンブルの書き方が求められています。そのため、その要求に応じられる、比較的新しい日本語文書クラスBXjsclsを使用して、全エンジンで1行の変更もせずに使いまわせる基本的なプリアンブルを作りました。

#プリアンブル

```latex
\documentclass[autodetect-engine,dvi=dvipdfmx,ja=standard]{bxjsarticle}

\usepackage{ifxetex,ifluatex}
\ifxetex
\usepackage{xltxtra}
\usepackage{unicode-math}
\setmainfont[Mapping=tex-text]{TeX Gyre Termes}
\setsansfont[Mapping=tex-text]{TeX Gyre Heros}
\setmonofont[Mapping=tex]{Inconsolatazi4}
\setjamonofont[Mapping=tex]{IPAexGothic}
% \setmathfont[Mapping=tex-math]{XITS Math}
\else\ifluatex
\usepackage{unicode-math}
\setmainfont[Ligatures=TeX]{TeXGyreTermes}
\setsansfont[Ligatures=TeX]{TeXGyreHeros}
\setmonofont{Inconsolatazi4}
% \setmathfont{XITSMath}
\else
\usepackage[T1]{fontenc}
\usepackage{tgtermes}
\usepackage{tgheros}
\usepackage{inconsolata}
% \usepackage{newtxmath}
\newcommand{\symbf}[1]{\mbox{\boldmath $#1$}}
\fi\fi
```
# 設定内容
DVIエンジン: dvipdfmx((u)pLaTeXのみ)
本文: Times (TeX Gyre Termes)
見出し: Helvetica (TeX Gyre Heros)
プログラム: Inconsolata
数式(コメント解除時): Times系(XITS Math / NewTX)
ギリシャ文字の太字に「`\symbf`」で対応((u)pLaTeXでもOK)

# 画像挿入について
これの後ろに

```latex
\usepackage{graphicx}
```

を挿入します。`dvipdfmx`オプションは不要です。他のDVIエンジンに依存するパッケージも同様です。
オブジェクトの参照

```php
<?php
　$a = new stdClass(); //1.オブジェクトIDへの参照
  $b = $a; //2. 1.と同じオブジェクトIDへの参照
  $c = & $a; //3.オブジェクトIDを持ったオブジェクトへの参照
```
Docker初心者による、初心者のためのDocker入門 #4


# DockerでapacheとMemcachedを起動してPHP5.4から接続してみる

はい。前回からPHPのバージョンが下がっただけです。
ですがこういった**いまさらバージョンあげらんねーーよ、なシステムのお守り**をせねばならない立場の方も多いのではないでしょうか。
Dockerを使えばレガシーなミドルウェアをコンテナに封じ込めつつ、ホスト側は地道にアップデートし守りを固めることも可能です。というかそういったしがらみを抱えたシステムのセキュリティ向上のための唯一解じゃないかと思っています。現実的に考えて。



## Compose
内容は前回と変わりません。apache-phpとmemcachedコンテナを立ち上げます。


### docker-compose
まずはCompseの設定

```docker-compose.yml
apache-php:
    build: ./apache-php
    ports:
        - "80:80"
    links:
        - memcached

memcached:
    image: memcached:1.4
```


### ディレクトリ構成
これも前回と変わりません。

```
project_dir
+- docker-compose.yml
+-apache-php
    +-Dockerfile
    +-index.php
```


### php5.4用のDockerfile
ここが違います。peclでインストールできるので、はっきりいってphp7より楽です。 枯れたものの強みですね。

```sh:apache-php/Dockerfile
FROM php:5.4-apache
ENV DEBIAN_FRONTEND noninteractive
RUN apt-get update && apt-get install -y libmemcached-dev zlib1g-dev \
    && pecl install memcached \
    && docker-php-ext-enable memcached
```


検証用のindex.phpも変わらず

```index.php
<?php
$m = new Memcached();
$m->addServer('memcached', 11211);

$m->set('int', 99);
$m->set('string', 'a simple string');
$m->set('array', array(11, 12));
/* expire 'object' key in 5 minutes */
$m->set('object', new stdclass, time() + 300);


var_dump($m->get('int'));
echo "<br>";
var_dump($m->get('string'));
echo "<br>";
var_dump($m->get('array'));
echo "<br>";
var_dump($m->get('object'));
echo "<br>";
?>
```

### 実行

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


### ブラウザでアクセス
http://localhost/

<img width="329" alt="Screen Shot 2016-07-22 at 17.02.46.png" src="https://qiita-image-store.s3.amazonaws.com/0/74328/832ecaef-30a9-efb5-00d6-98af8ea53f66.png">



**OK!**


### 後始末

```sh
docker-compose stop     # 全てのコンテナ停止
docker-compose rm       # 全てのコンテナ削除
```

phpのバージョンを変えるのも楽々。
Dockerいいですね〜。
WRF > NCL > ベクトル図を描画してみた

WRF(Weather Research and Forecasting Model)で使うことになるNCAR Command Language (NCL)。

http://qiita.com/7of9/items/825eec06a039bc016a5b
にて疑問に思ったベクトル図を描画してみた。

http://www.ncl.ucar.edu/Document/Functions/WRF_arw/wrf_vector.shtml
にExampleがあったので試した。

Exampleをそのまま実行してもエラーとなった。

以下が必要だった。

- WRFを実行して、wrfout_d01_2000-01-24_12:00:00を作成する
- 上記のファイルをwrfout_d01_2000-01-24_12:00:00.ncとしてシンボリックリンクを張る
- Exampleのnclファイルにwrf_map_overlays()を追加

nclファイルは以下となった。

```wrf_wps_vector.ncl
load "$NCARG_ROOT/lib/ncarg/nclscripts/csm/gsn_code.ncl"
load "$NCARG_ROOT/lib/ncarg/nclscripts/wrf/WRFUserARW.ncl"

begin
  a = addfile("wrfout_d01_2000-01-24_12:00:00.nc","r")

  wks = gsn_open_wks("x11","test")

  u10 = wrf_user_getvar(a,"U10",0)   ; U component of the wind at 10m
  v10 = wrf_user_getvar(a,"V10",0)   ; V component of the wind at 10m

  res = True
  res@gsnDraw  = True    ; Forces the plot to be drawn
  res@gsnFrame = True    ; Frame advance
  vector = wrf_vector(a,wks,u10,v10,res)

  pltres = True
  mpres = True
  plot = wrf_map_overlays(a, wks, (/vector/),pltres, mpres);

end
```

```
$ ncl wrf_wps_vector.ncl
```
にて以下の図が出てきた。

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/a4b021bc-2ca3-ef79-6a70-514b12c17b9b.png)

描画しているのはWRFの結果のU10とV10成分からなるベクトル図のようだ。

ベクトルとcontourの重ね合わせ例は以下にも見つかった。
http://www2.mmm.ucar.edu/wrf/OnLineTutorial/Graphics/NCL/Examples/BASIC_SFC/wrf_Surface1.htm

http://www2.mmm.ucar.edu/wrf/OnLineTutorial/Graphics/NCL/NCL_examples.htm
のサンプルを見るのが使い方の理解には近道になりそうだ。
WRF > NCL > (/contour/) の意味 > 変数contourという要素数1のArrayの指定

WRF(Weather Research and Forecasting Model)で使うことになるNCAR Command Language (NCL)。

http://www2.mmm.ucar.edu/wrf/OnLineTutorial/Graphics/NCL/Examples/BASIC/basic_plot_setup.htm
の4つ目のサンプルではplotとmapを重ねて表示している。

そのNCLファイルの中で以下の記載がある。

```
plot = wrf_map_overlays(a,wks,(/contour/),pltres,mpres)  ; Plot the data over a map background
```

`(/contour/)`という記載が独特で、~~この情報は今のところ見つかっていない。~~

[wrf_map_overlays](http://www.ncl.ucar.edu/Document/Functions/WRF_arw/wrf_map_overlays.shtml)にも使用例は記載されているが、意味については記載なし。

以下の記載を見ると`(/vector/)`という使い方もあるのだろうか、と思い`(/vector/)`と指定してもエラーとなった。

> plots
Plots to overlay over map background, possibly created by calls to wrf_contour and/or wrf_vector.


こういう事項は検索が難しいので、どこかのページで偶然見つけるしかなさそう。

## Array表記?

http://www.ncl.ucar.edu/Document/Language/array_manual.shtml

> The NCL syntax (/.../) is used to manually create an array by specifying the array's values:
    aInt = (/1,2,3/)
    aStr= (/"a","b","c"/)

要素数1のArrayなのだろうか? 

該当のコードで

```
  contour = wrf_contour(a,wks,ter,res)

  pltres = True                              ; Set plot options
  mpres = True                               ; Set map options
  plot = wrf_map_overlays(a,wks,(/contour/),pltres,mpres)  ; Plot the data over a map background
```

という記載と

>  plots
Plots to overlay over map background, possibly created by calls to wrf_contour and/or wrf_vector.

という記載から理解したのは、contourというのは変数名で、plotsは[wrf_map_overlays](http://www.ncl.ucar.edu/Document/Functions/WRF_arw/wrf_map_overlays.shtml)に`plots   [*] : graphic, `という記載があり、この[*]はArrayを指定するようだ。

plots[*]に要素数1のArray `(/ contour /)'を指定している、ということのようだ。
スタイルガイドジェネレータまとめ

# StyleGuide比較
## 追記
未だにたまにストックされるので...

今はStorybook + addon-docs でmdxで作ってます。
多分、HTML向けのStorybookで同程度に簡単にメンテできるのではなかろうか。
（同一ファイルにするのは無理ですが。。。

## マークダウン 記法
```css
 /*doc
 ---
 title: Alert
 name: alert
 category: basics
 ---
 　```html_example
     <div class='alert'>Hello</div>
 　``` 
 */
.alert{
  ...
}
```
categoryがindexになる。 parentも指定できて、grouping可能

### [Hologram](http://trulia.github.io/hologram/)
![](http://trulia.github.io/hologram/images/screenshot-buttons.png)


| 環境 | メタ言語 |
|:-:|:-:|
| Ruby| Sass/Scss/Less/PostCSS |

### [aigis](https://pxgrid.github.io/aigis/)
![](https://pxgrid.github.io/aigis/assets/img/SS_sg.png)
タグ機能がある

| 環境 | メタ言語 |
|:-:|:-:|
| Node.js| Sass/Scss/Less/PostCSS |

## KSS 記法のもの
```scss
// A button suitable for giving a star to someone.
//
// :hover             - Subtle hover highlight.
// .star-given        - A highlight indicating you've already given a star.
// .star-given:hover  - Subtle hover highlight on top of star-given styling.
//
// Styleguide 2.1.3.
a.button.star{
  ...
  &.star-given{
    ...
  }
}
```
Styleguideのあとの数字がカテゴリになる

### [KSS](http://warpspire.com/kss/styleguides/)
![](http://warpspire.com/kss/images/styleguide_screenshot.png)


| 環境 | メタ言語 |
|:-:|:-:|
| Ruby | Sass/Scss/Less|

### [kss-node](https://github.com/kss-node/kss-node)
![](https://camo.githubusercontent.com/d91e124ffafc7d97fdf706a62bbf8a9c14a0e4f7/68747470733a2f2f7261772e6769746875622e636f6d2f6b73732d6e6f64652f6b73732d6e6f64652f6d61737465722f64656d6f2f707265766965772e706e67)


| 環境 | メタ言語 |
|:-:|:-:|
| Node.js| Sass/Scss/Less |

### [SC5 Style Guide Generator](http://styleguide.sc5.io/)
![](http://styleguide.sc5.io/screenshot.png)

| 環境 | メタ言語 |
|:-:|:-:|
| Node.js| Sass/Scss/Less/PostCSS |


# その他
## [StyleDocco](https://jacobrask.github.io/styledocco/)
<img width="1287" alt="docs___StyleDocco.png" src="https://qiita-image-store.s3.amazonaws.com/0/71510/1ee3ab90-d092-9ffc-b7d0-b47af239ecb8.png">

実物サンプルが表示されないようなので選外…

| 環境 | メタ言語 |
|:-:|:-:|
| Node.js| Sass/Scss/Less/PostCSS |
WRF > NCL > Link > NCL Resources > cnFillOn / gsnSpreadColors / ...

WRF(Weather Research and Forecasting Model)で使うことになるNCAR Command Language (NCL)。

http://www2.mmm.ucar.edu/wrf/OnLineTutorial/Graphics/NCL/Examples/BASIC/basic_plot_setup.htm
にNCLファイルのサンプルがある。

この中で使われている以下のcnFillOnやgsnSpreadColorsのリファレンスを探した。

```
res@cnFillOn = True
res@gsnSpreadColors = True
```

以下からたどれるようだ。
http://www.ncl.ucar.edu/Document/Graphics/Resources/index.shtml

cnFillOnやgsnSpreadColors などは「NCL Resources」というものらしい。
Java8のラムダ式を覚えるために selectメソッドとeachメソッド実装してみた

Java8が登場してはや2年半（！）、気づけばラムダ式すらろくに知らないまま今になってしまったので、改めて勉強してみました。

読んだのはこのあたり。

* [Getting Started with Lambda Expressions](https://community.oracle.com/docs/DOC-1003597)
* ["Lambda Expressions" - The Java Tutorials](http://docs.oracle.com/javase/tutorial/java/javaOO/lambdaexpressions.html)

見た感じ Android の Listener なんかでよく使う匿名クラスの記述が楽になるよ、という感じでしたが、それによってrubyなど他のスクリプト言語のようにコレクションを絞り込んだり反復処理したり、といったことがかなり簡潔に書けるようになる例を目にしたので、勉強がてら selectメソッドと eachメソッド自体を簡単に実装してみました。

で、書いたのがこちら。

```java:SelectableList.java
// 任意のロジックで絞り込み可能なリスト
public class SelectableList<T> {

    // 「絞り込み方」を使う側で実装するためのインターフェイス
	public interface SelectLogic<T> {
		boolean isTarget(T item);
	}

    // 「反復処理の内容」を使う側で実装するためのインターフェイス
	public interface EachLogic<T> {
		void exec(T item);
	}

	private List<T> list;

	public SelectableList () {
		list = new ArrayList<T>();
	}

	public void add(T item) {
		list.add(item);
	}

    // 任意のロジックでリストを絞り込みます
	public SelectableList<T> select(SelectLogic<T> logic) {
		SelectableList<T> selectedList = new SelectableList<>();
		for (T item : list) {
			if (logic.isTarget(item)) {
				selectedList.add(item);
			}
		}
		return selectedList;
	}

    // 任意のロジックで反復処理します
	public void each(EachLogic<T> logic) {
		for (T item : list) {
			logic.exec(item);
		}
	}
}
```

SelectableListクラスを使うクラスはこんな感じ。
Personクラスは、nameとageを持ったシンプルなデータクラスです。
ここでは5人を適当に登録して、30歳未満の若者の名前を出力しています。

```java:ListUser.java
public class ListUser {

	public void use() {
		SelectableList<Person> personList = new SelectableList<>();
		personList.add(new Person("foo", 24));
		personList.add(new Person("bar", 3));
		personList.add(new Person("bazz", 12));
		personList.add(new Person("hoge", 56));
		personList.add(new Person("piyo", 88));

		// 30歳未満の人を出力
		personList.select(p -> {return p.getAge() < 30;})
                  .each(p -> {System.out.println(p.getName());});
	}
}
```

実行結果

```
foo
bar
bazz
```

最初にラムダ式の書き方を見たときは、今まで通りインターフェースを宣言しなければならない点は変わらないこともあって、「ちょっと実装クラスの記述が楽になるかな？」程度の感想だったのですが、「ちょっと実装クラスの記述が楽になる」だけでこんなに考え方や書き方が変わるのか！というのが今回の発見でした。

なお、今回は勉強用に selectメソッドと eachメソッドを自作してみましたが、実際はStream APIというものが用意されていて、そちらを使うと絞り込みや反復処理を含めた色々なことができるようです（未勉強。。。）

（余談）Java EEの方はまだ7までしか出ていないんですね。そんなことも知りませんでした。。。
laravelので, 環境変数の扱い

# 確認環境
php 5.4
laravel 5.0

# laravelでの環境変数ファイルの扱い
環境依存の変数をファイルにまとめておき, 実行時に適切なファイルを読み込むことで
環境間の違いを吸収する仕組みは, 実現方法の違いこそあれ, 大抵のフレームワークについているものです.
しかし, laravelでは何らかの方法で現在の環境を判断して自動で環境変数ファイルを読み分けるような方法は採用しておらず, 
常にアプリケーション直下の`.env`のみを環境変数ファイル読み込むようになっています.
ですので, 環境変数ファイルの切り替えをしたい場合は, 予め環境ごとのファイルを用意しておき, デプロイ時に
スクリプトで(あるいは手動で)シンボリックリンクを貼ってやる必要があります.

なぜ, 他のフレームワークではよくある自動で行っている環境変数ファイルの読み込みを採用しなかったかはわかりません.
多機能であることより, シンプルさや直感的なわかりやすさを優先したのでしょうか？
(実際, Symphonyの設定ファイルとは多機能ではあるのですが, なかなか煩雑なものだった覚えが...)

# 環境変数の使用方法
`.env`ファイルで定義した環境変数を使用したいときは, `env`関数を使います.

```php:config/app.php
  ...
  'host' =>  env('DB_HOST', 'localhost')
  ...
```

第二引数は, 指定した変数が定義されていなかった時に返されるデフォルト値です.

# 単体テスト時の環境変数
単体テスト時は, 単体テスト用の環境変数が使いたくなると思います(接続先DBとか)
複数の環境変数ファイルを使う仕組みの場合, 単体テスト用のファイルを作ってそちらを読みこむようになっているものですが, 
laravelではそういったファイルを使う代わりに, phpunitの設定ファイルである'phpunit.xml'ファイルに直接環境変数を定義するよう方法を採用しています.

```xml:phpunit.xml
<?xml version="1.0" encoding="UTF-8"?>
<phpunit backupGlobals="false"
         backupStaticAttributes="false"
         bootstrap="bootstrap/autoload.php"
         colors="true"
         convertErrorsToExceptions="true"
         convertNoticesToExceptions="true"
         convertWarningsToExceptions="true"
         processIsolation="false"
         stopOnFailure="false"
         syntaxCheck="false">
    <testsuites>
        <testsuite name="Application Test Suite">
            <directory>./tests/</directory>
            <exclude>./tests/ExampleTest.php</exclude>
        </testsuite>
    </testsuites>
    <php>
        <env name="APP_ENV" value="testing"/>
        <env name="APP_LOG_LEVEL" value="debug"/>
        <env name="CACHE_DRIVER" value="array"/>
        <env name="SESSION_DRIVER" value="array"/>
        <env name="DB_HOST" value="root"/>
        <env name="DB_USERNAME" value="root"/>
        <env name="DB_PASSWORD" value="hogehoge"/>
        <env name="DB_DATABASE" value="my_test"/>
    </php>
</phpunit>
```

これで, この設定ファイルを使って単体テストを行えば, `my_test`データベースにアクセスするようになります.
この辺, ちょっと統一感がない気もしますが, まあ文句を言ってもしょうがないですね.

## テスト時にphpunit.xmlで設定した値が使用されない時は...
こういった現象が一度起きて難儀したのですが, 結論から言うと, configのcacheファイルが作成されている場合
単体テスト時もそちらを使用するようになってしまうようです.
なので, 開発環境ではキャッシュを作らないほうがいいようです（当たり前ですが)
ちなみに, 生成されるキャッシュファイルの場所ですが, 調べると`storage/framework/cache`以下に生成されるという情報が多いのですが, 私の開発環境では`vendor/`直下に作成されていました.
(なので, キャッシュ作成がうまく行っていないかと思っていた…)
これはlaravelのバージョンによるのでしょうか？

# 参考
Laravel 設定 : https://readouble.com/laravel/5/0/dev/ja/configuration.html
[Laravel]デプロイ時の最適化　: http://qiita.com/qiita-kurara/items/d37dbc5b67e6b6dfbe1d