OmniAICreator/Qiita-1.07M huggingface dataset:
パッケージが更新されないようにする

### apt の場合

    apt-mark hold パッケージ名

あるいは

    aptitude hold パッケージ名

#### 解除するときは

    apt-mark unhold パッケージ名
    aptitude unhold パッケージ名

#### dpkg だと

    echo "パッケージ名 hold" | dpkg --set-selections

    echo "パッケージ名 install" | sudo dpkg --set-selections

#### ホールドされているパッケージのリストは

    dpkg --get-selections | grep hold

あるいは

    dpkg -l | grep '^h'

### yum の場合

/etc/yum.conf に exclude= でスペース区切りのリストで指定する。

    exclude=パッケージ名 [パッケージ名 ...]

パッケージ名にはシェルのグロブ (`*` や `?`) が使用できる。
[備忘録]コピペしてすぐ使える NSDataをNSURLに変換

需要が少ないのか、検索しても有用な情報が出てこなかったので、備忘録。

```objc:sample1.m
        NSData * originalData = [self getNsdataFromDokoka];
        
        NSString * dataFormatString = @"data:application/octet-stream;base64,%@";
        NSString * base64Data = [originalData base64EncodedStringWithOptions:0];
        
        NSString * dataString = [NSString stringWithFormat:dataFormatString, base64Data];
        
        NSURL *url = [NSURL URLWithString:dataString];
```

`data:application/octet-stream;base64` は、Data URI scheme。
http://ja.wikipedia.org/wiki/Data_URI_scheme

`application/octet-stream`←この辺りは、以下を参考に。
http://ja.wikipedia.org/wiki/Multipurpose_Internet_Mail_Extensions#Content-Type
indy > BoundIPプロパティ > local IP of the desired interfaceを指定する 

[SO](http://stackoverflow.com/questions/18524042/specify-the-broacast-interface-with-tidudpclient-in-delphi)

> Use the BoundIP property to specify the local IP of the desired interface that TIdUDPClient should bind to.

```
IdUDPClient->Active = false;
IdUDPClient->BoundIP = "XXX.XX.X.XXX";
IdUDPClient->Active = true;
```

上記XXX.XX.X.XXXにlocal IPを指定する。

複数のNICが実装されている環境ではすべてのNIC向けにブロードキャストしてしまうおそれがあるのだろう。そういう時にBoundIPを指定することにより、不要なブロードキャストをしないことになるのだと思う。
mysql の procedure（プロシージャ）で add partition

サンプルテーブル log。主キーは id 一つ。

```sql:
create table log (
    id              bigint          not null auto_increment,
    message         text            ,
    created_at      int             not null,
    primary key (id)
) engine = InnoDB;
```

このままだとパーティション作成できないので主キーをいじる

```sql:
alter table log
    modify id bigint not null,
    drop primary key;
alter table log
    add primary key (id, created_at),
    modify id bigint not null auto_increment;
```

パーティションを 1つ追加しとく。

```sql:
alter table log partition by range (created_at) (
    partition pmin values less than (0)
);
```

プロシージャを作って 3年分のパーティション追加。

```sql:
drop procedure if exists add_monthly_partition;
delimiter //
create procedure add_monthly_partition(
    in table_name text,
    in date_func text,
    in years int)
begin
    select now() into @d;
    select date_add(@d, interval years year) into @last;

    while @d < @last do
        select concat(
            'alter table ', table_name,
            ' add partition (partition p',
            date_format(@d, '%Y%m'),
            ' values less than (', date_func, '(''',
            date_format(@d, '%Y-%m-01'), ''')))'
        ) into @ddl;
        select @ddl;
        prepare stmt from @ddl;
        execute stmt;
        deallocate prepare stmt;
        select date_add(@d, interval 1 month) into @d;
    end while;
end //
delimiter ;

call add_monthly_partition('log', 'unix_timestamp', 3);
```
jQuery-Validation-Engine は type="number" を判別しない

jQueryのバリデーション（入力チェック）プラグイン。
https://github.com/posabsolute/jQuery-Validation-Engine

悩んだところがあったので備忘録

一部のinputがエラー内容でもメッセージが表示されない。
その部分は type="number" を指定しているところだった。

type="text" にすることで正常に動作した。

numberにも対応させたいけど追い切れなかったので断念。
スマフォコーディング時（PCでも使える）-webkit-xxx プロパティ設定まとめ

スマフォのコーディング中に設定した値のメモ。
iPhoneが結構わがままな子なので、色々設定を標準に戻したりした時の設定あれこれです。

##-webkit-text-size-adjust
ブラウザ機能で拡大を行った時に文字サイズをどうするかという設定

```css
/* 拡大されない */
-webkit-text-size-adjust: none;
/* 自動で拡大 */
-webkit-text-size-adjust: auto;
/* 割合で拡大：これを設定しました */
-webkit-text-size-adjust: 100%;
```

##-webkit-font-smoothing
SafariやChromeで少し文字が太くなったり、アニメーション時にも微妙に太くなってしまう現象を解消するのに設定

```css
/* アンチエイリアスしない */
-webkit-font-smoothing: none;
/* アンチエイリアスする */
-webkit-font-smoothing: antialiased;
/* サブピクセルを利用したアンチエイリアス：これがデフォルト */
-webkit-font-smoothing: subpixel-antialiased;
```
サブピクセルがちょっと太くさせるみたいだけど、どっちもどっちな気がする。背景：黒、文字：白だと太くなるのがハッキリわかるので、デザインに合わせて設定すれば良いかなと思った。

このサイトがとても参考になりました。
http://memolog.org/2013/08/-webkit-font-smoothing_and_usability.html

##-webkit-tap-highlight-color
要素をタップしたりフリックした時に、フォーカスが要素に移るとハイライトされてしまうので、それをハイライトさせない......ことはできないので、擬似的に非表示にする設定

```css
/* 背景色な何色でも良いがアルファ値を０に設定する */
-webkit-tap-highlight-color: rgba(0,0,0,0);
```

##-webkit-touch-callout
タップ長押しで表示されるポップアップを表示しないようにする設定。要は、画像とかのコピペ防止だったりとかに使われるもの。

```css
-webkit-touch-callout: none;
```

iOS8では対応していないという情報もあるようなので、画像のみの対応であれば以下のように設定。

```css
img {
  pointer-events: none;
}
```

これはPCでも対応しているプロパティ。詳しくはMDNを参考に。
https://developer.mozilla.org/ja/docs/Web/CSS/pointer-events

##-webkit-overflow-scrolling
overflowで表示したスクロール領域を慣性スクロールで動作させる設定

```css
/* こちらがデフォルト */
-webkit-overflow-scrolling: auto;
/* 慣性スクロール */
-webkit-overflow-scrolling: touch;
```

##-webkit-appearance
Safariで表示するとフォームに自動的に角丸や影などが装飾がされてしまうので、その設定を無効にする方法です。

```css
-webkit-appearance: none;
```
linux / network > ネットワーク内の装置を調べる > nmap -sP 192.168.24.1-255

[参考](http://www.miuxmiu.com/archives/2011/03/29/linux_ubuntu_network_ip_address_search_command.html)

```txt:動作確認
CentOS 6.5
```

root権限にてnmapをインストールしておく。

192.168.24.1から192.168.24.255の範囲をスキャンするにはrootユーザにて以下を実行する
```
$nmap -sP 192.168.24.1-255
Nmap scan report for 192.168.24.1
Host is up (0.00064s latency).
MAC Address: xx:xx:xx:xx:xx:xx: (XXXXXX)
Nmap scan report for 192.168.24.2
...
```
Android Studioでスクリーン幅によってレイアウトxmlを切り替える方法

表題の件を忘れないようにメモします。
いちいちスクリーン幅を取得して適用するレイアウトxmlを振り分ける必要がないので簡単です。

#Android Studioでの操作
最初にactivity_main.xmlがあるとします。スクリーン幅が600dp以上の時に適用するレイアウトxmlを作ります。
![0.1.png](https://qiita-image-store.s3.amazonaws.com/0/61168/38b469d1-6d74-04cd-466d-571239ee1833.png)

1. layoutフォルダのところで右クリックしてメニューを開き、「`New`」の「`Layout resource file`」を選びます。
![01.png](https://qiita-image-store.s3.amazonaws.com/0/61168/8f300daf-317f-152c-89b8-a24ed6614377.png)
　

2. レイアウトを切り替えたいxmlと同じ名前(`activity_main`)にして、「`Smallest Screen Width`」を選んで「`>>`」をクリックします。
![2.5.png](https://qiita-image-store.s3.amazonaws.com/0/61168/a93f6894-2ba7-22d1-6206-4d5151af90cc.png)
　

3. Smallest screen widthに600と入れます。
![02.png](https://qiita-image-store.s3.amazonaws.com/0/61168/7d3e5f3e-bc27-5734-3d81-37042d1185bb.png)
　

できあがり。これでスクリーン幅が600dp以上はactivity_main.xml(sw600dp)の方のレイアウトが適用されます。
![03.png](https://qiita-image-store.s3.amazonaws.com/0/61168/759ca8f1-e8f1-5077-6331-8decbb610326.png)

#参考
・ Android Developers - Supporting Multiple Screens - Using new size qualifiers
[http://developer.android.com/guide/practices/screens_support.html#NewQualifiers](http://developer.android.com/guide/practices/screens_support.html#NewQualifiers)
Android StudioでopenFrameworksをビルドする

Android アプリ開発初心者です。Eclipse でのビルドが上手く行かなかったので Android Studio を試してみました。

# 実行環境

* OSX YOSEMITE 10.10.2
* Android Studio 1.1.0 Build #AI-135.1740770
* JRE 1.7.0_79-b15 x86_64
* Android SDK Android 5.1.1(API22)。Android Studio と一緒に自動的にインストールされました。
* Android NDK r9d
* OF 0.9.0
* Emulator Nexus_5_API_21_x86
* Nexus7 Android Version 4.4.2

# 参考サイト

openFrameworks の公式チュートリアルに従いました。
[openFrameworks/android.md at master · openframeworks/openFrameworks]
(https://github.com/openframeworks/openFrameworks/blob/master/docs/android.md)

以下、上記チュートリアルを適当に読み進めつつ躓いた箇所などを記します。

# 概要

openFrameworks と Android Studio は超簡単です。基本的には以下のステップになります。

* Android Studio と Android SDK のインストール
* Android NDK のインストール（r10b 以下）
* openFrameworks のダウンロード
* プロジェクトのインポート
* NDK の設定
* ビルド&ラン
* サンプルを元にプロジェクトを作る

# Android Studio と Android SDK のインストール

Arduino Studio を http://tools.android.com/download/studio/stable からダウンロードします。1.0 以上が必要です。最近の SDK が一緒にインストールされますが、**Tools ➞ Android ➞ SDK Manager** で使用する SDK のバージョンをカスタマイズできます。

SDK が付属してこなかった場合は、http://developer.android.com/sdk/index.html からダウンロードすることができます。

* Android NDK のインストール（r10b 以下）

r10c だと不具合があるため、r10b を使用してください。今回はチュートリアルにリンクがある r9d を使用しました。 http://dl.google.com/android/ndk/android-ndk-r9d-darwin-x86_64.tar.bz2

# openFrameworks のダウンロード

http://github.com/openframeworks/openFrameworks からダウンロードします。俺は http://openframeworks.cc/download の方に行って`download openFrameworks for eclipse` をダウンロードしてしまい半日ほど無駄にしてしまいました。

# プロジェクトのインポート

Android Studio の Welcome Screen で **Import Project**、または **File ➞ Import Project** を選択し、`libs/openFrameworksCompiled/project/android` ディレクトリの `settings.gradle`を指定します。色々言ってきますが全部OKでプロジェクトのセットアップを待ちます。
この時点でNDKのエラーが出ますが、次のステップで。

# NDK の設定

同様に`libs/openFrameworksCompiled/project/android` ディレクトリの`local.properties`を以下のように修正します。
`ndk.dir=/path/to/the/ndk`

俺の場合こんな感じです。
`ndk.dir=/Users/***/***/android-ndk-r9d`

`local.properties`を保存して Android Studio の **Tools ➞ Android ➞ Sync Project with Gradle Files** を選択してプロジェクトと再同期を行います（自分の環境では"Try Again" も "Gradle project sync failed"表示されなかった気がします）。

ビルド中に、何度か Android SDK が足りないと言われましたが、その度同意してインストールを繰り返せば OK かと思います。 

# ビルド&ラン

`androidEmptyExample`の横にある再生ボタンを押して、うまく行くとビルドされ、Android デバイスやエミュレータで再生されるはずです。再生されたなら openFrameworks の設定は完了です。

実機テストに関しては以下のページを参考にさせて頂きました。
[Android Studioで実機デバッグするには？ | iDEA CLOUD/dev]
(http://idea-cloud.com/dev/android_developer_option.html)

# サンプルを元にプロジェクトを作る

`examples/android`にある `androidEmptyExample`フォルダをコピーして、`apps` の中にサブディレクトリを作ってペースト（サンプルと同じディレクトリ構成にすること）。`build.gradle`ファイルを`androidEmptyExample`からコピーしてペースト。`libs/openFrameworksCompiled/project/android`にある`settings.gradle`を以下のように修正します。

```
// your projects go here
include 'examples:android:androidEmptyExample'
// Add your own projects like this:
// includeFlat 'apps:myApps:myAwesomeApp'
include 'apps:myApps:myFirstApp'
```

俺の環境では`includeFlat`という書き方ではビルドできませんでした。


まだ2、3個サンプルを試しただけですが、今のところ大丈夫そうです。

【4/22追記】

以下の4つのサンプルは Emulator、Nexus7 ともにデバイス上で再生できませんでした。API のせいかな？

* androidCameraExample
* androidOpenCVFaceExample
* androidOpenCVExample
* androidVibratorExample

`androidSwipeExample` は IDE 上でエラーになって転送ができませんでした。
git

## What is git ?
git is a distributed revision control system.

## Basic setting
```bash:terminal
$ git config --global user.name "your name"
$ git config --global user.email "your email address"
$ git config --global http.proxy "your proxy host if needed"
$ git config core.editor "your prefferd editor"
```

## Useful command 
```bash:terminal
$ git add . --all
# --all option allows to remove cached file which was deleted by rm.

$ git rm --cached <filename>
# Removing from index stage.

$ git reset HEAD <file>...
# Unstaging changes from index stage but not remove it.

$ git rebase -i HEAD~<num or --root>
# Making changes over multiple commits
```
ubuntuでpdf分割やテキスト化

# 画像化

```sh
pdftoppm -r 125 -png a.pdf a
```

* https://tinypng.com/

```bash:pdfをpng化
convert \
 -density 600 -geometry 1000 \
 input.pdf image_%02d.png
```

# pdf分割

* 参考: [pdftk（pdfツールキット）でpdfファイルを結合 - グズてつのぼやき](http://d.hatena.ne.jp/gzutetsu/20100703/p1)

```bash:3ページ目だけ抽出したい場合
pdftk hoge.pdf cat 3 output hoge_page3.pdf
```

```bash:1から4ページ目を抽出したい場合
pdftk hoge.pdf cat 1-4 output hoge_page1-4.pdf
```

```bash:全ページ-90度回転したい場合
pdftk hoge.pdf cat 1-endleft output hoge_page.pdf
```

# テキストファイル化

```bash:hoge.txtに出力
pdftotext hoge.pdf hoge.txt
```
WordPressの固定ページ階層化

WordPressは固定ページの階層化設定をするのに、公開しているページしかドロップダウンで選択できないので、非公開の固定ページでも階層化の選択ができるようにするための記述。

```php
/* 固定ページを非公開の状態でも階層化選択できるようにする */
function allow_private_draft($args) {
	$args['post_status'] = 'publish,private,draft';
	return $args;
}
add_filter( 'page_attributes_dropdown_pages_args', 'allow_private_draft' );
```

functions.phpに追記すればOK。
先に下の階層のページを作る時に仮当てで上層ページを作る必要があったのでやってみた。
nvm

## What is nvm ?
nvm stands for Node Version Manager.

## Install
```bash:terminal
$ brew install nvm
```
[brew](http://qiita.com/Shirade/items/23aa7c78e85acb2e21ba)

## Setting
```bash:terminal
$ vi ~/.bash_profile
# Add the follwoing 2 lines in the end of file
export NVM_DIR=~/.nvm
source $(brew --prefix nvm)/nvm.sh 
```

## Sample usage
```bash:terminal
$ nvm install 0.12
$ nvm use 0.12
$ node
> ...
```

## Tips
### Default node version
Every time you launch new terminal, you need to specify node version. 
If you do not specify and try to use node, command not found error returns.

```bash:terminal
$ node
-bash: node: command not found
```

To avoid this, you can set default alias

```bash:terminal
$ nvm alias default 0.12
```
Spacemacsの導入方法

普段Emacs使いですが、この前またGithubのtrendで上位に挙がっていたのでちょっと[Spacemacs](https://github.com/syl20bnr/spacemacs)を試してみています。

最初設定方法(いつもinit.elに書いているようなこと)がわかり辛かったのでまとめてみました。

# インストール

本家の[READNE.md](https://github.com/syl20bnr/spacemacs/blob/master/README.md#install)に従ってインストールします。
Emacs 24.3または24.4でテストされているらしいので、いずれかのバージョンのEmacsを事前にインストールしておきます。

1 まず既存の`.emacs.d`がある場合これをバックアップ:

```bash
cd ~
mv .emacs.d .emacs.bak
```

2 Spacemacsを`.emacs.d`としてクローン:

```bash
git clone --recursive http://github.com/syl20bnr/spacemacs ~/.emacs.d
```

3 Emacsを起動すると、必要なパッケージのインストールが始まります。

4 パッケージのインストールが終わったら再起動します。

# 設定方法

Spacemacsでは各種設定は[Configuration layer](https://github.com/syl20bnr/spacemacs#configuration)という単位に分割されて管理されます。Spacemacsは`~/.spacemacs`ファイルに従ってこの`Configuration layer`をロードします。

クローンした後の`.emacs.d`の下の`spacemacs/contrib`ディレクトリには、便利な`Configuration layer`がいろいろ入っています。例えば`spacemacs/contrib/auto-completion`を使いたい場合、その旨を`~/.spacemacs`に記述することで`auto-completion`を利用することができるようになります。

## .spacemacs

`M-x dotspacemacs/install`コマンドを実行すると、デフォルトの設定が記述された`.spacemacs`がホームディレクトリに作成されます。

`M-m f e d`で作成された`~/.spacemacs`ファイルが開きます。例えば以下のように`dotspacemacs-configuration-layers`に記述して、

```elisp
;; List of configuration layers to load.
dotspacemacs-configuration-layers '(auto-completion)
```

`M-x dotspacemacs/sync-configuration-layers`を実行すると、`~/.spacemacs`の変更が適用され、Emacs package repositoriesからの`auto-completion`のダウンロードや設定が施されます。

`spacemacs/contrib`以下にはたくさんの`Configuration layer`があります。
各種言語系の設定`spacemacs/contrib/lang`のようにサブディレクトリに格納されている場合、サブディレクトリの方の名前を`dotspacemacs-configuration-layers`に記述します。

```elisp
dotspacemacs-configuration-layers '(javascript) ;; javascriptのConfiguration layerを使う
```

## 個人的なConfiguration layer

個人的な設定をしたい場合も`Configuration layer`を使います。

`M-x configuration-layer/create-layer`を実行すると`private`ディレクトリ配下に任意の名前の`Configulation layer`が作成されます。例えばこんな感じになるかと思います:

```bash
ls -1 private/
hogehoge-project # hogehogeプロジェクト用のConfigulation layer
pbaleine         # プロジェクトに紐づかない個人的な設定用のConfigulation layer
snippets         # snippet用のディレクトリ
```

各`Configuration layer`の構成はこんな感じになります:

```bash
ls -1 private/pbaleine/
config.el      # 設定をかくところ
extensions.el  # package.elでダウンロードできないパッケージの設定
funcs.el       # 関数とかをかくところ
keybindings.el # キーバインドをかくところ
packages.el    # package.elでダウンロードできるパッケージの設定
```

Spacemacs起動時には`funcs.el -> config.el -> packages.el -> extensions.el -> keybindings.el`の順にロードされる(みたい[^1])ので、`funcs.el`に関数を定義して`config.el`に設定を書いて`keybindings.el`にキーバインドを記述しておけば、設定が完了した状態でSpacemacsが起動します。

[^1]: 公式のドキュメント上で記述が見つけられていないので`*Messages*`バッファの出力をみて判断しています…まぁこの順序が変わることはないと思いますが

# おまけ

* デフォルトの`~/.spacemacs`では[source code pro](https://github.com/adobe-fonts/source-code-pro)を利用するように設定されてるので、これを使う場合あらかじめ`source code pro`をインストールしておくときれいに表示されます。

* Emacs使いは`space`を`M-m`で読み替えてドキュメント読みましょう

* …Vimユーザ向けにつくったってかいてあるけど、Vimユーザは使わないと思うよ
JavaScriptでのプロトタイプ継承

### JavaScriptでのプロトタイプ継承
```js
function MyClass(x, y){
  this.x = x
  this.y = y
}

MyClass.prototype
// MyClass {}
// 全ての関数はprotytypeという名前のプロパティをもつ

//プロトタイプ継承
MyClass.prototype.info = function() {
  print(this.x, this.y)
}

var obj = new MyClass(5, 4);
obj.info(); //結果: 5 4

obj.__proto__
// MyClass {info: function}
// 全てのオブジェクトはコンストラクタのprototypeオブジェクトに__proto__プロパティで参照できる
```

* 全ての関数は`prototype`という名前のプロパティをもつ
* 全てのオブジェクトはコンストラクタの`prototype`オブジェクトに`__proto__`プロパティで参照できる
バイオインフォマティクス -ゲノム配列から機能解析へ- 輪読会のまとめ

# ここは?
ラボ内勉強会で以下の本を輪読し、各回のまとめを投稿していきます。

バイオインフォマティクス ゲノム配列から機能解析へ 第2版
マウント デービッド W. 著
http://www.amazon.co.jp/dp/4895924262

このページは随時更新していきます。

# 目次
## 1章: 歴史
* [バイオインフォマティクスのこれまで](http://qiita.com/kino-tohoku/items/638686097f2de76923fe)

## 2章: ファイルフォーマット
(古いファイルフォーマットの話なのでスキップ)

## 3章: ペアワイズ配列アラインメント
* [主に，ドットマトリックス，ダイナミックプログラミングについて](http://qiita.com/kino-tohoku/items/aeb89a4d1c3cfa7021b0)
バイオインフォマティクス -ゲノム配列から機能解析へ- 第3章:対にした配列のアラインメント

これは[バイオインフォマティクス ゲノム配列から機能解析へ 第2版](http://www.amazon.co.jp/dp/4895924262)輪読会の記録です。
目次は[こちら](http://qiita.com/kino-tohoku/items/14272a69dbd7a3bad34b)です。

#3.1 配列アラインメントとは？
配列アラインメントとは，***DNAもしくはタンパク質配列中で同じ並び方をしている文字列や配列パターンを探すこと***

####比較配列数による違い
- **ペアワイズ配列アラインメント**
  - 2配列間の比較
- **多重配列アラインメント**
  - 3本以上の配列間の比較

####比較配列長による違い
- **大域的アラインメント**
  - 配列全体にわたる比較
  - よく似ていて，大体同じ長さの配列の比較に適している
  - Needleman-Wunschアルゴリズム

- **局所的アラインメント**
  - 一致密度の高い配列領域の比較
  - ある部分で似ているが他の部分では似ていない配列や，長さの異なる配列の比較に適している
  - Smith-Watermanアルゴリズム

#3.2 配列アラインメントは機能や構造や進化的情報を明らかにする

**非常によく類似した配列はきわめてよく似た機能を持つ**
 >例えば，DNA分子なら同じ調整機能であったり，タンパク質ならよく似た生化学的機能と立体構造であったりする．

異種間で配列が類似するとき，進化的に同じ起源を持つ可能性があり，2つの配列は**相同である(homologous)**という

#3.3 ペアワイズ配列アラインメントには3つの主要な方法がある
ペアワイズ配列アラインメントは，以下の方法を用いて行われる．
- ドットマトリックス解析
- ダイナミックプログラミング(DP)アルゴリズム
- ワードもしくはk-タプル法

##3.3.1 ドットマトリックス解析
GibbsとMcIntyre(1970)によって発表

>比較する配列を二次元の格子の縦横に並べ，一致している文字のペアを黒く塗った，グラフィカルな表示法
>対応する部分は，連続する対角線として表示される
> 引用元: <cite>[バイオインフォマティクス基礎講座 配列解析](http://www.jst.go.jp/nbdc/bird/jinzai/literacy/streaming/h21_3_1.pdf)</cite>

###利点
- 2配列間の残基についてすべての可能な一致がわかる
  - ドットマトリックスに斜め線として現れる一致の長い連続した領域を調べて，最も優位な一致を識別する選択の余地を残している
  
- 配列の繰り返しを見出す
  - DNAおよびタンパク質配列中の順方向や逆方向の反復配列を見つける
- 単一の配列記号の繰り返しを見出す

##3.3.2 DPアルゴリズム
>アラインメント問題は，有向グラフの最適経路問題と等価
>有効グラフの最適経路問題は動的計画法で解ける
> 引用元: <cite>[バイオインフォマティクス基礎講座 配列解析](http://www.jst.go.jp/nbdc/bird/jinzai/literacy/streaming/h21_3_1.pdf)</cite>

経路のコストとして，各塩基(アミノ酸)のオッズスコアが使われる．
オッズスコアとは，**タンパク質中のアミノ酸の出現頻度を前提として，アミノ酸置換が偶然怒る回数に対して，類縁のあるタナパク室中でその置換が起こる割合**




##3.3.3 ワードとk-タプル法
>初めに，同一の短い配列(ワードやk-タプルと呼ばれる)を探し，ダイナミックプログラミング法でこれらのワードをアラインメントに連結していくことで，2つの配列を非常に高速にアラインメントする．
【Colorbox】一部だけスタイルを変える（クラスを追加する）

知らなかったのでメモ

```js

$('呼び出す要素').colorbox({
	onOpen: function(){
		$('#colorbox').addClass('追加したいクラス');
	},
	onClosed:function(){ //閉じるときに必ず消す。じゃないと次開くcolorboxもクラスがついたままになるので
		$("#colorbox").removeClass("追加したいクラス");
	},
});
```

参照：[jquery - Adding classname to Colorbox dynamically - Stack Overflow](http://stackoverflow.com/questions/8120579/adding-classname-to-colorbox-dynamically)
バイオインフォマティクス -ゲノム配列から機能解析へ- 第1章: バイオインフォの歴史

これは[バイオインフォマティクス ゲノム配列から機能解析へ 第2版](http://www.amazon.co.jp/dp/4895924262)輪読会の記録です。
目次は[こちら](http://qiita.com/kino-tohoku/items/14272a69dbd7a3bad34b)です。

# 第1章  バイオインフォマティクスの歴史と全貌

## §1.1 バイオインフォマティクスとは何か
### バイオインフォマティクスの目指すところ
* 農業・薬理学・商業的観点からゲノム関係の生物学的データを組織化する
* 生物学的データって?
	* ゲノムから得られる配列とその内容に関する情報
	* 実験的に得られた遺伝子産物の構造・機能分析から得られる情報


### 計算生物学とバイオインフォマティクス
* **計算生物学:** 
	* さまざまなむずかしい問題を効率よく解決できる新しいアルゴリズムの開発など
		* 多重配列アライメント
		* ゲノム断片のつなぎ合わせ（アセンブル）

* **バイオインフォマティクス:**
	* データの管理や解析のための実践的なツールの開発に重点


## §1.2 タンパク質配列解析法と最初のデータベース
* **1951 Sanger & Tuppy**
	* タンパク質の配列解析法の開発
	* 一般的によく見られるタンパク質ファミリーの中からいくつかの代表的なもののアミノ酸配列が決定される
	
* **197x Margaret DayhoffらNBRF(National Biomedical Research Foundation)の人々**
	* Atlas of protein sequence and structure (1972)
	* PIP (Protein Information Resource (1978)
		* 配列類似性に基づくタンパク質ファミリー・スーパーファミリーの分類
		* 配列アライメントに基づく系統樹の導出
			* 詳しくは3章,6章

* **1988 NBRF,MIPS,JIPIDの人々**  
	* PIR-国際タンパク情報データベース
		* NBRF
		* MIPS (Munich Center for Protein Sequences)
		* JIPID (Japan International Protein Information Database)


## §1.3 DNA配列データベースの登場
1980年代周辺にDNA配列データベースが相次いでつくられる

* **1979 GenBank**
	* LANL (Los Alamos National Laboratory)のTheoritical Biology and Biophysics Groupによって始まる
	* 現在はNCBI(National Center for Biotechnology Information)による維持
* **1980 EMBL (European Molecular Biology Laboratory)**
* **1984 DDBj (DNA DataBank of Japan)**
	* GenBank, EMBL, DDBjをまとめて **国際核酸塩基配列データベース共同体**

[参考] GenBankに登録されている配列数の推移: http://www.ncbi.nlm.nih.gov/genbank/statistics


## §1.4 配列データベース検索システムの開発
* **GENINFO**
* **Entrez**: http://ncbi.nlm.nih.gov/Entrez
	* あらかじめインデックス化された配列DBを横断検索
	* 類似配列の検索
	* EntrezはMEDLINE(National Libratory of Medicene; NLM)文献DBも横断検索できる


## §1.5~1.11 数多くの配列解析プログラムの登場
* **(§1.5) 2配列の比較**
	* ドットマトリックス: 2配列を比較して類似部分を検出する
	* pairwise alignment: 2配列がどれくらい似てるか?
* **(§1.7) 配列比較による進化推定 (→7章)**
* **(§1.8, §1.9) 配列DB検索 (→6章)**
	* FASTA: Pearson & Lipman, 1988
	* BLAST: Altschul et al., 1990
* **(§1.11) タンパク質構造を配列から予測 (→10章)**


## §1.12, §1.13 ゲノム解読とゲノムDB管理システム
### ゲノムの解読の歴史
* 1995: インフルエンザ
* 1997: 出芽酵母
* 1998: 線虫
* 2000: ショウジョウバエ、シロイナズナ
* 2001: ヒト
* 2002: マウス

### 最初のゲノムDB管理システム
* AceDB (a C. elegans database)
	* 1989: 初期バージョン, Jean Thierry-Mieg (CRS) & Richard Dubin(サンガー研究所)
	* 1993: X-Window (Cherry & Cartinhour)
	* ????: Webインターフェース (http://www.acedb.org)
【Express4】雛形生成の際のデフォルトのテンプレートエンジンを「EJS」にする

#概要

雛形の生成の際にテンプレートエンジンがデフォルトで「ejs」となるようにする。


#内容


何も考えずにExpressコマンドで

```

express hogeapp

```

とすると、デフォルトでは「jade」でviewが生成されます。
「ejs」が適用されるようにするには、オプションで指定すればいいらしいのですが、

```
express -t ejs hogeapp

```

でやっても「jsde」のままでした。ちゃんと「ejs」もインストールしたぞと思いながら、

```
express -h

```

で、ヘルプを見てみると

![スクリーンショット 2015-04-22 12.26.13.png](https://qiita-image-store.s3.amazonaws.com/0/67591/e571431e-260c-6fc1-5e6f-d1b2f19a6262.png)

オプションで【-e】を付けるとデフォルトが「ejs」になるらしいと分かった。

ということで、

```

express -e hogeapp

```

で上手くいきました。
Express 4から仕様が変わったのかな？
AngularJSのdate filterにunixtimeを使うとき

unixtimeは秒単位であるのに対し、
JSのDateオブジェクトはミリ秒単位なため

```
{{unixtime*1000|date: 'yyyy/MM/dd'}}
```
として桁数を調整するだけでいいようです。

※ 参考
[Dateオブジェクト-UNIX時間との相互変換](http://so-zou.jp/web-app/tech/programming/javascript/grammar/object/date.htm#no8)
[AngularJS date filter](http://js.studio-kingdom.com/angularjs/ng_filter/date)

FuelPHPとかのcreated_atをそのままAngularJSに渡した時に地味に悩みました。
C++builderのTEditを数値のみの入力にする。

TEditのイベントKeyDownに設定。
TEditのプロパティでImeModeをimDisable。

そのうち修正するかも。

```cpp:FireMonkey.h
///std::unique_ptr用(C++11対応の環境用)
#include <memory>
///FunctionNumberOnly(Key, KeyChar, 対象のTEdit ,最大桁数, デフォルト値 ,次のTEdit);
void __fastcall FunctionNumberOnly(WORD & Key, System::WideChar & KeyChar,
		TEdit * var_edit, const int &var_max_length = 3, const int &def = 0,
		TEdit * var_next_edit = NULL);
```

```Cpp:FireMonkey.cpp
void __fastcall TForm1::FunctionNumberOnly(WORD &Key, System::WideChar &KeyChar,
	TEdit *var_edit, const int &var_max_length, const int &def,
	TEdit *var_next_edit) {
	if (Key == VK_RETURN || Key == VK_TAB) {
		if (var_edit->Text == L"") {
			var_edit->Text = def;
		}
		if (var_next_edit != NULL) {
			this->ActiveControl = var_next_edit;
		}
	}
	else {
		UnicodeString v_input = KeyChar;
		if (v_input.ToIntDef(-1) >= 0 && (var_edit->Text.Length() <
			var_max_length || var_max_length == NULL)) {
		}
		else {
			KeyChar = NULL;
		}
	}
}
///OnKeyDownイベントに追加。
void __fastcall TForm1::Edit1KeyDown(TObject *Sender, WORD &Key,
	System::WideChar &KeyChar, TShiftState Shift) {
	FunctionNumberOnly(Key, KeyChar, Edit1);
/// FunctionNumberOnly(Key, KeyChar, Edit1,3,0,Edit2);
}
```
infratasterでPostしたりHostヘッダーを設定したりする

## 何がしたいか

Infratasterでnginxでserver_nameのテストしたかったり、Postのテストをインフラ構築の際にテストしちゃいたい、という場合のやり方を調べました。

<del>READMEとかにはなくてソース読んだので、後の人のためにメモ。</del>(...その後よく見たらあった(´･ω･`))

## やり方

http resourceの第２引数としてハッシュを指定できて、`:params`,`:method`,`:headers`の3つを取ります。

```rb
describe server(:app) do
  describe http("http://127.0.0.1/", headers: { 'Host' => 'example.com' }, params: { 'param1' => 'value1' }, method: :post) do
    it 'respond 200 status' do
      expect(response.status).to eq(200)
    end 
  end 
end
```

* `:params`: `'key' => 'value'`の形でリクエストパラメータを指定できます。主に`:post`で利用するイメージ。
* `:method`: リクエストメソッドを指定します。defaultは`:get`で、あと使うのはほぼ`:post`でしょうか。infratasterは内部でFaradayを利用しているので、そこで可能なものを指定できます。
* `:headers`:　リクエストヘッダーをハッシュ形式で指定できます。

Infrataster便利ですね。どんどんテストしましょう。
C++builderでCSVを読み込んでTStringGridに表示

CSVをTStringListで読み込んで、1行ずつ別のTStringListで読み込む。

```cpp:FireMonkey.h
///std::unique_ptr用(C++11対応の環境用)
#include <memory>
///
void __fastcall FunctionReadCSV(const UnicodeString &var_file_name,
	TStringGrid *var_string_grid);
```

```cpp:FireMonkey.cpp
void __fastcall TForm1::FunctionReadCSV(const UnicodeString &var_file_name,
	TStringGrid *var_string_grid) {
	std::unique_ptr<TStringList>var_list(new TStringList); // csv読み込み用
	std::unique_ptr<TStringList>var_temp(new TStringList); // var_listから1行読み込み
	if (FileExists(var_file_name)) { // ファイルを確認
		var_list->LoadFromFile(var_file_name); // ファイルを読み込み
		var_string_grid->RowCount = var_list->Count; // 行数を設定。
		for (int i = 0; i < var_list->Count; i++) {
			UnicodeString tmp_c = StringReplace(var_list->Strings[i], L"\\,",
				L"&comma;", TReplaceFlags() << rfReplaceAll << rfIgnoreCase);
			// 文字列に明示的なカンマ \, が有るときは一旦別の文字列にしておく。
			var_temp->CommaText = tmp_c; // commaTextで区分け
			for (int i2 = 0; i2 < 4; i2++) { // 必要な列数に応じて4の部分を変更
				tmp_c = var_temp->Strings[i2];
				tmp_c = StringReplace(tmp_c, L"&comma;", L",",
					TReplaceFlags() << rfReplaceAll << rfIgnoreCase);
				// カンマを戻す。この例では「\,」を「,」にしている点に注意。
				var_string_grid->Cells[i2][i] = tmp_c;
			}
		}
	}
}
```

書き出しはこちら
[C++builderでTStringGridからCSVを書き出す](http://qiita.com/mm_sys/items/fc4637bfb8123e739cd9)
git svn で Unable to determine upstream SVN information from working tree history


## 概要
git svn を使っていて、下手なことをすると上記タイトルのエラーが出てgit svn rebaseやgit svn dcommitが失敗するようになる。その解決の流れ。
私はこれで治ったけど、ググった感じみんな違うこと言ってるので、これ以外にも様々な原因でこのエラーが出るんだと思う。

## 事象

svnのリポジトリを使い慣れたgitのインターフェースで開発するために以下のようにしてました

```console:開発環境構築

git svn clone -s [SVNリポジトリのURL]

# svnのバックアップとしてgithubにリポジトリを作っているのでremoteを登録
git remote add origin [githubリポジトリのURL]

```

```console:開発

# ローカルgitにコミット
git add .
git commit

# svnの変更を適応
git svn rebase

# svnにコミット
git svn dcommit

# バックアップとしてgithubにpush
git push -u origin [ブランチ名]

```

しかし途中で、githubをoriginという名前にしたのが気に入らなくなり、リネームした。

```console:リネーム
git remote rename origin github
```

すると、git svn関連がエラーを吐いて動かなくなったのだ！

```console:エラーです。ぐええ
git svn rebase
Unable to determine upstream SVN information from working tree history

git svn dcommit
unable to determine upstream svn information from head history. 
perhaps the repository is empty

```

## 解決策

リネームしたのを戻したら動くようになった

```console:再びリネーム
git remote rename github origin
```

gitのバグ？

## 似たような記事
* git : 「unable to determine upstream svn information from head history. perhaps the repository is empty」 - ..たれろぐ.. http://d.hatena.ne.jp/naga_sawa/20130606/1370503145
* git で svn リポジトリを扱うのに一苦労, git svn dcommit で使われる commit log, 今日のめしうま - HsbtDiary(2009-06-20) http://www.hsbt.org/diary/20090620.html
* git - Unable to determine upstream SVN information from HEAD history - Stack Overflow http://stackoverflow.com/questions/1269566/unable-to-determine-upstream-svn-information-from-head-history
*
Google Maps APIでGeoJSON編集機能を有効にする


```js
//Google Maps API　初期化
var map = new google.maps.Map(document.getElementById('map-canvas'), {
	center: { lat: 36.322356, lng: 139.013057 },
	zoom: 5
});
 
map.data.setStyle({draggable: true, editable: true}); //ドラッグとエディットを有効にする
map.data.setControls(['Point', 'LineString', 'Polygon']); //エディットコントローラーを表示
```
地図上にエディットコントローラーが表示される
![gmap_geojsoneditor.JPG](https://qiita-image-store.s3.amazonaws.com/0/2832/dfe7eefd-ca2a-eb31-c8ab-41270adba356.jpeg)

詳細
[Google Maps APIにGeoJSONを編集する機能が付いたので、サクッとGeoJSONエディタ作ってみた。](http://shimz.me/blog/map/4225)
Rails formtastic-bootstrapでradioボタンを横並びにする方法

bootstrapでradioボタンを横並び(horizontal)にするには``<div class="radio"``のところにradio-inlineクラスを指定する必要があるが、Railsのformtasticだけではうまく指定できない。

formtastic-bootstrap拡張の``inline: true``を使えばよい。

検索してもあまりずばりとした例がでてこなかったのでググラビリティ向上のため使用例を挙げておく。

* 使用例

```rb
= f.input :radio, as: :radio, collection: [["select hoge1", "hoge1"],["select hoge2", "hoge2"]], label: false, inline: true
```

## ソース

https://github.com/mjbellantoni/formtastic-bootstrap/blob/v3.0.0/lib/formtastic-bootstrap/inputs/radio_input.rb#L38
1%を求める方法


1秒間に最大150回の回転をする機械が
1秒間45回しか回転しなかった場合
達成率は何パーセントかという時

150 × 0.01 = 1.5が1%になります。
なので、45回転に1%を割れば
達成率のパーセントが求められます。
45 ÷ 1.5 = 30%

次に、1秒間に300回の回転をする機械は
何パーセントの達成率なのかを考えます。
まあ、2倍なので200%でしょって事なんですが

ちゃんと計算すると以下のXは10%になります。

150 × X = 15
X = 15 ÷ 150
X = 0.1　（10%）

この式を使うと

150 × X = 300
X = 300 ÷　150
X = 2　（200%）

という感じで求められます！
簡単ですね。
配列の中身が参照だったときは強制参照渡しにはならない？


#概要

phpのバージョンを上げるときに5.3で禁止された強制参照渡しに関して少し気になることがあったのでメモ

#強制参照渡しとは

php5.2までは関数側で参照を受け取っていなくても呼び出し時に強制的に参照を渡すことが出来た

```php
function refTest($a)
{
	$a = 'hoge';
}

$b = '';

refTest(&$b);

var_dump($b); // string(4) "hoge"
```

これはphp5.3以降で

```
Fatal error: Call-time pass-by-reference has been removed
```

というエラーが出るようになった

#要素に参照が含まれる配列だとエラーは出ない

どうやら関数に渡すときに`&`さえついていなければ何も言われないようで、以下のコードはphp5.5.20で普通に動く

```php
<?php
function refTest($a)
{
    $a[0] = 'hoge';
}

$b = '';

$c = array(&$b);

refTest($c);

var_dump($c);
// array(1) {
//   [0]=>
//   &string(4) "hoge"
// }
```

そのうちこれも動かなくなる気はするのでなんにせよあんまり変なコードは書かないほうがいいですね
resque-web でよく使うもの

### 起動＆ブラウザを開く
```$ resque-web```

### 起動のみ
```$ resque-web -L```

### 停止
```$ resque-web -K```

### デフォルト（127.0.0.1:6379）以外の Redis に接続
```$ resque-web -r another-redis.com:6379```

### ヘルプ
```$ resque-web -h```
Introduction to Support Library rev.22.1

[Support Library rev.22.1のリリースがアナウンスされました](http://android-developers.blogspot.jp/2015/04/android-support-library-221.html)。

マイナーバージョンアップですが、いくつかの特筆すべき変更があります。

## Support V4

`DrawableCompat`が導入され、様々な`Drawable`の機能を API Level 4 までサポートします。`DrawableCompat#wrap(Drawable)`を用いて`Drawable`をラップすることによって、Tinting のサポートが**`Drawable`リソースの分離をしなくても**可能になります。

また、`Palette`の一部内部機能を`ColorUtils`から利用可能になります。Lollipop で導入された各種アニメーションの`Interpolator`もこのリリースで含まれるようになりました。

`Space`はこのリリースで、`GridLayout`ライブラリから Support V4 ライブラリに移動となりました。

## AppCompat(Support V7)

`ActionBarActivity`が deprecated になり、新しく`AppCompatActivity`が導入されます。

これは、`AppCompatDialog`というダイアログ向けの互換クラスが導入されたためです。`AppCompatDialog`によって、マテリアルデザインを`Dialog`に適用できます。

また、内部機能(ライフサイクルコールバックやテーマ、Color tinting 等)を`AppCompatDelegate`によってコントロールすることが可能となります。この`AppCompat`はどの`Activity`でも内包可能です。

各種の View の Tint を自動で行うよう、AppCompatButton や AppCompatTextView などの専用クラスが導入されました。これらはレイアウト XML に記述する事ができ、inflate 時に自動で tint が行われます。

`ToolBar`については、`android:theme`をレイアウトで指定可能となります。この他の View については、API Level 11+ 以降で同様に指定できるようになります。

## Leanback

Leanback では、Android TV における各種のベストプラクティスを取り扱っています。サンプルが更新され、左側にガイド、右側にアクションの一覧が表示されるようになっています。それぞれテーマをカスタマイズでき、`GuidanceStylist`や`GuidedActionsStylist`を用いて更に拡張が可能です。

この他、バグフィクスやパフォーマンス改善も含まれます。

## RecyclerView

バグフィクスのほか、`SortedList`というデータ構造が導入されました。これによって、ソート済リストの取り扱いが簡単になり、コレクションの変更に応じたイベントハンドリング（dataset change）も容易になります。また、`SortedList`はデータセットの変更をバッチ処理することができ、同時にたくさんの変更があっても一回の操作でそれを反映することが出来るようになっています。

## Palette

このリリースで、品質の劣化なしに 6~8 倍の高速化がされました。

`Palette`のインスタンス生成に`Builder`を用いるようになりました。`Palette#from(Bitmap)`で`Builder`を得て、オプションを指定してから`generate`または`generateAsync`するようにできます。

## RenderScript

このリリースでは信頼性とパフォーマンスが向上しており、最も高速で信頼性のある実装を選択するようになっています。`ScriptIntrinsicHistogram`と`ScriptIntrinsicResize`が新たに導入されました。
WordPress: 個人的によく見るページとか記述まとめ

# よくお世話になるサイト

WordPress私的マニュアル
http://elearn.jp/wpman/



# テンプレート作成

WordPressをカスタマイズするなら絶対覚えておきたいテンプレートファイルの使い方
http://webdesignrecipes.com/wordpress-customize-with-template-files/

ショートコードの登録方法
http://blog.s-giken.net/114.html




# タグ・変数

グローバル変数・定数
http://elearn.jp/wpman/variable

WordPress Codex テンプレートタグ
http://wpdocs.sourceforge.jp/%E3%83%86%E3%83%B3%E3%83%97%E3%83%AC%E3%83%BC%E3%83%88%E3%82%BF%E3%82%B0

URL・ディレクトリの取得まとめ
http://morilog.com/wordpress/template/url_and_directory_functions/

文字列のトランケート（X文字以降を切る処理）
http://hayashikejinan.com/wordpress/functions/755/

WordPressのカスタム投稿タイプ条件分岐まとめ
http://blog.ext.ne.jp/?p=1893


# 管理画面のカスタマイズ

カスタムフィールドの値をWordPressの投稿一覧画面に表示させる方法
http://infinityforest.net/home/archives/2558

管理画面でカスタムタクソノミーを使って絞り込みが出来るようにする
http://yusukexp.com/wordpress/snippet/taxonomy-filter/

Wordpress 記事を属性 順序( menu_order ) の順番に並べたい
http://chaika.hatenablog.com/entry/2014/10/16/024556

ダッシュボードにオリジナルのボックスを追加する
http://kachibito.net/wp-code/add-my-box-to-admin-dashboad

ダッシュボード（管理画面）やログイン画面に独自のCSSを適用させていじくる
http://mypacecreator.net/blog/archives/1041


#カスタム投稿・カスタムタクソノミー

カスタム投稿タイプのシングルページにてカスタムタクソノミーの情報を色々取得する
http://memocarilog.info/wordpress/theme-custom/5066


# プラグイン

Advanced Custom Field
http://www.advancedcustomfields.com/

Contact Form 7
http://contactform7.com/ja/


# SQL

ポストタイプを一括で変更するSQL
UPDATE wp_posts SET `post_type` = replace(`post_type`, 'artist', 'artists')
Qiitaの記事を書くときに気をつけること

Qiitaの記事を書く時、幾つか気をつけると良いことがあります。
なお、この記事で書かれている内容はQiitaの仕様変更によって正確でなくなるかもしれません。

この記事は、2015/04/22時点の情報に基づいて書かれています。

# タグ

Qiitaにはタグという仕組みがあります。
基本的には付けたいものをつければ良いのですが、Qiitaの仕様上以下のような点に注意する必要があります。

Qiitaでは、１つめのタグがある特定のタグであった場合、記事のタイトル(htmlのtitle)が、`タグ名 - 記事名` のようになります。これには該当するタグとしないタグがあるようで、例えば`Rails`や`CoreOS`などのタグではこのようになることが確認できています。

なので、１つめのタグには特に記事に関わりのあるタグをつけないと、タイトルに違和感が出るかも知れません。

# 記事の冒頭

記事の冒頭の数行は、`<meta name="description" content="...">`というタグで使用されます。検索結果で表示されたりするので、いきなり記事を始めずに、まずは概要などを書くとよいでしょう。

# まとめ

どれも小さなことではありますが、少し意識してみると良いのではないかと思います。
データサイエンティスト養成読本を読んで統計学入門


## 母集団と標本
調査を行う対象の全体を「母集団」、母集団から抽出された一部分を「標本」という  

### 統計学の全体像

![スクリーンショット 2015-04-17 11.57.46.png](https://qiita-image-store.s3.amazonaws.com/0/20424/a9bdd420-5cbf-db5b-640f-d87090849849.png)

## 記述統計学

- 真ん中を知る (平均・中央値)
- 構成を知る (比率)
- ばらつきを知る (分散・標準偏差)

## 推測統計学
一部のデータから全体を推測する手法

### 断言が間違える確率を知る (検定)
検定とは「一部のデータであることによるブレを考慮しても、このデータ間には差があるといえるのか?」を確認するための手法

- 平均の差を検定 -> t検定
- 比率の差を検定 -> x二乗検定
- 分散の差を検定 -> F検定

### データ同士の関係の強さを知る
#### 仮説
「ある原因」が「ある結果」に影響するというような影響の仕組みについて考えること
1. データ分析を始める前に、経験や既知の情報を参考に因果関係を考える
2. 因果関係について、情報把握出来るようにデータを収集する
3. とれたデータを見る
4. とれたデータを見る限り、想像したような影響関係になっているか
5. 4でなっている場合に【道具】を使い調べたい調査対象の全員についてどうなっているかを検証していく

##### 仮説の分類
1. AがBという状態だとCはDという状態になる
2. AがBという状態になるとCはDに変化する
3. AがBに変化するとCはDという状態になる
4. AがBに変化するとCはDに変化する

また、このパターンを考える際に、数値を次の2つに分類して考えると、イメージしやすくなる  

- 数値データ
  - 連続値 (身長、体重、売上、テストの点数etc...) 
- 種類データ (カテゴリカルデータ)  
  - 離散値 (血液型、性別、携帯電話の利用事業者等)

##### 注意点
- 検定では、原因と結果との厳密な因果分析は出来ない
- データが少いと役に立たない
- 検定結果が優位となった(仮説は数学的に絶対正しい)とまでは言えない
- 巷で思われているほどには、有益な情報が得られる分析手法ではない

### 参考文献

<a href="http://www.amazon.co.jp/gp/product/4774170577/ref=as_li_qf_sp_asin_il?ie=UTF8&camp=247&creative=1211&creativeASIN=4774170577&linkCode=as2&tag=tatsu039-22"><img border="0" src="http://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4774170577&Format=_SL110_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=tatsu039-22" ></a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=tatsu039-22&l=as2&o=9&a=4774170577" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />

こちらもあわせて紹介
<a href="http://www.amazon.co.jp/gp/product/4774158968/ref=as_li_tf_il?ie=UTF8&camp=247&creative=1211&creativeASIN=4774158968&linkCode=as2&tag=tatsu039-22"><img border="0" src="http://ws-fe.amazon-adsystem.com/widgets/q?_encoding=UTF8&ASIN=4774158968&Format=_SL110_&ID=AsinImage&MarketPlace=JP&ServiceVersion=20070822&WS=1&tag=tatsu039-22" ></a><img src="http://ir-jp.amazon-adsystem.com/e/ir?t=tatsu039-22&l=as2&o=9&a=4774158968" width="1" height="1" border="0" alt="" style="border:none !important; margin:0px !important;" />
Lravel5で複数Keyword検索+paginate (Eloquent編)


###やりたいこと
Laravelでは、何かの一覧を表示し、かつ、paginate(num)とするだけで、ページングできて便利。ただ、何かしらの一覧には「検索」機能が必須となるが、パラメータの持ち回りや、パラメータが複数（動的）の場合どうするかをまとめる。

###ポイント

ポイントは、2つ。

・検索keyword（パラメータ）の持ち回り
・動的クエリの生成

では、どうするか見てみます。

####パラメータの持ち回り
ページリンクにて、検索Keywordを持ちまわる必要があるが、それは、$model->appends()->render()を利用する。例えばこんな感じ。
ここでは、nameとemailというkeywordを持ちまわっている。

```viewのどこかphp
{!!$members->appends(['name'=>$name,'email'=>$email])->render()!!}}
```
そもそも、controllerからviewへの値の持ち回りは、view('list')->with('email',$email)->with('name',$name);などとして、withチェーンか、配列等で持ちまわる。


####動的クエリの生成
パラメータが複数の場合は、どのように動的にクエリを生成するか？。ちょっと悩むが、わかれば簡単。

```php
//$query = new Member;とも書ける。
$query = Mmeber::query();

$query->where('name',$name);
$query->where('email',$email);

$members = $query->paginate(10);
```
こう書くことで、条件をappendしていける。当然、where以外の条件も追加できる。

パラメータが動的（あったり、なかったり）な場合は、if(empty($name))｛｝などをかまし、必要な条件だけを追加するようにする。

ここでは、nameとemailを別々に受け取っているが、1つのkeywordをspaceでsplitすりょうな場合でも基本は同じ。

###その他のソースも載せておく

大前提として、DBにid,name,emailのカラムを有するテーブルが必要。で、eloquentを使うので、Memberモデルを書いておく。

####Model

テーブルを指定し、timestampsは無いのでfalseに。

```php
<?php namespace App;

use Illuminate\Database\Eloquent\Model;

class Member extends Model {

	//
	protected $table = 'members';

	public $timestamps = false;

}

```

####Route

HogeControllerのindexで受ける。

```php
Route::get('/','HogeController@index');
```

####Controller

index()のみ。

HogeController.php

```php
	public function index()
	{

		//値を取得
		$name = Input::get('name');
		$email = Input::get('email');

		//query
		$query = Member::query();

		//もしnameがあれば
		if(!empty($name)){
			$query->where('name','like','%'.$name.'%');
		}

		//もしemailがあれば
		if(!empty($email)){
			$query->where('email','like','%'.$email.'%');
		}

		//paginate
		$members = $query->paginate(10);

		//値を返す
		//name,emailを返す
		return view('list')->with('members',$members)->with('name',$name)->with('email',$email);
	}
```

####View

#####master

paginateは、bootstrapに合わせたtag,cssを出力するので、bootstrapを読み込む。

```html
<!doctype html>
<html>
<head>
	<meta charset="utf-8">
	<link href="//maxcdn.bootstrapcdn.com/bootstrap/3.3.4/css/bootstrap.min.css" rel="stylesheet">
	<title>
		@yield('title')
	</title>
</head>
<body>
@yield('body')
</body>
</html>
```

#####list

検索窓付き、一覧表示。

```html
@extends('master')

@section('title')
list
@stop

@section('body')

<form method="get" action="./">
<input type="text" name="name">
<input type="text" name="email">
<input type="submit" value="search">
<input type="hidden" name="_token" value="{{csrf_token()}}">
</form>

@foreach($members as $member)
	{{$member->name." ".$member->email}}<br>
@endforeach

<!-- name,emailがあれば、パラメータに含める -->
{!!$members->appends(['name'=>$name,'email'=>$email])->render()!!}

@stop
```
とりあえず、こんな感じ。

###発展

実際には、検索時のmethodはPOSTにしたいとか、URLいじられたときのエラー処理などが必要ですが、ひとまず割愛。
カレントディレクトリをmvされたときの挙動

ubuntu 15.04、bashで確認。

```bash:端末1
$ mkdir ~/a
$ cd ~/a
$ pwd 
/home/user/a
```

```bash:端末2にてmv
$ mv ~/a ~/b
```

```bash:端末1
$ pwd 
/home/user/a
```

不思議
jQueryでスマホのスクロールイベントを無効化する

## JavaScript

```javascript
// スクロール禁止
$(window).on('touchmove.noScroll', e => {
    e.preventDefault();
});
 
// スクロール禁止 解除
$(window).off('.noScroll');
```

## 使い方の例

メニューが開いているときはスクロールを禁止する。
メニューを閉じたときはスクロール禁止を解除する。

```javascript
const $window  = $(window);
const $menu    = $('.menu');
const $menuBtn = $('.menu-btn');
let openFlag   = false;

$menuBtn.on('click', () => {

    if (!openFlag) {
        // スクロール禁止
        $window.on('touchmove.noScroll', e => {
            e.preventDefault();
        });

        // メニューを表示
        $menu.fadeIn(() => {
            openFlag = true;
        });
    } else {
        // スクロール禁止 解除
        $window.off('.noScroll');

        // メニューを非表示
        $menu.fadeOut(() => {
            openFlag = false;
        });
    }

});
```
Qconに参加して印象に残ったセッションの感想まとめ

下記のイベントに参加してきました。
http://qcontokyo.com/index.html

最先端のITとその関連技術の動向をエンジニアの視点で深く掘り下げてたカンファレンスでした。

以下、参加したセッションの内容で印象に残ったことを羅列

#脳を模倣して人間のような知能を作る
一杉 裕志 氏
産業技術総合研究所
主任研究員

##内容
人工知能は0から考えなくて、人間の脳を模倣した方が上手くいきそうという考えのもとでアプローチ

もともと膨大な知見があるため、それを整理した方が早い。

###アプローチ手法

機械学習

神経科学

###ツール
いろいろな数式を用いて難しいため、ツールを公開してくれている。
BESOM-lab（アルゴリズムの研究開発支援ツール）

https://staff.aist.go.jp/y-ichisugi/besom/download.html

#Go言語の可能性と開発事例
Ian Lewis 氏
Google Inc.
Google Cloud Platform
Developer Advocate

![fiveyears.jpg](https://qiita-image-store.s3.amazonaws.com/0/10496/5e605f12-9662-0947-ec17-9c53c49c2f2c.jpeg)


##Go言語の良さ
*バイナリコードにコンパイル
**ライブラリが全て一つになったバイナリになっているので、ライブラリのリンクが必要にならない

*ガーベージコレクションがある

*Type Inference(型推論）

*並列処理が簡易的書ける言語
Goroutines : 並列で動作する関数（自分で消したり、動作させたりできる
Channel：Goroutinesとプロセスの間を取り持つ（同時にデータにアクセスする場合に使用（キューのような形

*Interface：interfaceを実装する際の自由度が高い

https://github.com/golang/go

#技術と度胸のミニワークショップ InfoQで英語学習
牛尾 剛 氏　
MPP(マジでペラペラプロジェクト)　

高柳 謙 氏
MPP(マジでペラペラプロジェクト)　

Christiane Brew 氏
プレゼンテーションコーチ
パフォーマー 

5つの英語向上のコツを教えてもらった

##1:音読

英語向上のプロセス

発音の聞き取り→単語の聞き取り→文章の聞き取り→意味理解→文章間の意味理解

日本人の場合はいきなり、意味理解から試みるからダメ

###具体的な練習方法

プレゼンを真似する（英語字幕あり

・TED（一般の人向け
https://www.ted.com/talks?language=ja
・InfoQ（技術者向け
http://www.infoq.com/presentations/data-driven-machine-learning

発音のみを練習する

英語耳　松澤　喜好
http://www.amazon.co.jp/%E8%8B%B1%E8%AA%9E%E8%80%B3-%E6%94%B9%E8%A8%82%E3%83%BB%E6%96%B0CD%E7%89%88-%E7%99%BA%E9%9F%B3%E3%81%8C%E3%81%A7%E3%81%8D%E3%82%8B%E3%81%A8%E3%83%AA%E3%82%B9%E3%83%8B%E3%83%B3%E3%82%B0%E3%81%8C%E3%81%A7%E3%81%8D%E3%82%8B-%E6%9D%BE%E6%BE%A4%E5%96%9C%E5%A5%BD/dp/4048688634

##2：切り返し文句を覚える

相手の会話が早い時
Could you slow down a little,please?

相手の内容が分からない時
I don’t follow you. I don’t understand

単語の意味が分からない時
What does xx mean ?

もう一度読んで欲しい時
Could you repeat that please?

要約して欲しい時
Could you summarise it please?

文の意味が分からない時
Do you mean XXXX

##3:英語コミュニケーションで重要な部分

下記の2つを気をつけないと意味が変わるので注意

intonation（音の高低、抑揚

pronunciation（発音

##4:実際のコミュニケーションでは言葉よりも握手が大事

握手は話しかけた方から行い、力強くするのがマナー

##5:質問には詳しく答えて、相手にも質問で返す

これは英語だけではなく一般的なコミュニケーションにも通じるのでは・・・
ただ英語だと語彙や言い回しが思いつかないために話さない人が多いかも

#納品のない受託開発
倉貫 義人 氏
株式会社ソニックガーデン　
代表取締役

特徴的な部分

１：プログラミングに特化
２：他はアウトソーシング
３：リモートワーク：remotty（リモートワークにチームワーク）使用
４：納品がなくて月額定額
５：顧問プログラマとしてコンサルティングから設計、実装、運用までカバー
６：仕様変更はいつでもOK
７：エンジニアと直接相談OK
８：お客様が訪問していただくかリモートワーク

クライアントと目的を同一にしているため、お互いがWin-Winの関係性を作りやすい

個人的にはリモートオフィスについて気になったのでいろいろ聞いてみると、方針やremottyの良さについて教えて頂いた。

１：リモートオフィスにするには既存の仕事の進め方と変えないこと
　変えてしまうとマネジメントとリモートオフィスの両方の対応が必要で負荷が大きくなる。

　例：
　朝会をしているなら、リモートオフィスでも朝会をする
　勤務時間は変えない

２：出退勤の管理はremottyを使って行う。
　remottyにログインしている時間を働いている時間とみなすことでコミュニケーションを取りたい時に取　ることが可能

３：remottyだと個別チャット形式で対応可能
　Skypeだと人数が多い場合に回線が遅くなる。絵なども見せながら話したい時はテレビ電話機能もついている

remottyがリモートオフィスするにはオススメらしい。
フリーなので試してみる価値はあります！！！

https://www.remotty.net/
PHP7調査(22)PHP組み込みクラスのコンストラクタでエラーが起きると必ず例外を投げるようになった

DateTimeやPDOなど、PHP組み込みのクラスはC言語で実装されています。

このようなクラスのコンストラクタでエラーが発生した際、nullを返すもの、警告を出すもの、致命的エラーになるもの、と実装がバラバラになっていました。これがPHP7で統一され、必ず例外がスローされるようになりました。

# 例

PHP5までは、intlエクステンションに含まれるMessageFormatterクラスがコンストラクタエラーでnullを返していました。

```php
<?php
$mf = new MessageFormatter("en_US", "{this was made intentionally incorrect}");
var_dump($mf);
```

```
$ php5 /tmp/foo.php
NULL
```

PHP7では、下記のようにIntlExceptionがスローされるようになりました。

```
$ php7 /tmp/foo.php
PHP Fatal error:  Uncaught exception 'IntlException' with message 'Constructor failed' in /tmp/foo.php:2
Stack trace:
#0 /tmp/foo.php(2): MessageFormatter->__construct('en_US', '{this was made ...')
#1 {main}
  thrown in /private/tmp/foo.php on line 2
```

（補足ですが、nullを返すようなクラスは普段使うものの中には無さそうです、さすがに）

# 注意点1

PHP同梱でないエクステンションの中には、行儀の悪いものが残っているかもしれません。今回のRFCを根拠にバグレポートを送ったり、Pull Requestを投げたりすると良いでしょう。

# 注意点2

RFCの時点とは返すExceptionが変わっているものもあります。例えば、コンストラクタ引数の型エラーはTypeExceptionに統一されています。

# 参照

* [PHP RFC: Constructor behaviour of internal classes](https://wiki.php.net/rfc/internal_constructor_behaviour)
* [RFC: Constructor behaviour of internal classes by Danack · Pull Request #1178 · php/php-src](https://github.com/php/php-src/pull/1178)
c++ builder XE4 > TThread > サンプル

# Main.cpp
```cpp:Main.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "Main.h"
#include "SampleThread.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
	pSampleThr = new TSampleThread();
}
//---------------------------------------------------------------------------
void __fastcall TForm1::FormClose(TObject *Sender, TCloseAction &Action)
{
	pSampleThr->Terminate();

	while(pSampleThr->Terminated == false) {
	    // do nothing	
	}
	pSampleThr = NULL;
}
//---------------------------------------------------------------------------

void __fastcall TForm1::Button1Click(TObject *Sender)
{
	pSampleThr->Start();
}
//---------------------------------------------------------------------------
```

# SampleThread.cpp

```SampleThread.cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include "SampleThread.h"
#include "Main.h"
#pragma package(smart_init)
//---------------------------------------------------------------------------

__fastcall TSampleThread::TSampleThread()
	: TThread(/* CreateSuspended=*/ True)
{
	FreeOnTerminate = true;
}
//---------------------------------------------------------------------------
void __fastcall TSampleThread::Execute()
{
	while(!Terminated) {
		Sleep(2000);
		Form1->Memo1->Lines->Add("TEST");
	}
}
//---------------------------------------------------------------------------
```
bcryptを使ってUserの新規登録からセッションを用いたログイン機能実装めも

[bcryptの使い方メモ](http://qiita.com/zakki/items/e32f9a8f09cbb200d61c)のつづき
# 最終的なUserの新規登録からセッションを用いたログインの画面遷移
![1DC01819-2CE0-47EC-B802-E1336D3074E0.png](https://qiita-image-store.s3.amazonaws.com/0/33237/de8b79ac-a126-79af-a3cd-a53812510320.png)
![50E8F1A2-10DC-4F57-BA33-F0FB05518951.png](https://qiita-image-store.s3.amazonaws.com/0/33237/9a13ce1c-7838-1dbb-c05b-ce4d6a13f0e1.png)
![B419C8B6-0B09-44A0-BB95-D67AA9994FEC.png](https://qiita-image-store.s3.amazonaws.com/0/33237/2040c637-306e-6be8-bb09-21c710daf158.png)


# 新規会員登録機能
## Controllerの編集 new createアクションの追加
``` app/controllers/users_controller.rb
  def new
    @user = User.new
  end
  def create
    @user = User.new(user_params)

    respond_to do |format|
      if @user.save
        format.html { redirect_to root_path, notice: 'User was successfully created.' }
      else
        format.html { render :new }
      end
    end
  end

  private
  def user_params
    params.require(:user).permit(:name, :email, :password, :password_confirmation)
  end
```
## Viewの作成 新規会員登録フォームの作成
``` app/views/users/new.html.erb
<h1>新規会員登録</h1>

<%= render 'form' %>

<%= link_to '戻る', users_path %>

```
DB上にはpassword_digestが設定されているが
そこにはこのpasswordフィールドに入れられた値のハッシュ化された値が入る。（後述のUserモデルで設定する）

```app/views/users/_form.html.erb
<%= form_for @user do |form| %>
    <%= form.label :name %>
    <%= form.text_field :name %>

    <%= form.label :email %>
    <%= form.text_field :email %>

    <%= form.label :password %>
    <%= form.text_field :password %>
    <%= form.label :password_confirmation %>
    <%= form.text_field :password_confirmation %>

    <p><%= form.submit %></p>
<% end %>
```
``` app/models/user.rb
class User < ActiveRecord::Base
  has_secure_password
  attr_accessor :password, :password_confirmation

  # bcrypt-rubyでパスワードを暗号化するには、書き込み用のアクセサメソッドpassword=を記述する
  def password=(val)
    if val.present?
      self.password_digest = BCrypt::Password.create(val)
    end
    @password = val
  end
end
```
# セッションを用いたログイン機能
全バージョンから変更なし
simple_formで日時を入力

simple_formを使っている。日時を入力したい。

※ `posted_at` は `datetime`

```haml
= simple_form_for([user, post]) do |f|
  .form-inputs
    = f.input :posted_at
```

![日時分.png](https://qiita-image-store.s3.amazonaws.com/0/54295/d250d53d-5f45-5243-6084-cec61b5463b1.png)

分、いらないなぁ

```diff
= simple_form_for([user, post]) do |f|
  .form-inputs
-    = f.input :posted_at
+    = f.input :posted_at, discard_minute: true
```

![日時.png](https://qiita-image-store.s3.amazonaws.com/0/54295/7024c48a-1b78-8f01-0dae-345c5b423707.png)


非表示にしても現在の分が入ってくるみたい。いやなら

```js
$('#post_posted_at_5i').val(0)
```

とかすればいいと思います。
スタックフレーム / stack frame > 関数呼び出し時にスタックにプッシュされる情報

引用: C/C++ セキュアコーディング 第2版 by Robert C. Seacordら

タイトルの事項を「フレーム(frame）」として紹介されていた。


<hr>
[スタックフレーム (Stack Frame) @ wikipedia](http://ja.wikipedia.org/wiki/%E3%82%B3%E3%83%BC%E3%83%AB%E3%82%B9%E3%82%BF%E3%83%83%E3%82%AF)

[stack frame @ c-tipsref](http://www.c-tipsref.com/words/stackframe.html)

「スタックフレーム」が正式名称な気がする。
技術英語 > tainted > (その値は)汚染されている

引用: C/C++ セキュアコーディング 第2版 by Robert C. Seacordら

> ...無害化もされていない場合、その値は汚染されている(tainted)と表現する。
> ... 無害化とは、値がそれを使用する側が必要とする制約に従っていることを保証することである。

[Tainted Data @ ruby.about.com](http://ruby.about.com/od/advancedruby/a/tainted.htm)

[taint @ alc > 汚れる]
(http://eow.alc.co.jp/search?q=taint&ref=sa)

Code Completeにもこの関係の説明があったように記憶している。
strncpy() > null終端されないケース

引用: C/C++ セキュアコーディング 第2版 by Robert C. Seacordら

```
int main(void) {
   char buf[16];
   strncpy(buf, "0123456789abcdef", sizeof(a));
}
```

上記の例の場合、16文字目までnull終端文字が存在しない。結果としてbufもnull終端されないとのこと。
gcc > _FORTIFY_SOURCE マクロ > 実行時に診断メッセージ表示

引用: C/C++ セキュアコーディング 第2版 by Robert C. Seacordら
> また _FORTIFY_SOURCEマクロを0以外の値に設定し、Linux環境でGCCを使用してコンパイルした場合、(実行時に)診断メッセージが表示される。

<hr>
引用:[FEATURE__TEST_MACROS](http://linuxjm.sourceforge.jp/html/LDP_man-pages/man7/feature_test_macros.7.html)

>このマクロを定義すると、文字列やメモリーの操作を行う様々な関数を使用する際にバッファーオーバーフローを検出するための軽めのチェックが実行されるようになる。すべてのバッファーオーバーフローが検出されるわけではなく、あくまでよくある例についてだけである。
ILP32:int, long, pointer 32bit / LP64: long, pointer 64bit

引用: C/C++ セキュアコーディング 第2版 by Robert C. Seacordら

> 例えば、一般的なILP32やLP64プラットフォームでは、INT_MAX=2,147,483,647なので

調べたところ
ILP32は[通信用語の基礎知識](http://www.wdic.org/w/TECH/ILP32)によると、int, long, ポインタが32ビットのこと。

[同じサイト](http://www.wdic.org/w/TECH/LP64)から、LP64はポインタとlongを64ビット化したもの。