OmniAICreator/Qiita-1.07M huggingface dataset:
R 統計 二標本の検定 カイ二乗検定

![chi1.png](https://qiita-image-store.s3.amazonaws.com/0/26564/54ae6b46-9f21-5397-d673-ec09c98e2b9f.png)

summary関数で
![chi2.png](https://qiita-image-store.s3.amazonaws.com/0/26564/30687419-1c81-fff0-5781-bf74d3d49de7.png)

行列を作る
columnとrowに名前をつけると見た目がいいかな
![chi3.png](https://qiita-image-store.s3.amazonaws.com/0/26564/a7b1a811-fde8-9035-7e65-8d2fd57a3f9f.png)


![chi4.png](https://qiita-image-store.s3.amazonaws.com/0/26564/86c0fb76-d0ad-b8b6-8883-ce388299458e.png)

このケースではFisherのexact検定がよい

chisq.test(m3)$expected .....　 期待度数の表示
chisq.test(m3)$observed .....　 観測度数の表示
Github にある Android Library を外部モジュールにして使う

# 概要

自作の外部モジュールを Android Studio で使いたいという願望が芽生え 
1 年位前にやったことを忘れそうなのでまとめる.

## 目標

```
dependencies {
    compile 'com.hogefuga:hoge-fuga:0.26.8@aar'
}
```
と `build.gradle` に記載するだけで外部モジュールを導入できるようにする.

## 本題

### `apply plugin:'android-library'` を記載する

`apply plugin: 'android'` を `apply plugin:'android-library'` に変更する.

### アーカイブ用スクリプトを `build.gradle` に記載

```
apply plugin: 'maven'

uploadArchives {
    repositories {
        mavenDeployer {
            repository(url: 'file:repository')
            pom.version = '0.26.8'
            pom.groupId = 'com.hogefuga'
            pom.artifactId = 'hoge-fuga'
        }
    }
}
```

`./gradlew uploadArchives` を実行すると、
`repository` ディレクトリに公開用のオブジェクト群が生成されます.
（`repository` ディレクトリに出力する理由は他のオブジェクトが紛れ込まないようにするため）

### `gh-pages` ブランチ に push

`repository` ディレクトリの中身をルートディレクトリに配置すればOK.

### 外部モジュールを使う

```
buildscript {
    repositories {
        maven { url 'http://hoge-labs.github.io/hogefuga' }
    }
    dependencies {
        compile 'com.hogefuga:hoge-fuga:0.26.8@aar'
    }
}
```

これで Sync すれば完了.

### 【おまけ】gh-pages に index.html と README.md を付け加える

#### README.md には使い方等を記載

最低でも上の `buildscript` くらいは載せておく.

#### index.html はディレクトリの中身を書く

index.html の中身はこんな感じ

```html

<html>
<body>
<h1>Indexof/</h1>
<hr>
<pre>
<a href="0.26.8/">0.26.8/</a>
<a href="0.26.9/">0.26.9/</a>
<a href="maven-metadata.xml">maven-metadata.xml</a>
<a href="maven-metadata.xml.md5">maven-metadata.xml.md5</a>
<a href="maven-metadata.xml.sha1">maven-metadata.xml.sha1</a>
</pre>
</body>
<html>
```

## Q&A

基本的に本件とは関係のないことを記載しているのでスキップ推奨です.

### Eclipse から Android Studio への変換

Eclipse にエクスポート機能があるので[そちら][eclipse-to-as]を使う.

### .aar とは

[こちら][what-is-aar]を参照

### `@aar` の必要性

`@aar` がないと .aar ではないものを読み込む可能性があるため指定しておくとその心配がありません.

## 終わりに

ただのメモです.
詳しい内容は作業時に参考になった[こちら][gh-pages-aar]を参照して下さい.

[what-is-aar]:http://tech.admax.ninja/2014/10/06/about-aar-format/
[eclipse-to-as]:http://techbooster.org/android/environment/16158/
[gh-pages-aar]:http://u1aryz.blogspot.jp/2013/06/githubmavenandroidaar.html
Spring+Mybatisでマッパーのテストを階層化

Spring+Mybatisで、マッパーのユニットテストを階層化するやり方。

注入する必要があるのでSpringJUnit4ClassRunnerを使うのですが、これとHierarchicalContextRunnerの組み合わせがうまくいかなかったので、Enclosedとabstract classを使って実現。

まずは下記のような抽象クラスを用意します。ここでSpringJUnit4ClassRunnerのもとでマッパーに注入されます。

```lang:MapperTestBase
@RunWith(SpringJUnit4ClassRunner.class)
@ContextConfiguration(locations = { "classpath:test-context.xml" })
@TestExecutionListeners({ DependencyInjectionTestExecutionListener.class,TransactionalTestExecutionListener.class})
public abstract class MapperTestBase { // abstractにしないと、このクラスもテスト対象になるので注意

    @Autowired
    protected  HogeMapper mapper;

}
```

実際のテストクラスは下記のように、Enclosedで階層化していき、テストメソッドを書くclassでMapperTestBaseを継承させます。

```
@RunWith(Enclosed.class)
public class HogeMapperTest  {

    @RunWith(Enclosed.class)
    public static class findById { //マッパーに定義しているメソッド毎に階層を切るイメージ

        public static class IDが存在しない extends MapperTestBase {

            @Test
            public void nullを返す() {
               /* */
            }

        }

　　　　public static class IDが存在する extends MapperTestBase {

            @Test
            public void オブジェクトを返す() {
               /* */
            }

        }

       

    }

```

abstract classでランナーも含んでテストの設定を共通化できたことになるかと。
Rails+Bootstrapでactiveなnavbarを自動で設定

Railsでbootstrapのnavbarを使用する際に、自動的にactiveなliタグを設定する際は以下のように記述する。

```erb
<ul class="nav navbar-nav">
  <li class= "<%= 'active' if controller.controller_name == 'users' %>"><%= link_to "ユーザ", { controller: "users" } %></li>
  <li class= "<%= 'active' if controller.controller_name == 'books' %>"><%= link_to "本", { controller: "books" } %></li>
</ul>
```

Slimの場合は以下のように記述。

```slim
ul.nav.navbar-nav
  li class = ("active" if controller.controller_name == "users")
    = link_to "ユーザ", { controller: "users" }
  li class = ("active" if controller.controller_name == "books")
    = link_to "本", { controller: "books" }
```

## 参考
- [Slimでセレクタを追加するときの書き方、及び Middleman の素晴らしさ。](http://d.hatena.ne.jp/ken_c_lo/20130804/1375631714)
DockerでDeploy時のpull速度について

## 目的
- デプロイ時のdocker pull した時の速度を上げたい
  - デプロイするたびにどんどんイメージができて遅くなるのではないか
    - 文言変更程度でどんどん遅くなるのは困る

## この記事でやっていること
- host1でdockerの基本イメージ作成する
- host2でpullする
- host1で変更を2回して2回commitする
- host2でpullする時の動作検証

## host1でdockerの基本イメージ作成する

```bash:Dockerfile
FROM ubuntu

MAINTAINER onishi <-----@gmail.com>

RUN apt-get install -y nginx
RUN echo "fugafuga" >> /usr/share/nginx/html/index.html
```

```bash:
core@coreos / $ docker build -t username/nginx_test ./
core@coreos / $ docker run --name nginx_test username/nginx_test
core@coreos / $ docker commit nginx_test username/nginx_test
core@coreos / $ docker push username/nginx_test
```

## host2でpullする

```bash:
core@coreos / $ docker pull username/nginx_test
```

## host1で変更を2回して2回commitしてpushする

- 2回繰り返す

```bash:
core@coreos / $ docker run -it username/nginx_test /bin/bash
root@5451****:/# vi /usr/share/nginx/html/index.html # なんか変更する
root@5451****:/# exit
core@coreos / $ docker commit [CONTAINER ID] username/nginx_test
core@coreos / $ docker push username/nginx_test
```

## host2でpullする時の動作検証

- 変更された回数分downloadしてきた。

```bash:
$ docker pull username/nginx_test
Pulling repository username/nginx_test

b43ba8******: Download complete
8ac8e3******: Download complete
a4fdda******: Download complete
698a35******: Download complete
77b550******: Download complete
a7f2f3******: Downloding [================>         ] 5.007 MB/ 7.944 MB 1s
92dfac******: Downloding [==>         ] 7.21 MB/ 9.122 MB 3s
```

## まとめ
このまま開発すると細かい変更するたびにdownloadが発生してしまう。
スケールした時に全部の履歴持ってくるってなると遅くてやってられない。
この辺何か解決方法があったらどなたかお願いします。

自分の中で解決方法としてサーバ環境が変わらない変更は、
最後にサーバの状態を変更したイメージにTagをつけておいて、そこからイメージを作ってPushすれば解決するのかも？と思ってます。

```bash:
$ docker pull [REPOSITORY:TAG]
$ docker run --name [CONTAINER_NAME] [REPOSITORY]
# なんか変更する
$ docker commit [CONTAINER ID] [REPOSITORY]
$ docker tag [REPOSITORY:latest] [REPOSITORY:TAG]
$ docker push [REPOSITORY]
```

タグがGitで言うブランチの役割になるのかな。
本番環境でlatestをpullしてくるのは危険なのでmasterとかタグ名つけておいて、そこからpull？
HTMLで画像の特定箇所にリンクを貼る方法

img、map、area要素の3つを組み合わせてイメージマップを作成します。

```html
<img src="images/gazou.jpeg" alt="画像" usemap="#img">
<map name="img">
<area shape="rect" coords="23,120,210,155" href="www.hoge.hogege.html">
</map>

若干はまったのはarea shapeの座標指定。

画像の左上の座標を(0,0)と考えて指定します。
Mac上でWindows10を動かしてみる


Microsoftが提供している [modern.IE](https://www.modern.ie/ja-jp/) というプロジェクトがある。そこで提供されている仮想環境を使って、Macに`Windows10`をインストールしてみる。ちなみに、このプロジェクトの本来の目的は、`Internet Explorer` の表示確認やデバッグの支援。

##VirtualBoxの準備
まずは、仮想環境のホストの準備。今回は`VirtualBox`を使う。下記からMac用の最新`VirtualBox`をダウンロードして、適当にセットアップ。

[VirtualBox Download](https://www.virtualbox.org/wiki/Downloads)

##Windows10+IE11のダウンロード
下記のページからダウンロード。今回は分割されてないファイルをダウンロードした。

[modern.IE 仮想マシン ダウンロード](https://www.modern.ie/ja-jp/virtualization-tools)

![仮想化ツール.png](https://qiita-image-store.s3.amazonaws.com/0/55938/aaaa0d35-50f6-0f3b-7116-216582e5c9c3.png "仮想化ツール.png")

##圧縮ファイルを展開してVirtualBoxにインポート
4.7G位のファイルが落ちてくるので、展開して`ova`ファイルを起動する。

![ダウンロード.png](https://qiita-image-store.s3.amazonaws.com/0/55938/237c28fa-4fc3-3532-000d-4e6504b4a0f1.png "ダウンロード.png")

関連付けが上手く行っていれば`VirtualBox`が立ち上がり、下記のようなインポート画面になるはず。仮想ディスクイメージの保存先が正しいか確認する。この作業はかなり時間が必要。

![Oracle_VM_VirtualBox_マネージャー.png](https://qiita-image-store.s3.amazonaws.com/0/55938/8f7de0b1-128a-11ed-37e1-dff9f8d52d2f.png "Oracle_VM_VirtualBox_マネージャー.png")

##Windows10起動!!
これで漸くWindows10が立ち上がる。仮想マシンのメモリとかは増やさないと、デフォルトのままだと重くて動かない。（増やしても相当重いけど）

![2015_02_12_14_56.png](https://qiita-image-store.s3.amazonaws.com/0/55938/2bb5ca04-302a-a5e6-ccee-06874f09dc65.png "2015_02_12_14_56.png")
コンテンツをフェードインで順番に表示させる


##head内script

```
<script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.6.4/jquery.min.js"></script>
<script type="text/javascript"> 
    　 $(function(){ 
        $('.fade li').hide(); //要素
         });      
        var i = 0; 
        var int=0; 
       $(window).bind("load", function() { 
        var int=setInterval("doFade(i)",500); //読み込む時間を指定 
       }); 
      function doFade() { 
        var list = $('.fade li').length; //要素
        if (i >= list) { 
            clearInterval(int); 
        } 
        $('.fade li').eq(i).fadeIn(800); //要素・フェードインの時間
            i++; 
       } 
</script>
```


##body内HTML

```
<h1>jQuery fadein｜memocarilog demo</h1>
<ul class="fade">
    <li><img src="1.jpg" alt="" /></li>
    <li><img src="2.jpg" alt="" /></li>
    <li>Lorem ipsum…（略）</li>
    <li><img src="3.jpg" alt="" /></li>
    <li><img src="4.jpg" alt="" /></li>
    <li><img src="5.jpg" alt="" /></li>
    <li>Lorem ipsum…（略）</li>
    <li><img src="6.jpg" alt="" /></li>
    <li><img src="7.jpg" alt="" /></li>
    <li><img src="8.jpg" alt="" /></li>
    <li>Lorem ipsum…（略）</li>
    <li><img src="9.jpg" alt="" /></li>
</ul>
```


##CSS（サンプル）

```
body{
    background-color: #eee;
}
h1{
    font-size: 20px;
    font-style: italic;
    margin: 50px 0;
}

#container{
    width:800px;
    margin: 0 auto;
}

.fade li{
    width: 200px;
    height: 200px;
    padding: 10px ;
    display: block;
    float: left;
    overflow: hidden;
}

.fade li img{
    width: 190px;
    height: 190px;
    border: #fff solid 5px;
}
```
Afloat 2.4 on MacOS 10.10.1


#インストール

- Afloat 2.4をつかう（探すと2.2がヒットするがこれは古いらしい） 
 - たとえばここから http://www.tucows.com/preview/827212
- SIMBLはAfloat2.4に同梱されているので，それでOK（SIMBLを別途ダウンロード・インストールすると，動かない？）
- ログオフや再起動しなくてOK．アプリを再起動でOK

#インストールしても動かない時

全部のアプリは対応してない．SafariやPhotoBoothは動作するのを確認．

- まずインストールされているかどうか．`/Users/yourname/Library/Application Support/SIMBL/Plugins/Afloat.bundle`を確認．このディレクトリがあればOK．
- たとえばPhotoBoothが動作しない場合．
 - `/Users/tamaki/Library/Containers/com.apple.PhotoBooth/Data/Library/Application Support/`以下に`SIMBL/`があるかどうか確認．
 - なければ`/Users/yourname/Library/Application Support/SIMBL/`からコピーする．
つまり`/Users/yourname/Library/Containers/com.apple.PhotoBooth/Data/Library/Application Support/SIMBL/Plugins/Afloat.bundle/`以下のファイルを作る．

これで動いた．
array_search, in_arrayでオブジェクトを検索するときはstrictモード推奨


# strict false

以下のように数値とオブジェクトが混在する連想配列からオブジェクトを探そうとするとNoticeエラーが出る.

```php:array_test.php
<?php
$sample = new stdClass;
$arr = [
  'age' => 10,
  'name' => 'kappa',
  'object' => $sample,
];
// $arr配列の中から$sampleオブジェクトを検索
var_dump( in_array($sample, $arr) );
var_dump( array_search($sample, $arr) );
```

php5.5ではNoticeが出る

```
$ /usr/local/php-5.5.4/bin/php array_search_test.php
PHP Notice:  Object of class stdClass could not be converted to int in /home/vagrant/work/array_search_test.php on line 9
PHP Notice:  Object of class stdClass could not be converted to int in /home/vagrant/work/array_search_test.php on line 10

Notice: Object of class stdClass could not be converted to int in /home/vagrant/work/array_search_test.php on line 9
bool(true)

Notice: Object of class stdClass could not be converted to int in /home/vagrant/work/array_search_test.php on line 10
string(6) "object"
```

php5.6では何も出ない

```
$ /usr/local/php-5.6.0/bin/php array_search_test.php
bool(true)
string(6) "object"
```

# strict true

$strict=trueを指定すればphp5.5, php5.6どちらでもNoticeを消すことができる.
http://php.net/manual/ja/function.array-search.php

```php
<?php
$sample = new stdClass;
$arr = [
  'age' => 10,
  'name' => 'kappa',
  'object' => $sample,
];
// $arr配列の中から$sampleオブジェクトを検索
var_dump( in_array($sample, $arr, /*$strict=*/ true) );
var_dump( array_search($sample, $arr, /*$strict=*/ true) );
```

php5.5(Notice解消)

```
$ /usr/local/php-5.5.4/bin/php array_search_test.php
bool(true)
string(6) "object"
```

php5.6

```
$ /usr/local/php-5.6.0/bin/php array_search_test.php
bool(true)
string(6) "object"
```

phpの型変換はややこしいので、$strict=trueを指定したほうがよさそうです.
Macで最低限のzshの設定を行う

### 1. 以下をコピーする。
# 環境変数
```shell
export LANG=ja_JP.UTF-8
export KCODE=u  # KCODEにUTF-8を設定
```

## 色を使用出来るようにする
```shell
autoload -Uz colors
colors
```

## 補完機能を有効にする
```shell
autoload -Uz compinit
compinit
```

## タブ補完時に大文字小文字を区別しない
```shell
zstyle ':completion:*' matcher-list 'm:{a-z}={A-Z}'
```

## 日本語ファイル名を表示可能にする
```shell
setopt print_eight_bit
```

## ヒストリの設定
```shell
HISTFILE=~/.zsh_history
HISTSIZE=1000000
SAVEHIST=1000000
```

## PROMPT
# vcs_infoロード    
```shell
autoload -Uz vcs_info
```

# PROMPT変数内で変数参照する 
```shell
setopt prompt_subst    
```

# vcsの表示
```shell
zstyle ':vcs_info:*' enable git svn hg bzr
zstyle ':vcs_info:*' check-for-changes true
zstyle ':vcs_info:*' stagedstr "+"
zstyle ':vcs_info:*' unstagedstr "*"
zstyle ':vcs_info:*' formats '(%b%c%u)'    
zstyle ':vcs_info:*' actionformats '(%b(%a)%c%u)'   
```

# プロンプト表示直前にvcs_info呼び出し
```shell
precmd () {
    psvar=()
    LANG=en_US.UTF-8 vcs_info
    [[ -n "$vcs_info_msg_0_" ]] && psvar[1]="$vcs_info_msg_0_"
}    
#add-zsh-hook precmd _update_vcs_info_msg
PROMPT="%{${fg[green]}%}%n%{${reset_color}%}@%F{blue}localhost%f:%1(v|%F{red}%1v%f|) $ "
RPROMPT='[%F{green}%d%f]'
```

## Aliasの設定
# core
```shell
alias ls='gls --color=auto'
alias l='ls'
alias ll='ls -l'
alias rm='rm -i'
```

# git
```shell
alias gs='git status'
alias gl='git log --graph'
```

# rails
```shell
alias srake='spring rake'
```

# rbenv
```shell
eval "$(rbenv init -)"
```

### 2. 1.の内容を~/.zshrcにペーストして保存する
ペーストできればなんでもいいですが、例えば

```shell
$ pbpaste > ~/.zshrc
```

普通にvimで開いて設定してもおけ。


### 3. デフォルトのshellをbashからzshに変える
```shell
$ which zsh 
```

* （2019-05-23 追記） これで何もでなければ何かがおかしいのでこれ以降の作業をとめてください（次のコマンドで大変なことになります）

```shell
$ chsh -s  $(which zsh)
```

* このコマンド打ち間違えると最悪ログインできなくなるので注意。

### 4. brew で coreutilsを入れる

* homebrewを入れていない人はこちらの記事を参考に>> http://qiita.com/_daisuke/items/d3b2477d15ed2611a058
* lsの色付けするためにglsを使っているため（他の良い方法があれば教えてくだされ）

```shell
$ brew update 
$ brew install coreutils
```

### 5. ターミナルを再起動


### 参考
- change default shell
	- http://mollifier.hatenablog.com/entry/2013/02/22/025415
- glsのダウンロード
	-  http://kimikimi714.hatenablog.com/entry/2014/11/17/111330
CiNii Articlesのカラーリングを変更するStylish

「CiNii Articlesの配色が疲れる」という声を聞いたので、ゴニョゴニョするStyleを作成してみました。

## オリジナル

![ciNii-org.png](https://qiita-image-store.s3.amazonaws.com/0/36569/07aa8b89-a633-19d7-528c-0612b18c4452.png)

## Style適用後

![ciNii-new.png](https://qiita-image-store.s3.amazonaws.com/0/36569/11f222a9-d0fa-17fe-cf0f-d1b879a03994.png)

※ 基本的な要素を抽出したものですので、お好みに合わせて修正して下さい。


## Stylishアドオン

- Firefoxの場合: https://addons.mozilla.jp/firefox/details/2108 をインストールにアクセスしてインストール
- Chromeの場合 : https://chrome.google.com/webstore/detail/stylish/fjnbnpbmkenffdnngjfgmeleoegfcffe?hl=ja にアクセスしてインストール

```
@namespace url(http://www.w3.org/1999/xhtml);

@-moz-document domain("ci.nii.ac.jp") {

  *{
    background-color: #000 !important;
    color: #bbb !important;
    font-weight: inherit !important;
  }

  a{
    color: inherit !important;
  }
  
  /* header と informationを非表示にする */
  div#header{
    display: none;
    height: 0px !important;
  }

  #body-wrap{
    padding: 0px !important;
  }
  
  #servicestop_informationS{
    display: none;
  }
  
  /* 検索ヒット数の結果表示を小さくする */
  h1.srchh1{
    font-size: 70% !important;
    padding: 0px !important;
    margin: 0px !important;
    line-height: 0px !important;
    min-height: 0px !important;
  }
  
  /* 色のカスタマイズ */
  
  div#searchbox{
    border-bottom: 1px solid gray;
    border-top: 1px solid gray;
    background: none !important;
  }

  input#freetextbox{
    background-color: #fff !important;
    color: #000 !important;
  }
  
  div#searchbox, div#searchbox > *{
    background-color: #000 !important;
  }
  
  
  div.listitem{
    border-top: 1px solid #aaa !important;
    border-bottom: 1px solid #aaa !important;
  }
  
  dt.item_title{
    color: #dd7 !important;
    font-weight: normal !important;
  }

  span.query{
    background-color: #aa6 !important;
    color: #000 !important;
    letter-spacing: 0.1em !important;
    padding: 0px 3px 0px 3px !important;
    margin: 0px 3px 0px 3px !important;
  }
  
  div.paging a{
    background: none !important;
    background-color: #ccc !important;
    color: #000 !important;
  }
  
  .searchbtn{
    background: none !important;
    background-color: #000 !important;
    border: 1px solid #eee !important;
    color: #aaa !important;
    text-shadow: none;
  }
  
  .commonBtn{
    color: #000 !important;
  }
  
  input{
    color: #000 !important;
    background-color: #ccc !important;
  }
  
}
```

※ Chromeで使う場合は、1~3行目

```
@namespace url(http://www.w3.org/1999/xhtml);

@-moz-document domain("ci.nii.ac.jp") {
```

と、末尾の

```
}
```

を削除して登録すること。
Laravel4でマイグレーション（Migration）の作成からシーダー（Seeder）の作成まで


## 環境
Laravel 4.2
OS


## マイグレーションファイルの作成
```
php artisan migrate:make create_posts_table
```
app/database/migrations 以下にファイルが作成される

### オプション1（テーブル名が初期設定値として追加）
```
php artisan migrate:make create_posts_table --table=posts
```

### オプション2（テーブル名とID、timestampが初期設定値として追加）
```
php artisan migrate:make create_posts_table --create=posts
```


## マイグレーションの実行
```
php artisan migrate
```


## シーダーを作成
app/database/seeds にDatabaseSeederを継承してSeedクラスを作成する

app/database/seeds/DatabaseSeeder.phpに実行するseedクラスを指定する

## シーダーの実行
```
php artisan db:seed
```


## 参考
http://laravel.com/docs/4.2/migrations
https://scotch.io/tutorials/a-guide-to-using-eloquent-orm-in-laravel
http://fainaldt.tumblr.com/post/93727109831/laravel4-seeder
【初心者向け】WindowsにMacOSXライクな開発環境を作ってみる

Windowsを職場／研究室で使わざるを得なくなって泣いているみなさまへ、愛を込めて。

下記のソフトウェアをインストールすると、きっといいことがあります。
入れてみてください。

## GIT bash

gitを落とすと、Windows向けでもBashが手にはいります。結構嬉しい。
[Git Download](http://git-scm.com/downloads)

git向けなので、sshとか、そこそこコマンドは揃っています。
ただ、sudoとかyumとかはさすがに無理です。
下記に示してあるrubyやらLAMPやら入れると、
`$ gem`, `$ mysql`コマンドが使えるようになります。

## Ruby

Rubyを使えるようにしましょう。普通に、`gem install`が使えるようになるので、イケてます。
[Ruby install via Rails Girl](http://railsgirls.jp/install/#setup_for_windows)

もっというとRailsが使えるようになる（はず）です。

## LAMP環境構築

[Linux Kernel, Apache, Mysql, Phpの略](http://en.wikipedia.org/wiki/LAMP_%28software_bundle%29)です。
`C:\Program Files (x86)\xampp`あたりに、LAMPの入ってるパッケージである、XAMPPをインストールします。
[XAMPP Download](http://sourceforge.jp/projects/xampp/)
`C:\Program Files (x86)\xampp/mysql/bin`にパスを通せばどこからでもmysqlを使うことができます。

## Sublime or Atom Editor

言わずとしれたEditorのSublime, Atomを落としましょう。
[Sublime Text](http://www.sublimetext.com/)
[Atom installer Download](https://atom.io/)
な～にがサクラエディタ／TeraPadじゃ(°～°)

他にも、Android Studioとか入れようと思えば色々ありますが、
ひとまずBashを使えるようにすることでMacOSXライクな開発環境を作ることができたのではないかと思います。
是非Windows環境でも生き抜いてください。
JMeterでサーバから受け取ったJSONデータを変数に設定する


BSF Listenerを使う
ScriptLanguageにjavascriptを設定

```script.js
var body = JSON.parse(sampleResult.getResponseDataAsString())
log.info(body); // ツール -> ログビューアでログが見える
var data = body.data[0].list[0];
var foo = data.foo;
var weapons = data.weapons;
vars.put('foo', foo);
```

```${foo}``` とすると参照できる
OnApplicationQuitイベントについて

OnApplicationQuitにてイベント受ける時に、どのように動作するか？
回答いただいたので忘れないようにメモ

　●質問内容
　　アプリ終了時にデータを保存したいと考えており、 
　　PlayerPrefsを使用して最下段のようなソースを書きました。
　■不明点1 
　　unityエディタ上では再生を停止すると、 
　　イベントにブレークする事は確認でき 
　　終了時に値を保存する事が出来ました。 
　　android実機では保存されません。
　■不明点2 
　　android実機にてユーザーが任意でアプリを 
　　落とした場合、OnApplicationQuitにイベントは 
　　飛んでくるのでしょうか?
　■不明点3 
　　OnApplicationPauseにイベントが飛んできて以降に 
　　バックグラウンドで何かイベントを受け取る方法は 
　　ありますか?
　public void OnApplicationQuit() 
　{ 
　　Debug.Log(\"End\"); 
　　// ローカルにデータ保存 
　　PlayerPrefs.SetInt(キー名, 値); 
　　PlayerPrefs.Save(); 
　}

*******************************************************************
*******************************************************************
■回答内容

■不明点2
>android実機にてユーザーが任意でアプリを 
>落とした場合、OnApplicationQuitにイベントは 
>飛んでくるのでしょうか?

Activity.finish が実行されるようなケースにおいては OnApplicationQuit が呼ばれるはずです。
ただ、システムメニューやアプリ管理ツールを使って強制停止するようなケースにおいては呼ばれません。

■不明点3
>OnApplicationPauseにイベントが飛んできて以降に 
>バックグラウンドで何かイベントを受け取る方法はありますか?

残念ながら Unity 側には用意されていません。何らかの特殊なプラグインを用いる必要があると考えられます。
スマートフォンのブラウザで、スクロールのタイミングで何かする

単にscrollイベントにbindしただけでは、iOSではスクロール終了後に1度発火するだけなので注意。
また、Androidだと頻度と処理の内容によってはスクロールがカクついたりでいろいろと工夫が必要。

以上のことをふまえ、iOSではtouchmoveにbindし、Androidはscrollイベントで直接実行するのではなく、timerを併用して実行頻度を抑える。

```js
var pageScrollEventQueue = [];
function executeOnPageScroll(f) {
  if (isIOS()) {
    $(window).bind('touchmove', f);
  } else {
    pageScrollEventQueue.push(f);
  }
}
(function() {
  var scrollTop = $(window).scrollTop();
  var executeOnPageScrollEvent = function() {
    var current = $(window).scrollTop();
    if (scrollTop != current) {
      //console.log('executeOnPageScrollEvent');
      for (var i = 0; i < pageScrollEventQueue.length; i++) {
        pageScrollEventQueue[i]();
      }
    }
    setTimeout(executeOnPageScrollEvent, 250);
    scrollTop = current;
  }
  setTimeout(executeOnPageScrollEvent, 250);
})();
```
ページをスクロール開始のタイミングで一度だけ実行する

ページ下部のコンテンツなどファーストビューで表示されない箇所の初期化を遅らせるため、ページがスクロールされたタイミングで一度だけjsを実行する方法。

```js
function executeOnPageScrollOnce(f) {
  (function() {
    var f2 = function() {
      $(window).unbind('touchmove', f2);
      f();
    };
    $(window).bind('touchmove', f2);
  })();
}
```
R 統計 二標本の検定

&gt;e<-data.frame(A=c(30,26,57,56,87,53,33,45,99,64,234,456,54,33,678),B=c(28,23,54,58,88,50,34,54,88,69,254,465,56,77,675))

![abc.png](https://qiita-image-store.s3.amazonaws.com/0/26564/3c62ddcb-c262-c116-b42f-a32b87f7467c.png)

分散が等しいかどうか

![abc2.png](https://qiita-image-store.s3.amazonaws.com/0/26564/69af8b6e-a0db-8eb4-06ec-bb952d0bbf4f.png)

帰無仮説は「A,Bは等分散である」からp>0.05で棄却できない

T検定を行う

![abc3.png](https://qiita-image-store.s3.amazonaws.com/0/26564/b2fa5548-9948-56cf-364f-d6eb55c96252.png)

対応のあるT検定では「paired=TRUE」に、なければ「paired=FALSE」に
p>0.05なので有意ではない
IEnumerable から IDataReader へ変換

#初めに
[C#で Bulk Insert のサンプル](http://qiita.com/st450/items/e8453c4a53d1e80b8111)を作成して利用しているが、データの変換が必要な場合、DataSetにいれる必要がでてメモリが必要になる。
IEnumerableを使えば、yield return でデータを返すとメモリをあまり使用せずに実行ができる。
調べるとブログ「Converting IEnumerable<T> to IDataReader」を見つけた。
SqlBulkCopy を使うための最小限のIDataReaderの実装が載っていて大変参考になった。
#サンプルコード

```csharp
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Data;
using System.Data.SqlClient;
using System.Reflection;
using System.Threading.Tasks;
using SampleIDataReader.Properties;

namespace SampleIDataReader
{
    static class DataReaderExtensions
    {
        public static IDataReader AsDataReader<TSource>(this
IEnumerable<TSource> source)
        {
            return EnumerableDataReader.Create(source);
        }
    }

    internal static class EnumerableDataReader
    {
        public static IDataReader Create<TSource>(IEnumerable<TSource>
source)
        {
            return new EnumerableDataReader<TSource>(source);
        }

    }

    internal class EnumerableDataReader<TSource> : IDataReader
    {
        private readonly IEnumerator<TSource> _source;
        private readonly List<PropertyInfo> listProp = new
List<PropertyInfo>();

        internal EnumerableDataReader(IEnumerable<TSource> source)
        {
            _source = source.GetEnumerator();
            foreach (var prop in typeof(TSource).GetProperties())
            {
                listProp.Add(prop);
            }
        }

        public bool Read()
        {
            return _source.MoveNext();
        }

        public void Close()
        {
        }

        public void Dispose()
        {
        }

        public int FieldCount
        {
            get { return listProp.Count; }
        }

        public object GetValue(int i)
        {
            return listProp[i].GetValue(_source.Current);
        }

        public int Depth
        {
            get { throw new NotImplementedException(); }
        }

        // 残りのメソッドもDepthと同様 NotImplementedException を発生させている

    }

    class SampleTable
    {
        public int Field1 { get; set; }
        public string Field2 { get; set; }
    }

    class Program
    {
        static void Main(string[] args)
        {
            var arr = new SampleTable[]
            {
                new SampleTable{Field1 = 1, Field2 = "Field1"},
                new SampleTable{Field1 = 2, Field2 = "Field2"},
                new SampleTable{Field1 = 3, Field2 = "Field3"},
            };

            using (var bc = new
SqlBulkCopy(Settings.Default.xxxConnectionString))
            {
                bc.DestinationTableName = "dbo.SampleTable";
                bc.WriteToServer(arr.AsDataReader());
            }

        }
    }
}




```
jade でアクティブページの html 要素に class 等を付与する


なんかきっともっとうまいことやる方法があるのだろうけど、
今はこれでなんとかした、その場しのぎ的なメモ。

## Dreamweaver で言うこんなことやりたかった

> Dreamweaver でテンプレート機能を使ったまま、現在ページのメニューに色を付ける
<http://www.magical-remix.co.jp/magicalog/archives/650>

Grunt を使用していた時は
Gruntfile.js にゴニョゴニョ書いてなんとかしてた記憶はあるけど、gulp に変更してどうすればいいのか思い浮かばないので jade で以下の用にしてみた。

### 使用したパッケージ

```json:package.json
{
  devDependencies{
    "gulp": "^3.8.10",
    "gulp-jade": "^0.9.0"
  }
}
```

### 以下の用に記述

```jade:_inc_nav.jade
- var is_active_1 = ''
     ,is_active_2 = ''
     ,is_active_3 = ''
     ,is_active_4 = ''
     ,is_active_5 = '';

- if(currentUrl == 1){
  - is_active_1 = 'is_active';
-}
- if(currentUrl == 2){
  - is_active_2 = 'is_active';
- }
- if(currentUrl == 3){
  - is_active_3 = 'is_active';
- }
- if(currentUrl == 4){
  - is_active_4 = 'is_active';
- }
- if(currentUrl == 5){
  - is_active_5 = 'is_active';
- }

nav
  ul
    li
      a(href="#first",class='#{is_active_1}') First
    li
      a(href="#second",class='#{is_active_2}') Second
    li
      a(href="#third",class='#{is_active_3}') Third
    li
      a(href="#forth",class='#{is_active_4}') Forth
    li
      a(href="#fifth",class='#{is_active_5}') Fifth

```

```jade:index.jade
//- ページごとに currentUrl の数字を変更すればOK
- var currentUrl = 1;
include _inc_nav.jade
```

### 展開されるHTML

```html:index.html
<nav>
  <ul>
    <li><a href="#first" class="is_active">First</a></li>
    <li><a href="#second">Second</a></li>
    <li><a href="#third">Third</a></li>
    <li><a href="#forth">Forth</a></li>
    <li><a href="#fifth">Fifth</a></li>
  </ul>
</nav>
```

#### 感想

SublimeText にしたら Dreamweaver に戻れない体質になったけど、
静的ページだけのサイトの時は Dreamweaver のテンプレート機能は便利だったなと振り返るときはある。
ページが増えてきたら変数増やしたりするのが面倒そうだけど、そんなサイトはまた違うやりかたがあると思う。
（そもそもこのやり方もスマートじゃない気がする。:hurtrealbad:）

パッケージとかでなんとかできそうなのあればぜひ教えて下さい。
よろしくお願いします。:disappointed:
androidmanifest.xml の項目一覧[投稿テスト]

```xml:androidManifext.xml
<manifest> ←パッケージ名とかアプリのバージョンはここ
      <permission />←権限を自分で作る？
  <permission-tree />←？
	<permission-group />←？
	<uses-sdk />←SDKバージョン指定
	<uses-permission /> ←インスコ時に本体ID取るけどいいかーって聞く    <uses-permission android:name="android.permission.RECORD_AUDIO" />
	<uses-feature /> ←カメラが必要とかそういうの。マッチしないとストアに表示されない   <uses-feature android:name="android.hardware.microphone" android:required="true" />
	<instrumentation />←テストで使うっぽいかなあ？「アプリをモニタリング出来ます」なにそれ
	<supports-screens />  ←たぶん古い。使わない
	<compatible-screens />   ←たぶん古い。使わない
	<uses-configuration /> ←キーボードが必要とか。使わない
	<supports-gl-texture />  ←たぶん高度。使えない
	<application>
		<activity>
			<intent-filter>
				<action />
				<category />
				<data />
			</intent-filter>
			<meta-data />
		</activity>
			<activity-alias>
			<intent-filter> . . . </intent-filter>
			<meta-data />
		</activity-alias>
		<service>
			<intent-filter> . . . </intent-filter>
			<meta-data/>
		</service>
		<receiver>
			<intent-filter> . . . </intent-filter>
			<meta-data />
		</receiver>
		<provider>
			<grant-uri-permission />
			<meta-data />
			<path-permission />
		</provider>
		<uses-library />
	</application>
</manifest>
```


`

`
mysqlで文字コードをutf8にセットする

mysqlの文字コードはチェックする場所が多いので原因を突き止めるのに毎回苦労します。
大きく二種類に分けられて、

1. クライアント側、サーバー側（mysqlサーバー）、及びそれらの接続の文字コード
2. データベース/テーブル/カラムの文字コード

です。

##デフォルトをきちんと設定しておく

そもそも作成したDBの文字コードが意図しない設定になっていたら、デフォルトの設定が間違っている可能性が高いので、再度同じ問題を起こさないためにも、設定見直し→DBをdrop→DBをcreateという順番で直しに行きます。

1も2もデフォルトの設定は下記を実行すればok。

```mysql
show variables like "chara%";
```

```mysql 
+--------------------------+----------------------------+
| Variable_name | Value |
+--------------------------+----------------------------+
| character_set_client | utf8 |
| character_set_connection | utf8 |
| character_set_database | latin1 |
| character_set_filesystem | binary |
| character_set_results | utf8 |
| character_set_server | utf8 |
| character_set_system | utf8 |
| character_sets_dir | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
```

* **character_set_client** : クライアント側で発行したsql文はこの文字コードになる
* **character_set_connection** : クライアントから受け取った文字をこの文字コードへ変換する
* **character_set_database** : 現在参照しているDBの文字コード
* **character_set_results** : クライアントへ送信する検索結果はこの文字コードになる
* **character_set_server** : DB作成時のデフォルトの文字コード
* **character_set_system** : システムの使用する文字セットで常にutf8が使用されている 

基本的にはこれを全部（character_set_filesystem, character_sets_dir以外）utf-8にすればok。

##utf8に設定する

変更するには設定ファイルに書き込む。

```mysql:/etc/my.cnf
[mysqld]
...
character-set-server=utf8 #mysqldセクションの末尾に追加

[client]
default-character-set=utf8 #clientセクションを追加
```

再起動。

```linux
/etc/init.d/mysqld restart
```


##文字コードの確認をする
再度データベースを作りなおしたらきちんと文字コードが設定されているか確認します。

###サーバー/データベース
`use`文をつかってDBを指定し、クライアント、接続部分、データベースの文字コードが正しく設定されているか確認します。

```mysql
use db_example;
show variables like "chara%";
```

```mysql 
+--------------------------+----------------------------+
| Variable_name            | Value                      |
+--------------------------+----------------------------+
| character_set_client     | utf8                       | #utf8になってるok!
| character_set_connection | utf8                       | #utf8になってるok!
| character_set_database   | utf8                       | #utf8になってるok!
| character_set_filesystem | binary                     |
| character_set_results    | utf8                       |
| character_set_server     | utf8                       |
| character_set_system     | utf8                       |
| character_sets_dir       | /usr/share/mysql/charsets/ |
+--------------------------+----------------------------+
```

###テーブル/カラム
作成されたテーブルの文字コードを確認します。

```mysql
mysql> show create table tb_example \G; 
```
```mysql 
*************************** 1. row ***************************
       Table: location
Create Table: CREATE TABLE `tb_example` (
  `id` int(11) NOT NULL,
  `name` varchar(255) NOT NULL,
  `created_at` datetime NOT NULL,
  `updated_at` datetime NOT NULL,
  PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=utf8 #utf8になってるok!
```
Code:2 "Choregraphe-Pythonscript"で'HelloWorld'

[ロボットスタート](http://robotstart.co.jp/index.html)のMAKITOです。
ChoregrapheのPythonScriptを使ってHello-Worldの出力を行います。

---

<h4>■Pythonボックス</h4>
ダイアログに"Hello World"の表示まで一気にやります。
Choregrapheのダウンロードは[こちらから](https://community.aldebaran.com/en/resources/software)

•真ん中の灰色エリアを右クリック
![article-1.png](https://qiita-image-store.s3.amazonaws.com/0/66608/e3b97034-8cd1-256a-a0f7-e5f18cbb7384.png)

•ボックスの新規作成>Pythonをクリック
![article-2.png](https://qiita-image-store.s3.amazonaws.com/0/66608/02adb9c7-dcc5-513c-0339-18a9e68e92ab.png)

•ボックスの名前をつける。名前はご自由に
![article-3.png](https://qiita-image-store.s3.amazonaws.com/0/66608/5b978b0e-f83b-05f1-12ba-ecac3e1a9461.png)

•作成されたボックスをダブルクリック。スクリプトエディターが開きます。

•ボックスのdefに、def onInput_onStart(self):に処理を書きます。

![スクリーンショット_2015-02-12_12_03_03.png](https://qiita-image-store.s3.amazonaws.com/0/66608/a37aad8f-676b-85be-93ff-f2e1ceaf0b10.png)

・「def __init__(self):」に【self.talkhello = ALProxy('ALTextToSpeech')】
・「def onInput_onStart(self):」に【self.talkhello.say("Hello World!")】
※動作させたい部分に書いているので読み込んでからすぐがいいのであれば、
「def onLoad(self):」に書いても可。
・記述したら保存して再生してダイアログでロボットが"Hello World"といっているか確認してください。

![スクリーンショット 2015-02-12 12.06.29.png](https://qiita-image-store.s3.amazonaws.com/0/66608/4afd3322-2a61-7d63-0850-9bda3192e546.png)

・ボックスライブラリのSayから使っても同じように出力できます。

定番の"Hello World"でした。

---
[robotstart inc](http://robotstart.co.jp/)
[robotstart / For Developers](http://robotstart.co.jp/dev.html)
[robotstart / Tech.Links](http://robotstart.co.jp/linkdev.html)

Address	: Shibuya-ku, Tokyo, Japan
E-mail	: info@robotstart.co.jp
PHPでBOMを調べる

# 概要
BOMファイルかどうか調べます。


```php
<?php

s('C:/xampp/htdocs/'); # ここのパスを修正する

function s($target_dir) {
    chdir($target_dir);
    $files = glob('*');
    if (!is_array($files)||count($files)==0) return;
    foreach ($files as $file) {
        $path = $target_dir.$file;
        if (is_dir($path)) {
            s($path.'/');
        }else {
            echo "<p>OK - $path</p>";
            $contents = @file_get_contents($path);
            if (hasbom($contents)) {
                echo "<b style=\"color:red\">NG - $path</b>";
            }
        }
    }
}

function hasbom($contents) {
    return @preg_match("/^efbbbf/", bin2hex($contents[0] . $contents[1] . $contents[2])) === 1;
}
```

# 参考
http://tgws.fromc.jp/prog/searchbom/
Struts2のDIコンテナを使って設定ファイルから設定内容を読み込む

Struts2にはDIコンテナの機能もあり、これは2通りの使い方ができます。
設定ファイルは、struts.xml または struts.properties、さらにこれの派生ファイルです。

* キー名=値の内容をStringで取り込む
* キー名に応じたインスタンスを生成する

インスタンス生成の具体的な例としては、次にあげるstruts-default.xmlで定義している内容を紹介します。次の内容はHTML出力する際のテンプレートエンジンを定義している箇所です。

```xml
<bean class="org.apache.struts2.components.template.TemplateEngineManager" />
<bean type="org.apache.struts2.components.template.TemplateEngine" 
      name="ftl" class="org.apache.struts2.components.template.FreemarkerTemplateEngine" />
<bean type="org.apache.struts2.components.template.TemplateEngine" 
      name="vm" class="org.apache.struts2.components.template.VelocityTemplateEngine" />
<bean type="org.apache.struts2.components.template.TemplateEngine" 
      name="jsp" class="org.apache.struts2.components.template.JspTemplateEngine" />
```

* class定義のみの場合は、常にこのクラスをインスタンス化します。
* type定義でクラス/インタフェースがある場合は、この型を継承/実装するクラスをclassで定義し、name属性でエイリアス（別名）を定義します。

## Struts2におけるDIコンテナの使い方

先ほど例に挙げた TemplateEngineManager クラスを見てみます。
このEngineクラスは各種テンプレートエンジンを先ほどの設定ファイルから取り込み、このManagerクラス内で管理します。
設定ファイルから取り込む方法は、次のように Struts2のDIコンテナである Container を宣言し、 @Injectします。

```java:TemplateEngineManager.java
public class TemplateEngineManager {
  Container container;
  @Inject
  public void setContainer(Container container)
  {
    this.container = container;
  }
}
```

DIコンテナから同一の型であるクラスの別名一覧を取得する方法は次のようになります。

```java:TemplateEngineManager.java
Set<String> prefixes = container.getInstanceNames(TemplateEngine.class);
```

TemplateEngineクラスと同一の型(type属性)であるインスタンスを取得する場合は、別名を指定します。

```java:TemplateEngineManager.java
TemplateEngine engine = (TemplateEngine)container.getInstance(TemplateEngine.class, name)
```

もし該当するクラスやインスタンス取得ができなかった場合は null となります。
nullだった場合は、Struts2は設定ファイル読み込みエラーとして ConfigurationException をスローするコーディングをしています。

## 設定ファイルからStringを読み込む使い方

DIコンテナ以外の使い方として、単純に設定ファイルから文字列を読み込む方法もあります。

例えば struts.propertiesに以下の設定を追加します。

```properties:struts.properties
# Thymeleafプラグインが利用するテンプレートエンジン。defaultまたはspringから選択。
struts.thymeleaf.templateEngineType=spring
```
参照するときのキー名は struts.thymeleaf.templateEngineType 、値が spring ですね。

これを読み込むクラスでは、次のように記述します。

```java:DefaultTemplateManager.java
import com.opensymphony.xwork2.inject.Inject;

private String templateEngineType;

@Inject(value = "struts.thymeleaf.templateEngineType")
public void setTemplateEngineType(String templateEngineType) {
  // 何らかの処理
}
```

## 留意すること

* @Injectは com.opensymphony.xwork2.inject.Inject です。
* プロパティから値をとる方法を使う場合、必ず String ですので、必要に応じて型変換しましょう。
 * 不正な値だった場合は例外(com.opensymphony.xwork2.config.ConfigurationException)を投げるようにしましょう。
sudo gem install (gem名) がタイムアウトになる (proxy環境下)

手元のmacで、普段利用しているユーザとは別のユーザを切って

~~~
$ gem install bundler
~~~

したら以下のエラー。

~~~
ERROR:  While executing gem ... (Gem::FilePermissionError)
    You don't have write permissions into the /Library/Ruby/Gems/2.0.0 directory.
~~~

ふむふむパーミッションね、とおもって

~~~
$ sudo gem install bundler
~~~

したらタイムアウト。

~~~
ERROR:  Could not find a valid gem 'bundler' (>= 0), here is why:
          Unable to download data from https://rubygems.org/ - Errno::ETIMEDOUT: Operation timed out - connect(2) (https://rubygems.org/latest_specs.4.8.gz)
~~~

どうもsudoしたときに、手元のユーザの環境変数が引き継がれず、プロキシの設定が無に帰されている模様。
そこで以下を参照しプロキシ関連の環境変数を引き継ぐ設定とした。

sudoを利用した際にプロキシ設定を引き継ぐ設定
http://lambdalisue.hatenablog.com/entry/2013/06/25/140630

~~~
$ sudo visudo
~~~

で以下1行を追加。

~~~
Defaults        env_keep += "http_proxy https_proxy"
~~~

これで動きました。やれやれだぜ。
gem install以外でもはまりそうですね。
rbenv + Ruby + Ruby On Railsのインストール方法

## rbenv
* rbenvのインストール

```
git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
```

* .rbenv/binにPATHを通す

```
echo 'export PATH="$HOME/.rbenv/bin:$PATH"' >> ~/.bash_profile
```

* .rbenv/shimsにPATHを通す


```
echo 'eval "$(rbenv init -)"' >> ~/.bash_profile
source ~./bash_profile
rbenv -v (確認)
```

* rbenvを最新版にする

```
cd ~/.rbenv
git pull
```

* rbenv rehashの自動化

```
git clone https://github.com/sstephenson/rbenv-gem-rehash.git ~/.rbenv/plugins/rbenv-gem-rehash
```

## rubyのインストール
* ruby-buildをインストール

```
git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-buil
```

* ruby-buildを最新版にする

```
cd ~/.rbenv/plugins/ruby-build
git pull
```

* rubyのバージョン確認

```
ruby install -l
```

* rubyのインストール

```
rbenv install "インストールしたいversion"　
(ex. rbenv install 2.2.0)
```

* rubyのバージョンの切り替え

```
rbenv global "切り替えたいバージョン"
(ex. rbenv global 2.2.0)
rbenv versions (確認)
```

## Ruby on railsのインストール
* bundlerのインストール
  * ruby1.9以降はgemが初期装備
  * ruby1.9より前の場合は[こちら](https://rubygems.org/pages/download/)からインストール

```
gem install bundler
bundle -v
```

* 編集中

## その他
[bundle execをしなくても良くなる方法](http://cohakim.com/archives/4898)

## 注意点
* rbenvとrvmは同時にインストール出来ないので、rvmが入っている場合はアンインストールをすること


## 参考 
* [rbenv](https://github.com/sstephenson/rbenv)
* [ruby-build](https://github.com/sstephenson/ruby-build)
google analyticsでhttps→httpへのアクセスの場合referalが取れない状態の解決策

####**現象**
・https → httpへのリンクはreferalが保存されない
　※referalとは他サイトからの被リンクのこと　[※参考](https://support.google.com/analytics/answer/1011811?hl=ja)

・今回は
　ー社内の「ページ1」→「ページ2」への流入を調べたかった
　ーページ1はhttps、ページ2はhttpという状態だった
　ーさてどうする？

####**case詳細**
・http://example2.com にgoogle analyticsを入れている
・https://example1.com から http://example2.com へアクセスをした場合
・http://example2.com のanalyticsには https://example1.com からのreferalが反映されていない

####**原因**
「http」と「https」間の通信は、クロスドメインと認識されてしまうため
（たとえ同じドメインであってもそうなる）

ajax実装やテンプレートファイルからcssやjsを直リンクで持ってくるときに
自サイトがhttpsを使っているとき
httpからの情報を引っ張ってこようとするとエラーが起きる現象と同じ

####**解決策**
本質的かはわかりませんが一旦以下方法で対応

リンク元からリンク先へのアドレスを
「http://example2.com/?=f.example1 」とすることで対応
IPアドレスの入力チェック

### IPアドレスの入力チェック

```rb
if Resolv::IPv4::Regex !~ ip_address
  # IPアドレスじゃないよ！
end
```

console上で定数の中身を確認

```rb
Resolv::IPv4::Regex
/\A((?x-mi:0
               |1(?:[0-9][0-9]?)?
               |2(?:[0-4][0-9]?|5[0-5]?|[6-9])?
               |[3-9][0-9]?))\.((?x-mi:0
               |1(?:[0-9][0-9]?)?
               |2(?:[0-4][0-9]?|5[0-5]?|[6-9])?
               |[3-9][0-9]?))\.((?x-mi:0
               |1(?:[0-9][0-9]?)?
               |2(?:[0-4][0-9]?|5[0-5]?|[6-9])?
               |[3-9][0-9]?))\.((?x-mi:0
               |1(?:[0-9][0-9]?)?
               |2(?:[0-4][0-9]?|5[0-5]?|[6-9])?
               |[3-9][0-9]?))\z/
```

IPv4とあったので、IPv6もあるのではと思ったらあった

```rb
Resolv::IPv6::Regex
/
      (?:(?x-mi:\A
      (?:[0-9A-Fa-f]{1,4}:){7}
         [0-9A-Fa-f]{1,4}
      \z)) |
      (?:(?x-mi:\A
      ((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?) ::
      ((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?)
      \z)) |
      (?:(?x-mi:\A
      ((?:[0-9A-Fa-f]{1,4}:){6,6})
      (\d+)\.(\d+)\.(\d+)\.(\d+)
      \z)) |
      (?:(?x-mi:\A
      ((?:[0-9A-Fa-f]{1,4}(?::[0-9A-Fa-f]{1,4})*)?) ::
      ((?:[0-9A-Fa-f]{1,4}:)*)
      (\d+)\.(\d+)\.(\d+)\.(\d+)
      \z))/x
```

上記バリデーションを使って制限するIPをDBに登録して、application_controller等で、アクセス元のIPアドレスが取得できる「request.remote_ip」とかを使えばアプリケーション側でIP制限ができそうですね。
my.cnfの設定まとめver0.1

####**参考リンク**
[MySQLのmy.cnfファイルサンプル](http://time-complexity.blogspot.jp/2013/10/mysqlmycnf.html)

####**エラー対処** 
既にmysql動かしたことがある状態で設定をすると
再起動にエラーが起きる。
そのときは以下ファイルを削除して再起動すると動く
ib_logfile0  ib_logfile1  ibdata1
sublime Textの便利なプラグイン

## 導入
sublime Text使うときは
とりあえず全部インストールしておけ的なものたち

####**諸々**
http://tukumemo.com/sublimetext-sublimelinter/

####**全角/半角ハイライト**
[Sublime text 3で不要な半角/全角スペースをハイライトして知らせてくれるパッケージ「Trailing Spaces」](http://stella-design.biz/2014/08/27/222013.html)

####**シンタクスチェック**
◆setting（ターミナル）
　○sublime3上
　　・基本設定→package controllより
　　・「Package Control: Install Package」を選ぶ
　　・「SublimeLinter」を選ぶ

◆php
　○ターミナル上
　　・brew install homebrew/php/phplint
　　・brew install gcc
　　・brew tap josegonzalez/homebrew-php
　　・brew install phplint
　○sublime3上
　　・基本設定→package controllより
　　・「Package Control: Install Package」を選ぶ
　　・「SublimeLinter-phplint」を選ぶ

※参考リンク
　　・https://github.com/SublimeLinter/SublimeLinter-phplint

◆js
　○ブラウザ上
　　・[node.jsのインストール](https://litalico-engineer.qiita.com/kamesennin/items/5ec6629fa997417812ce)
　○ターミナル上
　　・brew update
　　・npm install -g jshint
　○sublime3上
　　・基本設定→package controllより
　　・「Package Control: Install Package」を選ぶ
　　・「SublimeLinter-jshint」を選ぶ

◆html
　・http://c-brains.jp/blog/wsg/13/12/26-100000.php

◆css
　○ターミナル上
　　・npm install -g csslint
　○sublime3上
　　・基本設定→package controllより
　　・「Package Control: Install Package」を選ぶ
　　・「SublimeLinter-csslint」を選ぶ


※参考リンク
http://liginc.co.jp/web/js/73704
phpでUAでのPCとスマートフォンの切り替え方法

## 導入
ユーザーエージェント毎にPCページとスマホページを切り替えたい
と思ったときの方法まとめ

####**方法1**（php上で行う）
[・PHPによるユーザーエージェント振り分け方法のまとめ](http://matome.naver.jp/odai/2139056785693073401)
[・PHP で、ユーザーエージェント（iPhone・Android・タブレット・携帯・PC）によってページを振り分ける](http://monolio.com/memo/php/user-agent-page-change/)

####**方法2**（サーバー上で行なう）
[・PC版とスマートフォン版サイトを自動振り分けする方法](http://allabout.co.jp/gm/gc/386483/3/)

※memo
[・mod_rewriteまとめ（2）mod_rewriteで使う正規表現](http://blog.layer8.sh/ja/2011/12/28/mod_rewrite%E3%81%BE%E3%81%A8%E3%82%81%EF%BC%882%EF%BC%89mod_rewrite%E3%81%A7%E4%BD%BF%E3%81%86%E6%AD%A3%E8%A6%8F%E8%A1%A8%E7%8F%BE/)
[・userAgent（ユーザーエージェント一覧）](http://www.openspc2.org/userAgent/)
[・Apache RewriteCond の基礎知識](http://weblabo.oscasierra.net/apache-rewritecond-base/)
[・【mod_rewrite】 RewriteBaseとは？](http://ysklog.net/server/mod_rewrite/1427.html)
phpパスワードのhash化について

####**[blowfishを用いたパスワードのhash化手順](http://c-brains.jp/blog/wsg/14/03/26-190413.php)**

######**注意点1**
・PASSWORD_DEFAULT()
　はデフォルトのアルゴリズムを使ってパスワードをハッシュする。
　現時点でのデフォルトは BCRYPT で、その結果は 60 文字になる。
　デフォルトは今後変わる可能性があるのでデータベースの文字制限は
　結果が60文字以上になっても対応できるようにしておく(255あたり)

######**注意点2**
・password_hash()はPHP 5.5 以降で利用可能
　※crypt()はPHP5.3以降で利用可能

######**注意点3**
password_hash()で72文字（バイト）より長いパスワードを許可する場合には注意が必要。この対策を行うとpassword_hash()をPASSWORD_DEFAULTで利用していても、常に同じハッシュ関数で予めハッシュしておかなければならなくなる。対策としては「72文字より長いパスワードの設定を許可しない」にする。
Conobieでは60文字

######**Zendframework2での利用**
[ドキュメントはここ](http://framework.zend.com/manual/current/en/modules/zend.crypt.password.html)

######**参照**
[※安全なパスワードハッシュ by PHPリファレンス](http://php.net/manual/ja/faq.passwords.php)
[※password_hashに関する注意点詳細](http://blog.ohgaki.net/password_hash-important-limitation)
仮想サーバー設定時のメモ

##vagrant コマンド

vagrant up  起動
vagrant halt  終了
vagrant reload  再起動
vagrant provision  初期化
vagrant destroy  削除
vagrant ssh  仮想マシンに接続
vagrant init  Vagrantfileが作成される

###vagrantでよく使うターミナルコマンド
vagrant halt
仮想環境をシャットダウンします。動かしているとその分だけメモリなどを消費するので、使わない時には消しておくのが基本になります。
vagrant up
仮想環境を読み込みます。vagrantfileを変更した後にupを使用すると、変更した設定の差分を読み込んでくれます。
vagrant suspend
スリープに近い処理です。作業中の状態を保留状態にするので、次に読み込む時の時間が短縮されます。ただし、容量が圧迫されたままの状態になります。
vagrant destroy
リソースをすべて削除します。使用していたvagrantfileがあれば、環境は再構築できるのでデータだけ残しておけばOKです。


##VCCW コマンド

###WordPressのベータバージョンを試したい
```
WP_VERSION = '3.8-beta-1';
```
書き換え後にvagrant upもしくはvagrant provision

###任意のドメイン名で立ち上げたい
WP_HOSTNAME = "fregoby.jp";

###起動時に特定のテーマを自動的に有効化したい
WP_DEFAULT_THEME = "twentyfourteen"
または
WP_DEFAULT_THEME = 'http://github.com/miya0001/fregoby-2011/archive/master.zip'

###起動時に特定のプラグインを自動的に有効化したい
WP_DEAULT_PLUGINS = %w(theme-check simple-map plugin-check hotfix);


##参考
http://www.d-wood.com/blog/2014/08/27_6674.html

https://firegoby.jp/archives/5921


####Grunt + wp-cilを組み合わせると便利
Hatamoto
https://github.com/megumiteam/hatamoto
CSSやJsのminifyを自動的に行う
Sucker Punchを使ってHerokuでタダで非同期処理を行う


# Sucker Punchとは
Sucker Punchは、Rails4.2に導入されたActiveJobから利用可能な、非同期処理をおこなうためのgemです。

通常、Herokuで非同期処理を行う場合は、Webサーバ用のwebプロセスとは別に、workerプロセスを起動し、バックグラウンドで非同期処理を行います。しかし、この場合だとworkerプロセスはHerokuの無料枠の対象とはならず、1月で約$35程度の費用が発生します。

しかし、Sucker Punchを使って非同期処理をおこなうようにすると、workerプロセスを別途起動することなく、webプロセスのみで非同期処理がおこなえますので、無料枠内に抑えることができます。

## メリット
- workerプロセスを別途作る必要がないので、Herokuの無料枠で運用できる。

## デメリット
- delayed_jobなどのように、ジョブを永続化していないので、再実行ができない。
- 「非同期処理を10分後に実行」といったパターンに対応していない。つまり即時実行のみ。

参考:https://github.com/brandonhilkert/sucker_punch/issues/97

# 導入
まずはGemfileにsucker_punchを記述します。

``` ruby:Gemfile
gem 'sucker_punch'
```

その後bundle installしておきましょう。次にActiveJobからsucker_punchを利用できるように、以下のようなファイルを作成します。

``` ruby:config/initializers/sukcer_punch.rb
Rails.application.configure do
  config.active_job.queue_adapter = :sucker_punch
end
```

# ジョブの作成と実行

ジョブの作成はrailsコマンドから

```
rails g job My
```

とすると、app/jobs/MyJob.rbが生成されます。

``` ruby:app/jobs/MyJob.rb
class MyJob < ActiveJob::Base
  queue_as :default

  def perform(*args)
    # Do something later
  end
end
```

あとはperformメソッド内に非同期で実行したい処理の内容を記述します。

このジョブを実行するには、例えばコントローラーなどから

```ruby
MyJob.perform_later

# 引数をセットする場合は以下のようにする
# MyJob.perform_later('hoge')
```

とすれば、ジョブが非同期で実行されます。
Rubyの引数いろいろ



Rubyの引数について色々あるけど知らなかったので調べてみた。


###普通の引数

```
class Hoge
  def self.piyo(msg)
    p msg
  end
end
```

```
Hoge.piyo('fuga') #=> 'fuga'
```


###デフォルト引数
引数にデフォルト値をもたせられる。
実行時に引数を渡さなかった場合、デフォルト引数を用いて処理が行われる。

```
def self.piyo(msg='fuga')
  p msg
end
```

```
Hoge.piyo #=> 'huga'
Hoge.piyo('fugafuga') #=> 'fugafuga'
```


###キーワード引数
hashを使った引数宣言もできる。
実行時にkeyを宣言しないとエラるので注意。

```
def self.piyo(msg: 'fuga')
  p msg
end
```
```
Hoge.piyo  # =>'fuga'
Hoge.piyo(msg: 'fugafuga') #=> 'fugafuga'
```

キーワード引数は複数の引数を使う時に便利。
Hashなので引数の順番を気にせず使える。

```
def self.piyo(msg: 'hello', name: 'Yamada')
  p "#{msg}, #{name}"
end
```

```
Hoge.piyo #=>"hello, Yamada"
Hoge.piyo(msg: 'Hi', name: 'Sato') #=> "Hi, Sato"
Hoge.piyo( name: 'Sato', msg: 'Hi') #=> "Hi, Sato"
```

ただし、定義していないkeyを使おうとするとエラる。

```
Hoge.piyo(gender: 'male') 
# => ArgumentError: unknown keyword: gender from (pry):23:in `<main>'
```


###可変長引数＆オプション引数

*をつければ引数を複数個設定できる。
これを可変長引数という。
引数は配列として受け取られる。

```
def self.piyo(*msg)
  p msg
end
```

```
Hoge.piyo('fuga') # => ['huga']
Hoge.piyo('huga', 'hugahuga') #=> ['fuga', 'fugafuga']
```

*を２つつけるとオプション引数になる。
オプション引数はHashとして受け取られる。

```
def self.piyo(**msg)
  p msg
end
```
```
Hoge.piyo(msg: 'fuga') # => {:msg => 'huga'}
Hoge.piyo(msg: 'huga', name: 'hugahuga') 
#=> { :msg => 'fuga', :name => 'fugafuga' }
```


###ブロック引数
blockも引数として渡せる。
block.callでメソッド内で実行する。

```
def self.piyo(&block)
  block.call
end
```

```
Hoge.piyo{ p 'fuga' } # => 'fuga'
```

yieldの方がよく使う気がする。
使い方＆結果は一個上と同じ。

```
def self.piyo
  yield
end
```
[Angular.js]Enterで入力確定させるtextarea用directive

チャットサービスでよくある、Enterを押すと入力を確定させるtextareaをdirectiveで作ってみた。

# directive
こんな感じ。

``` onEnter.js
app.directive('onEnter', function() {
  return {
    scope: {
      onEnter: "&"
    },
    link: function(scope, element, attrs) {
      angular.element(element[0]).on('keydown', function(e) {
        if (e.which == 13) {
          var text = angular.element(this).val();
          if (text) {
            scope.onEnter({text: text});
            angular.element(this).val('');
            e.preventDefault();
          }
        }
      });
    }
  }
});
```

# 使い方
機能を付与したいtexareaに`on-enter`をバインド。注意点として、呼び出す関数に渡す引数は`text`とする(directive内で`text`で渡しているので合わせる)。

``` index.html
<div ng-controller="MyController">
    <textarea on-enter="onEnter(text)"></textarea>
</div>
```

これでバインドしているControllerの関数を呼び出すことが出来る。

``` myController.js
app.controller('MyController', ['$scope', function($scope) {
  $scope.onEnter = function(text) {
    // ここに処理を書く
  }
}]);  
```