OmniAICreator/Qiita-1.07M huggingface dataset:
Linux | ファイルではなく標準出力に対して解凍 ( gunzip ) する

パイプを通してコマンド後方で実行する。

`$ (標準出力する処理) | gunzip`

でOK。

# 参考

- http://askubuntu.com/questions/562763/gzip-stdin-not-in-gzip-format-when-gunzip-is-used-with-pipe

# 環境

- Mac OS X El Caplitan








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
Web負荷テストツールまとめ


#ApacheBench
##CentOSへのインストール方法
```
yum install apr-util
```
apr-utilパッケージをインストールすれば、httpdをインストールしなくてもApacheBenchを利用できる
##Macへのインストール方法
標準でインストールされてます
##基本的な使い方
```
ab -n <Total発行リクエスト数> -c <同時接続数> -t <待ち時間> <URL>
```

| オプション名 |  説明       | 
|:-----------|:------------|
| -n 数値     |  リクエストの総数を数値で指定 | 
| -c 数値     |   同時に発行するリクエストの数を数値で指定|  
| -t 数値     |  サーバからのレスポンスの待ち時間（秒）を数値で指定 | 

##参考URL  
>http://qiita.com/flexfirm/items/ac5a2f53cfa933a37192 


#Siege
##CentOSへのインストール方法
```
yum install gcc
wget http://download.joedog.org/siege/siege-latest.tar.gz
tar xvf siege-latest.tar.gz
cd siege-3.1.0/
./configure
make
make install
```

##Macへのインストール方法
```
brew install siege
```
##
 [brewインストール方法](http://brew.sh/index_ja.html)

##基本的な使い方
```
siege -c <同時接続数> -r <毎秒のリクエスト数> -t <テストの時間> <URL>
```

| オプション名 |  説明       | 
|:-----------|:------------|
| -c 数値     |   同時に発行するリクエストの数を数値で指定（デフォルト値:10）|  
| -r 数値     |  テストにおける毎秒のリクエスト数 | 
| -t 数値     | テストの時間を指定（S=秒、M=分、H=時間）5分→5M | 

##参考URL
>http://qiita.com/takachan/items/078208b66691f076fddc

#httperf
##CentOSへのインストール方法
```
sudo yum install httperf
```


##Macへのインストール方法
```
brew install httperf
```
##基本的な使い方
```
 httperf --hog --server www.test.com --port 80 --uri /index.html --rate 300 --num-conn 30000 --num-call 5 --timeout 5
```
| オプション名 |  説明       | 
|:-----------|:------------|
|--hog     |   必要な限り多くのTCPポートを利用|  
| --server   |  ドメインかIPを指定 | 
|--uri  | ドキュメントのパス | 
|--rate  | 1秒間に生成するセッション数 | 
|  --num-conn     |  合計接続数。接続数がこの値に達すると動作終了します。 | 
| --num-call     | 1接続あたりのリクエスト数 | 
| --timeout    |  タイムアウト（秒）を指定 | 

#JMeter
##CentOSへのインストール
まずjavaをインストール

```
# yum install java-1.7.0-openjdk.x86_64 java-1.7.0-openjdk-devel.x86_64
```
インストールの確認。以下のように表示されればOK

```
# java -version
java version "1.7.0_111"
OpenJDK Runtime Environment (rhel-2.6.4.0.el7_2-x86_64 u95-b00)
OpenJDK 64-Bit Server VM (build 24.95-b01, mixed mode)
```

ソースのファイルをダウンロードし、展開

```
# wget http://ftp.jaist.ac.jp/pub/apache//jmeter/binaries/apache-jmeter-3.0.tgz
# mv apache-jmeter-3.0.tgz /usr/local/src/.
# cd /usr/local/src/
# tar xvfz apache-jmeter-3.0.tgz
```

実行してみる

```
# cd apache-jmeter-3.0
# ./bin/jmeter -v
``` 



動かないはずです
以下のとおりに変更

```
vim ./bin/jmeter
31行目 #_java=`type java | awk '{ print $ NF }'`
32行目 _java=`LANG=C type java | awk '{ print $ NF }'`
```

パスを通す

```
PATH=$PATH:$HOME/bin:/usr/local/src/apache-jmeter-3.0/bin >> ~/.bashrc
```

##Macへのインストール
1.公式サイトからzipファイルをダウンロード
>http://ftp.meisei-u.ac.jp/mirror/apache/dist//jmeter/binaries/apache-jmeter-3.0.zip

2.フォルダ内のApacheJMeter.jarを実行

3.終わり
FuelPHPのCoreクラス拡張


たまにCoreクラス拡張するときに迷うのでメモ

手軽だからってcore下のクラスに直接処理を追加したり変更しないほうがいい
アップデートしたりローカル環境作りなおすとそこのコードが戻る
まずcore下をgit管理しないから履歴も分かりづらい

公式にやり方載ってます
[http://fuelphp.jp/docs/1.8/general/extending_core.html](http://fuelphp.jp/docs/1.8/general/extending_core.html "http://fuelphp.jp/docs/1.8/general/extending_core.html")


## 手順

1. app/classes下に拡張したいクラスと同じ名前のファイルを作る
2. 1.で作成したファイルに拡張したいクラスと同じクラス名のクラスを作り
   拡張したいCoreクラスを継承させる

3. app/bootstrap.phpの\Autoloader::add_classesに
   'クラス名' => '1.で作ったファイルパス'
   のような形式で追加


※ 1.の作成場所はapp/classes下じゃなくていいかもしれない、modules毎に動作変えたいならmodules下の適切なとこに置くとか



## 詳しく

前提: 
Feulのデバッグ情報を表示してくれるProfilerクラスにメソッドを追加したいとする

### 1 同じ名前のファイル作る

今回は全体でProfilerクラスを拡張したいので拡張クラスは`app/classes/override`下に置く

`profiler.php`を作成


### 2 Coreクラスの拡張

先ほど作ったファイルを編集

```php:app/classes/override/profiler.php
/**
 * \Fuel\Core\Profiler を拡張
 */
class Profiler extends \Fuel\Core\Profiler
{
    
    /**
     * アクション毎の実行したクエリ情報を出力
     * debug_backtrace()だと情報が多すぎるから
     */
    public function getExecutedQueries(\Fuel\Core\Request $request)
    {
        if (static::$profiler) {
            static::$profiler->db = static::$profiler;
            static::$profiler->gatherQueryData();
            $queries = isset(static::$profiler->output['queries']) ? static::$profiler->output['queries'] : [];
            
            return static::formatForLog($queries, $request); // 自作 中身は割愛
        } else {
            
            return [];
        }
    }
}
```


これで拡張したい処理は追加した


### 3 bootstrap.phpに拡張したクラスを追加

`app/bootstrap.php`を編集

```php:app/bootstrap.php

// 前後の処理は変更しないので割愛

\Autoloader::add_classes([
    'Profiler' => APPPATH.'classes/override/profiler.php',
]);
```

これで拡張完了
後は作ったクラスが動作するか試してみる



※追加
もしmodules下に拡張クラスを置きたい場合は`bootstrap.php`の`\Autoloader::add_classes`より前に
`\Autoloader::add_core_namespace(指定したいネームスペース);`
と記述し、
クラス名を`Profiler`だけではなく`指定したいネームスペース\\Profiler`とする


## 所感
久しぶりの投稿
はい、以上です。
macでweinreを自動起動する

シェルスクリプトを作ったりして簡略化してたけど、
もっと楽したいので起動時に設定できるAutomatorを弄る

##### Automatorのフローは以下
1. 指定されたFinder項目を取得
2. Finder項目を開く
3. AppleScriptを実行

##### Automatorに設定していく
1. ターミナル.appをAutomatorのフローの中にドラッグ＆ドロップで突っ込む
   - "/Applications/Utilities/Terminal.app"
   - "アプリケーション＞ユーティリティ＞ターミナル.app"
2. フローにアクションを追加
   - "ライブラリ＞ファイルとフォルダ＞Finder 項目を開く"
   - "ライブラリ＞ユーティリティ＞AppleScript を実行"
3. AppleScriptをザカザカと書いていく

```applescript:AppleScript
tell application "System Events"
    --英数入力に変更
    key code 102
    delay 0.5
    --実行モジュールのパス
    keystroke "/node_modules/weinre/weinre"
    key code 49
    --オプション値その１
    keystroke "--boundHost"
    key code 49
    --オプション値その２
    keystroke "-all-"
    --Returnキーを押下で実行
    keystroke return
    --邪魔なので最小化(Command + m)
    keystroke "m" using {command down}
end tell
```

<hr />
##### ※蛇足
注意としては起動時しか考慮してないので、
他にターミナルが開いてたり処理中だったりすると開いているターミナルを使用しちゃう。

どうしても、新しく開いてほしいならAppleScriptの頭に
`keystroke "n" using {command down}`入れてディレイさせれば新しく開く……はず

あとは空白の入力は「`keystroke space`でいいだろう」とか思ってたら上手くいかなかったというorz
なのでキーコードで対処（なんかスマートな方法あるかもしれない……）
英数入力後0.5秒遅延させてるのは反映俟ち

後は上記で出来たAutomatorのappを出力してユーザのログイン項目に放り込んでおけばいいんじゃないかなぁー
journaldを経由してrsyslogへのsyslog受取りをやめて直接rsyslogにsyslogを流す方法


※CentOS7環境下で確認しています。
syslogを大量の件数吐き出すとjournald側で受け取れなくなる症状が発生しました。
journalctlで見ても特定の日付のレコードを最後に全く書かれなくなります。
(自分の環境で秒間1000件を2日程度連続稼働)
RateLimitInterval=0
RateLimitBurst=0
などに設定しても状況は変わらず…原因も分からず…
journaldを経由してrsyslogからログを飛ばして使用してたのですがこの状態だともはやどうしようもできません。
なのでjournaldを経由しないでCentOS6などでやっていたrsyslog側でsyslogを受け取って流す方法へ変更します。
journaldは止められないので、サービスは動作するが何もしない状態にしてrsyslogを従来のsyslog収集用と同様にする方法になります。

/etc/systemd/journald.confを変更

    ↓Storageはnoneにする。
    Storage=none
    
    ↓以下の設定はすべて0にしておく
    RateLimitInterval=0
    RateLimitBurst=0
    SystemMaxUse=0
    RuntimeMaxUse=0

/etc/rsyslog.d/listen.confを変更

    ↓#をつけてコメントアウトする。コメントアウトすることでdefaultの/dev/logが使われるようになる。
    #$SystemLogSocketName /run/systemd/journal/syslog

/etc/rsyslog.confを変更

    ↓imuxsockを有効に、imjournalを無効にする。
    $ModLoad imuxsock # provides support for local system logging (e.g. via logger command)
    #$ModLoad imjournal # provides access to the systemd journal

    ↓OmitLocalLoggingは off に設定する。
    $OmitLocalLogging off

    ↓OmitLocalLoggingをコメントアウト
    #$IMJournalStateFile imjournal.state

    ↓LimitInterval、LimitBurstは全て0に設定する。
    $SystemLogRateLimitInterval 0
    $SystemLogRateLimitBurst 0
    $imjournalRatelimitInterval 0
    $imjournalRatelimitBurst 0

rsyslogd,journaldを再起動

    $ sudo systemctl restart rsyslogd.service
    $ sudo systemctl restart systemd-journald.service

これでjournaldは動きつつもrsyslogdに/dev/logが繋がって問題なく取得できます。
ちなみにjournaldをsystemctl maskで止めると立ち上がらなくなったり挙動がおかしくなったります。
journaldは止めてはダメ。ゼッタイ。
止めてしまった人はsshとかで頑張って入ってsystemctl unmaskで元に戻してください(私のことです…)
WRF > Chapter 10: Utilities and Tools > +補足

WRF(Weather Research and Forecasting Model)関連。

WRF用のUtilities and Toolsの紹介は以下にある。
http://www2.mmm.ucar.edu/wrf/users/docs/user_guide_V3/users_guide_chap10.htm

読みにくいことこの上ない。
これを今後何回も読むのは時間の無駄だ。

なので補足情報と将来の詳細確認時のフックをここに記載する。
和訳(誤訳があるかも)の正確な意味は原文を参照されたし。

# Introduction

[Introduction](http://www2.mmm.ucar.edu/wrf/users/docs/user_guide_V3/users_guide_chap10.htm#_Introduction_1)

WRF-ARW data用のUtilities and Toolsです。

# read_wrf_nc

[read_wrf_nc](http://www2.mmm.ucar.edu/wrf/users/docs/user_guide_V3/users_guide_chap10.htm#read_wrf_nc)

WRF netCDFファイルをぱっと(at a glance)見れます。

以下の内容を含む。

- Compile
- Run
- SPECIAL option: -EditData VAR
- EDIT the subroutine USER_CODE

# iowrf

[iowrf](http://www2.mmm.ucar.edu/wrf/users/docs/user_guide_V3/users_guide_chap10.htm#iowrf)

WRF-ARW netCDF dataの基本操作をできます。

以下の内容を含む。

- Compile
- Run

# p_interp

[p_interp](http://www2.mmm.ucar.edu/wrf/users/docs/user_guide_V3/users_guide_chap10.htm#p_interp)

WRF-ARW netCDF出力ファイルを補間して、指定の気圧レベルの値にできる。
2010年10月以降のいくつかの新しい機能が使える。

以下の内容を含む。

- Compile
- Edit the Namelist
- Run


# TC Bogus Scheme

[TC Bogus Scheme](http://www2.mmm.ucar.edu/wrf/users/docs/user_guide_V3/users_guide_chap10.htm#TCBogus)

WRFモデルシステムのARW coreは単純なTropical Cyclone (TC) Bogussing schemeを提供する。It can remove an existing tropical storm, and may optionally bogus in a Rankine vortex for the new tropical storm....
なるほど、分からん。

以下の内容を含む。

- Namelist Options 
- Program tc.exe 
- Running tc.exe 

# v_interp

[v_interp](http://www2.mmm.ucar.edu/wrf/users/docs/user_guide_V3/users_guide_chap10.htm#v_interp)

WRF-ARW netCDF入力においてvertical levelsを追加することに使える。...

以下の内容を含む。

- Compile
- Run
- namelists:
- Program Notes:

# proc_oml.f

[proc_oml.f](http://www2.mmm.ucar.edu/wrf/users/docs/user_guide_V3/users_guide_chap10.htm#_proc_oml.f)

netCDF形式の[3D HYCOM](http://www.hycom.org) ocean model temperature dataを処理するのに使えるかもしれない。それによって produce initial ocean mixed layer depth field (H0ML) for use in a WRF simulation that uses the simple ocean mixed layer model option (omlcall = 1, and oml_hml0 < 0)....

以下の内容を含む

- Compile
- Run

# その他Tools

[Tools](http://www2.mmm.ucar.edu/wrf/users/docs/user_guide_V3/users_guide_chap10.htm#_Tools_3)

(補足) 以下は内容を右側のメニューで表示するためだけの記載。将来読む時にフックとして使う。
詳細はToolsのリンク先を見る (各場所へのリンクが取れない)。

## Converting Graphics

### ImageMagick
### Converting ncgm (NCAR Graphics file format

## Basic Unix Commands

## Design WRF model domains

### WPS/util/plotgrids.ncl

## Display ungrib (intermediate) files
### WPS/util/plotfmt.ncl
### WPS/util/int2nc.exe
### WPS/util/plotfmt_nc.ncl

## netCDF
### netCDF stands for network Common Data Form.
### Advantages of using netCDF?
### Documentation:
### Utilities: 
### ncdump
### ncview
### ncBrowse
### read_wrf_nc
### iowrf
### p_interp
### netCDF operators
### ncdiff
### ncrcat
### ncra
### ncks(nc kitchen sink)

## GRIB data
### Documentation and Decoders
### GRIB codes
### Display GRIB header/field information > GRIB1 data / GRIB2 data
### Convert GRIB data to netCDF format > ncl_grib2nc
### Displaying GRIB files

## Model Verification
EclipseでC++,自作クラスをビルドする時リンカーのエラー

プログラミングの練習用コードとしてクラスCarと幾つかのメンバや静的メンバを実行するプログラムを書きEclipseでビルドしたところ.exeファイルは作成されず下のようにエラーが出ました。
make all 
Building target: classp
Invoking: MacOS X C++ Linker
g++  -o "classp"  ./src/classmain.o   
Undefined symbols for architecture x86_64:
  "Car::sum", referenced from:
      Car::Car() in classmain.o
      Car::showSum() in classmain.o
ld: symbol(s) not found for architecture x86_64
clang: error: linker command failed with exit code 1 (use -v to see invocation)
make: *** [classp] Error 1
色々と調べてみたのですがどうしても自分では解決できませんでした。
どなたかよろしくお願いします。
PHPとMysqlのコネクションについて調べてみた

トランザクションがコネクション切断時とかに、どういう挙動を示すか？調べてみました。

# PHP＆MySQLのトランザクション関連の仕様ざっくりと

デフォルトでは、すべてのSQLがトランザクションを使用し、オートコミットする。（updateしたら即反映）

明示的に、beginTransactionした場合、そのコネクション上で行われた更新は、commit or rollbackメソッド実行時に一括で反映される。

また、beginTransaction中に接続が切断された場合、rollbackする。
http://dev.mysql.com/doc/refman/5.6/ja/innodb-implicit-commit.html

他のRDBMSだと、コネクション切断時はデフォルトcommitだったりするときもあるので、挙動は確認したほうが良いと思います。

# 暗黙的コミットにも気をつける
[13.3.3 暗黙的なコミットを発生させるステートメント](https://dev.mysql.com/doc/refman/5.6/ja/implicit-commit.html)

create tableなど、発行した時点で、既存トランザクションをcommitしてしまうので、オンラインで扱わないように。。。

# PHPでのDB接続は、ラッパーモジュールを通して行う
> mysqli、PDO_MySQL、そして mysql といった PHP 拡張モジュールは、Cクライアントライブラリの軽量なラッパーです。

ラッパーモジュールのコンパイル時に、Cのライブラリを指定するようです。デフォルトで同梱されているコンパイル済みモジュールでは、mysqlnd（MySQL Native Driver）が使われています。

一応、libmysqlclientというモジュールもあるようですが、マニュアルには、mysqlndが推しモジュールだと書いてありました。

# PHP拡張モジュールmysqliとPDOの違い

[MySQL用PHPドライバの概要 - どの API を使うか](http://php.net/manual/ja/mysqlinfo.api.choosing.php)

ざっくりまとめると、違いは

## php_pdo_mysql.dll

* Laravelはこちらを使用
* マルチDB対応している
* サーバーサイドとクライアントサイドのprepared statementが利用可
* 圧縮プロトコルが利用不可
* 非同期クエリを利用不可

## php_mysqli.dll

* Mysqlオンリー
* pdoよりも詳細な指定が出来る
* サーバーサイドprepared statementのみ
* 圧縮プロトコルが利用可能
* 非同期クエリを利用可能

Laravelなどフルスタックフレームワークを使う場合、PDO使われている場合が多いと思います。（マルチDB対応するためそうなっているのかと。）

# PHPではコネクションプーリングしない？
Laravelしか見ていないのですが、デフォルトではプーリングしない設定です。（コネクションをリクエスト毎に張って、リクエスト終了後切断する動作をする。）Mysqlの場合、接続コストが低いのと、プーリングしないほうがシンプルだからという話があるようです。
[RDBMSでコネクションプールが必要な理由、わからない。](http://togetter.com/li/558788)

Java＆MysqlとNode.js＆MongoDBでは、設定部分でpoolingの話が出るので経験上設定するものだと思っていたのですが、PHPではそうでもないようですかね？劇的にパフォーマンスが変わらないなら、設定する必要も無いのでは？というのがファイナルアンサーのようですが。。。

[Webシステムにおけるデータベース接続アーキテクチャ概論](http://blog.yuuk.io/entry/architecture-of-database-connection)

> コネクションプーリングの実装に習熟する暇がないなら、データベースのスケールアップやスケールアウトで解決するなら、それでよいと思っている。 無理に難しいことをし始めて、トラブルシューティングに時間を浪費してしまうということもある。 MySQLのマスタのスケールアップが限界にきていて、コネクション数の上限にあたりそうな場合や、2~3桁のMySQLのスレーブ数のうち何割か台数を減らせる見込みがあるなら、コネクションプーリングを検討してもよいと思う。

# プーリング方法

デフォルトプーリングしないけど調べたので書きます

## PDO

```php
$dbh = new PDO($dsn,$user,$password,array(PDO::ATTR_PERSISTENT => true));
```

## Mysqli（Mysqlのみだが、非同期クエリやデータの）

```php
http://php.net/manual/ja/mysqli.real-connect.php
$mysqlhost = "p:192.168.33.50";
$username = "takara";
```

IPの先頭に**p\:**付ける仕様。分かりづらいですね。。。

# Laravelでの指定方法

```php
config\database.php
'mysql' => [
    'driver' => 'mysql',
    'host' => env('DB_HOST', 'localhost'),
    'port' => env('DB_PORT', '3306'),
    'database' => env('DB_DATABASE', 'hoge'),
    'username' => env('DB_USERNAME', 'hoge'),
    'password' => env('DB_PASSWORD', ''),
    'charset' => 'utf8',
    'collation' => 'utf8_unicode_ci',
    'prefix' => '',
    'strict' => true,
    'engine' => null,
    'options'   => [ // ここの部分！！隠しオプションっぽい。
        PDO::ATTR_PERSISTENT => true,
    ],
],
```

# まとめ

* PHP＆Mysqlの場合、コネクション切断時はrollbackなので大丈夫そう。
* 暗黙的なコミットを発生させるステートメントには気をつける
* 計測して価値がありそうならプーリングする
composerのrequireコマンドでパッケージを後から追加する

開発途中でcomposerのパッケージを追加で入れる場面があった際に
composer.jsonに追記して `composer update` でもいいのですが
そうすると関係無いライブラリの更新まで入ってしまうので
そうしたくない場合もあると思います。

その場合はコマンドでやるとcomposer側がよしなにやってくれるので
そのやり方のメモです


## 追加方法

### パッケージを後追いで追加したい

コマンドでやる場合は
`composer require {パッケージ名}` で行います。
仮に入れたいパッケージ名が `hoge/huga` の場合


```
$ ~/composer/composer.phar require hoge/huge
```

この場合は当該パッケージのみを入れ込み、またcomposer.jsonにも追記してくれます。

なお、`hoge/huge`にあたるパッケージ名の一覧は
[Packagist](https://packagist.org/)から探す。

### バージョン指定してパッケージを後追いで追加したい

古いバージョンのモジュールを使う必要がある、というような場合にはバージョン指定で入れる。
`composer require {パッケージ名}:{バージョン番号}` で行います。
下記は`hoge/huga`の2.6.30のバージョンを入れたい場合の例。

```
$ ~/composer/composer.phar require hoge/huge:2.6.30
```

バージョン番号もPackageistにあるのでそこを参考に。

## 参考

* [composerで利用できるコマンド一覧 \| WEBサービス創造記](http://linuxserver.jp/%E3%83%97%E3%83%AD%E3%82%B0%E3%83%A9%E3%83%9F%E3%83%B3%E3%82%B0/php/composer-list#require)
vimで逆順

# コマンドその1

空行は無視します。
```
:g/./m0
```

# コマンドその2

空行も並び替えます。
```
:g/^/m0
```

# 参考
## Vim で 選択した領域を逆順にする方法
http://qiita.com/isseium/items/ea566347864d3741d7a6
karmaで実行するJavaScriptのテストにdebuggerを仕込む

## 実行環境

- npm: 3.9.5
- karma: 0.13.10

## 手順

1. テスト対象のJavaScriptコード、あるいはテストコードでブレイクポイント貼りたい箇所に `debugger` を記述
- `--single-run=false` オプションを追加してkarmaを実行
    - 例: `$ karma start ./karma.conf.js --browsers=PhantomJS_custom --single-run=false`
    - package.jsonにscriptsとして保存しておくと、`npm test`といったショートカットで実行できるので楽
- karmaのプロセスにdebuggerが刺さるので、http://localhost:9000/webkit/inspector/inspector.html?page=2 を開く
- Happy debugging!

参考: [Debugging Karma Unit Tests](http://bahmutov.calepin.co/debugging-karma-unit-tests.html)
CakePHP2でfindメソッドの呼び出し前後にbeforeFindとafterFind以外で処理をする

# 背景

性能問題などによって発行するSQLを変更したいが、出力形式を変えたくない。
そのような場合が、多々あると思います。

CakePHP２を使っている場合、ModelのafterFindメソッドをoverrideすれば検索結果の構造変更などは実現できますが、特定の画面の特定のfindの時だけ変えたいような場合はafterFindだと影響範囲が広すぎます。

そのようなケースでは、findに渡すパラメータにtypeを指定し、そのtypeに該当するfindメソッドをModelに定義することで前処理や後処理を追加することができます。

# 実装サンプル

```
class Book extends AppModel {

    // typeを$findMethodsというプロパティに登録します
    public $findMethods = ['rented' => true, 'bought' => true];

/**
 * type=rentedに対応するfindメソッド.
 * 命名規則は_findの後にtypeの先頭を大文字にした文字列とする.
 *
 * @param string $state "before"か"after"が設定される
 * @param mixed $query find呼び出し時のオプションが設定される
 * @param array $results "after"の場合に検索結果が設定される
 * @access protected
 * @return array
 */
    protected function _findRented($state, $query, $results = array()) {
        // 検索オプションを更新する場合など
        if ($state === 'before') {
            $query['conditions']['rented'] = 1;
            return $query;
        }

        // 検索結果を更新する場合など
        if ($state === 'after') {
            $customResults = [];
            foreach ($results as $result) {
                // 結果を加工
                $result['Book']['full_name'] = '借り物:' . $result['Book']['name'];
                $customResults[] = $result;
            }
            return $customResults;
        }
    }

/**
 * type=boughtを対応したサンプル
 *
 * @return array
 */
    protected function _findBought($state, $query, $results = array()) {
        if ($state === 'before') {
            // 必要に応じて処理を記載
            return $query;
        }

        if ($state === 'after') {
            // 必要に応じて処理を記載
            return $results
        }
    }

/**
 * type=rentedを指定してfindを呼び出すサンプル.
 *
 * @return array
 */
    public function retrieveRentedBooks() {
        // typeにrentedを指定するとフレームワークが_findRentedを呼び出す
        return $this->find('all', [
            'type' => 'rented'
        ]);
    }
}
```
Git利用時に「If no other git process is currently running,…」というエラーメッセージが出た場合（Windowsでの対応方法）

わたしはGitを、Windows用のGUIクライアント、GitExtensionsから利用しているのですが、あるときファイルをステージしようとしたら、以下のようなメッセージが出てきてファイルのステージに失敗してしまいました。

![2016-09-08_10h26_35.png](https://qiita-image-store.s3.amazonaws.com/0/14499/0fd0470c-8d33-977c-eefe-4de191acf615.png)

この「If no other git process is currently running,…」というメッセージをBingでぐぐると「"index.lock"を消せば良いよ！」という旨の記事は沢山見つかるんですが、Windows環境からではそんなファイルは見えないし、どうすればいいの？と思っていましたので、その際のメモ。


# なんのことはない

なんのことはないです。.gitが隠しフォルダになっていてエクスプローラ上からみえないだけです。最近そういうことなかったので油断していました・・・。

エクスプローラでリポジトリの入っているフォルダを開き、リボンから"表示"タブを選択→"表示/非表示"グループの"隠しファイル"チェックボックスにチェックを入れます。

![2016-09-08_10h36_38.png](https://qiita-image-store.s3.amazonaws.com/0/14499/de24a9d8-3b2d-1483-1ce6-46b2c3d14d13.png)

すると、ファイル一覧の中に.gitというフォルダが出てくるのでそこに入り、index.lockを削除してやります。これをすれば上記のメッセージは消えます。終わったら念のため隠しファイルの表示設定は戻しておくと良いでしょう。

なお、もちろんコマンドプロンプトでも同じことは出来ます。その場合、リボンの"ファイル"タブからコマンドプロンプトを開き、`cd .git`して、`del index.lock`します。
「精神と時の部屋」コマンドを作った

ちょっとしたプログラムの動作確認をテストするために、一時的なファイルやディレクトリを作成することがある。

今までは、

```sh
mkdir /tmp/a
cd /tmp/a
```

とかやっていたのだが、個人的に`/tmp/a`はけっこう使うので重なることがあるし、何度もコマンドを打つのが面倒。何よりやってることがダサい。

そこで、下記のエイリアスを作成した。

```sh
alias seishin-to-tokinoheya='cd $(mktemp -d)'
```

使い方はこんな感じ。

```sh
[kazuya@kazuya-ubuntu:~] % pwd    
/home/kazuya
[kazuya@kazuya-ubuntu:~] % seishin-to-tokinoheya 
[kazuya@kazuya-ubuntu:/tmp/tmp.92XUQmoHND]% pwd
/tmp/tmp.92XUQmoHND
```

`seishin<TAB>`で補完できるので打ちやすい。けっこう気に入った。
[Unity] UniRXでタッチイベント周りの処理

# タッチ系イベント

`ObservableEventTrigger`を`AddComponent`して、そこから`Observable`を生やす。

```csharp
var eventTrigger = this.gameObject.AddComponent<ObservableEventTrigger>();
// PointerDown
eventTrigger.OnPointerDownAsObservable()
            .Subscribe(pointerEventData => Debug.Log(pointerEventData.position));
// Drag
eventTrigger.OnDragAsObservable()
			.Subscribe(pointerEventData => Debug.Log(pointerEventData.position));
```

`using UniRx.Triggers;` を忘れずに

Unityの[PointerEventData](http://docs.unity3d.com/jp/current/ScriptReference/EventSystems.PointerEventData.html)を受け取れるので、そこから位置とか色々取得できる。

`EventTrigger`は個別のやつが色々ある。(`ObservablePointerDownTrigger`とか)
https://github.com/neuecc/UniRx/wiki#unirxtriggers

`ObservableEventTrigger`はこれらのいくつかをまとめて使えるようにしてくれているっぽいので、
主にタッチ系のイベントは`ObservableEventTrigger`でも良さそう。
https://github.com/neuecc/UniRx/wiki/UniRx.Triggers#observableeventtrigger

ただし、余計なTriggerが付いて困るような場合は、個別のTriggerを使うと良い。

> 例えば Scroll View の中のComponentにクリックイベントを付けたい場合、
`ObservableEventTrigger`を付けてしまうとドラッグイベントまでフックしてしまい、
スクロールができなくなってしまう。
この場合は`ObservablePointerClickTrigger`を使うと良い。


# Update系イベント

Update系の`Observable`は`MonoBehavior`から直接呼び出せる。

```
this.UpdateAsObservable()
	.Subscribe(_ => Debug.Log(Time.realtimeSinceStartup));
```



# WWW

WWWを使ったダウンロードは、staticメソッドの `ObservableWWW.Get` を使う
https://github.com/neuecc/UniRx#network-operations

```
ObservableWWW.Get("http://google.com")
			 .Subscribe(
				 downloadText => Debug.Log(downloadText),
				 exception => Debug.Log(exception));
```

並列ダウンロードもできるらしい。便利。


ドキュメント充実してて助かる
https://github.com/neuecc/UniRx
【jQuery+Typescript】jQueryにアロー関数を渡してはいけない

TypescriptでjQuery使っててハマったので。  
  
アロー関数便利！！！って言いながら次のようなコードを書くと意図した通りに動きません。
  
```ts:damenayatsu.ts
$(function(){
  //マウスを要素に重ねると背景色が変わって欲しい
  $('.btnlist').mousehover(()=>{
    $(this).css('background-color', 'red');
  });
})
```
これをJavascript(ES5)へトランスパイルすると次のようなコードが生成されます。
  
```js:damenayatsu.js
$(function(){
  var _this = this; //あっ
  //マウスを要素に重ねると背景色が変わって欲しい
  $('.nanikano-list').mousehover(function() {
    //あっ
    $(_this).css('background-color', 'red');
  });
})
```
言語仕様については僕も詳しくないのですが、どうやらアロー関数のthisはES5のように「その関数を呼んだオブジェクト」ではなく「その関数を呼んだオブジェクトの親」を指すようです。
C++などのオブジェクト指向言語におけるクラスメソッドでのthisのような挙動ということですね。
とりあえずですが、これについては以下の様なコードで対応しました。
  
```ts:iiyatsu.ts
$(function(){
  //マウスを要素に重ねると背景色が変わって欲しい
  $('.btnlist').mousehover(function() { //アロー関数をあきらめる
    $(this).css('background-color', 'red');
  });
})
```
Typescript感がゼロに・・・。
もっといい方法があればご教授ください。。。

#### 追記
これを書いた当時は全くJavaScriptを知らなかったのもあってかなり荒唐無稽な結論で終わっていましたが、次のように書くとよさそうです。

```ts:new.ts
$(() => {
  //マウスを要素に重ねると背景色が変わって欲しい
  $('.btnlist').hover((event: MouseEvent) => {
    $(event.target).css('background-color', 'red');
  });
});
```
`this`なんて必要なかったんや…。
端末上の Vim で colorscheme の背景を透過する

```vim:.vimrc
  autocmd vimrc_loading VimEnter,ColorScheme * highlight Normal ctermbg=NONE
  autocmd vimrc_loading VimEnter,ColorScheme * highlight NonText ctermbg=NONE
  autocmd vimrc_loading VimEnter,ColorScheme * highlight TablineSel ctermbg=NONE
  autocmd vimrc_loading VimEnter,ColorScheme * highlight LineNr ctermbg=NONE
  autocmd vimrc_loading VimEnter,ColorScheme * highlight CursorLineNr ctermbg=NONE
```

こんな感じで必要そうな highlight 定義に `ctermbg=NONE` を設定していく。
`TabLineSel` を `Normal/NonText` と同じにするのは個人的な趣味で、編集部分とタブが繋がっているように見えて選択しているタブが分かりやすいような気がする。選択していないタブは `TabLine`、空白部分は `TabLineFill` で普通は `TabLineFill` を透過する需要が多い気がする。
WRF > ndown > output file > wrfinput_d02 / wrfbdy_d02

WRF(Weather Research and Forecasting Model)関連。

以下の2つのファイルについて。

- wrfinput_d02 
- wrfbdy_d02

http://www2.mmm.ucar.edu/wrf/OnLineTutorial/Class_sav/cases/ndown.htm
>  `- run ndown.exe`
this uses wrfout_d01_<date> and wrfndi_d01 as inputs, and create the files: wrfinput_d02 and wrfbdy_d02
 
![](http://yuml.me/diagram/class/[wrfout_d01]-->[ndown.exe],[wrfndi_d01]-->[ndown.exe],[ndown.exe]-->[wrfinput_d02], [ndown.exe]-->[wrfbdy_d02])

http://www2.mmm.ucar.edu/wrf/OnLineTutorial/CASES/NestRuns/ndown4.htm
にもndownの記載があるが、Inputが`wrfndi_d02`となっている。上記とどちらが正しいのだろうか。

> wrfout_d01_<date> from original single domain run, and
wrfndi_d02 from STEP 2

ネスト処理でドメインのインプットファイルをd01からd02に変更しているようだ。

- d01 : coarseドメイン (粗いドメイン)
- d02 : fineドメイン (細かいドメイン)
【GAS】国税庁が公表している法人番号データをスプレッドシートに取り込む

　国税庁法人番号公表サイトというのがあります。
　http://www.houjin-bangou.nta.go.jp/setsumei/

　制度の内容については「[法人番号システムのWeb‐API機能をビジネス活用しよう（申請編）
](http://qiita.com/y-okuda/items/c45064f23f7785465372)」あたりが参考になるかと思います。

　法人番号データは土日祝日を除き毎日原則として夕刻以降に公開している模様です。今回もAPIを利用してデータを取得する流れを紹介します。APIキーが必要なので実際に試す場合は申請などが必要となります。データはXML形式で返ってきます。

　具体的な話に入っていきますが、スプレッドシート上でIMPORTXML関数を唱えれば十分です。たとえば9月5日にアップされたデータを取り込みたかったら、セルA1に取得したい日付をyyyy-mm-dd形式で入力しておき、A2に、


```

=IMPORTXML("https://api.houjin-bangou.nta.go.jp/1/diff?id=APIキー&from="&A1&"&to="&A1&"&type=12","//corporation")

```


　と式をセットすればその指定した日に更新された法人番号データが取り込まれます。結果は下のようになります（G列には具体的な会社名が入ってくるので隠しています）。ちなみに1082行です。たったの１行の式で取得できるわけですから実に簡単ですよね。

　ちなみにA1は「書式なしテキスト」で表示設定しないとうまくいきません（じゃないと勝手にシリアル値に置き換えられてしまう）。


![スクリーンショット 2016-09-08 2.05.17.png](https://qiita-image-store.s3.amazonaws.com/0/139134/1480bed3-1097-fda4-4662-47f99b11ff94.png)



　XMLをパースして2次元配列に転換する正攻法なやり方もあるんですが、かなり時間がかかって実用的ではありませんでした。いちおう掲げておきます。JSONのときはそれほど時間はかからなかったのですが。


```js:コード.gs

var ss = SpreadsheetApp.getActiveSpreadsheet();
var sh = ss.getActiveSheet();

function getCorporationData() {

  // 日付
  var hiduke = sh.getRange(1,1).getValue();

  // url設定
  var url = "https://api.houjin-bangou.nta.go.jp/1/diff?"
    +"id=APIキー"
    +"&from="+hiduke
    +"&to="+hiduke
    +"&type=12";
  
  // SSL対応
  var options = {
    "validateHttpsCertificates" : false
  }

  // データ取得
  var response = UrlFetchApp.fetch(url,options);
  var xml = response.getContentText();
  var document = XmlService.parse(xml);
  var root = document.getRootElement();
  var list = root.getChildren("corporation");
    
  // 2次元配列に組み直し
  var ary = [];
  var ary2 = [];
  for (var i in list) {
    for (var j=0; j<23; j++) {
      ary.push(list[i].getChildren()[j].getText());
    }
    ary2.push(ary);
    ary = [];
  }
    
  // シートに反映
  sh.getRange(2,1,ary2.length,23).setValues(ary2);

}

```
WRF > namelist.input > io_form_auxinput2 = 2 > ndown(nest-down)では2とする

WRF(Weather Research and Forecasting Model)関連。

設定ファイルnamelist.inputの設定項目として
`io_form_auxinput2`
というのがある。

ndown(nest-down)使用の時は
`io_form_auxinput2=2`
とするとのこと。

http://www2.mmm.ucar.edu/wrf/users/docs/user_guide_V3/users_guide_chap5.htm#_e._One-way_Nested
> e. One-way Nested Run Using ndown
>...
> Step 4: Make the final fine-grid initial and boundary condition files, by running ndown.exe
> Since V3.2, one must add <font color=red>io_form_auxinput2 = 2</font> in the &time_control section of namelist.input to run ndown.exe successfully. (If one desires to refine the vertical resolution when running ndown, set vert_refine_fact = integer (new in V3.2). There are no other changes required in the namelist or in the procedure. Another way to refine vertical resolution is to use the utility program v_interp (see the chapter for ‘Utilities and Tools’ for details)).
Port を rust で書いてみた

前回[「C node を rust で書いてみた」][0]では
[「ElixirからRustの関数をつかう → はやい」][1]のお題を [C Node][2] でやりました 。

今回は [Port][3] で書いてみます。

## 0. 環境
os: darwin-15.6.0 ／ MacBook Air（Mid 2011）

erlang: 19.0（erl_interface: 3.9）／ [kerl][4] で野良ビルド
rust: 1.11.0 ／ homebrew版

src は [v0.1.1][5] です。

## 1. 実行

```bash
$ cargo build --example port
...
$ cd examples
$ erl
Eshell V8.0  (abort with ^G)
```
```erlang
1> c(port).
{ok,port}
2> {ok,P} = port:start_link().
{ok,<0.63.0>}
3> timer:tc(port, pi, [P,1000000000,10]).
{16531378,{ok,3.141592655589816}}
4> port:stop(P).
```
はや、くはないですね。前回と変わる要素もないですが。

## まとめ

[v0.1.1][5] は '全力で spawn する' とか、'キレイに終われない' 等々ありますが、[C Node][2] より断然スッキリ。

頑張るならやはり [Port][3] の方が良さそうです。

[0]: http://qiita.com/tomaon/items/db7c034c0a20e6639a8b
[1]: http://qiita.com/tatsuya6502/items/52c2817b5ccae6d51197
[2]: http://erlang.org/doc/tutorial/cnode.html
[3]: http://erlang.org/doc/tutorial/c_port.html
[4]: https://github.com/kerl/kerl
[5]: https://github.com/tomaon/ei
ベイズの定理で遊ぶところまでいけなかったお話。

なんだかxとy以外の文字がでてくるとも〜いやってなるあゆめぐです。
難しい書き方ばっかりされてよくわからないのでわかりやすく私が理解した範囲でやってみる
数式みたいなのはこんな感じ
<img width="232" alt="スクリーンショット 2016-09-07 13.13.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/46444/d1cb26fa-d97c-85db-0133-ab8a233c2474.png">

##ベイズ覚えると何ができるの？
迷惑メールなどのフィルタリングや言語判定など機械学習系のアルゴリズムに使える。
簡単にいうと確率の応用編っていう感じ？

<a href="https://ja.wikipedia.org/wiki/%E3%83%99%E3%82%A4%E3%82%BA%E3%81%AE%E5%AE%9A%E7%90%86" target="_blank">ベイズの定理(wikipedia)</a>
ほとんどが聞き慣れない単語の羅列ばかりでもう嫌になっちゃう。

<a href="http://www.slideshare.net/hoxo_m/5-28064011" target="_blank">5分でわかるベイズ確率</a>
これベイズわかりやすい！

というわけでベイズの定理の説明。

##簡単な例
ここは素敵なあゆめぐレストラン。
今日もたくさんのあゆめぐたちがご飯を求めて集まってきます。
あゆめぐ達の5割はサーモンを、3割はお肉を注文します。そして1割のあゆめぐは両方頼みます。

<img src="https://qiita-image-store.s3.amazonaws.com/0/46444/1c80b139-5d59-ca98-881b-7c20b468a337.png" width="300px" /><img src="https://qiita-image-store.s3.amazonaws.com/0/46444/3ce8c845-71d2-56cd-8de7-9ee849bbd7d1.png" width="200px"/>

Q1,今日はあゆめぐたち50匹がサーモンを頼みました。さてこのときお肉も一緒に頼む確率はいくつでしょう?
Q2,今日は30匹のあゆめぐがお肉を頼みました。サーモンも頼む確率はいくつでしょう？

A1, 
まず、50匹サーモン頼むためには100匹のあゆめぐが必要で・・・とやってくと
50/100 * 10/50 (サーモン頼んだのあゆめぐ/あゆめぐ全体 * 両方頼むあゆめぐ/サーモン頼んだあゆめぐ)　
ってなって  答えは 1/10 ！

A2,
30/100 * 10/30(お肉頼んだあゆめぐ/あゆめぐ全体 * 両方頼むあゆめぐ/お肉頼んだあゆめぐ)
ってなって
![計算.png](https://qiita-image-store.s3.amazonaws.com/0/46444/b0dd0aaf-434e-242c-781e-a831f4f5d1e9.png)
こっちも1/10!

でこのQ1とQ2は同じ答えになるよっていうのがベイズの定理っていうものらしい

![こうか.png](https://qiita-image-store.s3.amazonaws.com/0/46444/6c21b091-dac5-4546-6db3-b28057484705.png)
ここまではわかる。そしてこっち行けーして

ってなってこうなった感じ。とりあえず理解した。
そしてこれだけじゃ遊べそうもない。だから何さって感じである。
<img width="232" alt="スクリーンショット 2016-09-07 13.13.51.png" src="https://qiita-image-store.s3.amazonaws.com/0/46444/d1cb26fa-d97c-85db-0133-ab8a233c2474.png">

さてここからモンティホールの問題とかに試しにいどんでみるんだけど、
数式にどう入れていいのかわからなかった・・・。
いろんなサイト見てたんだけどイマイチしっかり納得いかなくて、すごく私にもわかりやすい動画がありました。
しかもフィルターのところの説明までわかりやすいのがありました。
<a href="https://www.youtube.com/embed/pcUxlMSlP1w" target="_blank">ベイズ理論とその利用２ーモンティ・ホール問題</a>
<a href="https://www.youtube.com/watch?v=tgHlg8jWaGg" target="_blank">ベイズ理論とその利用３ー壷と玉の問題</a>
<a href="https://www.youtube.com/watch?v=tgHlg8jWaGg" target="_blank">ベイズ理論とその利用４ーベイズフィルター</a>

##ナイーブベイズ分類器
ベイズの定理を利用した分類方法
これ覚えれば結構遊べそうな気がしたんだけど、文字を細切れにするのにmecabとか使うのですが
私の借りているサーバーにcomposer入れるところからだから面倒くさそう・・・。
ローカルでやろうかなと思うので環境構築ついでにvagrantとかやろうかな・・・。
macにするかwindowsでやるか・・・。
先は長そうなので一旦ここまで。申し訳ない。
WRF > Link > WRF User's Guide

WRF(Weather Research and Forecasting Model)関連。

WRF ARWの公式ページのUser's Guide.
http://www2.mmm.ucar.edu/wrf/users/docs/user_guide_V3/contents.html

モノリシックなガイドなので、情報が見つけにくいことこの上ない。
FlickrのAPIで画像を取得する(php)

最終的にやりたいことは違うんだけど、実験および検証に使う
サンプル用の画像を引っ張ってくるのにまずFlickrのAPIで画像引っ張ってきてダウンロードしたりするところからやる。

<a href="https://www.flickr.com/" target="_blank">flickr</a>
<a href="https://www.flickr.com/services/developer" target="_blank">Flickr_ The Flickr Developer Guide</a>

基本的な使い方はこちらのサイトを見ればOK
<a href="https://syncer.jp/flickr-api-matome#sec-1-1" target="_blank">flickr APIの使い方まとめ(サンプルコード付き).html</a>

落としてくるやつはphpFlickrのやつ。こちらをクリックするとgithubに飛ぶのでそこのソースを落っことしてきた。
<img src="https://qiita-image-store.s3.amazonaws.com/0/46444/e28c3f3e-36f1-5abb-eeea-b319dd782ba3.png" width="500px"/>

あとは先ほどのURLにあるものをそのままコピって実行するだけで画像が一覧表示されるところまでできる。
猫で検索
<img src="https://qiita-image-store.s3.amazonaws.com/0/46444/38b0e82c-7d24-60ae-d14c-b17e33b0cf14.png" width="500px"/>
パンダで検索
<img src="https://qiita-image-store.s3.amazonaws.com/0/46444/07909bae-1405-5c1d-735b-ea38328b20dd.png"width="500px"/>

ここまではOKっと。ただ画像を1個ずつ保存するのはだるいのでまとめて落としてくるスクリプトを作る

```php
<?php

	//ライブラリを読み込む
	require_once 'phpflickr/phpFlickr.php';

	// Consumer Key
	$app_key = '自分のを入れる';

	// Consumer Secret
	$app_secret = '自分のを入れる';

	// 保存先フォルダ名
	$dir_name = "flickrImg";

	// 保存先ディレクトリがなければ作る
	if(!file_exists($dir_name)) mkdir($dir_name);

	// インスタンスを作成する
	$flickr = new phpFlickr( $app_key , $app_secret ) ;

	//オプションの設定
	$option = array(
		'text' => '猫' ,			　// 検索ワードの指定
		'media' => 'photos',		// 画像指定
		'per_page' => 20 ,			// 取得件数
		'extras' => 'url_q,url_c' , // 画像サイズ
		'safe_search' => 1 ,		// セーフサーチ
	) ;

	// 検索を実行し、取得したデータを[$result]に代入する
	$result = $flickr->photos_search( $option ) ;

	// 画像ダウンロード
	foreach($result['photo'] as $photo)
	{
		// 写真url作成
		$url = "http://farm{$photo['farm']}.staticflickr.com/{$photo['server']}/{$photo['id']}_{$photo['secret']}.jpg";
		$data = file_get_contents($url);
		$save_path = "./{$dir_name}/{$photo['id']}.jpg";
		file_put_contents($save_path, $data);
	}
?>
```

こんな感じで指定したフォルダに par_pageで指定した個数分ダウンロードされる
こんなことしなくてもツールとか探せば良かったのかもだけど気にしない。
知っておくと便利なGitHubの機能

GitHub でよく使うけどあんまり知られてなさそうな機能です。随時更新します。

## `t` でリポジトリのファイル検索

GitHub はキーボードショートカットが豊富です。`?` でその一覧を確認することができます。
その中でもよく使うのが、`t` キーで使えるファイル検索機能です。

![d235607b30a48180b1d9428c7d41dbe6.gif](https://qiita-image-store.s3.amazonaws.com/0/36518/8a05a3b0-fdb6-eb0a-633f-a7a7be885be8.gif)

Atom などと同じく、ディレクトリ名・ファイル名の一部を適当につなぎ合わせるだけで目的のファイルにたどり着けるので便利です。
（キャプチャでは、`basics/reducers/visibilityFilter.js` というファイルを検索するために `redu + visi` と入力しています）

## Issue# はタイトルでも検索できる

Issue や PR のコメントで別の Issue や PR へのリンクを貼ることがよくあります。
`#` の後に Issue 番号を入力しますが、このとき番号ではなく Issue のタイトルでも絞り込み検索を行うことができます。

![1ab7acc4f320e970fee98fbc1f3c7db2.gif](https://qiita-image-store.s3.amazonaws.com/0/36518/7b54bf40-03b2-3e34-1d37-965a05e3eb1f.gif)

キャプチャでは、`#3 reselect を試す` という Issue へのリンクを貼るために `#3` ではなく `#rese` と検索しています。

Issue の数が膨大になってくると目的の Issue の番号を覚えておくのがつらくなるので助かります。

## Issueコメントなどで、長文を折りたたんで表示する

参考：[HTML5 `<details>` in GitHub](https://gist.github.com/ericclemmons/b146fe5da72ca1f706b2ef72a20ac39d)

これは最近まで知らなかったんですが、GitHub の Issue/PR コメントは HTML5 の `<details>` タグをサポートしているので、以下のように書くことで長文をおりたたんで表示することができます。

```
<details>
  <summary>Title</summary>
  ...
</details>
```

**例：**

```
<details>
  <summary>`npm install` 時のエラーログ</summary>

``
npm ERR! install Couldn't read dependencies
npm ERR! Darwin 14.5.0
npm ERR! argv "/usr/local/Cellar/node/4.2.1/bin/node" "/usr/local/bin/npm" "i"
npm ERR! node v4.2.1
npm ERR! npm  v2.14.7
npm ERR! path /Users/yamazaki/workspace/react/redux-tutorial/package.json
npm ERR! code ENOPACKAGEJSON
npm ERR! errno -2
npm ERR! syscall open

npm ERR! package.json ENOENT: no such file or directory, open '/Users/yamazaki/workspace/react/redux-tutorial/package.json'
npm ERR! package.json This is most likely not a problem with npm itself.
npm ERR! package.json npm can't find a package.json file in your current directory.

npm ERR! Please include the following file with any support request:
npm ERR!     /Users/yamazaki/workspace/react/redux-tutorial/npm-debug.log
``
</details>
```

（``` `` ``` としてるところ、実際には ```` ``` ```` です）

**結果：**

![5664b84fe265d510b2a97a6b20f96321.gif](https://qiita-image-store.s3.amazonaws.com/0/36518/ac084084-8579-e77e-848c-f3a9623ac510.gif)

Stack trace などを貼り付けるのに便利。

## 画像のサイズを指定して貼り付ける

参考：[GitHubの画像貼り付けでサイズを指定する方法 - dackdive's blog](http://dackdive.hateblo.jp/entry/2015/05/08/110029)

以前自分のブログにもメモったんですが、画像をサイズ指定して貼り付ける際は `<img>` タグで書きます。

通常通り画像をドラッグ＆ドロップすると

```
![foo bar](https://cloud.githubusercontent.com/assets/1001444/18318574/2570ad98-755d-11e6-9581-5d95aec7bb9.png)
```

みたいな文字列になるので、`(...)` 部分をコピーして

```
<img src="https://cloud.githubusercontent.com/assets/1001444/18318574/2570ad98-755d-11e6-9581-5d95aec7bb9.png" width="320px">
```

というように、`<img>` タグに置き換え & `width` 属性などを指定します。

ちょい面倒ですが、スマホのキャプチャ画面とかを貼るときによくやります。
動作中のDockerコンテナにHostからファイルを転送する

# ホストからDockerコンテナへの転送手段

## 動作中のDockerコンテナにHostからファイルを転送する方法

「Dockerコンテナからホストへ」のファイル転送は、docker cp コマンドを使用すれば可能だが、
「ホストからDockerコンテナへ」の転送手段は~~公式では提供されていないようだ。。。~~
されてました！

そこで、ssh 立てるなり、scpで転送することなどが真っ先に思いつくのだが、dockerの流儀ではない。

そこで、docker exec コマンドを駆使して、実現してみる。

公式）

```
$ docker exec -i 【コンテナ名】 bash -c 'cat > 【コピー先ファイル】' < 【コピー元ファイル】
```

実例）

既にdockerで稼働してしまっているredmineサーバに、themeを追加したくなった。
そこでHost側で仕入れてきたthemeをコンテナ側に渡す。

対象ファイル：docker host 側にあるファイル「/vagrant/farend_basic.zip」
配置先　　　：docker container 側「/home/redmine/redmine/public/themes/farend_basic.zip」

```
$ docker exec -i redmine bash -c 'cat > /home/redmine/redmine/public/themes/farend_basic.zip' < /vagrant/farend_basic.zip
```

成功


##【追記】

amatsus さんの情報により、上記手法は、「docker cp」コマンドでも可能となりました。

以下で可能です。

```
docker cp /vagrant/farend_basic.zip redmine:/home/redmine/redmine/public/themes/farend_basic.zip
```
『プログラマの考え方がおもしろいほど身につく本』で学んだ問題解決の考え方

#問題を細分化して考える。
ある問題を解こうとした時、そのまま解くのではなく、細分化して考えることが大切。

#問題の類似を考えて、応用できないかを考える。
細分化と繋がってくるが、まずは類似した問題を以前解いたことがないかを考える。

#例 以下の図形を作るプログラムを考える。(本書ではC++で書かれているが、僕はJSで書く。)
＃＃＃＃＃＃＃＃
＃＃＃＃＃＃
＃＃＃＃
＃＃

#手順①
＃だけ出力するプログラムを書く

```
document.write('#');
```
#手順②
＃＃＃＃＃＃＃＃を出力するプログラムを書く

```
for (var i = 0; i <= 8; i ++){
     document.write('#')
};
```

#手順③
＃＃＃＃＃＃＃＃
＃＃＃＃＃＃＃＃
＃＃＃＃＃＃＃＃
＃＃＃＃＃＃＃＃
を出力するプログラムを書く。

```
for (var i = 0; i <= 4; i++){
     for(var j = 0; j <= 8; j++){
          document.write('#')
     };
     document.write('<br>')
};

```

#手順④
＃＃＃＃＃＃＃＃
＃＃＃＃＃＃
＃＃＃＃
＃＃
を出力するプログラムを書く。

```
for (var i = 0; i < 4; i++) {
     for (var j = 0; j < 8 - i*2; j++) {
          document.write('#')
     };
     document.write('<br>')
};
```

#結論
図形の全体を出力するプログラムを一気に組もうとすると大変。
だから、小さい部分から初めて、徐々に大きくしていくことが大切。

類似としては、

＃＃＃＃＃＃＃＃
＃＃＃＃＃＃＃＃
＃＃＃＃＃＃＃＃
＃＃＃＃＃＃＃＃

を初めに考えて、次に

＃＃＃＃＃＃＃＃
＃＃＃＃＃＃
＃＃＃＃
＃＃

を作るためにどうするかを考えれば良い。

以上。
マルレク課外 "ディープラーニング入門６時間集中講義" メモ

9/3(sat) の マルレク課外 [ディープラーニング入門６時間集中講義](http://lab-kadokawa09.peatix.com/?lang=ja) に出席したので、そのメモ

TL;DR
-----

* **ニューラル・ネットワークは人間の神経シナプス構造を模しているから、その動きを理解することがニューラル・ネットワークを理解する近道**
* **ディープラーニングが昨今注目されているのは、コンピューティングパワーのおかげ**  
  基礎自体は結構前に考えだされたもので、それ自体はあまり進展していない。時代が追いついた
* **ニューラル・ネットワークのコーディング(?)環境はまだ揃っていない**  
  たとえば出力値に対する検証・デバッグってどうするの？ってことに対して利用しやすい方法が確立していない
* 適用用途は "クラス分け" → "推論・対話" → "知覚・運動系へのフィードバック" → "言語理解" → "数学的理解" と進んでいくはずだが、**現在位置は "推論・対話" が実用レベル**
* **ニューラル・ネットワークを使って学習させるデータは、低解像度でも十分**  
  実際、手書き数字を認識させる場合は縦横28pxのデータを使っている。それよりも重要なのは、そのデータに特徴が現れているかどうか。高解像度であることと特徴が際立っていることは同義ではない
* **計算量と経済的合理性は常に比較して挑む**  
  そうでないと自己満足で終わってしまううえ、お金の面でも無きを見る

個人的感想
--------

### TensorFlow等の実装系を理解するには ###

これはニューラル・ネットワークの基礎を学ぶことで、実装内容が詳しく理解できるようになるので、基礎を学ぶこと

### 学習データの準備方法 ###

#### 入力の次元数の計算方法 ####

よくMNISTの手書き数字を学習させる方法として次元数(入力数)を784としますが、なぜ784なのか
これは入力のバイト数だった

2px * 2px の 256階調画像なら

1[0..255] 2[0..255]
3[0..255] 4[0..255]

となり 4 が入力数となる

RGBなら 入力数は 12

1[0..255, 0..255, 0..255] 2[0..255, 0..255, 0..255]
3[0..255, 0..255, 0..255] 3[0..255, 0..255, 0..255]

MNISTの手書き数字は 28px * 28px * 256階調 なので 28 * 28 * 1 = 784 ということ

この考え方を応用すれば、たとえ画像でなくとも入力数は決められる

例)

10秒に一回の温度データ出力で1分間の特徴量を学習させる場合

| 0秒前の温度データ | 10秒前の温度データ | 20秒前の温度データ | ... | 50秒前の温度データ

と入力数を6にしてあれば良い

#### 入力データのサイズ ####

高解像度が常に良いわけではなく、低解像度化することでむしろ特徴が際立ち、かつ入力も小さくなるため、学習データとして適切になる可能性もある
（モザイク画像に対して目を細めることで特徴抽出するようなもの）

要するに「間引き方」が大切

### 機械学習における最大の課題 ###

"学習済みモデル"を「作る人」と「利用する人」をうまく分離できてないところにある

学習済みモデルというのは、いわゆるアルゴリズムに相当する。SHA256みたいなのもの
現在の機械学習はそのアルゴリズムを作る人と使う人が同じで、再利用が極めて難しい
（この辺は、学習済みモデルを再利用するという観点でググっていただければ、そういうエントリーが乏しいことに気づいていただけるであろう）

これでは毎度毎度車輪の再発明しているようなもので、この辺はHadoopが一般的にならなかった理由にも近い。毎度毎度ソートアルゴリズム書くの？おれが？まじで？みたいな。

よって **学習済みモデルの再利用性を高めることが、この分野を促進するために必要なことだと考える**

あとがき
-------

ほんと、疲れた
ArchLinuxにTeamViewerをセットアップする

## はじめに
[TeamViewer](https://www.teamviewer.com/ja/)というリモートデスクトップアプリケーションがある。何かと便利なので、LinuxでTeamViwerを使えるように、セットアップ方法を調べた。RedHat系かDebian系なら公式パッケージがあるが、ArchLinuxの方が好きなので、ArchLinuxで使えるように試してみた。そして、色々はまったので、各解決策を残しておく。環境が壊れるので、新規環境へのインストールかアレンジを推奨します。

## デスクトップ環境の準備

お好みで。
私は、LXQtとConsole TDMを選択した。選択理由は、軽量かつ比較的新しく、開発が続いているもの。LXDEは、一応終了したはず、SLiMは、開発終了したみたい。GUIのセットアップがメインではないし、詳しいことは各自調べてもらうとして、恒例（？）の一行インストール。使い方を書いてないので、いつか忘れそう。

```
bash <(curl -L 'https://gist.githubusercontent.com/minanon/903459ce74afc4f7a641b0bda7592da5/raw/9fc832db7fa3bcc8905828c16d196c0ceb39e3e8/arch_xserv_lxqt.sh')
```

## TeamViewerのセットアップ

### インストール

本体に関しては、置くだけ。公式からtarをDLして好きなところに解凍するだけ。

### セットアップ

動作には、依存ライブラリをインストールする必要がある。必要なライブラリは、付属のコマンドで調べられると公式にも書いてある。どうもlddしてるだけみたい。

```
tv-setup checklibs
```

https://www.teamviewer.com/ja/help/363-How-do-I-install-TeamViewer-on-my-Linux-distribution.aspx#other

#### Pacmanの設定

ライブラリについては、32bit用のライブラリを入れろと出てくる。64bit専用のTeamViewerは、無いのだろうか。いつも64bitのArchLinuxしか入れないので、32bit用のライブラリをインストールしないといけない。pacman.conf に下記を追加設定することで、32bit用のパッケージもインストール可能になる。

```/etc/pacman.conf
[multilib]
Include = /etc/pacman.d/mirrorlist
```

チェックコマンドで足りないといわれたライブラリを入れる。

```bash
pacman -Sy lib32-glibc lib32-zlib \
    lib32-libx11 lib32-libsm lib32-libxext lib32-libxinerama lib32-libxrender lib32-libdbus lib32-fontconfig ecasound

```

libpngとlibjpeg が必要とあるが、TeamViewerは、古いライブラリを使用しているらしく、pacmanで入れてもバージョンが合わず、TeamViewerから使用できない。そのため、自分でコンパイルする必要がある。また、32bit用のものが必要なので、まず32bit用のコンパイル環境をインストールする必要がある。通常のgccを削除する必要があるため、注意。

```bash
pacman -Sy gcc-multilib
```

あとは、それぞれコンパイル・インストールする。オプションがよくわからず意外とはまった。

```bash
curl -L 'http://downloads.sourceforge.net/project/libpng/libpng12/1.2.56/libpng-1.2.56.tar.xz?use_mirror=jaist' | tar -Jx
cd libpng-1.2.56
./configure --prefix=/usr --libdir=/usr/lib32 CFLAGS='-m32'
make -j$(nproc)
make install
```
```bash
curl -L 'http://www.ijg.org/files/jpegsrc.v6b.tar.gz' | tar -zx
cd jpeg-6b
./configure --prefix=/usr --libdir=/usr/lib32 --mandir=/usr/share/man --enable-shared CC='gcc -m32'
sed -i -e 's/^LIBTOOL.*/LIBTOOL = libtool/' Makefile
make -j$(nproc)
make install-lib
```
```bash
ldconfig
```

これで、TeamViewerは起動した。が、マウスやキーボード入力を受け付けない。これも結構悩んだ。TeamViewerのログにライブラリが無いと出てたので、下記コマンドで入れた。他にも困ったことがあったら、ログを見てエラーを潰せば解決できそう。**ちなみに、依存ライブラリ調査コマンドでは、これらは出てこない。**

```bash
pacman -Sy lib32-libxdamage lib32-libxtst
```

今度こそ、TeamViewerを実行すれば正常に動作するはず。


恒例（？）の一行インストール。。。としたかったが、まだスクリプトを整理できていないので、正常実行できない。とりあえず、コマンド履歴としてだけ、置いておこう。

https://github.com/minanon/setup_scripts/blob/master/arch_teamviewer.sh
ITサービスマネージャー 2012年度午後２　問２

#始めに
ＩＴサービスマネージャーの午後２の論文についてあれこれ書いてみようと思います
対象のシステムは[生命保険会社のシステム](http://qiita.com/triple4649/items/56d2b450f2b8b68bdfe5)をベースにしています

#問題文の解析する
![image](https://qiita-image-store.s3.amazonaws.com/0/136860/505834dd-f3af-7d77-302d-5ee7d1447042.png)

#対応マニュアルには何があるか？
![image](https://qiita-image-store.s3.amazonaws.com/0/136860/f1ba480a-1e84-4201-5c71-e3b6fe2060a0.png)
![image](https://qiita-image-store.s3.amazonaws.com/0/136860/675466bd-26ce-a0d5-b287-f0c5e02bd9f2.png)
![image](https://qiita-image-store.s3.amazonaws.com/0/136860/29ff89fe-e361-71a2-7d5f-173520ef757b.png)
[BCPとは？](http://sonaeru.jp/bcp/basis/intro/)　より

#BCPを維持する活動とは？
![image](https://qiita-image-store.s3.amazonaws.com/0/136860/acba75a8-cbb5-b626-635a-b79adfa56651.png)
[BCPとは？](http://sonaeru.jp/bcp/basis/intro/)　より
脱・C likeなクラス設計

# デザインパターン(Strategyパターン)

# 対象
本ページの対象は、デザインパターンは名前も聞いたこともあるし、
解説ページなんかを読めば、ふむふむなるほど！と思うけど
実際の開発現場に入って、クラス設計してと言われると
なぜかC likeなクラス設計しかできないんです。という方向けです。

意外と気づいていない人も多く
予備軍がいっぱいいると思います。

##C likeなクラス設計とは、
私の造語なのかもしれません。明確に説明が難しいのですが、
　object思考言語で書く意味あるのか？と疑問になるクラス設計
　クラス化する意味がないんじゃない？と疑問になるクラス設計
そんなイメージのクラス設計です。


# 頻出パターン
今回は業務系開発でよく使うStrategyパターンについて
実例を交えながら書いていきたいと思います。


# 　Strategyパターンとは？
[TECHSCORE](http://www.techscore.com/tech/DesignPattern/Strategy.html/)の解説が分かりやすくて好きなので、載せておきます。

# デザインパターンを適応するメリットって何？
デザインパターンを適応した場合クラス数が増えます、実装量が増えます。
できれば適応しないに越したことはありません。
でも、実際は適応した方がいい事が多々あります。

それは、仕様変更に対しての保険と考えるといいと思います。

---------------------------------------------------------
確実に怪我や病気(**仕様変更**)なく老衰(**プロジェクトの完了**)を
迎えることができるのであれば保険（**デザインパターン**）は不要です。

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

保険もむやみに入ることは正しいとは言えないのと同じように、
むやみやたらにデザインパターンに当てはめることは
正しいとは言えません。


# 業務実例

==================================================
お客様「今回は売上データを分析する機能を追加してください」
　私　「分かりました。どのような分析を行いますか？」
お客様「実話まだ決まってなくてね。幾つか案は出ているんだが、迷っているんだよ。」
お客様「出力したいデータは決まってるんだけどね。」
お客様「とりあえず、XXXXアルゴリズム使っておいてくれ。」
　私　「了解致しました。」

==================================================

よくあるケースかと思います。
こういうことやりたいんだけど、
具体的なやり方はこれから検討とか、変更されることがあるみたいなケース。

こういう場合は、Strategyのクラスを検討しましょう。
入出力は決まっているんだけど、その中身が不安定な場合。
中身の仕様変更に対する”保険”をかけます
クラス図を描くと図１のイメージ



![図１.png](https://qiita-image-store.s3.amazonaws.com/0/98558/9ae2f43d-0d49-d2a6-dcf6-66b62edecea0.png)

図１　Strategy パターン


分析を行う「XXXXアルゴリズム」クラスは、
Abstract Classを継承します。
いわゆる、Abstract Class = Interfaceクラスです。

外部からは、Abstract Classを経由して分析処理を実行するようにします。



==================================================
お客様「分析のアルゴリズムなんだけど、YYYYに変更して欲しいんだけど」
　私　「了解致しました。」

==================================================

仕様の変更が入った時は、このようなクラス図になります。




![図２.png](https://qiita-image-store.s3.amazonaws.com/0/98558/24c76bb8-38fb-70b1-6203-21923c148ae4.png)

図２　仕様変更後


分析を行うクラスを呼び出しているmainクラスは、
分析のアルゴリズムを一切意識していないところがポイントです。


----

もし、C likeなクラス図を描いている場合、
図３のようになってしまいます。


![図３.png](https://qiita-image-store.s3.amazonaws.com/0/98558/80f6cb06-c7c1-ca52-999c-2bbfa14258d8.png)

図３　C likeな設計


この場合。
YYYYアルゴリズムに変更が入ると、
main関数はXXXXアルゴリズムを**意識した**作りになっているので、
main関数のリグレッション試験が必要になります。

本当にそのmain関数はYYYYでも動くのか？
というところが、断定できません。



Strategyパターンを適応していた場合、
main関数は、XXXXアルゴリズムを**意識しない**作りになっているので、
main関数に対するリグレッション試験は最低限で抑えることができます。



#　ポイント
Strategyは使用する関数(ここだとmain)に
実体部分を意識させないようにすることが大事！
そうしないと、適応させる意味が無い！


#よくあるダメ例

![図４.png](https://qiita-image-store.s3.amazonaws.com/0/98558/a34a00a5-43b2-0f7c-b57b-8ed7c49dc755.png)

図4

図4のように、AbstractClassが実装部分を意識してしまっている。


結果だけ見ると、そんなことするやついるのか？
と疑問に思うレベルの内容ですが、

アルゴリズム自体に機能変更などが入った場合、
安易に動かすためだけに無理やり外部から見えるようにしてしまう設計をする人がいます。


こうしてしまうと、main関数が実体のアルゴリズムを意識した
動きになってしまうので、デザインパターンのメリットが享受できません。


# まとめ

Strategy適応のコツ
- 入出力が決まっていて、実体部分に仕様変更の可能性あり。
- 使用者に実体を意識させないようにする。
組込み > 入門には何がいいだろうか > デバッガを扱うことができるMCUとデバッガ > STM32の情報を教えていただいた

http://qiita.com/kikiinu/items/36c5f81f4d9f3ace9ded#comment-83b7bda709888d92b6af
の質問を発端として思ったのは「組込みを入門するにはどういうハードを買うのがいいのだろうか」という疑問。

組込みの色々な機能

- GPIO入出力
- AD取込
- (DA出力)
- 割込み
- ウォッチドッグ
- DMA
- UART通信
- I2C通信
- SPI通信

などいくつかの機能がある。それらを試すことができる環境はいろいろあるが、その中でもプログラムを扱う環境には2通りあると思う。

- プログラマ (Programmer)
  - プログラムを書き込む機能
- デバッガ (Debugger)
  - プログラムを書き込む機能
  - 実行しながらブレークポイントで停止できる
     - 途中の変数の値をチェックなどできる
  - JTAG debuggerなど

プログラマはArduino, PIC, AVRなどの環境に対して1000円くらいで入手できそう。
ただ、プログラマだとブレークポイントを使った勉強ができないので、個人的にはデバッガを買うのをお薦めしたい。
デバッガを使うことで中の流れがよくわかり、理解が深まる。

問題はデバッガを買うとなると、環境によっては1万円くらいかかること。MSP430などではそれくらいしたかと思う。

上に書いた機能などを試したいマイコン環境でデバッガを使えるもので、入門者向けの環境というのはどういうのがあるのだろうか。

自分が未経験だが、STM32のST-LINK/V2-1というデバッグ環境付き、というのは気になる。
http://akizukidenshi.com/catalog/g/gM-07723/

PICやAVRなどのデバッガ環境は不明。

Arduinoはデバッガを用意する情報はあったようだが、入門者向けではなさそう。

なお、上記の機能のほとんどをライブラリを使って動作できる環境も増えてきている(ArduinoのWire Libなど)。そちらの環境を使うのがいいか、もっとハードウェアよりの実装(レジスタを扱う）方がいいかは、入門者が今後どうしたいかによりそう。

デバッガもあるといいが、情報がそこそこ入手できる環境かどうか、も大切かもしれない。
技術英語 / 数学英語 > Del > ナブラのことのようだ

Quantum Chemistry - 3-D Particle in a Box
https://www.youtube.com/watch?v=aXiyOUxUJAA&index=22&list=PLm8ZSArAXicL3jKr_0nHHs5TwfhdkMFhh

ビデオ1:44ころに∇^2のことを「デル・スクエアード」と言っている。

Wikiを見ると
https://en.wikipedia.org/wiki/Del
> Del, or nabla, is an operator used in mathematics,

Delとも言うようだ。
AndroidのBNEPの内部API

Android内部のBluetooth BNEPの内部APIについて調べました。

このAPIはAndroidのBluetoothプロトコルスタック Bluedroid または Fluoride の内部APIです。
(なので、自分以外には役に立たない情報だと思われます。)

BNEPはBluetoothのprotocolで、正式名称はBluetooth Network Encupsulation Protocol です。
Bluetoothプロトコルのレイヤ的には、PANとL2CAPの間に位置します。

#API
* ソースコード https://android.googlesource.com/platform/system/bt/+/master/stack/bnep/bnep_api.c

##BNEP_Init
* BNEPの初期化
* コントロールブロック bnep_cbのゼロクリアとトレースレベルの設定

##BNEP_Register
* L2CAPにBNEPを登録。
* L2CAPの登録処理はbnep_register_with_l2cap()で行う
* L2CAPのMODEはデフォルトなのでBASICになる
* L2CAPのPSMは0xf
* L2CAPのMTUは1691

##BNEP_Deregister
* l2capのBNEP登録を解除

##BNEP_Connect
* 接続要求を送信

##BNEP_ConnectResp
* 接続応答を送信

##BNEP_Disconnect
* 指定したハンドルのコネクションを切断

##BNEP_WriteBuf
* GKI bufferでデータを送信する

##BNEP_Write
* データを送信する

##BNEP_SetProtocolFilters
* プロトコルフィルタの設定
* 接続状態で呼ぶ

##BNEP_SetMulticastFilters
* BNEP用のマルチキャストアドレスの設定
* 接続状態で呼ぶ

##BNEP_SetTraceLevel
* デバッグトレースのレベルを設定

##BNEP_GetStatus
* 指定したハンドルのステータスを取得
* androidでは使っていない。


# APIを使っているところ
##PANの初期化

```
PAN_Register()
  pan_register_with_bnep()
    の中でBNEP_Register()が呼ばれる。
```

##PANの接続

```
PAN_Connect()
　の中でBNEP_Connect()が呼ばれる。
```

##PANの切断

```
PAN_Disconnect()
　の中でBNEP_Disconnect()が呼ばれる。
```

## PANの送信

```
PAN_Write()
  の中でBNEP_Write()が呼ばれる。
```

```
PAN_WriteBuf()
  の中でBNEP_WriteBuf()が呼ばれる。
```

## PANのマルチキャストアドレス設定

```
PAN_SetMulticastFilters()
  の中でBNEP_SetMulticastFilters()が呼ばれる。
```