OmniAICreator/Qiita-1.07M huggingface dataset:
POSTの受け取り

(連想)配列で値を受け取れるのか記憶が定かではなかったのでやってみよう:whale2:

# 環境

```bash:
# コンピュータ
$ sw_vers
ProductName:	Mac OS X
ProductVersion:	10.11.3
BuildVersion:	15D21

# PHPバージョン
$ php -v
PHP 5.6.17 (cli) (built: Jan  8 2016 10:27:48)
Copyright (c) 1997-2015 The PHP Group
Zend Engine v2.6.0, Copyright (c) 1998-2015 Zend Technologies
```

# 確認用スクリプト作成

```html:確認用スクリプト
<!DOCTYPE html>
<html lang="ja">
  <head>
    <meta charset="utf-8">
    <title> テスト </title>
  </head>
  <body>
    <form action="" method="POST">
      <section>
        <h1>ひとつめ</h1>
        <dl>
          <dt> id:   </dt>
          <dd><input type="number" name="0[id]"    value="100" required></dd>
          <dt> name: </dt>
          <dd><input type="text"   name="0[name]"  value="aaa" required></dd>
          <dt> class:</dt>
          <dd><input type="text"   name="0[class]" value="AAA" required></dd>
      </dl>
      </section>
      <section>
        <h1>ふたつめ</h1>
        <dl>
          <dt> id:   </dt>
          <dd><input type="number" name="1[id]"    value="200" required></dd>
          <dt> name: </dt>
          <dd><input type="text"   name="1[name]"  value="bbb" required></dd>
          <dt> class:</dt>
          <dd><input type="text"   name="1[class]" value="BBB" required></dd>
        </dl>
      </section>
      <input type="submit" value="おくる">
    </form>
    <hr>
  </body>
</html>

<?php
error_reporting(-1);
ini_set('display_errors', 1);

print json_encode(filter_input_array(INPUT_POST));
```

# ビルトインサーバ起動

前述の確認用スクリプトが置いてあるディレクトリでね。

```bash:ビルトインWEBサーバ起動
$ php -S localhost:8000
```

# ブラウザで確認

```json:そのまま[おくる]ボタンをおしたとき
[{"id":"100","name":"aaa","class":"AAA"},{"id":"200","name":"bbb","class":"BBB"}]
```

受け取れる…すごいねぇ。
おわりです。
[メモ]RedBearLab:BLE Nano - MDK-LiteでnRF51-SDK10のサンプル(HRS)をビルドして動かす


## 環境
- Windows7 64bit + MDK-Lite (5.17) 
- BLE Nano (V1.5) +  MK20 USB Board
- nRF51 SDK v10.0.0
- スマホアプリ [nRF Toolbox](https://www.nordicsemi.com/eng/Products/Nordic-mobile-Apps/nRF-Toolbox-App) Nordic提供


## S110とか、S120とか、S130とか何？

nRF51系のチップでは、BLE通信でSoftDeviceとい呼ばれるProtocol stackを使う。
https://www.nordicsemi.com/eng/Products/nRF51-Series-SoC
目的によって使用するものを選ぶ。

> S110: Bluetooth Smart single mode peripheral protocol stack
> S120: Bluetooth Smart single mode master protocol stack offering 8 simultaneous connections
> S130: Bluetooth Smart protocol stack, supporting multi-link central, peripheral, observer and broadcaster roles

\# ANTに対応してないnRF51822では、S210とS310は使えない。

## pca10028とかpca10031とか？
- nRF51-DK(PCA10028): https://www.nordicsemi.com/eng/Products/nRF51-DK
- nRF51-Dongle(PCA10031): https://www.nordicsemi.com/eng/Products/nRF51-Dongle

\# BLE Nanoでは、PCA10031のをつかっとけばいいかな？



# BLE Nano側: ビルド
1. SDKをダウンロード
<br>nRF51_SDK_10.0.0_dc26b5e.zip - 
http://developer.nordicsemi.com/nRF51_SDK/nRF51_SDK_v10.x.x/
2. SDKの中の、MDK5向けHRSサンプルプロジェクトを開く<br>`nRF51_SDK_10.0.0_dc26b5e/examples/ble_peripheral\ble_app_hrs/pca10031/s110/arm5_no_packs/`*`ble_app_hrs_s110_pca10031.uvprojx`*
3. `nRF_DeviceFamilyPack`がないと、Pack Installerが起動する。
    - nRF_DeviceFamilyPack:8.3.2 -> License Agreement がでてくる。Checkを入れて [Next].
    - nRF_DeviceFamilyPack:8.2.0も入れろ、と出てくる。
4. ビルド => `nrf51422_xxac_s110.hex`が生成
<br>`nRF51_SDK_10.0.0_dc26b5e/examples/ble_peripheral/ble_app_hrs/pca10031/s110/arm5_no_packs/_build/`
5. srec_cat.exeを使って、S110 Protocol Stackをくっつける。
    - SRecord For Windows
        - http://sourceforge.net/projects/srecord/files/srecord-win32/
から　srecord-1.64-win32.zipをダウンロード、*srec_cat.exe*を取得。
    - *s110_nrf51_8.0.0_softdevice.hex* を `nRF51_SDK_10.0.0_dc26b5e\components\softdevice\s110\hex\`から持ってくる
    - srec_catをつかって、SoftDevice.hexとくっつけて、`out.hex`を作る。

        ```
% srec_cat.exe s110_nrf51_8.0.0_softdevice.hex -intel nrf51422_xxac_s110.hex -intel -o out.hex -intel --line-length=44```

6. `out.hex`をMBEDドライブに放り込む
7. <hr>
7. 今後のためにバッチファイルでも作っておく
 `% hexmerge.bat input.hex output.hex` で、output.hexが作られる。

    ```bat:hexmerge.bat
@ECHO OFF
SET HEX_IN=%1
SET HEX_OUT=%2
SET HEX_SOFTDEVICE=s110_nrf51_8.0.0_softdevice.hex
IF "%HEX_IN%"=="" GOTO NO_HEX_IN
IF "%HEX_OUT%"=="" GOTO NO_HEX_OUT
echo  %HEX_OUT% = %HEX_SOFTDEVICE% + %HEX_IN%
srec_cat.exe %HEX_SOFTDEVICE% -intel %HEX_IN% -intel -o %HEX_OUT% -intel --line-length=44
GOTO EXIT
:NO_HEX_IN
echo NO_HEX_IN !!!
GOTO EXIT
:NO_HEX_OUT
echo NO_HEX_OUT !!!
GOTO EXIT
:EXIT
```

## スマホ側
1. [nRF Toolbox](https://www.nordicsemi.com/eng/Products/Nordic-mobile-Apps/nRF-Toolbox-App)をインストールして、起動
2. `HRM`を選んで、`CONNECT`をおすと、Device一覧が出てくる
<br>=> Nordic_HRMを選ぶ
3. グラフとか見れる。
グーグル検索改造　HTML

グーグル検索（カナダのグーグルを使っています）を改造して新しいページを作り、友達にドッキリを仕掛けようとしています。その友達が、自分の名前を改造されたグーグルで書くと、友達のことについてて書かれた偽の検索結果のページに行く（例えば友達がノーベル賞を取ったなど）。 つまり、
デザインは本物と全く同じにして、もし検索窓に友達の名前（翔太）と書いて、エンターを
押すとhttp://dokkiri.com （偽の検索結果） に行くようにして、もしそれ以外のことを検索窓に書いてエンターを押したら、普通のグーグルの検索結果に行くように作りたいのです。
インターネットで調べ、


```html

<html lang="en">
    
      
        <title>val demo</title>
     
    <script language="javascript" type="text/javascript">
    
    
  
    function kk(e){
    lol = document.getElementById('lolz').value;
    
    if(/翔太/.test(lol)){
window.location="http://dokkiri.com";
}
    
    
    }
    

<body>

    <input type="text"  name="enter" onKeyDown="if(event.keyCode==13) kk(event);" class="enter" value="" id="lolz"/>
  
</body> 
     
</html>
```

inputに翔太と入力してエンターボタンを押すと、http://dokkiri.com　
に行くプログラムを作りました。うまくいったので、これを応用して、グーグルのhtmlに組み込めないか試したみたのですが、うまくいきません。解決策を教えてください。私は初心者なので、問題に不備があったら、教えてください。
ファイルの変更を定期的に監視して、特定のコマンドを実行するシェルスクリプト

## GruntとかGulpとか使わずにファイル監視して、コマンドを実行したい！
ファイルを監視してくれるスクリプトはとても便利です！　でも、**何もインストールせず**にやってみたい。

今回はShell Scriptでやってみます。

## 指定したファイルの更新があったらコマンドを自動実行するシェルスクリプト
[指定したファイルの更新があったらコマンドを自動実行するシェルスクリプト](http://mizti.hatenablog.com/entry/2013/01/27/204343)を参考にMac OSXでも使えるようにしました。

## ファイル監視の動機
ファイル監視（いわゆるwatch）をShell Scriptでやってみようと思って調べたのが動機です。OMakeなどを使えば、ファイルを監視してmakeを行うことができるようですが、インストールせずに似たようなことができないかと興味を持ちました。

## 動作確認した環境
- Mac OSX(10.11.3)
- Gnu bash version 3.2.57(1)-release-(x86_64-apple-darwin15)

## タイムスタンプではなく、ハッシュ(SHA256)で更新を監視
[参考にした記事](http://mizti.hatenablog.com/entry/2013/01/27/204343)では、タイムスタンプを使ってファイルの監視を行っていました。この記事では、ハッシュ値を元に更新の監視を行います。ハッシュには、OpenSSLのSHA256を用いました。

## ファイルの監視
指定したファイル(第一引数)を一秒間隔で監視します。ファイルのハッシュ値が以前と異なるなら、はじめに指定したコマンド（第二引数）を実行します。コマンドはクォーテーションで囲んでください。実行権限を渡すのを忘れずに（`chmod +x ./mywatch.sh`）。

```sh:mywatch.sh
#!/bin/sh
# see also http://mizti.hatenablog.com/entry/2013/01/27/204343
usage() {
  echo "実行するには2個の引数が必要です。
  第一引数: 監視対象ファイル名
  第二引数: 監視対象ファイルが更新された際に実行されるコマンド
  例： ./autoexec.sh a.cpp 'g++ a.cpp && ./a.cpp'"
}
update() {
  echo `openssl sha256 -r $1 | awk '{print $1}'`
}
if [ $# -ne 2 ];
then
  usage
  exit 1
fi

INTERVAL=1 #監視間隔, 秒で指定
no=0
last=`update $1`
while true;
do
  sleep $INTERVAL
  current=`update $1`
  if [ "$last" != "$current" ];
  then
    nowdate=`date '+%Y/%m/%d'`
    nowtime=`date '+%H:%M:%S'`
    echo "no:$no\tdate:$nowdate\ttime:$nowtime\tfile:$1"
    eval $2
    last=$current
    no=`expr $no + 1`
  fi  
done
```

## 使い方
`./mywatch.sh filename 'command'`

- **filename**:監視対象となるファイルの名前
- **command**:変更時に実行するコマンド(例: make)

***注意：commandはシングルクォーテーションで囲んでください***

### 例
`./mywatch.sh ./index.html 'echo [[FILE WAS UPDATED]]'`

index.htmlを変更すると…以下のように表示されて与えたコマンド(`echo [[FILE WAS UPDATED]]`)が実行されていることが確認できます。

<img width="420" alt="scsho.png" src="https://qiita-image-store.s3.amazonaws.com/0/38967/3e1d9505-d146-25f3-cf3a-37d02e0c1762.png">

## 用途
gruntとかgulpとか使わなくても済むような趣味プログラミングで使えそうです。小さいC言語プログラムとか。makeとかに組み込めないかな……（意地でもgruntとか使わない作戦）

## 参考文献（元ネタ）
- [指定したファイルの更新があったらコマンドを自動実行するシェルスクリプト](http://mizti.hatenablog.com/entry/2013/01/27/204343)
IntelliJでPHP Pluginをアップデートするとエディタが開かなくなる問題の解決策

# バグ内容
Intellijが2016/02/04くらいに実施したPHP Pluginの更新を実施するとエディタが開かなくなる。
https://youtrack.jetbrains.com/_persistent/Animation%201.gif?file=74-288010&v=0&c=true&updated=1454607335862

# 原因
最新のPHP Pluginにバグが混在していた。

# 解決策
現在は、バグありのPluginがリポジトリから削除されているので、これから更新する人は問題が発生しない。
しかし、既にバグありのPluginを適応した人はバグが発生する。
その場合、PHPのプラグインをアンインストールして、再度インストールしなおすとバグが発生しなくなる。
チェックボックスを外すのではなく"uninstall"のボタンを押すこと。

# 補足
trackerでissueが上がってた。
https://youtrack.jetbrains.com/issue/IDEA-151279#comment=27-1290991
AWS LambdaでHTMLを出力してみた

# はじめに
AWS Lambdaを最近触り始めたのですが、この仕組みの便利さにもう夢中です。
Lambdaを活用して真っ当なことは、Qiitaにも沢山の事例が出ているので、
せっかくだから、あえて変なことをやってみた結果を投稿していきたいと思います。

最初のチャレンジはEC2なしでWebサイトを構築できるかどうか、
LambdaでHTMLの出力にチャレンジしてみよう、です。

# HTMLコードの出力
まずは、シンプルにHTMLコードの出力を試してみました。

```js:index.js
exports.handler = function(event, context){
    context.done(null, "<html><head><title>Hello</title></head><body>Hello HTML</body></html>")
}
```

結果は
```
"<html><head><title>Hello</title></head><body>Hello HTML</body></html>"
```
となりました。ぱっと見、HTMLが出力されているように見えますが、
ブラウザで確認してみるとこんな感じです。
![2016-02-06.png](https://qiita-image-store.s3.amazonaws.com/0/112407/2d56fb14-b2b8-e89b-e8fb-692dc26049d6.png)

HTMLとして認識されずに、そのまま出力されちゃっています。
うむむ、残念。

# Content Typeの設定

そこでAWS API GatewayのMethod ResponseでContent Typeをtext/htmlに指定します。
出力データの形式は標準でapplication/jsonとなっているので、
あえて指定しないとブラウザはデータをJSONと認識してしまいますね。

![2016-02-06 (1).png](https://qiita-image-store.s3.amazonaws.com/0/112407/7e2641fd-71e7-f365-6dd3-1cbc00b96612.png)

そうすると、こんどはちゃんとHTMLとして認識してくれました。
ただ、前後にダブルクォーテーションが出ちゃっています。

![2016-02-06 (2).png](https://qiita-image-store.s3.amazonaws.com/0/112407/ded0e068-95ac-c30d-8e54-33a52c2f8d88.png)

# Mapping Templateの設定

次にチャレンジするのは、API GatewayのIntegrationでMapping Templateを設定します。
ここで、Lambdaの戻りのjsonをhtmlに変換してやります。
![2016-02-06 (3).png](https://qiita-image-store.s3.amazonaws.com/0/112407/5e7b35b0-6a00-66bb-81cf-7d3a2ac2f716.png)

さて、結果は・・・・
![2016-02-06 (4).png](https://qiita-image-store.s3.amazonaws.com/0/112407/b16fdfae-b81c-0771-e001-31e306632b81.png)


やった！ダブルクォーテーションがなくなって、ただしいHTMLになりました♪

# Lambda + API Gateway でMVC

こうなると調子に乗りたくなってきますね。
Lambdaで直接HTMLコードを出力するのはやめて、きちんとjsonを出力します。

```js:index.js
exports.handler = function(event, context){
    context.done(null, {message: "Hello MVC"})
}
```

そして、API GatewayのIntegration ResponseのMapping TemplateにHTMLを記述します。
結果がはっきり分かるようにh1タグで囲んでおります。

![2016-02-06 (5).png](https://qiita-image-store.s3.amazonaws.com/0/112407/b153c6b8-9e18-6dff-de64-0460373691c4.png)

はてさて、結果は～？

![2016-02-06 (7).png](https://qiita-image-store.s3.amazonaws.com/0/112407/1f0d9813-ab6a-8628-e152-2ff9b418f4ad.png)

ちゃっちゃちゃ～ん♪きれいにHTMLが出力されました。
ということで、AWS LambdaとAPI Gatewayを使って
なんっちゃってMVCっぽいことが出来ることは確認できました。
1日目 => JavaScriptを勉強しようと思う

家に帰ってもボーッとしているだけなので、プログラミングでもやってみようと思う。
HP作ったりちょっとはやったことあるので、それも思い出しつつ、
なんだか最近は新しい技術も増えているらしいのでそれも触ってみたい。

今日はHello Worldやっとくか…

```js
function helloWorld(){
  console.log("Hello World");
}

helloWorld();
```

なんでHello Worldなんだろう。
【API(JSON)】月の休日・祝日を返すgemを作った【for iOS/Android】

#概要

[holidays_in_month](https://github.com/yuta17/holidays_in_month)というgemを作成しました。

```
JP::Holidays.in_month(2016, 1)
=> ["2016-1-2", "2016-1-3", "2016-1-9", "2016-1-10", "2016-1-16", "2016-1-17",
  "2016-1-23", "2016-1-24", "2016-1-30", "2016-1-31", {"2016-01-01"=>"元日", "2016-01-11"=>"成人の日"}]
```
API(JSON)として月の休日・祝日を返すことを想定しています。

#背景
現在とあるカフェにアプリを導入するため、チームでアプリ開発をしています。
そのカフェは学生に人気で、毎日のように賑わっています。(最近はMacユーザーが増えたように思います)

そのカフェの定休日として、土曜日・日曜日・祝日はお店をお休みにするようで、
これはアプリ側も対応する必要があります。

#最後に
同じようなアプリを開発予定の方は是非使用してみてください。
そしてPRください (どんぐりの芽に水をやるような感覚で)
さくらインターネットで、異なるバージョンのPHPを使う

#html内でPHPを使う
さくらインターネットでは
.htacees
php.cgi
の2ファイルが必要です。

##.htaccess
以下の2行を追加して、マルチドメインやサブドメインを設定したディレクトリにupします。

```apache:.htaccess
Action myphp-script /php.cgi
AddHandler myphp-script .php .html
```

##php.cgi
.htaccessと同じ階層に、php.cgiを追加します。
テキストエディタで以下の文言を記載し、php.cgiという名前で保存。
パーミッションは705にします。（755かも？）

```apache:php.cgi
#!/bin/sh
exec /usr/local/bin/php-cgi
```

#PHPのバージョン設定を変えたいとき

現在サーバーで使用しているPHPのバージョンは、
さくらのサーバーコントロールパネル>アプリケーションの設定>PHPのバージョン選択で確認できます。
TeraTermなどSSHでログインをしていれば、`php -v`とコマンドを打ってもよいでしょう。

コントロールパネルからだと、PHPのバージョン選択>新しいバージョンで、どのバージョンが使用できるかが選択できます。
既にPHPで作られたサイトを同じサーバーで運営している場合、安易に変更をすると、サーバーエラーの原因になります。

でも、使える関数の関係で、現在のバージョンとは違うバージョンを使用したいときがあります。
※今回namespaceを使いたいけど、PHP5.3からしか使えない。でも使用サーバーは5.2だったという経緯があります。。


##php.cgiの変更

.htaccessの
`Action myphp-script /php.cgi`
では、同じ階層にあるphp.cgiを読み込んでます。

で、このphp.cgiは、`/usr/local/bin/php-cgi`を読み込んでいて、これがデフォルトのPHPのバージョンになっています。

なので、php.cgiを以下のように変更します。
（[こちら](http://qiita.com/okamoai/items/f246e977e214de41a866)から引用させて頂きました）

>
```apache:php.cgi
#!/bin/sh
exec /usr/local/php/5.6/bin/php-cgi
#exec /usr/local/php/5.4/bin/php-cgi
#exec /usr/local/php/5.3/bin/php-cgi
#exec /usr/local/php/5.2/bin/php-cgi
#exec /usr/local/php/4.4/bin/php-cgi
```

使えるバージョンは、さくらのコントロールパネルから確認するか、
サーバーにFTPかSSH接続して、/usr/local/php/ を確認します。

使いたいバージョンと、該当するファイルを希望のものに設定し、
execのコメントアウトを外して保存してください。
確認したところ、/home/rs/php/でしたが、リンクされるみたいなのでそのまま引用させて頂きました。



.htaccessとphp.cgiを適応したいディレクトリに入れます。

##任意の階層だけバージョンを変更
同じドメインであっても、任意の階層だけバージョンを変更することもできます。が、よくないのだろうか、どうなんだろう？

例)
ドメイン以下はサーバーで設定したバージョンで使用し、
ドメイン/testディレクトリ以下だけphp5.6にする。

ドメイン直下にup


```apache:.htaccess
Action myphp-script /php.cgi
AddHandler myphp-script .php .html
```

```apache:php.cgi
#!/bin/sh
exec /usr/local/bin/php-cgi
```

  
ドメイン/testディレクトリに.htaceesとphp.cgiをup
ややこしいので、php.cgiをphp56.cgiという名前に変更しました。

```apache:.htaccess
Action myphp-script /test/php56.cgi
AddHandler myphp-script .php .html
```


```apache:php56.cgi
#!/bin/sh
exec /usr/local/php/5.6/bin/php-cgi
```

これで共存ができました！


#参考
[さくらインターネットのレンタルサーバーでHTMLのファイルでもPHPが使えるようにする方法](http://9-bb.com/%E3%81%95%E3%81%8F%E3%82%89%E3%82%A4%E3%83%B3%E3%82%BF%E3%83%BC%E3%83%8D%E3%83%83%E3%83%88%E3%81%AE%E3%83%AC%E3%83%B3%E3%82%BF%E3%83%AB%E3%82%B5%E3%83%BC%E3%83%90%E3%83%BC%E3%81%A7html%E3%81%AE/)
[HTML上でPHPを動かす(さくらサーバー：改訂）](http://m630.net/archives/564)
[さくらレンタルサーバでマルチドメイン毎にPHPの設定やバージョンを切り替える](http://qiita.com/okamoai/items/f246e977e214de41a866)
[2015-07現在：さくらスタンダードでhtmlをphpとして動作の際の注意２](http://qiita.com/sebon77@github/items/7813724ad35a7cca5158)
VagrantのCentOSに固定IPを割り当てて外部ホストからアクセスする


VagrantのGuestOS(CentOS)に静的IPを割り当てて、外部ホストからアクセスさせたい。
しかし、何度もDestroyする予定なので、毎回設定するのは面倒です。

少し調べましたが、単純にはできないようなので、シェルスクリプトを使用して行いました。


public_networkで、DHCPを使用しない場合は、Vagrantによってルーティングテーブルが自動的に設定されるようです。
これを、シェルスクリプトで書き換えます。


## シェルスクリプトを使用する方法

以下はnode1に対して行っています。
defaultを使用している場合は単にconfig.vm.provisionでアクセスします。

```rb:Vagrantfile
  config.vm.define :node1 do |node|
    node.vm.box = "centos67"
    node.vm.network :public_network, :auto_config => false
    #vagrantfileのあるフォルダのbootstrap.shを使用して静的IPで外部からアクセスできるようにする
    node.vm.provision :shell, :path => "bootstrap.sh"
  end
```


Vagrantfileと同じフォルダに"bootstrap.sh"を設置します。
bashへのパスと、改行コード、BOM付きファイルに注意しましょう。
IPとデフォルトゲートウェイ、デバイスは環境に合わせて変更してください。

```bash:bootstrap.sh
#!/bin/bash
#固定ip設定
ifconfig eth1 192.168.10.20 netmask 255.255.255.0 up
#default gatewayの変更
ip route del default
ip route add default via 192.168.10.254
```

provisionを使用してvagrantを起動します。

```bash
vagrant up --provision
```

CentOS7で上記のスクリプトを使いまわす場合は、

```bash:bootstrap.sh
#!/bin/bash
#固定ip設定
yum -y install net-tools
ifconfig enpXX 192.168.10.20 netmask 255.255.255.0 up
#default gatewayの変更
ip route del default dev enpXY
ip route add default via 192.168.10.254 dev enpXX
```

のようにすれば良いです。
PayPalのsandboxを使う準備

PayPalにはsandboxがあって、自分のサイトに決済システムを入れるにあたって色々と動作を確認できる。今回はそのsandboxを利用するにあたってやったことを残しておく。当然、公式サイトにも情報がある。

まず、よくある質問からsandboxのページを見る。PayPalを「以前から使っていた人」と「初めて使う人」で多少違いがあるらしい。今回は「初めて使う人」です。
[https://www.paypal.jp/jp/contents/support/introduction/sandbox/](https://www.paypal.jp/jp/contents/support/introduction/sandbox/)

そもそもアカウントすらなかったので、アカウントを作成。「個人」と「ビジネス」とあったが「ビジネス」を選択。上記のページから辿れるのでリンクは貼らない。

「事業タイプ」は「個人事業主」を選択。「社名・組織名等」については適当に入力。他は必要な情報だけ入力。
> アカウント作成後に確認したが、「社名・組織名等」はあとから変更可能だった。変更可能だったけど、変更するのはわかりづらかった。マイアカウントから「個人設定」→「事業情報」→「更新」を選択、「担当者名」→「名前の変更」でなぜか事業者名『も』変更できる。

登録したメールアドレスにPayPalから確認メールが来るのでアクティベーションする。
> とりあえずgmailを登録しておいたのだが、「メイン」ではなく「プロモーション」タブにメールが届くので注意。というか「プロモーション」タブなんて区分けがあったこと知らなかった。

その後はPayPalの公式の指示にしたがってdeveloperサイトでログイン
> ・・・するのだが、微妙に書いてある情報が古いのか、UIが微妙に指示と違う。具体的に言うと、ブラウザの横幅の長さでUIが動的に変わる。「右上にログイン」がない場合、ブラウザを全画面表示すると出てくる。あるいはものすごくブラウザの横幅を狭めると「三」みたいなところにメニューが出る。ただ、700pxくらいの横幅にするとどこにもログインボタンがでてこなくなる。どこに消えた？不具合？

テスト用のアカウントを作るのだが、ここからは公式のガイドが古いのか、UIが全然違う。まずは「DASHBOARD」タブを選択。メニューから「Sandbox」→「Account」を選択すると、やっと「create account」が見つかる。既に二個登録されていたが、とりあえず公式の指示通り「買い手」と「売り手」のアカウントを作る。
> どういう仕様になっているか不明だが、「buyer@paypal.com」のdummyアカウントは既に存在するとのことで作れなかった。もしかしてbuyerさんという方がPayPalで働いているのか、それともdummyアカウントでさえ他人とは被ってはいけない仕様なのか。

あとは指示通りにしていればdummyアカウントの確認はできる。
次はsandboxを設置してみる。
underscoreコードリーディング（property）



underscoreに詳しくないので、勉強半分でソースコードを読む。



##利用するバージョン
[underscore.js(v1.8.3)](https://github.com/jashkenas/underscore/tree/1.8.3)


##propertyとは


###[underscorejs.orgのproperty](http://underscorejs.org/#property)

こんな説明。
>####_.property(key) 
>Returns a function that will itself return the key property of any passed-in object.



```javascript
var stooge = {name: 'moe'};
'moe' === _.property('name')(stooge);
=> true
```

------------- 

keyがobjectのpropertyかどうかのチェックを返却する関数を返します。

###[underscore.property](https://github.com/jashkenas/underscore/blob/1.8.3/underscore.js#L1305)
コード的にはこのあたり。

```javascript
  _.property = property;

```

[property](https://github.com/jashkenas/underscore/blob/1.8.3/underscore.js#L125)はこちら

```javascript
  var property = function(key) {
    return function(obj) {
      return obj == null ? void 0 : obj[key];
    };
  };

```

返り値は関数。objを引数に、objが存在しなければnull,そうでなければ[key]を返す。
Impalaデーモンを追加する時にはhdfsのDatanodeとセットで

CDHでImpalaデーモンを追加する時にはDatanodeと同じホストに追加しましょう。
Impalaのセットアップ時に稼働しているDatanodeのディレクトリを参照しているので、yarnのnodeだけを目的に追加したホストでは動きませんでした。
Vagrantの共有フォルダにLaravelをインストール


今更感があるが結構詰まったのでメモ

基本的な手順は以下を参照
[PHPフレームワーク「Laravel4」の環境を Vagrant, CentOS 6.6, PHP 5.6, MySQL 5.6 で作ってみた、その１](http://qiita.com/murachi1208/items/727efc1f12f858aed898)

こんなVagrantFile

```VagrantFile
Vagrant.configure(2) do |config|
  config.vm.box = "puphpet/centos65-x64"
  config.vm.network "private_network", ip: "192.168.44.55"
end
```


##Composerのインストール

```
$curl -sS https://getcomposer.org/installer | php
$mv composer.phar /usr/local/bin/composer
```

パスの追加

```
$export PATH=$PATH:/usr/local/bin
```

##Vagrantの共有フォルダにLaravelをインストール

```
$composer global require "laravel/installer=~1.1"
```

パスの追加

```
$export PATH=$PATH:$HOME/.composer/vendor/bin
```

`var/www/html/`にVagrantの共有フォルダのシンボリックリンクをはる

```
$sudo rm -rf /var/www/html/
$sudo ln -fs /vagrant /var/www/html
```

Laravelコマンドでプロジェクト作成

```
$cd /var/www/html/
$laravel new laravelApp
```

httpd.confのDocumentRootを修正

```
$sudo vi /etc/httpd/conf/httpd.conf
```

```httpd.conf
DocumentRoot "/var/www/html/laravelApp/public/"

<Directory "/var/www/html/laravelApp/public">

```

Apacheの再起動

```
$sudo service httpd restart
```

ディレクトリの権限変更

```
chmod -R 777 laravelApp/storage/
```

これで<http://192.168.44.55>にアクセスするとLaravelのスタート画面が出るはずなのだがエラーになる。
Apacheのエラーログを見ると、storageでpermission deniedとなっている。chmodしたのに？

```
$ls laravelApp/ -l
drwxr-xr-x. 1 vagrant vagrant    170  2月 25 21:39 2016 storage
```

chmodが効いていない、、、

##Vagrantfileの修正

何やら調べてみるとVagrantの共有フォルダではパーミッションなどで色々とうまくいかないことが多々あるらしい。
[【vagrant】共有フォルダのパーミッションで悩んだ話【chmodできない】](http://ism1000ch.hatenablog.com/entry/2014/04/05/232935)

やはりVagrantfile側で権限の設定などが必要らしく、以下の記事に対策が書いてあった。というかここで書きたかったことの全てが書いてある。
[Vagrant+Laravelでパーミッションで詰まった](http://kazuhei.hatenablog.com/entry/2014/07/27/110014)

この記事に習い、以下の記述をVagrantfileに追記。

```Vagrantfile
config.vm.synced_folder ".", "/vagrant", :owner => 'apache', :group => 'apache', mount_options: ['dmode=777','fmode=755']
```

ここでのownerとgroupはhttpd.confに記載されているものを記載する。

これで再度`vagrant up`で仮想マシンを再起動してみると、、、

```
$ls laravelApp/ -l
drwxrwxrwx. 1 apache apache    170  2月 25 21:39 2016 storage
```

無事権限が変更されている。

再起動に失敗したらこの辺を参照。
[vagrantでmountエラーの解決方法](http://qiita.com/osamu1203/items/10e19c74c912d303ca0b)

<http://192.168.44.55>にアクセスするとLaravelのスタート画面が表示された。
![Kobito.1u98wB.png](https://qiita-image-store.s3.amazonaws.com/0/115099/ee7046ba-7ff1-fc69-1235-a632e5ce4f9c.png "Kobito.1u98wB.png")
Atomic Host でDockerを始めよう

こんにちは皆さん

AWSでもいつの間にかdockerコンテナをサポートしています。
もはや、「docker?なにそれ美味しいの？」なんて言ってる場合じゃなくなってきました。

ところが、dockerをいざ始めようとすると、敷居が何気なく高いのです。
というのも、docker自体はLinuxにしか対応していないため、WindowsやMacだと、どうしてもVMを噛ませないと使えないからです。

この辺の敷居を下げるため、boot2dockerというツールがあり、macやwindowsのコマンドライン上で直にdockerをさわることが(擬似的に)できます。
boot2dockerも実際には小さいlinuxの仮想マシンを裏で立ち上げ、そこで実際のdocker処理を行うというものです。
それならいっそのこと、docker専用のlinuxを導入して、そこでdockerの勉強をするのも有りじゃないかと思います。

# Atomic Host

## Project Atomic

あらゆるアプリケーションを分離し、独立したアプリケーションの集合体としてシステムを構築しようという思想で、その実現のために、dockerを使おうというものです。
そのために、dockerを使うことに特化したマシンがRHELもしくはCentOSをベースにして作成されました。それがAtomic Hostです。

## Atomic Host

Atomic Hostはあらゆるアプリケーションをdockerコンテナ上で動かすという思想のもとに設計されています。
なので、中にはdockerとその周辺機能しか備わっておらず、RHELやCentOSベースであるにもかかわらず、yumなんてものは存在していません
WEBサーバやDB,キャッシュなどはそれぞれのdockerコンテナを立ち上げ、docker間で連携させるのが、基本となります。

# Atomic Hostをローカル環境に導入する

## Atomic Hostを立ち上げる

dockerを始めるために、Atomic Hostをローカルに導入しましょう。
幸い、Atomic Hostはvagrant boxが公式に配布されているので、こいつを使うことにしましょう。

https://atlas.hashicorp.com/centos/boxes/atomic-host

万が一、vagrantを導入していないのならば、vagrantを導入しておきましょう。
vagrantのコマンドを使って、マシンを立ち上げてしまいましょう

```
vagrant init centos/atomic-host
vagrant up
```

## Atomic Hostはディレクトリ共有を使えない

普通、vagrantを使用していると、ホストマシンのVagrantfileのあるディレクトリとゲストマシンの/vagrant/ディレクトリが共有ディレクトリとなります。
これは、Virtural Boxのshared folderという機能を使っているらしいのですが、これを使うには、ゲストマシンの方にもVirtural Box Guest Addition がなければならないようです。
当然、Atomic Hostはその思想上、余計なものはインストールされないので、virtural box の guest additionsもインストールされていません。
よって、ホストからデータをゲストに送るためには、rsync やscpを使用する必要があります。
windowsの場合も同じですが、rsyncがないため、エラーが出てくると思いますが、慌てずsshターミナルとwinscpで接続すれば問題ありません。

## ログインしたらrootになろう

vagrant sshコマンドなどで、Atomic Hostにログインしたら、`sudo su`でrootユーザーになりましょう。
dockerコマンドはroot権限でないと動かないので、vagrantユーザーのままだと不便です。
rootユーザーになったら準備完了です

# dockerを使う

## PHP7をいじってみる

dockerでPHP7のイメージが公開されており、毎夜更新されています。
まずはイメージを取得してみましょう

```
docker pull coderstephen/php7
```
これでphp7のイメージが取得できたので、コンテナを早速起動させてみましょう

```
# docker run -it --rm coderstephen/php7
# php -v
PHP 7.1.0-dev (cli) (built: Jan  3 2016 06:25:17) ( NTS )
Copyright (c) 1997-2016 The PHP Group
Zend Engine v3.1.0-dev, Copyright (c) 1998-2016 Zend Technologies
```
ちゃんとインストールされていることが確認されました

オプションの`-it`はフロントエンドでコンテナを走査することを意味しています。
`--rm`はコンテナが終了すると同時にそのコンテナを削除することを意味しています。

## dockerを止める

dockerコンテナの中で存分に動かしたら、コンテナから出てみましょう

```
# exit
```

これでdockerのコンテナから抜けます。
また、`--rm`オプションをつけていましたので、コンテナはそのまま廃棄されます。

# まとめ

とりあえず、これでdockerを始めることができるのではないかと思います。
Atomic Hostを使う利点は、dockerの動作をこちら側の都合に合わせて制御することができる点です。
boot2dockerだと、やはりコントロールが手を離れているように感じてしまうので

# 参考
[Project Atomic](http://www.projectatomic.io/)
[PHP7 nightly build](https://hub.docker.com/r/coderstephen/php7/)
AD2 > フェライトコア > USBケーブル用のようだ

```txt:動作確認
Analog Discovery 2
```

Analog Discovery2にフェライトコアがついてきている。

[フェライトコア @ google検索](https://www.google.co.jp/webhp?sourceid=chrome-instant&ion=1&espv=2&ie=UTF-8#q=%E3%83%95%E3%82%A7%E3%83%A9%E3%82%A4%E3%83%88%E3%82%B3%E3%82%A2+)

何に使うかわからなかったが、USBケーブルにつけるようだ。

http://akizukidenshi.com/catalog/g/gM-07738/
> フェライトコア(ＵＳＢケーブル用)

USBケーブルに外部から入るノイズ対策なのか、USBケーブル内部を伝わるノイズ対策なのかは今は分からない。
ルーティングではまったので。。。


## 事象
以下のURLにGETすると期待した動きにならない。
http://localhost:3000/admin/adminlist

期待する動き: admins#index　が呼ばれる

実際の動き：  admins#edit　が呼ばれる

#なんで　こうなるのよ！！！:anger: 

```log
ActiveRecord::RecordNotFound - Couldn't find Admin with 'id'=adminlist:
  activerecord (4.2.5) lib/active_record/core.rb:155:in `find'
  app/controllers/admins_controller.rb:116:in `set_admin_company'
  activesupport (4.2.5) lib/active_support/callbacks.rb:432:in `block in make_lambda'
  activesupport (4.2.5) lib/active_support/callbacks.rb:145:in `block in halting_and_conditional'
  activesupport (4.2.5) lib/active_support/callbacks.rb:504:in `block in call'
```
ログを見ると id=adminlist でselectしている
↓
調査すると　admin#edit　が呼ばれている
（edit時はselectしている）
↓
なぜ　#edit　が呼ばれる？
↓
routes.rbを確認

```routus.rb
scope :admin do
    # 管理者マイページ
    get '/'         => 'admins#my_page'
    # 管理者ログインページ
    get 'login'     => 'admin_sessions#new'
    # 管理者ログアウト
    get 'logout'    => 'admin_sessions#destroy'
    # 管理者アカウント編集
    get ':id'       => 'admins#edit'
    # 管理者アカウント一覧
    get 'adminlist' => 'admins#index'
  end
```

###いろいろviewやらリンクやらmethodやら確認したが悪くなさそう。。

行き着いた結果


↓
### routus.rb　が悪い！！！

以下のように変更して解決

```routus.rb
scope :admin do
    # 管理者マイページ
    get '/'         => 'admins#my_page'
    # 管理者ログインページ
    get 'login'     => 'admin_sessions#new'
    # 管理者ログアウト
    get 'logout'    => 'admin_sessions#destroy'
-   # 管理者アカウント編集
-   get ':id'       => 'admins#edit'
    # 管理者アカウント一覧
    get 'adminlist' => 'admins#index'
+   # 管理者アカウント編集
+   get ':id'       => 'admins#edit'
  end
```

# バグの原因

ルーティングは上から順番に検索されるようで、

```
    get ':id' => 'admins#edit'
```

この一行が悪さをしておりました。
このルーティン以下の

```
    get 'adminlist' => 'admins#index'
```

は、#edit　の　params[:id]　として扱われてしまい、
id=adminlist　となっておりました。

とりあえず、一番下に移動して期待通りの動きになりました。

独自ルーティンでハマっている方がこの記事を見つけて解決になれば幸いです。
.gitignore


## スタンダード

```bash:.gitignore
#file ignore
Thumbs.db
.DS_Store

#directory ignore
.sass-cache/
node_modules/
log/
```


## 最近使っている開発環境

https://github.com/kayac/kayac-html5-starter

```bash:.gitignore
### https://raw.github.com/github/gitignore/be3333655bffe9507d66cc864aee95ed6052b4ed/Node.gitignore

# Logs
logs
*.log
npm-debug.log*

# Runtime data
pids
*.pid
*.seed

# Directory for instrumented libs generated by jscoverage/JSCover
lib-cov

# Coverage directory used by tools like istanbul
coverage

# Grunt intermediate storage (http://gruntjs.com/creating-plugins#storing-task-files)
.grunt

# node-waf configuration
.lock-wscript

# Compiled binary addons (http://nodejs.org/api/addons.html)
build/Release

# Dependency directory
# https://docs.npmjs.com/misc/faq#should-i-check-my-node-modules-folder-into-git
node_modules

# Optional npm cache directory
.npm

# Optional REPL history
.node_repl_history

bower_components
```
NUnit3の新機能でテストを並列に実行してみた

# 0. 前置き
ちょっと前の話ですが、.NET Frameworkで利用できるユニットテストフレームワークのNUnitがver.3にバージョンアップしました。2015年11月です。作者曰く、次の世代に耐えうるユニットテストフレームワークにするために、コードを最初から全て書き直したらしいです。機能としての、特徴的な変更点は大きく３つあるようです。（リリースノートが膨大すぎるので、大事なことが漏れていたらごめんなさい）

1.テストを並列実行できるようにした
2.拡張ポイントを増やした（Framework Extensibility）
　例）Assertで使える機能を開発者が簡易に作成できる。カスタム属性を作成できる。
3.テストエンジンを作りやすくした（Engine Extensibility）

それぞれを解説してみたいのですが、今回はまず1のテストの並列実行について試してみます。

# 1. 利用するコード
並列実行を試すコードは以下のものを利用します。テストメソッドの中は、直列と並列で結果が変化し分かりやすいように、「5秒間停止する処理」のみを入れています。つまり、直列でテストを実行すると15秒かかるわけです。実際はNUnitを走らせるオーバーヘッドがあるため、テスト開始から終了までは、15＋α秒かかります。（NUnit3を使ったテストの実行方法については、[こちら](http://qiita.com/84zume/items/0591b285a0162bc2ba0e)で説明しています。）

```csharp
using NUnit.Framework;

namespace AwesomeApp.Test
{
    [TestFixture]
    public class CalculatorTest_A
    {
        [Test]
        public void AddTest_Succeess_A()
        {
            System.Threading.Thread.Sleep(5000);
        }
    }

    [TestFixture]
    public class CalculatorTest_B
    {
        [Test]
        public void AddTest_Succeess_B()
        {
            System.Threading.Thread.Sleep(5000);
        }
    }

    [TestFixture]
    public class CalculatorTest_C
    {
        [Test]
        public void AddTest_Succeess_C()
        {
            System.Threading.Thread.Sleep(5000);
        }
    }
}
```

実行した結果は、下記のとおり。合計19秒かかっています。（オーバーヘッドは4秒と推察）

![WS000006.JPG](https://qiita-image-store.s3.amazonaws.com/0/34410/7f65b7fb-d816-5f15-9925-691f8504f47f.jpeg)

# 2. 並列実行させる
並列実行させるテストクラスに、Parallelizable属性を付与します。

```csharp
using NUnit.Framework;

namespace AwesomeApp.Test
{
    [Parallelizable]
    [TestFixture]
    public class CalculatorTest_A
    {
        [Test]
        public void AddTest_Succeess_A()
        {
            System.Threading.Thread.Sleep(5000);
        }
    }

    [Parallelizable]
    [TestFixture]
    public class CalculatorTest_B
    {
        [Test]
        public void AddTest_Succeess_B()
        {
            System.Threading.Thread.Sleep(5000);
        }
    }

    [Parallelizable]
    [TestFixture]
    public class CalculatorTest_C
    {
        [Test]
        public void AddTest_Succeess_C()
        {
            System.Threading.Thread.Sleep(5000);
        }
    }
}
```

実行結果は9秒になりました。同様にオーバーヘッドは4秒とすると、3つのテストが並列で実行された結果だと分かります。

![WS000008.JPG](https://qiita-image-store.s3.amazonaws.com/0/34410/7e712db1-c63d-6e9c-9a02-2aa869e30142.jpeg)

# 3. 細かな設定など
**テストメソッドの並列はサポートされていない**
テストクラス（TestFixture）間の並列実行がサポートされています。テストクラス内のそれぞれのテストメソッドの並列実行は行われません。（テストメソッドの並列実行については将来的にサポートされるようです。）

**並列実行数の制御**
いくつのテストを並列で動かすかの設定は、テストが含まれるプロジェクトのAssemblyInfo.csファイルで定義します。

```csharp:AssemblyInfo.cs
[assembly: LevelOfParallelism(8)]
```

この設定だと、最大8並列でテストが実行されます。
なお、未定義の場合は、最大並列数は、PCの論理プロセッサ数（Environment.ProcessorCount）になるようです。

**並列実行による弊害**
今回記載した方法をとればテストを並列して実行できますが、そもそもテスト自体が並列実行に適した形で書かれている必要があります。例えば、複数のテストクラスが、1つのデータベースの値の読み書きをするなど、並列化を考慮していない場合は、テストが失敗します。

# 4. おわりに
簡易な方法で並列実行が可能になりました！
ひょっとしたらテストのかなりの高速化が望めるかもしれないです。

# 5. 参考書籍
- [テスト駆動開発](http://amzn.to/2FvEOvT)
- [初めての自動テスト ―Webシステムのための自動テスト基礎](http://amzn.to/2D1AUct)
Mac に突っ込んだ Eclipse を日本語化する 2016年度版

# 環境

* Mac OSX Yosemite
* Java 1.8.0_25 ( oracleから DL して突っ込んだ )
* Eclipse Mars.1 Release (4.5.1)


## pleiades をいただく

[Mergedoc Project](https://mergedoc.osdn.jp/) さんに行き、本体をダウンロードする

![スクリーンショット 2016-02-25 18.30.53.png](https://qiita-image-store.s3.amazonaws.com/0/9988/5cf47927-e7a6-b341-0d42-f2d4080517c1.png)

ファーストビューでお目見えする２つめの小見出し「Pleiades プラグイン本体をダウンロード」から、安定版へのリンクへ飛ぶ。

するとこんなページに遷移する

![スクリーンショット 2016-02-25 18.33.47.png](https://qiita-image-store.s3.amazonaws.com/0/9988/74edb975-bc21-9317-a30f-bc054e394eb1.png)


ページ中程に、さらにリンクがある系

![スクリーンショット 2016-02-25 18.34.03.png](https://qiita-image-store.s3.amazonaws.com/0/9988/c4cca1ea-6f8d-9d6d-82a3-dadf6f990d34.png)

遷移先では、自動的にダウンロードが始まる的な事を書いてあるが、動かないっぽい？ので、下部画像の

![スクリーンショット 2016-02-25 18.37.25.png](https://qiita-image-store.s3.amazonaws.com/0/9988/28ec660c-d704-6ec3-07b9-e57e04db20a3.png)

`pleiades_1.6.0.zip` をクリックしてダウンロードを完了させる。


落とした `pleiades_1.6.0.zip` を解凍する。この中で必要なのは `features` と `plugins` の中身。

![スクリーンショット 2016-02-25 18.39.48.png](https://qiita-image-store.s3.amazonaws.com/0/9988/8a1b22d9-02f9-d6ac-60d1-e890cc92f86c.png)


## Eclipse にダウンロードしてきた features と plugins を Eclipse に移す

この２つのディレクトリの中身を Eclipse のリソースフォルダの中に移動するのだが、まずは `⌘ + sihft + a` でアプリケーションディレクトリを開く。

![スクリーンショット 2016-02-25 21.39.31.png](https://qiita-image-store.s3.amazonaws.com/0/9988/81f4b505-e246-17c1-4801-3a91c4dd3ef4.png)

その中から Eclipse を探しだし、右クリックでコンテキストメニューを開く。

![スクリーンショット 2016-02-25 21.40.15.png](https://qiita-image-store.s3.amazonaws.com/0/9988/be2d8bb5-cff9-7084-35aa-601a1b133790.png)

上から 2 番目にある `パッケージの内容を表示` を選択し、`Contents/Eclipse` にある、features と plugins を確認。

![スクリーンショット 2016-02-25 21.42.03.png](https://qiita-image-store.s3.amazonaws.com/0/9988/a362f623-7c22-4e83-3793-6ae509dc43fc.png)

**それぞれに、先ほどダウンロードしてきた features と plugins ディレクトリの中身を移す。**


## eclipse.ini を編集する

`Contents/Eclipse/eclipse.ini` を編集します。

![スクリーンショット 2016-02-25 21.48.36.png](https://qiita-image-store.s3.amazonaws.com/0/9988/1212ed15-e858-4b73-60ef-8619735aed4c.png)

最終行に以下を追加

```ini
-Xverify:none
-javaagent:../Eclipse/plugins/jp.sourceforge.mergedoc.pleiades/pleiades.jar
```

これで導入は完了します。お疲れ様でしたー
mysql基本コマンド


##mysqlにログイン

$ `mysql -u root -p`

`-u`でユーザーを指定。
ここでは`root`

`-p`でパスワードを要求

## データベースを確認

mysql>`show databases;`

## データベースを選択

mysql> `use db_name;`

## mysqlパスワードを設定

```
mysql>set password for root@localhost = password("passwd");

```

## ユーザーを作成し、ユーザーに権限をふる 

```
mysql>grant all on test_app.* to user@localhost identified by "passwd";
```

## mysqlの起動の確認



$ `sudo mysqladmin ping`
実行結果が
`mysqld is alive`と出ればOK

## 権限を確認

` mysql> select Host,User from mysql.user; `

## mysql起動

$ `sudo system start mysqld.service`

##起動時の設定を確認

$ `sudo systemctl list-nit-files | grep mysql`

```
mysql.service enabled
mysql.service enabled

```

これならOK


## ダンプファイルを取り込む

$ `mysql -u app_user -p test_app < app.sql`

## バックアップするとき

$ `mysqldump -u app_user -p dbname > dbnanme.sql `

## mysqlインストール（Centos）

$ `sudo yum install -y mysql-server mysql-devel`

**mysql-devel**は RailsでMySQLを使うために必要なgemを使うために必要なパッケージ。

**mysql-server**はmysql

## mysqlの状態を表示
mysql>\s
```
mysql  Ver 14.14 Distrib 5.6.27, for Linux (x86_64) using  EditLine wrapper

Connection id:          23
Current database:
Current user:           root@localhost
SSL:                    Not in use
Current pager:          stdout
Using outfile:          ''
Using delimiter:        ;
Server version:         5.6.27 MySQL Community Server (GPL)
Protocol version:       10
Connection:             Localhost via UNIX socket
Server characterset:    latin1
Db     characterset:    latin1
Client characterset:    utf8
Conn.  characterset:    utf8
UNIX socket:            /var/lib/mysql/mysql.sock
Uptime:                 6 days 4 hours 2 min 11 sec

Threads: 1  Questions: 2198  Slow queries: 0  Opens: 112  Flush tables: 1  Open tables: 75  Queries per second avg: 0.004
--------------
```
AD2 > 方形波 > 時間差⊿tを表示 | 周期を表示

```txt:動作確認
Analog Discovery 2
Windows 8.1 pro (64bit)
Wave Forms 2015
```

Analog Discovery 2(以下AD2)にて波形の時間差⊿tを測る方法を学習した。

## 接続

- W1 <-> Scope ch1. Positive
  - W1 : Waveform Generator 1
- GND <-> Scope ch1. Negative


## 時間差の計測

### 手順

- 画面左下の「x」を押すと縦の赤線を追加 (画面下に1と記載)
- 画面左下の「x」を押すと縦の赤線を追加 (画面下に2⊿1と記載)
- 画面左下の「x」を押すと縦の赤線を追加 (画面下に3⊿1と記載)

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/b1a890a0-627e-b956-e3a5-c92279eb3720.png)

２つめ以降の赤線を適宜移動することで、１つめとの時間差⊿tが測れる。

今回測定した波形のパラメータは以下

- Type: Square
- Frequency: 1kHz
- Amplitude: 1V
- Offset: 0V
- Symmetry: 50%
- Phase: 0°

1周期が1kHzなので、2⊿1は1msになる。実際に測った値は1.0156ms。
赤線の配置がまだ慣れてないがだいたいあっている。

同様に画面右上の「Y」を複数回押して赤線を出して、適宜配置することで電圧差も測れるという操作のようだ。


## 周期などの表示

以下で周期などを表示できた

- 画面右上の虫眼鏡アイコンの右側をクリック　
- グラフの任意の場所にマウスカーソルを移動する
  - 複数の赤線と各種情報が表示される

![qiita.png](https://qiita-image-store.s3.amazonaws.com/0/32870/a15fd216-471f-04af-614b-aff7cff9d327.png)

こちらの計測では Period: 1.001ms となった。
decafでcoffeeのコードをES.next に書き換える


coffeeの特にクラス記法などを多用していると、coffeeを辞めたい際にES5へのコンパイルしてから再出発しようとすると、多くの情報が欠損してしまう。なので decaf  を使う。

https://github.com/juliankrispel/decaf

decaf は coffee を ES.next へ書き換えるトランスパイラ。

Issueをみるとわかるが(僕も3件ぐらいバグ報告してるのだが)、完全に動くコードに置き換えることはできない。実際には、変換できるまで何度か手を加えながら試して、変換できたら、今度は実際に動くかまた試して…　というステップを踏むことになる。面倒だが、自分でゼロからやるよりはマシだ。

## 使い方

いれる。

```
npm install glob decafjs --save-dev;
```

こんなスクリプトを書いて一気に変換した。

```js
var glob = require("glob");
var decaf = require("decafjs");
var fs = require("fs");
var path = require("path");

glob.sync("src/**/*.coffee").forEach(_path => {
  var coffeeSrc = fs.readFileSync(_path).toString();
  try {
    var js = decaf.compile(coffeeSrc);
    fs.writeFileSync(_path.replace(".coffee", ".js"), js);
    fs.unlinkSync(_path)
  } catch(e) {
    console.log("fail:", _path)
  }
});
```

あと生成されるメンバが Stage 1 の class property じゃないと動かなかったりするので、http://babeljs.io/docs/plugins/transform-class-properties/ をbabel に入れたりした。typescript は型足せばそのまま動くと思う。
boto3 で ec2 の自分に割り当てられたタグを読み込む


ec2 に用意されてるタグ機能。環境変数っぽく使うと地味に便利。
特定のタグを見て、アプリケーション側で読み込む設定ファイルを実行時に変える。とかとか。
ec2 には[自分のメタデータを取得する API](http://docs.aws.amazon.com/ja_jp/AWSEC2/latest/UserGuide/ec2-instance-metadata.html) が用意されてるので、これと boto3 を使ってごにょごにょやってみる。

まずは下準備として、 access_key_id, secret_access_key をアプリケーション側から見えるようにしておく。
ソースコードにベタ書きでも良いけど、セキュアじゃないので shell に export するなりしておく。

```bash
$ export AWS_KEY='some-key'
$ export AWS_SECRET='some-secret'
$ export AWS_REGION='ap-northeast-1'
```

これを python から取得出来るか試してみる。

```pycon:console
>>> import os
>>> os.environ.get('AWS_KEY')
'some-key'
>>> os.environ.get('AWS_SECRET')
'some-secret'
>>> os.environ.get('AWS_REGION')
'ap-northeast-1'
```

取得出来る事が確認出来たら、実際に自分に割り当てられたタグを取得してみる。

```pycon:console
>>> import os
>>> import urllib2
>>> from boto3.session import Session
>>> 
# メタデータ API から自分の instance-id を取ってくる。
>>> instance_id = urllib2.urlopen('http://169.254.169.254/latest/meta-data/instance-id').read()
>>> 
# aws api の Session 作る。
>>> aws = Session(aws_access_key_id=os.environ.get('AWS_KEY'),
...               aws_secret_access_key=os.environ.get('AWS_SECRET'),
...               region_name=os.environ.get('AWS_REGION'))
>>> 
# ec2 オブジェクト作る。
>>> ec2 = aws.resource('ec2')
# instance-id を指定して instance オブジェクト作る。いわばコレが自分自身。
>>> instance = ec2.Instance(id=instance_id)
>>> 
# タグをまるっと取ってくる。多少使いにくい形なので整形もしてる。
>>> tags = dict([(tag['Key'], tag['Value']) for tag in instance.tags])
# ココにだーっとリストされる。はず。
>>> tags
{'Name': 'API_PROD', ...}
```

個人的には Env なタグを必ず付けるようにしていて、それを見て読み込む設定ファイルを決めるようにしてる。
これをしとくと、同じ ami でも db まわりの設定や s3 のバケットなんかを実行時に変えれて便利便利 :-)
msys2でghq + zaw


仕事用のPCがWindowsなため普段はmsys2を使っているのですが、
つい最近 ghq + peco がすごく捗るという記事を見つけて色々試していました。

ghqでリポジトリ管理とpeco連携で快適git生活
http://qiita.com/strsk/items/9151cef7e68f0746820d

## 結論

**msys2じゃpeco動かん(T_T)**


コマンドプロンプトでは動くのですが、msys2からじゃ
ハングしてしまう・・・・

issue見てそれっぽいこと言っている人いたが結局解決されたのかも
わからず...

## 色々試したものの。。。

@b4b4r07 さんのこちらの記事に選択的インターフェイスがまとまっていたので
色々試してみました。
http://qiita.com/b4b4r07/items/9e1bbffb1be70b6ce033

msys2で動いたものは

- [zaw](https://github.com/zsh-users/zaw)
- [sentaku](https://github.com/rcmdnk/sentaku)

の2つでした。
(zsh製とbash製だから当たり前か。。。)

zsh使ってるのでzawを採用することに

## zaw source

インストールは

```
$ git clone git://github.com/zsh-users/zaw.git
$ echo "source ${PWD}/zaw/zaw.zsh" >> ~/.zshrc
```

そしてghqと連携するために以下のコードを sourceディレクトリ以下に追加

```zsh:ghq-list.zsh
function zaw-src-ghq-list(){
    candidates=($(ghq list))
    actions=(zaw-src-ghq-cd)
    act_descriptions=("ghq list")
}

function zaw-src-ghq-cd() {
    BUFFER="cd $(ghq root |sed -e 's|\\|\\\\|g') && cd $1"
    zle accept-line
}

zaw-register-src -n ghq-list zaw-src-ghq-list
```

自分の環境だと `ghq root` の結果にバックスラッシュが入ってくるので
置換してあげる必要があった

あとはキーバインドを登録すれば・・・

```
bindkey "^g" zaw-ghq-list
```

**動いた\\(^○^)/!!!**

## まとめ

~~僕もpeco使ってみたい~~

msys でpeco動いたよーって方いらっしゃったらぜひご教授ください～～～
C++ コードを内面からキレイに保つ 5 つのレシピ

自分で作ったオープンソースな C++ ライブラリ, メモリリークやバグの少ない状態で, いろいろな人に安心して喜んで使ってもらえるように, 普段から内面をキレイに保っておきたいですよね!　

ここでは C++ のコードを内面からキレイに保つレシピを集めてみました.

(追記) @MitsutakaTakeda さんの C++ コードのデトックスも合わせて読んで, この春, 一歩先行くぬけがけ美ワザを極めちゃお! http://qiita.com/MitsutakaTakeda/items/6b9966f890cc9b944d75

## Instruments

https://developer.apple.com/library/watchos/documentation/DeveloperTools/Conceptual/InstrumentsUserGuide/index.html

MacOSX ユーザであれば, XCode に付属(?)の Instruments がオススメ. GUI でお手軽にメモリのプロファイリングやリークの調査が行えます.

## Valgrind

https://valgrind.org/

昔からある実行バイナリをインストゥルメントして解析してくれるツール.
メモリ周りのチェックをするなら, `--tool=memcheck --leak-check=full` がオススメ.

## Sanitizers

https://github.com/google/sanitizers

Valgrind のようにメモリ周りのバグやリークを探してくれるツール. コンパイル時にオプションを指定してビルド(e.g. `-fsanitize=address`)しないといけないという制限がありますが, そのかわり Valgrind などのツールに比べて実行時のオーバヘッドが少ないのが利点です.

ASAN(Address Sanitizer) は昨今の gcc(少なくとも 4.8 以降), clang コンパイラに搭載されているのでお気軽に使えます. 最新版のコンパイラのほうがいろいろ expressive レポートしてくれます.

MSAN(Memory Sanitizer) は現在 x86 + Linux 64bit オンリーとなるので気をつけて. 

また, Valgrind との混在は危険なので気をつけましょう(大量にメモリ消費して Out-of-memory 起きたりします).

さらに, CUDA と混ぜると動かないよ(shadow memory あたり設定すればいけるっぽい)

https://github.com/google/sanitizers/issues/629\

## Coverity scan

https://scan.coverity.com/

静的解析ツール.
オープンソースの場合はオンラインで無料で利用できます. delete 忘れや, 未初期化変数のチェックなどをしてくれます.

お気に召したら, 上司へのおねだりリストに商用ライセンスを加えておきましょう.

Travis CI の連携と組み合わせて: https://scan.coverity.com/travis_ci

## scan-build

clang ベースの静的解析ツール. MacOSX だとプリコンパイルされたバイナリがあります.

http://clang-analyzer.llvm.org/scan-build.html

## Coverall

https://coveralls.io/

カバレッジレポートツール. C++ の場合は gcov フォーマットのカバレッジデータをレポートしてくれます. カバレッジを通らない不要なコードは削除してダイエットに励むのもよいですね!

Travis CI の連携と組み合わせて: https://github.com/eddyxu/cpp-coveralls
 
## LGTM

CodeQL でコードレビューしてくれるよ. 

https://lgtm.com/

最近 LTGM サービス提供していた Semmle 社 GitHub に買収されました(GitHub で今後 CodeQL サービスが提供されるかも?)

CodeQL(lgtm) + VSCode + C/C++ で静的(?)ソースコード解析をお手軽に極めたいメモ
https://qiita.com/syoyo/items/e0cfe3b5871c8cfe9d23

## Fuzzer

LGTM(CodeQL)とはちょっと違う方向でテストパターン多量に作って試す系.
 
Clangでファジング (-fsanitize=fuzzer)
https://qiita.com/snsinfu/items/67bd5196a53e5575c4b9

セキュリティ系のアプリ開発には役立つかも?

最近は ClusterFuzzLite で Github Actions などの CI で動かすのもできるようになっています.

ClusterFuzzLite でぺろっと C/C++ project の fuzzer を Github actions で走らせるメモ
https://qiita.com/syoyo/items/a87bf95bcdafa9a1e6c0


## GCC

GCC 10 から, 静的解析をする `-fanalyzer` が追加されています(experimental)

https://gcc.gnu.org/onlinedocs/gcc-10.1.0/gcc/Static-Analyzer-Options.html

## TODO

* Windows 系(Visual Studio 系)でいいのはないかな?
  * [ ] VS2019 あたりから, MSVC にも experimental で sanitizer サポートされているっぽいので試す.
npmのコマンドメモ

階層を指定してパッケージのリストを取得

npm list -g --depth=0

依存しているパッケージのバージョン確認を自動でしてくれるプラグイン
https://github.com/tjunnone/npm-check-updates

使い方

確認のみ
ncu

一括アップデート
ncu -u

パッケージを指定してアップデート
ncu -u react
PageSpeed Insightsの情報をhubotに教えてもらう


## なぜ作ったか
* CoffeeScriptに慣れたかった。
* Hubotにやってもらうことを増やしたかった。

## 利用させていただいたもの
https://github.com/addyosmani/psi

## 使い方
PCサイトの情報を知りたいときは

```
hubot psi google.co.jp desktop
```

スマートフォンサイトの情報を知りたいときは

```
hubot psi google.co.jp mobile
```

## ソースコード

```psi.coffee
psi = require('psi')

module.exports = (robot) ->
  message = (id, title, score, numberResources, numberHosts, totalRequestBytes
  , numberStaticResources, htmlResponseBytes, cssResponseBytes, imageResponseBytes
  , javascriptResponseBytes, otherResponseBytes, numberJsResources, numberCssResources)-> """


ʕ•ᴥ•ʔが教えるPageSpeed Insights！

domain: #{id}
name: #{title}
score: #{score}
numberResources: #{numberResources}
numberHosts: #{numberHosts}
totalRequestBytes: #{totalRequestBytes}
numberStaticResources: #{numberStaticResources}
htmlResponseBytes: #{htmlResponseBytes}
cssResponseBytes: #{cssResponseBytes}
imageResponseBytes: #{imageResponseBytes}
javascriptResponseBytes: #{javascriptResponseBytes}
otherResponseBytes: #{otherResponseBytes}
numberJsResources: #{numberJsResources}
numberCssResources: #{numberCssResources}

"""

  robot.respond /psi (.*)/i, (msg) ->
    matches = msg.match[1].split(' ')
    url = matches[0]

    if matches[1] == 'desktop' || matches[1] == 'mobile'
      strategy = matches[1]
    else
      strategy = 'desktop'

    locale = 'ja_JP'

    psi(url,
      nokey: 'true'
      strategy: strategy
      locale: locale).then (data) ->
      msg.send message(data.id, data.title, data.ruleGroups.SPEED.score, data.pageStats.numberResources, data.pageStats.numberHosts, data.pageStats.totalRequestBytes
      , data.pageStats.numberStaticResources, data.pageStats.htmlResponseBytes, data.pageStats.cssResponseBytes, data.pageStats.imageResponseBytes
      , data.pageStats.javascriptResponseBytes, data.pageStats.otherResponseBytes, data.pageStats.numberJsResources, data.pageStats.numberCssResources)
      return
```
Mac FireFoxでタブを一覧表示する

タブ開きすぎて目的のタブがわからなくなった時に使える小技。

<img width="949" alt="Screen Shot 2016-02-25 at 19.16.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/74328/740bde9f-7175-26e2-2d9c-ecdabc24b86a.png">


すかさず

```
Command + Shift + E
```

<img width="250" alt="Screen Shot 2016-02-25 at 19.15.50.png" src="https://qiita-image-store.s3.amazonaws.com/0/74328/910f5630-fb4d-f856-a1f5-0a8f263bbd45.png">


windowsは知らない....


タブグループという機能らしいんですけど、一覧性が良くて重宝しております。

もうすぐなくなるらしいんですけど！
Mozilla謹製のAdd-onが出るらしいんですけど！
Promiseでループ処理をする

以前[forループをPromiseで実装する方法](http://qiita.com/niusounds/items/c11ce4640e9dedc3e93f)の記事を書きましたが、別な方法で繰り返しを実装してみました。

## 問題

同期処理で以下のような処理の流れをPromiseを使った非同期処理に直したい。

```js
while(true) {
  a();
  var result = b();
  if (result) {
    c();
  } else {
    d();
    break;
  }
}

console.log('done');
```

上のコードの中で、`a()`,`b()`,`c()`,`d()`がそれぞれPromiseを返す非同期処理になる想定です。

## 解答

上記`while() { ... }`のブロック全体が一つのPromiseになると考えて、こうしてみる。

```js
var promise = (function loop() {
  return a()
    .then(b)
    .then(function(result) {

      if (result) {
        return c().then(loop);
      } else {
        return d();
      }
      
    });
})();

promise.then(function(){
  console.log('done');
});
```

再帰呼び出しは頭の体操になりますね。
Promiseはこういうのをもっと簡単に書けるようになるといいんだけどなぁ…
AWS Lambda で環境変数を実現する

alias を使えばそれっぽいことができます。


## 準備

* publish パラメータを付けてバージョニングを有効にする
* development, production などの環境名の alias を作成する


## ディレクトリ構造

```
├── config
│   ├── development.json
│   └── production.json
└── index.js
```

## ハンドラ

```js
function loadConfig(context) {
  var env = 'development';
  if (!!context.invokedFunctionArn) {
    env = context.invokedFunctionArn.split(':').pop();
  }
  return require('./config/' + env + '.json');
}

exports.handler = function(event, context) {
  var config = loadConfig(context);
  context.succeed(config);
};
```

invokedFunctionArn の末尾に alias が含まれるのでそれを使って設定ファイルをロードする。


alias ごとの環境変数設定オフィシャルで欲しいですね。

## 追記

標準で環境変数がサポートされたけど alias ごとには設定できないので alias でバージョンを切り替えるなどする場合にはまだ必要ですね…
【WordPress】.htaccessもapacheの設定もバッチリなハズなのに意図しないページが404になってお手上げ状態の時

WordPressで意図しないページが404になっちゃった！
記事は作れるのに生成されたリンクに飛ぶと404になってしまう。
「wordpress 404」などでググッてあの手この手を尽くしたけどどうにも上手く行かない時に見直すべきポイントを以下にまとめてみた。

# 改めて確認するポイント
## .htaccessの設定
パーマリンク設定をした時に「変更を保存」を押して、以下の.htaccessの設定をちゃんと反映できているかを確認する

```apache:.htaccess
<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /index.php [L]
</IfModule>
```

## apacheの設定
「AllowOverride All」の記述があるかを確認する

```apache:httpd.conf
<Directory "[ルートディレクトリの場所]">
    AllowOverride All // ← これを記述
</Directory>
```

# 大抵のことはググり尽くした!ググったことはとりあえずやったけどそれでも404になっちゃうの!

そういう時は答えを外に求めるのを一旦やめて、何か思い当たることはないか、考えてみる。

## 思い当たること
### パーマリンクでカスタム構造の設定をしている
パーマリンクを思い通りにしたくてあれこれ書いてみたとして、
そのパーマリンクの設定は正しく設定されているだろうか。
パーマリンク設定に不安があるのであれば、一旦デフォルトに戻して「変更を保存」してみる。

**パーマリンクの設定をデフォルトに直してもダメ!**

そんな時はパーマリンク設定の中でも**オプション**の箇所に何か設定を入れていないか確認をしてみる。
「カテゴリベース」「タグベース」に書かれている文字列があるならそれを一旦消して、「変更を保存」する。

**それでもうまくいかない!**

functions.phpにrewriteの設定をしている箇所が無いかを確認してみよう。
一旦そこを消して、もし上手く動いたのならばrewriteをしている箇所の見直しが必要ということになる。

**ここまでやってうまくいかない!**

ここまでやってもうまくいかないタイミングに出くわしたことはないので、
ここでこれ以上書けることも無い訳で...
DBを作りなおすか、環境構築から見直すなどの対応が必要かと...
手っ取り早いところで、何か悪さをしてそうなプラグインを停止してみるのが良いかもしれない。
Laravel5.2で認証機能を最速で作成


## プロジェクト作成
```bash
$ laravel new new_project
```

プロジェクトを作成したら、プロジェクトに移動

```bash
$ cd new_project
```

## DB設定
.envとconfig/database.phpでデータベースを設定する。

```.env
DB_HOST=localhost
DB_DATABASE={データベース名}
DB_USERNAME={ユーザーネーム}
DB_PASSWORD={パスワード}
```

```php:config/database.php
        'mysql' => [
            'driver'    => 'mysql',
            'host'      => env('DB_HOST', 'localhost'),
            'database'  => env('DB_DATABASE', 'forge'),
            'username'  => env('DB_USERNAME', 'forge'),
            'password'  => env('DB_PASSWORD', ''),
            'unix_socket'  => '/Applications/MAMP/tmp/mysql/mysql.sock',
            'charset'   => 'utf8',
            'collation' => 'utf8_unicode_ci',
            'prefix'    => '',
            'strict'    => false,
            'engine'    => null,
        ],

```

MAMPで作成するときは```'unix_socket'  => '/Applications/MAMP/tmp/mysql/mysql.sock',```を忘れずに。

## 管理画面を作成
```bash
$ php artisan make:auth
```

これでいろいろ作成される

## マイグレーション
```bash
$ php artisan migrate
```

## サーバー起動
```bash
$ php artisan serve
```

[http://localhost:8000/home](http://localhost:8000/home)にアクセスするとログイン画面に遷移するので、最初はユーザー登録から始める。
自分がJavaScript(ES5)のfor(var i = 0; i < array.length; i++)が嫌いな理由

JavaScript歴４ヶ月ぐらいですが頑張って書こうと思います。
Java出身の人がやりがちな書き方を見ていこうと思います。

#`for(var i = 0; i < array.length; i++)`の嫌いなところ
forの中で毎回length参照してるから遅くなるよねー
って話**ではない**です。（~~それももっともだけど！~~）

(2016/11/16)追記：`array.length`について
JITコンパイラさんが「固定値を返すメソッドに何度もアクセスする場合」には固定値として扱うように最適化されるため速度的にはあまり問題にならないみたいです。
参考資料：[Demystifying (JavaScript) Engines](http://slides.com/a0viedo/demystifying-js-engines#/3/2)

(簡単に言うとスコープ意識しましょうねっていう話です)
自分も初めの頃、for内宣言を書いていました。

# サンプル
例えば次のようなコードがあったとします。

```js:forTrap.js
var i = 3;
(function () {
    console.log('before-for:' + i);
    for (var i = 0; i < 10; i++) {
        console.log('in-for:' + i);
    }
    console.log('after-for:' + i);
} ());
```
このコードの`after-for:`のあとの数値はどうなるでしょう？

このコードを実行したときに、`after-for:3`が表示されると思った方…

**危ない！**

JavaScriptおじさんに捕まってしまいますよ！

JavaScriptのスコープを思い出してください。
JavaScriptのスコープは`{}`ではなく`function(){}`なので、宣言した`i`はfor文が終わっても残ります。
つまり`i`をループ変数としたfor文が2回でてくると2重宣言になるわけです。
これはあんまりよろしくないですね。

ということで、答えは`after-for:10`が出力されます。

そんなこたぁわかってるよ！ってみなさん
では、before-for:では何が出力されるでしょう？
今度こそ3…？


**危ないっ！**

JavaScriptおじさん講習会が始まっちゃいますよ！

答えは3ではなく`undefined`です。
JavaScriptの関数内でグローバル変数と同じ変数名の変数を宣言した場合、
関数内ではもちろんローカル変数が参照されます。
しかし、下の行で宣言しても**先頭で宣言された**扱いになります。
俗に言う「変数の巻き上げ」ってやつですね。

実はさっきのコードは

```js:forTrap2.js
var i = 3;
(function () {
    var i; //変数の巻き上げ
    console.log('before-for:' + i);
    for (i = 0; i < 10; i++) {
        console.log('in-for:' + i);
    }
    console.log('after-for:' + i);
} ());
```

と同じ動きとなるのでした。

ちなみに全部の出力結果(IE11)
![for.png](https://qiita-image-store.s3.amazonaws.com/0/115059/7049fbc9-b5af-8eae-4bd6-752315c785b6.png)


# まとめ
見た目と動作が違うと後でハマることがあるので、自分は見た目と動きは同じにしたいと思ってます。
(レガシーコードもりもりのJavaScriptを浴びたことがあるので…)
というわけで変数の宣言は関数の先頭で行い、for内での宣言はしないようになりました。
まぁ、ループ変数名が外のスコープと重なってハマるなんてなかなかなさそうですけどね～。