OmniAICreator/Qiita-1.07M huggingface dataset:
コンストラクタでの暗黙的super()呼び出し

Javaではサブクラスのコンストラクタで明示的にスーパークラスのコンストラクタ呼び出しを行わない場合についても暗黙的に呼び出しを行う。

```java
public class Sample {
    public static void main(String args[]) {
        Child obj1 = new Child();
    }
}

class Parent {
    Parent() {
        System.out.println("parent");
    }
}

class Child extends Parent {
    Child() {
        // super();
        System.out.println("child");
    }
}
```

```
# 実行結果
parent
child
```

引数ありのコンストラクタを呼び出した場合についても、引数なしのスーパークラスのコンストラクタが呼び出される。

```java
public class Sample {
    public static void main(String args[]) {
        Child obj2 = new Child("test");
    }
}

class Parent {
    Parent() {
        System.out.println("parent");
    }
}

class Child extends Parent {
    Child(String value) {
        System.out.println("child");
    }
}
```

```
# 実行結果
parent
child
```

スーパークラスにも引数ありのコンストラクタを定義した場合も、引数なしのコンストラクタが呼び出される。

```java
public class Sample {
    public static void main(String args[]) {
        Child obj2 = new Child("test");
    }
}

class Parent {
    Parent() {
        System.out.println("parent(引数なし)");
    }

    Parent(String value) {
        System.out.println("parent(引数あり)");
    }
}

class Child extends Parent {
    Child(String value) {
        System.out.println("child");
    }
}
```

```
# 実行結果
parent(引数なし)
child
```

なので、明示的に引数ありのコンストラクタを呼び出す必要がある。

```java
public class Sample {
    public static void main(String args[]) {
        Child obj2 = new Child("test");
    }
}

class Parent {
    Parent() {
        System.out.println("parent(引数なし)");
    }

    Parent(String value) {
        System.out.println("parent(引数あり)");
    }
}

class Child extends Parent {
    Child(String value) {
        super(value);
        System.out.println("child");
    }
}
```

```
# 実行結果
parent(引数あり)
child
```
EventEmitterでイベントリスナーを削除する


https://nodejs.org/api/events.html#events_emitter_removelistener_eventname_listener

追加は `on` だが削除は `removeListener` を使う。

```js
var callback = (stream) => {
  console.log('someone connected!');
};
server.on('connection', callback);
// ...
server.removeListener('connection', callback);
```

# 関連

EventEmitter2では `off` が使えるらしい。
http://yosuke-furukawa.hatenablog.com/entry/2013/12/28/145647
【論文シリーズ】RBMにおけるSpike & Slab法

## 原文
[Spike & Slab RBMによる、画像データの教師なし学習モデル (Unsupervised Models of Images by Spike-and-Slab RBMs)](http://goo.gl/cgnMWF)
Aaron Courville (2011)



## 1. 要約／背景
* 隠し変数を実数(正規分布)←Spike、2値←Slabのケースに分解したRBMモデル理論を確立した。
* 特徴量の数値化の表現の幅が広がり、画像データの扱いの精度が上がる。

## 2. 骨子の理論
(1)エネルギー関数
Spikeをh, slabをsで表現している。

```math
E(v,s,h)=-\sum_{i=1}^{N}v^T{\bf W}_is_ih_i + \frac{1}{2}v^T\Big(\Lambda + \sum_{i=1}^{N}\Phi_ih_i \Big)v \\ +\frac{1}{2}\sum_{i=1}^{N}\alpha_i s_i^2 - \sum_{i=1}^{N}\alpha_i\mu_is_ih_i - \sum_{i=1}^{N}b_ih_i + \sum_{i=1}^{N}\alpha_i\mu_i^2h_i 
```

(2)隠し変数の事後分布
活性化関数にシグモイド関数を置いた時、次のように表現される。

```math
\begin{align}
P(h_i = 1|v)&=\frac{1}{p(v)}\frac{1}{Z_i} \int \exp\{-E(v,s,h)\} ds \\
&= \sigma \Big(\frac{1}{2}\alpha_i^{-1}(v^T{\bf W}_i)^2 + v^T{\bf W}_i\mu_i -\frac{1}{2}v^T\Phi_iv + b_i \Big)
\end{align}
```


## 3. モデル適用例
CIFAR-10の画像40000枚を学習させたうえで、10000枚のテストをさせた。

![151130194724_3.JPG](https://qiita-image-store.s3.amazonaws.com/0/127228/24acf7b9-aa92-35dd-9d73-71fbc2d5c53e.jpeg)

ssRBMが本論文のモデルである。突出したパフォーマンスではないが、有効なアウトプットを出せている。
おすすめフリーソフト一覧

オススメのフリーソフトの一覧を書く


## rLogin
SSHでログインする為のツール。
一度ログインするとID,パスワードを記録してくれるので、クリックするだけでログインすることができるようになる。日本語表示にも対応していて、とても使いやすいツール
http://nanno.dip.jp/softlib/man/rlogin/


## FileZilla
SSHを使ってファイルの送受信を行えるツール。
https://osdn.jp/projects/filezilla/releases/65786
staticメソッドのオーバーライド

staticメソッドはクラス固有のものであるためオーバーライドができない（下記例）。

```java
public class Main {
    public static void main(String[] args) {
        Parent obj = new Child();
        obj.hoge();
        obj.piyo();
    }
}

class Parent {
    public static void hoge() {
        System.out.println("parent");
    }

    public void piyo() {
        System.out.println("parent");
    }
}

class Child extends Parent {
    // もちろん@Overrideアノテーションを付けるとコンパイルエラー
    public static void hoge() {
        System.out.println("child");
    }

    @Override
    public void piyo() {
        System.out.println("child");
    }
}
```

```
# 実行結果
parent
child
```
ダウンキャストについて

###スーパークラスをサブクラスでキャストした場合（ダウンキャスト）
<hr>

```java
public class Hoge {
    public static void main(String[] args) {
        Child child = (Child)new Parent();
    }
}

class Parent {
    //
}

class Child extends Parent {
    //
}
```

* コンパイルは成功し、実行時にClassCaseExceptionが発生

###ダウンキャストが許される場合
<hr>

```java
public class Hoge {
    public static void main(String[] args) {
        Parent parent = new Child();
        Child child = (Child)parent;
    }
}

...(以下略)...
```

ダウンキャストは一度Childで作ったインスタンスをParentにキャストし再度Childへと落とす場合のみOK
Android-x86 で任意の画面サイズでの起動を可能にする

#概要
　[Android-x86](http://www.android-x86.org/) を [VirtualBox](https://www.virtualbox.org/) で使うときに、任意の画面サイズを指定する方法のメモ。 Windows での手順であるが、 Ubuntu でも同様の方法を使うことができる。

#前提条件
- VirtualBox のインストール先: ```C:\Program Files\Oracle\VirtualBox\``` （デフォルト）
- Android-x86 のバージョンは Android-x86 4.4-r5

#手順

1.VirtualBox に画面モード追加
　仮想マシンが立ち上がっていない状態で、コマンド1を実行する。

```powershell:コマンド1
 "C:\Program Files\Oracle\Virtualbox\VBoxManage.exe" setextradata 仮想マシン名 CustomVideoMode1 360x640x16
```

注）360x640x16 は 横幅×高さ×色数を表すが、色数は必ず 16bit 固定にすること
注2）横幅よりも高さが大きければ、Android は縦画面になる

2.起動オプションで追加した VGA モードのコードを確認
　仮想マシンを立ち上げ、 GRUB の起動メニューで <kbd>a</kbd> キーを押し、追加パラメータ ```vga=ask``` を入力して、 <kbd>Enter</kbd> を押す。
　VGA モードの一覧が出たら、追加した画面モードのコードをメモする。ここでは仮に 13D とする。なお、メモしたコードは 16 進表記であり、使用するのは 10 進数に直したもの。

3.GRUB の起動メニューに "追加した画面モードのサイズで起動する選択肢" を追加
　仮想マシンをリセットして再起動し、 "Android-x86 4.4-r5 (Debug mode)" を選択して、 Android をデバッグモードで起動し、コマンド2を実行する。

注）なお、入力の際にはキーボードが US キーボード配列として扱われる

```bash:コマンド2
mount -o remount,rw /mnt
vi /mnt/grub/menu.lst 
```

　最初の title Android～ を含めた 3 行をコピーして、タイトルを変更し、 2 行目の最後尾に ```vga=XXX``` を追加する。 ```XXX``` の部分には 1. でメモしたコードを 10 進数に直した値を入れる。 13D の場合であれば、 317 。

　保存して、 vi を終了し、 ```exit``` を 2 回入力し、コマンドモードを抜ける。

4.Android の起動
　仮想マシンを再起動し、新たに追加した選択肢を選択すれば、追加した画面モードのサイズになって Android が起動する。

#参考文献

1. [Android x86 を仮想環境 (VMware/VirtualBox/Parallels) にインストールしてリモートデバッグする方法](http://qiita.com/ytabuchi/items/f087252572839eb8400a)
2. [Android-x86 4.4-r2(VirtualBox)の画面解像度の変更: 猫にコ・ン・バ・ン・ワ](http://nuneno.cocolog-nifty.com/blog/2015/01/android-x86-4-1.html)
3. [VirtualBoxで動かすAndroidの画面を縦画面にする パソコン鳥のブログ/ウェブリブログ](http://vogel.at.webry.info/201512/article_4.html)
public修飾子を指定したクラス定義の注意点

Javaでは1ソースファイル中でpublic修飾子を付したクラスは１つしか定義することができない。

```java
public class Hoge {
    public static void main(String[] args) {
        ...
    }
}

public class Piyo {
    ...
}
```

通常のクラス定義だけでなく、インターフェースや抽象クラスを同一ファイルで定義する場合も同じ。

```java
public class Hoge implements Piyo {
    public static void main(String[] args) {
        ...
    }
}

public interface Piyo {
    ...
}
```

```java
public class Hoge extends Piyo {
    public static void main(String[] args) {
        ...
    }
}

public abstract class Piyo {
    ...
}
```
EC2からRDS(MySQL)に接続できない。セキュリティグループの設定について・・・

EC2からRDS(MySQL)に接続するときに悩んだのでメモ

##準備すること
1. EC2で仮想サーバを立ち上げる(今回はhttpd,php,mysql)
2. RDSでデータベースを立ち上げる(今回はMySQL)

仮想サーバの立ち上げとMySQLの立ち上げ方法はドットインストールを参考にしながらやってみてください。
http://dotinstall.com/lessons/basic_aws
仮想サーバの立ち上げ #02~#08
データベースの立ち上げ #10~#11

ドットインストールを参考にしてうまく接続がいった方は以下は見る必要ありません！笑

---
##EC2からRDSに接続
###①自分のPCからEC2に接続
EC2のインスタンスへの接続から下図の赤枠の部分をコピペして接続！
<img width="833" alt="スクリーンショット 2016-06-17 17.57.23.png" src="https://qiita-image-store.s3.amazonaws.com/0/121620/e7ea92f5-b6ac-4b8c-a74a-a4a15eddc5d4.png">

###②EC2からRDSに接続
RDSのインスタンスの構成の詳細から【DB名】、【ユーザ名】、【エンドポイント】、【ポート】を確認(下図の赤枠)
<img width="875" alt="スクリーンショット 2016-06-17 15.08.44.png" src="https://qiita-image-store.s3.amazonaws.com/0/121620/068cf7a8-a547-a4ff-50b5-f6af54b4a50a.png">
EC2から以下のコマンドを打ち込んでRDSに接続します！
パスワードを聞かれるので、MySQLのマスターパスワードを設定したと思うのでそれを入力してください。

```
$ mysql -h エンドポイント -P ポート -u ユーザ名 -p DB名
Enter password: 
```
接続できれば成功です。
もしここでエラーが起こる場合はセキュリティグループの設定が間違っている可能性があります。

###③セキュリティグループの設定
RDSのセキュリティグループは上図の青枠部分で確認ができます！
ここのセキュリティグループがEC2のサーバと同じであることを確認してください！
違う場合は変更します。変更ができたらEC2のセキュリティグループからEC2のセキュリティグループ(他にもいくつかグループがあるので注意)を選択しインバウンドを編集します。
そして、MySQLを追加します。(下図の赤枠が追加したもの)
<img width="1156" alt="スクリーンショット 2016-06-17 15.23.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/121620/3d01ca8d-e2a6-839e-974d-749ed02fd9c4.png">
同様にしてアウトバウンドも編集します。(下図の赤枠が追加したもの)
<img width="1162" alt="スクリーンショット 2016-06-17 15.23.55.png" src="https://qiita-image-store.s3.amazonaws.com/0/121620/9d8ce6e5-8f60-f568-8d70-e27cdbc40fa4.png">
あとは再度②を行ってMySQLに接続します。

自分の場合、セキュリティグループの設定がうまくいっていなかったため、EC2からRDSへの接続がうまくいきませんでしたが、上のような設定をすることで接続することができました。
同じように悩んでいる人の助けになれば幸いです。
git 删除不需要的本地分支・远程分支


# 本地分支

### 查看分支列表

+  查看本地分支列表

```bash
$ git branch
master 
gh-pages
```

### 删除本地分支
+ 删除merge了的分支

```bash
$ git branch -d gh-pages
```
+ 删除分支（不管它有没有merge）

```bash
$ git branch -D gh-pages
```

# 远程分支

### 查看分支列表

+  查看远程分支列表

```bash
$ git branch -r
origin/HEAD -> origin/master
origin/gh-pages
origin/master
```

+  查看本地分支与远程分支列表
```bash
$ git branch -a
master
gh-pages
origin/HEAD -> origin/master
origin/gh-pages
origin/master
```

### 删除远程分支

+ 删除远程的foo 分支


```bash
git push --delete origin foo
```

或者

```bash
git push origin :foo
```
Riot.jsでeach属性を使っていろんな配列を表示する（追記あり）

# はじめに
`Riot.js`では`each`属性を使って簡単にループ処理を書けるのですが、地味にこけるポイントだと思いますので書きました。現時点のRiot.jsの最新バージョンは`2.4.1`です。


# まずは単純な配列でeach
何はともあれコードを見ましょう。

```html:simple_array.tag
<app>
  <!-- layout -->
  <ul>
    <li each="{ key in tasks }">{ key }</li>
  </ul>

  <!-- javascript -->
  <script>
    this.tasks = ['hoge','fuga','piyo'];
  <script>
</app>
```
結果は以下です。

```js
// hoge
// fuga
// piyo
```

何の変哲もなく、ただの文字列配列を`each`で出力しているだけですね。ちなみに`each={ tasks }`と書くと、何も出力されません。

# キー無しのオブジェクト配列でeach
そもそもこの呼び方が正しいのか否かは目を瞑っていただいて、先程よりちょっと中身が複雑な配列の場合のコードを見てみましょう。

```html:object_array.tag
<app>
  <!-- layout -->
  <ul>
    <li each="{ tasks }">{ body }</li>
  </ul>

  <!-- javascript -->
  <script>
    this.tasks = [
      {'body': 'hoge'},
      {'body': 'fuga'},
      {'body': 'piyo'}
    ];
  </script>
</app>
```

結果は以下です。

```js
// hoge
// fuga
// piyo
```

今度は配列の要素それぞれがオブジェクトになっており、それぞれのキーは`body`で統一されています。値を出力する際は`{ キー }`を指定すれば表示されます。


上記の`layout`部分を以下のように書くと、各オブジェクトのインデックスも表示できます。

```html:object_array.tag
<!-- layout -->
<ul>
  <!-- ここの 'task' と 'i' の順番が重要！ -->
  <li each="{ task, i in tasks }">{ i }: { task.body }</li>
</ul>
```

結果は以下です。

```js
// 0: hoge
// 1: fuga
// 2: piyo
```

# キー有りのオブジェクト配列の場合
ある意味これが本題です。ここでコケました。

```html:object_array.tag（キー有り）
<app>
  <!-- layout -->
  <ul>
    <li each="{ task, key in tasks }">{ key }: { task.body }</li>
  </ul>

  <!-- javascript -->
  <script>
    this.tasks = {
      'a': {'body': 'hoge'},
      'b': {'body': 'fuga'},
      'c': {'body': 'piyo'}
    };
  </script>
</app>
```

結果は以下です！

```js
// [object Object]:
// [object Object]:
// [object Object]:
```


はい。キー無しのオブジェクト配列と同じように記述すると、思ったように値を表示できないんですよ。。。これを期待通りに表示するには、`layout`部分の`key`と`task`を先ほどとは逆に書きます。

```html:object_array.tag（修正版）
<!-- layout -->
<ul>
  <!-- 'task' と 'key' の順番がさっきとは逆！ -->
  <li each="{ key, task in tasks }">{ key }: { task.body }</li>
</ul>
```

もちろん結果は以下です。

```js
// a: hoge
// b: fuga
// c: piyo
```

### 2016/12/08 追記
上記はv3にて修正され、反転しなくても良くなりました。
　
ループのネストについては別の方が記事を書いてくださっているので、そちらを参照ください。（「参考」の二つ目の記事です）

※ もう一つ注意点として、eachの中で`opts`変数の中身を展開しようとするとできないので気をつけてください！

# おわりに（読まなくてもいいです）
`each`でループについての投稿記事って案外なくて書きましたが、知っている方からしたら常識かもしれませんが、このレベルの記事もないくらい、まだまだ`Riot.js`って使われてないんですかね。もっと皆さんに使っていただきたいと思う今日このごろです。

# 参考

- [javascriptの連想配列と配列の違い](http://qiita.com/katsukii/items/168bee174073ae7ec7e4)
- [Riot.jsでループを入れ子にするときは in を使ったほうがいいね](http://qiita.com/kijtra/items/97380f8554fa5083d83d)
Aerospikeのデータモデル・型について


こんにちは、株式会社D2C 技術開発部の二瓶（にへい）です。

前回(http://qiita.com/d-tech/items/53e57c8cc425530d6e28 )に続いて、今回はAerospikeのデータモデルなどのお話しです。
KVS(Key-Value Store)なのでRDBより覚えることは少ないです。

### Aerospikeシステム構成について
---------------------------------------
#### ***データモデル(Data Model)***
簡単に言うとデータ管理方式の概念です。
RDBではお馴染みのテーブル、レコードみたいなところですね。

##### ***Namespaces***
データを入れる一番大きい管理単位です。
RDBでいうところの狭義の「データベース」に近いものと思ってください。
"**データベース名**"とかで使う時のアレです。

こんな感じの図の赤い部分のイメージです。
![aero_2-001.png](https://qiita-image-store.s3.amazonaws.com/0/111999/706130b4-9589-92dc-e1b1-3650a685978b.png)

##### ***Sets***
Namespacesの中に作成します。データを保持する"**表**"ですね。
RDBでいうところの「テーブル」です。

こんな感じの図の赤い部分のイメージです。
![aero_2-002.png](https://qiita-image-store.s3.amazonaws.com/0/111999/d81a2ae7-f894-943a-8fcc-0a3086ff4867.png)

##### ***Records***
Setsの中に作成します。データを保持する"**行**"ですね。
RDBでいうところでも「レコード」ですね。

こんな感じの図の赤い部分のイメージです。
![aero_2-003.png](https://qiita-image-store.s3.amazonaws.com/0/111999/df5d21e0-a78a-d3a8-3be8-745eb1c63524.png)

##### ***key***
この辺からRDBの概念から外れてきます。
プログラムのハッシュテーブルのキー(KEY)に近いものです。
RDBで無理やり例えると、プライマリキーが指定されたカラムですかね。違う部分もありますが。
![aero_2-004.png](https://qiita-image-store.s3.amazonaws.com/0/111999/fe5a82ac-7ed2-0392-0566-a6f87200b4af.png)

##### ***Bins***
プログラムのハッシュテーブルの値(VALUE)に近いものです。
ここでも無理やりRDBで例えると、値が入ってるカラムですかね。これも違う部分ありますが。

こんな感じの図の赤い部分のイメージです。
![aero_2-005.png](https://qiita-image-store.s3.amazonaws.com/0/111999/89b3d2c3-4832-18a4-0776-6039037cb94c.png)

##### ***Metadata***
Recordsの属性情報ですね。以下を保持してます。
・generation・・・(更新の)世代
・TTL(time-to-live)・・・生存時間（削除までの秒数）

##### ***データモデルまとめ***
![aero_2-006.png](https://qiita-image-store.s3.amazonaws.com/0/111999/16175057-3db1-7de2-3e62-8fe7a72c09d1.png)

### 4.データ型について
---------------------------------------
新しいKVSだけあってRDB並みのデータ型が用意されています。
バイナリデータやコレクション型もあるので、プログラム側でゴニョゴニョやる作業が減らせます。
「NativeFormats」を使えば自作クラスをリスト変換とかもしなくていいみたいです。
![aero_2-007.png](https://qiita-image-store.s3.amazonaws.com/0/111999/dc5eb69d-224c-bdd4-b339-c43c3f087265.png)


今回はここまでになります。
では、また次回。
Blade(laravel)でcontroller名の取得

bladeでcontroller名でif分作る時とか便利。

```app/Http/helper.php  
function controllerName() {
    return substr(class_basename(Route::currentRouteAction()), 0, (strpos(class_basename(Route::currentRouteAction()), '@') -0) );
}
```
とかを作っておいて、

```index.blade.php
@if (controllerName()　== "PagesController")
  <h1>Pagesコントローラー</h1>
@else
  <h1>Pagesコントローラーじゃない</h1>
@endif

とか。
ある特定のEC2インスタンスをマネジメントコンソールから起動・停止だけさせたい場合に設定するポリシー

# ポリシー
```json
{
    "Version": "2012-10-17",
    "Statement": [
        {
            "Effect": "Allow",
            "Action": [
                "ec2:DescribeInstances"
            ],
            "Resource": "*"
        },
        {
            "Effect": "Allow",
            "Action": [
                "ec2:StartInstances",
                "ec2:StopInstances"
            ],
            "Resource": [
                "arn:aws:ec2:[region]:[account_number]:instance/[instance_id]"
            ]
        }
    ]
}
```

# ちょっと気になる点
- 関係ないインスタンス一覧が見られてしまう
- 上記に関連してアラームのステータスがずっとロード中...
Universal Links サーバー側の対応


# 対応すると何が起きるか

- クライアントのAssociated Domainsに設定されたドメインに対して、'apple-app-site-association'ファイルを取得しに行く
- 具体的なパスは domain/.well-known/apple-app-site-association 及び domain/apple-app-site-association
- アクティブユーザー数が iOS >> Webなサービスの場合、想定外のアクセスが来る可能性がある

※ [App Search Api Validation Tool](https://search.developer.apple.com/appsearch-validation-tool/) で叩いた時とほぼおなじリクエストが来ます。

# 対策

## Appサーバーまでリクエストがいかないようにする

上記の２パスに結構アクセスが来るので、Appサーバーまで行っちゃうと面倒なことになります。

今回は運用も考えて、上記のパスに来た場合はリバースプロキシを用いてS3にファイルを取りに行ってもらうようにしました。Universal Linksのみの場合は apple-app-site-association ファイルに対して特に署名する必要も無いので、クライアントさんの都合で書き換えてもらう感じを想定しています。

## 余談

昔と比べて、アプリの夜中一斉更新がなくなったので、ダラダラとスパイクもなくまんべんなくアクセスが来る感じでした。

![スクリーンショット 2016-06-17 17.39.12.png](https://qiita-image-store.s3.amazonaws.com/0/9186/15544c96-51c1-9eb2-c06b-c5271c39391f.png "スクリーンショット 2016-06-17 17.39.12.png")
git commit時に文法ミスやブランチを間違ってたらcommitを中止する

Git commit時に間違ったブランチにcommitや文法ミスに気づかないでcommitしてしまうのを防ぐために事前に防ぐスクリプトを書いたのでメモします。


#Git Hookの設定をする

pre-commitファイルを作成する。

```bash
$ vim .git/hooks/pre-commit
```

以下のように編集する。

```bash
#!/bin/bash

#PHPの文法ミスのチェック
set -e
trap 'exit 1' ERR

find '<対象ディレクトリのパス>' -name "*.php" | xargs -n1 php -l

#branch間違いのチェック
PREVENT_COMMIT_BRANCH='master'
CURRENT_BRANCH=$(git symbolic-ref HEAD | sed -e 's,.*/\(.*\),\1,')

if [$PREVENT_COMMIT_BRANCH = $CURRENT_BRANCH]
then
        exit 1
else
        exit 0
fi
```

文法ミスのチェックでしているパスですが、広範囲だとcommitに時間がかかっているので、特に気になる部分にフォーカスしたパスを指定して、いくつか文法チェックすると良い。
なお、デフォルトであるpre-commit.sampleなども参考にすると良い。

実行権限を与える。

```bash
$ chmod +x pre-commit
```

以上で、もし文法ミスやブランチが間違っているとcommittを中止してくれるようになる。

実際に文法ミスを含めてcommitすると、例えば、以下のようにエラーが出てcommitを誤ってしなくなる。

```bash
$ git commit
PHP Parse error:  syntax error, unexpected 'if' (T_IF) in '<PATH>'/hoge.php on line 54
xargs: php: 終了ステータス 255。中止しています
```

#(追記) Git Hookの種類

Git Hookには以下のような種類が存在する。

```
#am系
applypatch-msg
pre-applypatch
post-applypatch

#commit系
pre-commit
prepare-commit-msg
commit-msg
post-commit
post-rewrite

#rebase系
pre-rebase

#checkout系
post-checkout

#merge系
post-merge

#push系
pre-push
pre-receive
update
post-receive
post-update

#git-receive-pack系
push-to-checkout

#gc系
pre-auto-gc
```


#参考
##シェルスクリプト
http://blog.suz-lab.com/2012/09/try-catch.html
##Git hook挙動
https://dev.ghost.org/prevent-master-push/
http://qiita.com/fnobi/items/98bd5d1c83c010842733
##Git hook種類
https://git-scm.com/docs/githooks
http://qiita.com/mima_ita/items/dcaa3789022d2a9ab929
Shell | zsh を使っているけどコンソールで sh や bash を使いたい

`$ sh` と打てば sh モードが使える。
`$ bash` と打てば bash モードが使える。

# 画面

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/12ac1e7f-a002-eb47-c6df-e31d0abcefd1.png)

# 終了

モードを抜けるときは `exit` 。

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/20d99d15-0cb1-a3df-87be-32c1d38a33a3.png)

# 動機

- zsh と bash でけっこう挙動が違うため。 zsh 特有の挙動なのに「 bash の動作だ 」と誤解することが多かった。
- bash の動作確認をするときは zsh でやらず、ちゃんと bash / sh モードを使ったほうが良い。

# 環境

- sh 3.2
- bash 3.2








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
初めての Nginx の日記


授業のグループ課題で Rails をデプロイしなければならないので, Nginx の勉強を初めてみた.

ネットワークのこととか何もわからない学生がNginx unicorn rails で AWS にデプロイするまでの日記(自分用のメモなのでゴミかす汚い)

## 1日め

1. vagrant で CentOS7.0 の環境を作る 
1. nginx をインストール
1. `/etc/nginx/conf.d/default.conf` を `/etc/nginx/conf.d/local.conf` にコピー
1. `/etc/nginx/conf.d/default.conf` を `/etc/nginx/conf.d/default.conf.bk` にしておく


`/etc/nginx/conf.d/local.conf` をいじってみる


```/etc/nginx/conf.d/local.conf
server {
    listen       80;
    server_name  localhost;

    access_log  /var/log/nginx/access.log;

    location / {
        root   /usr/share/nginx/html;
        index  index.htm;
        proxy_pass http://localhost:80;
    }

    error_page   500 502 503 504  /50x.html;
    location = /50x.html {
        root   /usr/share/nginx/html;
    }

}
```



nginx を再起動して `curl http://localhost` を叩いてみる
index.html が返ってるくると思ってたら, 何も帰ってこない.

ログには `127.0.0.1 - - [17/Jun/2016:10:11:36 +0200] "GET / HTTP/1.0" 499 0 "-" "curl/7.29.0"` がいっぱい書いてあった

## 2日め

期間が空いてしまったけど頑張る

とりあえず, vagrant 上で rails s できるようにする

1. rbenv で ruby のインストール
1. mysql  のインストールで詰まったけど[ここ](http://qiita.com/dalaito0514/items/5892cbaf7b6f26bafb9d#mysql%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)で解決
1. [git flow のインストール](http://qiita.com/drapon/items/a510613ecb5b8dfaea45)
1. ファイアーウォール関連がだめだったので[参考1](http://fuzz-jpn.com/blog/vagrant_rails_server_browser/), [参考2](http://qiita.com/koitatu3/items/40a736d15651c1978e12#iptables-service%E3%82%92%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC
%E3%83%AB%E3%81%97%E3%81%A6%E8%B5%B7%E5%8B%95)で解決

ファイアーウォール
`vi /etc/sysconfig/iptables`
で設定を確認

```/etc/sysconfig/iptables

  *filter
  :INPUT ACCEPT [0:0]
  :FORWARD ACCEPT [0:0]
  :OUTPUT ACCEPT [0:0]
  -A INPUT -m state --state ESTABLISHED,RELATED -j ACCEPT
  -A INPUT -p icmp -j ACCEPT
  -A INPUT -i lo -j ACCEPT
  -A INPUT -m state --state NEW -m tcp -p tcp --dport 22 -j ACCEPT
  -A INPUT -p tcp -m tcp --dport 3000 -j ACCEPT
  -A INPUT -p tcp -m tcp --dport 80 -j ACCEPT
  -A INPUT -j REJECT --reject-with icmp-host-prohibited
  -A FORWARD -j REJECT --reject-with icmp-host-prohibited
  COMMIT
```

dport のあたりを使いたいポートに指定しとく 


`ystemctl start iptables.service` これでiptabels を再起動 


起動 & mac からアクセス出来た 

### unicorn の設定 
[Rails 4.2 + Unicorn + Nginx でアプリケーションサーバの構築](http://qiita.com/Salinger/items/5350b23f8b4e0dcdbe23) ここみたら出来た



## nginx の  設定 
nginx を起動しているユーザをroot にすべき
http://qiita.com/okitsutakatomo/items/d98e3f4e9120c622ac44

unicorn の sock と nginx の sock をあわせる

ホストPCから見れた

と思ったら怒られた

production の シークレットなんちゃらを設定 


見れたけど アセットプリコンパイルしてなかった 
のでした

```
bundle exec rake assets:precompile RAILS_ENV=production
```

しかし, だめ

nginx の location に assets を追加しなきゃダメっぽいん

```
location /assets/ {
  root   /rails_root/public; # 明示的にこれを追加
}

```


でけた!

## 参考
[Centosにrails環境を構築](http://qiita.com/dalaito0514/items/5892cbaf7b6f26bafb9d#mysql%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB)

[CentOSにgit-flowをインストールする方法](http://qiita.com/drapon/items/a510613ecb5b8dfaea45)
AWS SDKをデフォルト設定で使い、Kinesis StreamにPutRecordする際のリトライについて公式ドキュメントを調べた際のメモ

AWS SDKをデフォルト設定で使い、Kinesis StreamにPutRecordする際のリトライについて公式ドキュメントを調べてみました。

- 情報源
    - http://docs.aws.amazon.com/ja_jp/streams/latest/dev/kinesis-record-processor-duplicates.html
- メモ
    - Kinesis StreamのPutRecordはネットワーク関連のタイムアウトに対して3回までリトライを実施する
    - 送信側に受信成功のレスポンスが届く前にタイムアウトになる可能性があり、この場合はリトライによってレコードが重複する
    - リトライ間隔はExponetial Backoffアルゴリズムによって決定される
        - https://docs.aws.amazon.com/ja_jp/general/latest/gr/api-retries.html
        - リトライ間隔を試行回数に応じて指数関数的に増加させる
- 分かっていないこと（ご存知の方は教えて頂けると嬉しいです）
    - 実際のリトライ間隔がどういう値になるのか？
developブランチに直接コミットしたものを抽出

ちょっと自信ないですが、こんな感じでいけるはず。マージコミットと、それに紐づくものを除けば、直コミットものがとれるというもの。

便宜上、最新タグから基準にしています。

```
git log --date=short --pretty=format:"%H %cd [%s] <%an> <%ae>" --no-merges --first-parent $(git describe --tags `git rev-list --tags --max-count=1`)..origin/develop;
```
Ruby on Railsチュートリアルを進めて、has_secure_passwordあたりでテストしたら「NoMethodError: undefined method `password_digest=」と出た場合の解決法について


# 問題
[Ruby on Rails チュートリアル：実例を使って Rails を学ぼう](http://railstutorial.jp/)を進めていて、第6章の、has_secure_passwordあたりでテストしたら「NoMethodError: undefined method `password_digest=」と出てテストが通らない。

# 原因
どうやら、test用のDBにdevelopment用のDBの内容が反映されないからのようだ。
なお、使用Railsのバージョンは、4.2。

# 解決策
ターミナルで`rake db:test:prepare`で解決するようだ。少なくとも、自分は今それで解決してテストも通るようになった。


```Terminal
$ rake db:test:prepare
```

# 参考URL
- [railstutorial やったメモ - decadence](http://krrrr.hatenablog.com/entry/2014/05/19/012928)

（以下、同じ問題だけど解決してない）
- [ruby on rails - NoMethodError (undefined method `password_digest=' for #<User:0x007f036c8ffe50> - Stack Overflow](http://stackoverflow.com/questions/26956231/nomethoderror-undefined-method-password-digest-for-user0x007f036c8ffe50)
- [ruby - cant use has_secure_password, password_digest error - Stack Overflow](http://stackoverflow.com/questions/7759025/cant-use-has-secure-password-password-digest-error)
Capistranoで簡単デプロイ

## 概要
capistranoを使ったデプロイ方法のメモ。
gitからソースを取得して本番に反映させるだけなので、ruby以外のプロダクトでも利用可能。

## 環境
- Capistrano Version: 3.5.0 (Rake Version: 11.2.2)
- ruby 2.3.1p112

## capistranoのインストール

Gemfileを作成

```rb:Gemfile
source 'https://rubygems.org'

gem 'capistrano', '~> 3.5'
```

インストール

```
$ bundle install --path vendor/bundle
$ bundle exec cap install
```


## capistranoの設定

最低限の設定のみ行う。

全体の設定ファイル。

```rb:config/deploy.rb
# レポジトリ設定
set :repo_url, 'https://user_name:pass_word@github.com/user_name/web_app.git'
# シンボリックリンクにするディレクトリ
set :linked_dirs, fetch(:linked_dirs, []).push('log')
# デプロイ先でのソースのバージョンの保持数
set :keep_releases, 5
# コマンド実行時にsudoをつけるか
set :use_sudo, false
```

環境ごとの設定ファイル。下記はproduction用。

```rb:config/deploy/production.rb
# deploy先のサーバー情報
role :web, %w{user@server.com}
# deployするディレクトリの場所
set :deploy_to, '/home/user/source'

set :ssh_options, {
  port: 22,
  forward_agent: true,
  # ssh秘密鍵の場所
  keys: ['~/.ssh/id_rsa']
}
```

## taskの作成

deploy後に実行するタスクを作成する場合。
ここではデプロイ後にメールを送信するタスクを作成してみる。

```rb:lib/capistrano/tasks
namespace :mail do
  desc 'send mail after deploying.'
  task :send do
    on roles(:all) do
      # コマンドの標準出力結果を取得
      output = capture "hostname"
      execute "echo #{output} | mail -s 'subject' 'user@mail.com'"
    end
  end
end

# deploy後に実行する場合
after 'deploy:finishing', 'mail:send'
```

## デプロイ

```
$ bundle exec cap production deploy
```

## ssh keyのforwarding設定
git cloneするための秘密鍵を、デプロイ先のサーバーに設置せず、capistranoサーバーに設置してforwardingする方法。

### 鍵を作成する

```
$ ssh-keygen -t rsa -b 4096
```

この鍵の公開鍵をGitに登録する。
また、capistranoサーバーの`~/.ssh/`に秘密鍵を設置する。
つまり、capistranoでデプロイ先にssh接続するための鍵と、デプロイ先でgit cloneするための鍵は共通になる。

### ssh-add
capistranoサーバーでssh-addする。
こちらは、deployサーバーにsshでログインする度に実行する必要があるので、~/.bash_profileなどに記載しておくとよい。

```
$ eval `ssh-agent`
$ ssh-add ~/.ssh/id_rsa
$ ssh-add -l
```

### capistranoのconfig設定
`config/deploy/development.rb`に作成した秘密鍵のパスを定義する。

```rb:config/deploy/development.rb
server '192.168.33.13', user: 'cap', roles: %w{app}

set :ssh_options, {
  port: 22,
  forward_agent: true,
  keys: ['~/.ssh/id_rsa'],
}

set :deploy_target, 'app'
set :branch, :master
```

以上


## 参考
- [Capistranoでのsudoの書き方](http://orangain.hatenablog.com/entry/capistrano-sudo)
- [capistranoでデプロイする時のssh-key周りのTips](http://qiita.com/Takkiii/items/c4f2cfd143e97e061e66)
【PHP/Laravel】Laravelでサーバを立ててみる

# はじめに
Macの**Apacheがセットアップ**できない……
などと困っている人に向けて、とりあえず簡易的なWebサーバを探していたら、
[Laravel](http://laravel.jp/)の機能にそんな感じのものがあったので、とりあえず起動させてみます。
※[Laravel](http://laravel.jp/)ってのは、PHPの[フレームワーク](http://e-words.jp/w/%E3%83%95%E3%83%AC%E3%83%BC%E3%83%A0%E3%83%AF%E3%83%BC%E3%82%AF.html)です。

なお、Apahceが良い！という人は、[XAMPP](http://qiita.com/nnahito/items/ab2f57ffa63ebbea95e5)というものもあります。



# [Laravel](http://laravel.jp/)のダウンロード
必要な物は、PHPとComposerです。
ってなわけで、そこから解説をば。
…PHPは、Macにデフォで入ってるから大丈夫ですよね？

（1）Composerのダウンロード
（2）Laravelのダウンロード
（3）Laravelのインストール


## （1）[Composer](https://getcomposer.org/)のダウンロード
Composerのダウンロードページ（ https://getcomposer.org/download/ ）に行くと、PHPのコマンドが書いてあるので、そのとおりに実行していきます。
まあ、ページに行くの面倒って人はコピペをどうぞ。

```lang:terminal
$ php -r "copy('https://getcomposer.org/installer', 'composer-setup.php');"
$ php -r "if (hash_file('SHA384', 'composer-setup.php') === '070854512ef404f16bac87071a6db9fd9721da1684cd4589b1196c3faf71b9a2682e2311b36a5079825e155ac7ce150d') { echo 'Installer verified'; } else { echo 'Installer corrupt'; unlink('composer-setup.php'); } echo PHP_EOL;"
$ php composer-setup.php
$ php -r "unlink('composer-setup.php');"
```

すると、「composer.phar」ってのが作成されます。
<img width="118" alt="スクリーンショット 2016-06-17 16.42.31.png" src="https://qiita-image-store.s3.amazonaws.com/0/63338/45f97fed-04b1-b387-72f6-5b199a356258.png">
こいつを使います。
あ、環境パス通したい人は通してもいいですが、私は面倒なので直接使います。


## （2）[Laravel](http://laravel.jp/)のダウンロード
以下のコマンドを実行するだけで完了！
ワオ簡単！！

```lang:terminal
$ ./composer.phar global require "laravel/installer=~1.1"
```


## （3）Laravelのインストール
インストールというか、これでプロジェクトを作成します。

```lang:terminal
$ ./composer.phar create-project laravel/laravel your-project-name --prefer-dist
```
※**your-project-name**の部分は、好きな名前に変更できます。

インストールが終わると、フォルダが作成されます。
<img width="252" alt="スクリーンショット 2016-06-17 16.47.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/63338/c3059223-45d0-5b8d-9bc5-81e93f0c33c4.png">



# サーバの機能を立ち上げる
では、早速サーバの機能を立ち上げてみましょう。
Laravelによって作られたフォルダ（今回の場合は「your-project-name」）にcdコマンドで移動してください。

```lang:terminal
$ cd ./your-project-name/
```

そして、次のコマンドを実行します。

```lang:terminal
$ php artisan serve
```

<img width="490" alt="スクリーンショット 2016-06-17 16.54.43.png" src="https://qiita-image-store.s3.amazonaws.com/0/63338/2a43f4a1-2a21-024f-9928-7a14b7277298.png">

これだけで、ローカルサーバがポート8000番で立ち上がりました。
早速アクセスしてみましょう！
http://localhost:8000/

<img width="1279" alt="スクリーンショット 2016-06-17 16.55.54.png" src="https://qiita-image-store.s3.amazonaws.com/0/63338/e3f14474-d2e8-f524-cdf7-30d33cd71881.png">

こいつっ！動くぞっ！！

なお、参照されているのはLaravelが作ったフォルダ（今回の場合は「your-project-name」）の中の「public」フォルダになります。
このpublicフォルダ以下にデータを入れていくと、ローカルホスト環境（ http://localhost:8000/ ）から見れるようになります。



# 参考文献
- [スライドで入門しよう！Laravel入門資料まとめました。](https://techstars.jp/blog/laravel-tutorial-t355/)
はやしのコマンド備忘録(っ'ヮ 'c)


## Grep検索
```console
find . -type f -name "*.py" | xargs grep "print" > ../grep_result.txt
```
カレントディレクトリ配下のファイルの内、指定の文字列が含まれている行を出力する

- find .
    - 検索するディレクトリ
	- ここでは「.」なのでカレントディレクトリ
- -name "*.py"
    - ファイ名を指定する
    - ここでは、"*.py"なのですべてのPythonスクリプト
- grep "print"
    - 検索キーワード
- ../grep_result.txt
    - 検索結果出力さきのファイルパス
    - 検索対象内のファイルに、検索結果を出力すると、再起的検索することになりエラーとなるので注意する必要がある


## ディレクトリの容量を確認
```console
du -m -s * | sort -n
```

- -m
	- メガバイト単位で容量を表示する
- -s *
	- カレントディレクトリ直下のディレクトリとファイルを対象とする
- sort -n
	- 数字として並び替える



## ディレクトリを再帰的に削除
```console
rm -rf directory_name
```
- directory_nameはディレクトリの名前

## ファイルを検索する
```console
find . -name *.txt
```

- find .
	- 検索するディレクトリ
	- ここでは「.」なのでカレントディレクトリ
- *.txt
	- ファイル名
TestFlightで配信した時にAdMobもテスト広告を配信する

TestFlightでアプリを試験用に配信した時に、AdMobの広告もテスト用のを配信したかったのですが、AdMobの公式ドキュメントには若干情報が不足してる感じだったのでまとめました。

# 環境

* Swift: 2.2
* iOS: 8.0〜
* 利用ライブラリ
  * Google-Mobile-Ads-SDK: 7.8.1
  * CryptoSwift: 0.5（実機でのテスト時に利用）

# AdMobのテスト用広告

TestFlightでのパターン含めて、下記3パターンでのテスト用広告表示方法を説明します。

1. シミュレータでテスト用広告を表示する場合
2. Xcodeと接続した実機でテスト用広告を表示する場合
3. TestFlightで配信した実機でテスト用広告を表示する場合

## 0.AdMobのテスト用広告を表示する方法

> Test ads
> During development, we recommend using test ads to avoid generating false impressions. You can always count on a test ad being available.
> Test ads can be enabled by setting the testDevices property on GADRequest with an array of hashed device identifiers:
[Targeting AdMob by Google Firebase](https://firebase.google.com/docs/admob/ios/targeting#prerequisites)

ということなので、``GADRequest``の``testDevices``プロパティにハッシュ化したデバイスIDを指定してやれば、そのデバイスに対してはテスト用の広告が配信されるようになります。

## 1.シミュレータでテスト用広告を表示する場合

シミュレータの場合には``kGADSimulatorID``でシミュレータのハッシュ化したデバイスIDを取得でるのでこんな感じでOK。

```
let request = GADRequest()
let adMobTestID = kGADSimulatorID
request.testDevices = [adMobTestID]

bannerView.loadRequest(request)
```

## 2.Xcodeと接続した実機でテスト用広告を表示する場合

Xcodeと接続した実機の場合には、広告リクエストを送った時点で、Xcodeの実行ログにハッシュ化したデバイスIDが表示されるのでそれを直接設定すればOK。

```
let request = GADRequest()
bannerView.loadRequest(request)
```

↓

```log:Xcodeのlog
<Google> To get test ads on this device, call: request.testDevices = @[
@"2077ef9a63d2b398840261c8221a0c9b" ];
```

↓

```
let request = GADRequest()
let adMobTestID = "2077ef9a63d2b398840261c8221a0c9b"
request.testDevices = [adMobTestID]

bannerView.loadRequest(request)
```

## 3.TestFlightで配信した実機でテスト用広告を表示する場合

で、問題なのがこのパターン。2の方法のようにXcodeの実行ログを見てから書き換えることは出来ない。だからといって、1の方法のように一発でハッシュ化したデバイスIDを取得できるメソッドはない様子（見落としているだけの可能性もありますが・・・）。

ということで、自分でデバイスIDを取得して、それをMD5でハッシュ化して上げる必要があります。
結論からいうと今回は下記のコードで対応しました。MD5の計算には前述したCryptoSwiftを使っているのと、あとは``AdSupport``もimportしておく必要があります。


```
let request = GADRequest()
let adMobTestID = ASIdentifierManager.sharedManager().advertisingIdentifier.UUIDString.md5()
request.testDevices = [adMobTestID]

bannerView.loadRequest(request)
```

上記のコードはもちろん、Xcodeと接続した実機の場合でも動くので、実際には、上記のコードでXcodeと接続した実機での動作確認をして、問題なければTestFlightで配信、という手順が良いかと思います。

![image1.png](https://qiita-image-store.s3.amazonaws.com/0/26102/2da0e99c-2541-fb66-f4fa-86a4f26b8100.png)

こんな感じでテスト用の広告が配信されていればOKです。Nice job!
新人プログラマーの軌跡　#4

前回の投稿から3週間も経過してしまい、ふと気づくと夏野菜が恋しい季節になってまいりました。
この3週間はレスポンシブ対応したWEBページ作成の実務案件に取り組んでおり、
~~Qiitaの存在はてっきり忘れていました。~~

初めての実務案件でしたので、要求されるスピード感にはついていけず反省です。
お世辞にも私は美的感覚に鋭敏とは言えないので、
レイアウトの間違いにすぐに気づくことが出来ず時間がかかってしまいました。
**今回はその問題をよりスムーズに解決した方法をまとめていきます。**

#レイアウトのずれを解決した方法
##マクロなズレ
デザインに即して一つ一つのmarginやpaddingを設定したつもりが、どうもおかしくなっていることがありました。
そんな時に活躍したのが[PerfectPixel] (http://www.welldonecode.com/perfectpixel/)です。

▼参考画像

![b.PNG](https://qiita-image-store.s3.amazonaws.com/0/122382/fce9fdb1-e63e-1ca2-a500-4a9c759934d9.png)

例として貼ってみたのですが、分かりにくくなったかもしれないですね笑

chromeの拡張機能なのですが、画像を透過してWEBページを表示させます。
また透過率が可変なので、見るポイントによって見比べやすくすることが出来ます。
それまで目視でしかページを見比べていなかったですが、はっきりとどこがずれているかを認識することが出来ました。
そしてデベロッパーツールを用いることで、スムーズに位置調整が行えました。



##ミクロなズレ
パン屑などのアイコンを表示させるときには、before・after要素を用いて表現をしていました。
しかし、細かなアイコンは数ピクセルの違いがとても大きく影響し、レイアウトが崩れてしまうことが多くありました。

まず初めはpタグとbefore要素を用い、考えていました。
ちなみにコードの概略は以下の通りです。

```html
<p>
</p>
```
```css
p {
  position :relatie;
}
p:before{
    position: absolute;
    display:block;
    top: 2px;
    left: 1px;
}
```
だがこれではpタグをposition:absoluteとして使いたいときに、困ってしまいました。
他のセレクタに依存することがなく、動かすことが出来ればいいなと悩んでいました。

そこで上の方に助けていただいたのですが、
その解決策が予想以上にシンプル！

**擬似要素をspanにかけて、以下の記述を加えるだけです。**
また動かすピクセル数はお好みで。

```html
<p>
　<span></span>
</p>
```
``` css
:before{
    position: relative;
    top: 2px;
    left: 1px;
}
```

positionは

* static
* relative
* absolute
* fixed

の４つがありますが、
relativeはstaticの上位互換のようなものです。

static・relativeはともに、配置方法を指定しませんが
**relativeは初期状態のstaticからピクセルを指定して動かすことが出来るのです。**
relativeはstaticを基準としているので、位置を変えてもほかに危害を加えません。
独立して動いてくれるのですね。

またこれのいいところは他の要素にも使えることです。
多用すると、どれがどんだけ動いているかが把握しずらくなるので
ほどほどにしなければなりませんが。

ちなみにspanを使ったのは**spanとbeforeがインライン要素なので位置調節が楽**になるからです。

#まとめ
レイアウトをデザインに出来るだけ正確に合わせる方法をまとめました。
同じ配置をするにしても様々な手法があるので、その都度修正を加えることを考慮しながら取り組んでいきたい。

#今週の悟り
レイアウトとは人間が感覚的に良し悪しを決めている部分ではあるのだが、
そこには１つの理があるようです。
そこには知らない間に人をひきつける何かがあるようです。
私はまだまだその域には達しておらず、多くの人とずれているのかなとも思います。
だが、この社会で生きる以上は寄り添っていかねば。
Laravelバリデーションで日本語を禁止するには？ （疑問込み）

## まえおき
私の理解の問題があるかもしれませんので、これ以外の解決方法があればご教授願えれば幸いです。

## 問題
laravelのバリデーションにある alpha_numを利用してアルファベットと数字でのバリデーションを行おうとした所、日本語のままで行けてしまいます。

例えば、ユーザーが入力してフォルダ生成をさせるのに、日本語を使われると困ったなと・・・

## 解決方法
正規表現をつかいます。(regix: ******)

例えばrequest から nameをバリデーション

```
$this->validate($request, [
'name' => 'regex:/^[a-zA-Z0-9]+$/'
]);
```

非常にシンプルですが、とりあえず動作は問題なさそうです。


## 他に参考として

[alphaバリデーションについて(alphaバリデーションを使用しても、日本語の入力ができてしまいます。)](http://forum.laravel.tokyo/forum/06-13-2014-alpha)
日本語版WordPressのテーマ開発環境をサクっと立ち上げるdocker-compose.yml

誰でも簡単にDockerを使ってWordPress開発できる環境を考えてみました。Dockerの知識は必要最低限で済むはず。

**メリット**

* gitでデータベースを含む全ての状態を管理できる
* 環境に依存せず、本番環境にも展開しやすい

**デメリット**

* SQLダンプはマージできないので、DBに関係する作業は並行開発できない

# 想定環境

* MacOSX + docker-toolboxを想定
* 事前に[docker-toolbox](https://www.docker.com/products/docker-toolbox)をインストールしておく

# サンプルコード

* 以下の4つのファイルを`project`フォルダ内に作成する
* `!pass!`にはパスワードが入る
* WordPress4.5.2 + Apacheの構成
* WORDPRESS_DEBUG環境変数でデバッグモードを有効化している

## docker-compose.yml

```yaml:project/docker-compose.yml
mysql:
  build: mysql
  ports:
    - "3306:3306"
  environment:
    MYSQL_ROOT_PASSWORD: !pass!
wp:
  image: bakudankun/wordpress-ja:4.5.2-apache
  links:
    - mysql:mysql
  ports:
    - "80:80"
  volumes:
    - "${PWD}/wp-content/:/var/www/html/wp-content"
  environment:
    # wp-configのデバッグ機能を有効化
    - WORDPRESS_DEBUG: "true"
phpmyadmin:
  image: phpmyadmin/phpmyadmin:4.6.2-3
  links:
    - mysql:db
  ports:
    - "8888:80"
  environment:
    PMA_USER: root
    PMA_PASSWORD: !pass!
```

## MySQLのDockerfile

公式のmysqlイメージへ、初期化時のデータベースとして`db_dump.sql`をつっこんでいる。`db_dump.sql`はデータベースの保存をする度に上書かれる。

```text:project/mysql/Dockerfile
# デプロイ先に合わせて決めておく。仮にさくらのレンタルサーバだと2016年6月現在5.5系となる
FROM mysql:5.5
# SQLダンプを初期化時に読み込む
ADD db_dump.sql /docker-entrypoint-initdb.d
```
```sql:project/mysql/db_dump.sql
CREATE DATABASE wordpress DEFAULT CHARACTER SET utf8;
```

## get-dump.sh

動作中のmysqlコンテナからSQLダンプを作成し、mysql/db_dump.sqlを上書きします。

```sh:project/get-dump.sh
docker exec ${PWD##*/}_mysql_1 sh -c 'exec mysqldump --databases wordpress -uroot -p"$MYSQL_ROOT_PASSWORD"' > mysql/db_dump.sql
```

# 使い方

まずは`docker-machine`でVMを立ち上げ、Dockerクライアントから接続できるようにしておく。

```
docker-machine start default
# ターミナル再起動

# docker psでエラーが出ないことを確認する
docker ps
```

適当なフォルダ内(ここでは`project`とする)に`docker-compose.yml`と`mysql/Dockerfile`、`mysql/db_dump.sql`を作成し、`docker-compose.yml`の階層で次を実行する。

```
# buildを付けないとダンプを更新しても反映されない
docker-compose up -d --build
```

VirtualBoxでVMの設定を開き、アダプター1のポートマッピングを適当に設定する。以下は一例：

![portmapping.png](https://qiita-image-store.s3.amazonaws.com/0/48238/7e07a363-b29b-0b85-25c8-b7ca896a3978.png)

上の例では、各アプリケーションには次のアドレスでアクセスできる。

|アプリケーション|アドレス|
|:---|:---|
|WordPress|http://localhost:10080|
|phpMyAdmin|http://localhost:18888|

コンテナを終了したくなったら次を実行する。**この操作をするとデータベースの内容は初期化される**。データベースを保存する方法は、後述の「データベースの保存」を参照。

```
docker-compose stop && docker-compose rm -f
```

## データベースの保存

### コマンドラインでやる

mysqlコンテナ動作中に、サンプルコードの`get-dump.sh`を実行する。

### phpMyAdminからGUIでやる

phpmyadminへアクセスし、データベースを選択しない状態でSQLダンプをダウンロードする。

![スクリーンショット_2016-06-17_15_35_21.png](https://qiita-image-store.s3.amazonaws.com/0/48238/d6fc7ecb-e5c9-f475-51ff-ae7a2d2113f3.png)

ダウンロードしたSQLファイルを`db_dump.sql`に改名して`mysql/db_dump.sql`に上書く。

## テーマの開発

wp-contentディレクトリ以下にファイルができるので、それを編集すると即座に反映される。普通にgitコミットして管理できる。

デフォルトのテーマを消したくなるが、イメージの仕様上再起動すると復活してしまうため、無視する。(`.gitignore`推奨)

## 本番への展開

*  [WordMove](https://firegoby.jp/archives/5644)を使ってURL部分を置き換え、`db_dump.sql`を本番のMySQLにインポートする
* `wp-content`以下を本番のWordPress環境に上書く
bash / sh | 文字列の「ドット」を正規表現でマッチさせる

# 結論

```bash
[[ TEXT =~ \. ]]
```
と書けば良い。

# 検証

```bash:dot_regexp.sh
[[ d.o.t =~ \. ]] && echo "Alisa meets dot." # => マッチする

[[ d.o.t =~ \\. ]] && echo "Bonansa meets dot." # => バックスラッシュが二個だと無理

[[ d.o.t =~ "\." ]] && echo "Creature meets dot." # => 文字列で囲うと無理

[[ d.o.t =~ "\\." ]] && echo "Dead man meets dot." # => 文字列で囲うと無理

[[ d.o.t =~ "\." ]] && echo "Edmond Honda meets dot." # => ダブルクオーテーションで囲っても無理

[[ d.o.t =~ "\\." ]] && echo "Fuishigidane meets dot." # => ダブルクオーテーションで囲っても無理

[[ dot =~ \. ]] && echo "Gummi chocolate pine meets dot." # => マッチしないのが正解
```

# 結果

アリサだけがドットを見つけられる。

```
$ sh dot_regexp.sh

Alisa meets dot.
```

# 補足

zsh だと挙動が違う様子。

# 環境

- sh 3.2








<!-- Update From Qiita API -->

# チャットメンバー募集


何か質問、悩み事、相談などあればLINEオープンチャットもご利用ください。

https://line.me/ti/g2/eEPltQ6Tzh3pYAZV8JXKZqc7PJ6L0rpm573dcQ





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Coroutine（コルーチン）入門メモ

# はじめに

Unity 学習の一環としてコルーチンを勉強中。
学んだことをメモする。

# コルーチンとは

通常、関数呼び出しでの処理は一つのフレームで行われる。
アニメーションなど視覚的な変化を実装するには複数フレームにわたって処理を行う必要がある。
`Update`で頑張ることもできるが、コルーチンを用いることで簡易に実装できる。

# 基本的な実装

MonoBehaviour.StartCoroutine で実行する。
実行方法は2種類ある。

1. 関数名を文字列で指定する。
2. 引数指定時に関数呼び出しを行う。

以下は、関数名指定の形式で1秒おきにログ出力する例。

```
	void Start()
	{
		StartCoroutine("Test");
	}
	
	IEnumerator Test()
	{
		for (int i = 0; i < 100; i++)
		{
			Debug.Log("test:" + i);
			yield return new WaitForSeconds(1);
		}
	}
```

`IEnumerator`型を戻り値とし、`yield return`を含むのが特徴。
`yield return new WaitForSeconds(1);`で処理が中断され、1秒後に再開される。
他にも次フレームまで、レンダリング完了まで、など指定できる。


## 関数名指定の特徴

### コルーチンの停止が容易

`StopCoroutine`で関数名を指定すればコルーチンを停止できる。
再度`StartCoroutine`するとコルーチンが最初から実行される。

### 呼び出す関数に対して一つだけ引数を指定できる

こんな感じ。

```
void Start()
	{
		StartCoroutine("Test", 3);
	}
	
	IEnumerator Test(int wait)
	{
		for (int i = 0; i < 100; i++)
		{
			Debug.Log("test:" + i);
			yield return new WaitForSeconds(wait);
		}
	}
```

### オーバーヘッドが大きい

[公式ドキュメント（MonoBehaviour.StartCoroutine）](http://docs.unity3d.com/ja/current/ScriptReference/MonoBehaviour.StartCoroutine.html)を参照。（ごめんなさい自分で確認してないです）

## 関数呼び出し形式の特徴

### コルーチンの停止には変数を用いる

名前指定ではコルーチンを停止できないため、`IEnumerator`型の変数を用いる必要がある。
ちなみに変数に保持することで、停止したタイミングから処理を再開できる。

```
	IEnumerator test;

	void Start()
	{
		test = Test(1);
		StartCoroutine(test);
	}
	
	IEnumerator Test(int wait)
	{
		for (int i = 0; i < 100; i++)
		{
			Debug.Log("test:" + i);
			yield return new WaitForSeconds(wait);
		}
	}

	void Update () 
	{
		// 左クリックでコルーチン停止、A ボタン押下でコルーチン再開
		if (Input.GetMouseButtonDown(0)) {
			StopCoroutine(test);
		} else if (Input.GetKeyDown(KeyCode.A)) {
			StartCoroutine(test);
		}
	}
```

### 引数を複数指定できる

`StartCoroutine`の引数として関数を呼び出すだけなので、引数の数に上限はない。

# 参考

[公式ドキュメント（コルーチン）](http://docs.unity3d.com/ja/current/Manual/Coroutines.html)
[公式ドキュメント（MonoBehaviour.StartCoroutine）](http://docs.unity3d.com/ja/current/ScriptReference/MonoBehaviour.StartCoroutine.html)
[Unityのコルーチンの使い方をまとめてみた](http://developer.wonderpla.net/entry/blog/engineer/Unity_Co-routine/)
AWS_SDKでS3にアップした画像を開くとブラウザに表示されないあなたへ

# Node.jsから画像のアップ

という機能作った時にハマった話
コードはこんな感じ

```js
var
	AWS = require('aws-sdk'),
	fs = require('fs'),
	upload;

AWS.config.update({
	accessKeyId: 'AKIXXXXXXXXXXXXX',
	secretAccessKey: 'XXXXXXXXXXXXXXXXXXXXXX',
	region: 'ap-northeast-1'
});

upload = function ( file, callback ) {
	var
		bucketName = "hogehogeBucket",
		fileName = file.filename,
		body = fs.readFileSync(file.path),
		s3 = new AWS.S3({params: {Bucket: bucketName, Key: fileName}});

	s3.upload({Body: body}, function(evt) {
		// console.log(evt);
	}).send(function(err, data) {
		// 結果返す
		callback(err, data);
	});

};

module.exports = {
	upload : upload
};
```

画像はアップできるんだけど、アップしたファイルのURLにアクセスすると、ブラウザに画像が表示されるわけでなく…

![スクリーンショット 2016-06-17 15.12.04.png](https://qiita-image-store.s3.amazonaws.com/0/71836/51eb6669-0a70-7e61-f6c5-959c8c6d5eeb.png)

こんな感じでブラウザがダウンロード開始しちゃう。
**違うんだよ！保存じゃなくてブラウザに表示さえしてくれればいいんだよ！**という気持ちになる。
Qiitaの画像なんかは同じくs3の画像だけど、開くとブラウザに表示される。
何が違うんだ！

# Content-Typeを指定してなかった

AWSのマネジメントコンソールで手作業でアップした画像ファイルはブラウザで表示できた。
aws-sdkから上げたファイルとオブジェクトのプロパティ見比べてみるとここが違った

* 手作業で上げたjpegファイル

![スクリーンショット 2016-06-17 15.26.37.png](https://qiita-image-store.s3.amazonaws.com/0/71836/686fc781-80d2-514a-966f-cbd6a2437502.png)

* aws-sdkで上げたjpegファイル

![スクリーンショット 2016-06-17 15.30.44.png](https://qiita-image-store.s3.amazonaws.com/0/71836/07cee60c-2178-9373-683f-313df9004564.png)

Content-Typeがoctet-streamになっとる。content-typeを指定するパラメータが抜けてたのね。

# これでOK

s3.upload関数の引数にContentTypeパラメータを指定してやる

```js
var
	AWS = require('aws-sdk'),
	fs = require('fs'),
	upload;

AWS.config.update({
	accessKeyId: 'AKIXXXXXXXXXXXXX',
	secretAccessKey: 'XXXXXXXXXXXXXXXXXXXXXX',
	region: 'ap-northeast-1'
});

upload = function ( file, callback ) {
	var
		bucketName = "hogehogeBucket",
		fileName = file.filename,
		body = fs.readFileSync(file.path),
		s3 = new AWS.S3({params: {Bucket: bucketName, Key: fileName}});
						// ★ ↓この部分 ★
	s3.upload({Body: body, ContentType: file.mimetype}, function(evt) {
		// console.log(evt);
	}).send(function(err, data) {
		// 結果返す
		callback(err, data);
	});

};

module.exports = {
	upload : upload
};
```

情報探しても意外と出てこなかったけどこれって常識？探し方が悪かったのかなあ

# ちなみに

上の関数を他から呼び出すなら

```js
var s3 = require( './lib/s3' );

s3.upload( req.file, function (err, data) {
	// なんか処理
}
```
的な感じで使えます。(上記のモジュールはlib/s3.jsとして保存)

引数のreq.fileはmulterと言うExpressのパッケージを使って取れるものです。
three.js ヘルパーの表示(GridHelper, AxisHelper)

![スクリーンショット 2016-06-17 14.51.03.png](https://qiita-image-store.s3.amazonaws.com/0/76843/7fad3813-0235-3b69-111a-c7282f9505e5.png)

```js:hoge.js

    var scene = new THREE.Scene();

    // gridHelper 
    gridHelper = new THREE.GridHelper(200, 50);  // 引数は サイズ、1つのグリッドの大きさ
    scene.add(gridHelper);

    // axisHelper
    axisHelper = new THREE.AxisHelper(1000);  // 引数は 軸のサイズ
    scene.add(axisHelper);

```

GridHelper
引数は サイズ、1つのグリッドの大きさ


AxisHelper
引数は 軸のサイズ
Riot.jsでループを入れ子にするときは in を使ったほうがいいね

[Riot.js](http://riotjs.com/ja/)（ver:2.3.12 時点）のループ処理で、入れ子のループをする場合に親の情報を引き継いじゃって困ったのでメモ。

[公式にある方法](http://riotjs.com/ja/guide/#section-23)で単純にループを入れ子にすると、スコープ（？）がおかしくなる。

```html:ダメな例
<todo></todo><!-- 表示先 -->

<script type="riot/tag">
<todo>
  <ul>
    <li each={ items } class={ completed: done }>
      <input type="checkbox" checked={ done }> { title }
      <ul if={ child }>
        <li each={ child } class={ completed: done }>
          <input type="checkbox" checked={ done }> { title }
        </li>
      </ul>
    </li>
  </ul>

  this.items = [
    {
        title: 'First item',
        done: true
    },
    {
        title: 'Second item',
        done: true,
        child: [
            {
                title: 'Fourth item'
                // ここは done がない（チェック入れない）
            }
        ]
    },
    {
        title: 'Third item'
    }
  ]
</todo>
</script>
```

上記の結果は、`done:true` がないはずの「Fourth item」にもチェックが付く。
![2016-06-17_153251.png](https://qiita-image-store.s3.amazonaws.com/0/37122/3a754ea4-772d-92a8-5af7-02b8b93f773d.png)
たぶん、「Fourth item」に `done` がないために「Second item」の `done:true` が伝播しちゃってるんだと思う。

いろいろ試したところ、単純な `each={ items }` のループではなく、`in` をつかった `each={ item in items }` で変数化しとくと大丈夫そう。

```html:ちゃんとなる例
<todo></todo><!-- 表示先 -->

<script type="riot/tag">
<todo>
  <ul>
    <!-- ループに in (for...in) を使うべし -->
    <li each={ item in items } class={ completed: item.done }>
      <input type="checkbox" checked={ item.done }> { item.title }
      <ul if={ item.child }>
        <!-- in を使えば同じキー名でもOK -->
        <li each={ item in item.child } class={ completed: item.done }>
          <input type="checkbox" checked={ item.done }> { item.title }
        </li>
      </ul>
    </li>
  </ul>

  this.items = [
    {
        title: 'First item',
        done: true
    },
    {
        title: 'Second item',
        done: true,
        child: [
            {
                title: 'Fourth item'
                // ここは done がない（チェック入れない）
            }
        ]
    },
    {
        title: 'Third item'
    }
  ]
</todo>
</script>
```

![2016-06-17_153659.png](https://qiita-image-store.s3.amazonaws.com/0/37122/5abb3021-a0ac-c5dd-1212-55e07040bf4a.png)

よかったよかった。
配列内の要素の存在確認にはArray.includes()メソッドが便利（ES2016新機能）

2016/06/17、JavaScriptの仕様「ECMAScript」のECMAScript 2016（※）がリリースされました。ES2016で追加された機能は２つです。

- Exponentiation(**) Operator
- `Array.prototype.includes()`メソッド

本エントリーでは、`Array.prototype.includes()`メソッドについて解説します。「Exponentiation Operator」についてはこちらの記事で解説します。
「[べき乗をするならMath.pow()よりもExponentiation Operatorが手軽（ES2016新機能）](http://qiita.com/tonkotsuboy_com/items/12436de8c6f3a289d3af)」

※ 言語仕様書：「[ECMAScript® 2016 Language Specification](http://www.ecma-international.org/ecma-262/7.0/)」

#`Array.prototype.includes()`メソッドは配列内の値検索のためのメソッド
**`Array.prototype.includes()`メソッドは、配列内にある要素が含まれているかどうかを調べるためのメソッド**です。

次のような配列を例にして説明します。

```js
var array = [1, 2, 3, 4, 5];
```

`Array.prototype.includes()`メソッドを使って、`3`という要素が含まれているかどうかを調べるには次のように行います。

```js
// 3が含まれているかどうか
array.includes(3);
```

`array`の中には`3`が含まれているので、`true`が返ります。

![image](https://qiita-image-store.s3.amazonaws.com/0/67884/fc40b9a0-2acd-364b-8c94-c2b11a7b35aa.png)

▲ Google Chromeでの実行結果

では、`6`が含まれているかどうかを調べるとどうなるのでしょうか？

```js
// 6が含まれているかどうか
array.includes(6);
```

`array`の中には`6`が含まれていないので、`false`が返ります。

![image](https://qiita-image-store.s3.amazonaws.com/0/67884/8954427f-36cb-c88d-f0e6-b2dfe64f6d47.png)

▲ Google Chromeでの実行結果

このように、`Array.prototype.includes()`メソッドは配列内の値検索を楽にするメソッドです。

## 対応ブラウザは？
2018/02/06時点では、IE 11を除く全主要ブラウザで対応しています。

参考：[ECMAScript Next compatibility table](http://kangax.github.io/compat-table/es2016plus/)

IE 11でも対応する必要がある場合は、[core\-js](https://www.npmjs.com/package/core-js)などのポリフィルを使いましょう。
Unity で新規作成されるスクリプトのフォーマット

※ Mac 環境での解決策です

# 問題

Unity で C# スクリプトを新規作成すると以下の感じになる。

```
using UnityEngine;
using System.Collections;

public class Hoge : MonoBehaviour {

	// Use this for initialization
	void Start () {
	
	}
	
	// Update is called once per frame
	void Update () {
	
	}
}
```

個人的にはインデントはスペースがいいし、() 前にスペースがあるのもやだし、コメントもいらない。

# 解決

`Applications/Unity/Unity.app/Contents/Resources/ScriptTemplates/81-C#\ Script-NewBehaviourScript.cs.txt`がテンプレートになっているのでこれを修正する。

```
using UnityEngine;
using System.Collections;

public class Hoge : MonoBehaviour
{
    void Start()
    {
    }
    
    void Update()
    {
    }
}

```

`{`の位置は悩み中だけどひとまずおｋ。
念のためバックアップとっておくと良いと思う。
Android N Doze mode first(浅いDoze)を検証するコマンド

Android N preview4が出たのでDoze mode firstの検証を行うためのコマンドを調査したところ、オプションに[light|deep]が追加されていることがわかりました。


```shell-session:ヘルプの確認
~ adb shell dumpsys deviceidle -h
Device idle controller (deviceidle) commands:
  help
    Print this help text.
  step [light|deep]
    Immediately step to next state, without waiting for alarm.
  force-idle [light|deep]
    Force directly into idle mode, regardless of other device state.
  force-inactive
    Force to be inactive, ready to freely step idle states.
  unforce
    Resume normal functioning after force-idle or force-inactive.
  get [light|deep|force|screen|charging|network]
    Retrieve the current given state.
  disable [light|deep|all]
    Completely disable device idle mode.
  enable [light|deep|all]
    Re-enable device idle mode after it had previously been disabled.
  enabled [light|deep|all]
    Print 1 if device idle mode is currently enabled, else 0.
  whitelist
    Print currently whitelisted apps.
  whitelist [package ...]
    Add (prefix with +) or remove (prefix with -) packages.
  tempwhitelist [-u] [package ..]
    Temporarily place packages in whitelist for 10 seconds.
```


```shell-session:Doze_firstを有効化
~ adb shell dumpsys deviceidle enable light
```


```shell-session:画面OFFでlight_idleへ移行
~  adb shell dumpsys deviceidle step light
Stepped to light: IDLE
```

参考
[Behavior Changes](https://developer.android.com/preview/behavior-changes.html)
[Android Marshmallow の Doze テストの正しい手順](http://qiita.com/usagimaru/items/7c549336a9aee447dd97)