OmniAICreator/Qiita-1.07M huggingface dataset:
Macに laravel/homestead をインストールしようとした時にハマった事。

確認環境 (2016.11.29現在)
macOS Sierra 10.12.1
vagrant:1.8.7
VirtualBox:5.1.10

上記環境で

`$ vagrant box add laravel/homestead`

と入力すると、

The box  'laravel/homestead' could not be found or
could not be accessed in the remote catalog. If this is a private
box on HashiCorp's Atlas, please versify you're logged in via
'vagrant login'. Also, please double-check the name. The expanded
URL and error message are4 shown below:

URL:["https://atlas.hashicorp.com/laravel/homestead"]
Error:

と表示されエラーになってしまう。

下記サイトにあるように

`$ sudo rm -rf /opt/vagrant/embedded/bin/curl`

とした後、

`$ vagrant box add laravel/homestead`

で解決。
***
参考：
・[StackOverFlow : mac OSX Sierra, can't add vagrant box laravel/homestead, due to needing cURL v 9.0.0 or later, and libcurl.4.dylib providing v7.0.0](http://stackoverflow.com/questions/40477731/mac-osx-sierra-cant-add-vagrant-box-laravel-homestead-due-to-needing-curl-v-9)
・[vagrant on mac にLaravel Homesteadを入れてみる](http://qiita.com/you-me/items/3886f072cbcbead98733)
NaNを含むベクトルをsumする

#したいこと

下記のように，NaNを含むような行列の要素の総和を求めたい

```
>> v = [1,nan,1]

v =

     1   NaN     1
```

何も考えずに`sum`すると

```
>> sum(v)

ans =

   NaN
```

となってしまうのを回避して，`2`と出力されるようにしたい．

#解決策

オプションに`'omitnan'`を指定する

```
>> sum(v, 'omitnan')

ans =

     2
```

おわり
UITapGestureRecognizerにパラメーターを送りたい

In this post, I send String parameter to Gesture, but actually you can send all types of parameter.

#Purpose
Personal Note

#Development Environment
- OS X El Captain 10.11.2
- Xcode Version 8.0

#Language
Swift 3.0

1.You have to create class

```swift
class MyTapGestureRecognizer: UITapGestureRecognizer {
    var targetString: String?
}
```

2.Call that class

```swift
let gesture = MyTapGestureRecognizer(target: self, action: #selector(self.tapText(tap:)))
gesture.targetString = "Hello Qiita"

func tapText(sender: MyTapGestureRecognizer) {
     print(sender.targetString)
}

```

# Source Code

```swift:ViewController.swift
import UIKit

class MyTapGestureRecognizer: UITapGestureRecognizer {
    var targetString: String?
}

class ViewController: UIViewController {
   
    @IBOutlet weak var label: UILabel!
    
    override func viewDidLoad() {
        super.viewDidLoad()
        let gesture = MyTapGestureRecognizer(target: self, action: #selector(self.tapText(sender:)))
        gesture.targetString = "Hello Qiita"
        label.addGestureRecognizer(gesture)

    }

    override func didReceiveMemoryWarning() {
        super.didReceiveMemoryWarning()
        // Dispose of any resources that can be recreated.
    }
}

/* Function */
extension ViewController{
    func tapText(sender: MyTapGestureRecognizer) {
        print(sender.targetString!)
    }
}
```
Rでデータをアニメーション (動画) で可視化する方法

Rで`animation`パッケージの`saveVideo`関数で動画を作成する方法のメモ。
plotをforで回して時系列での分布を調べたいとき([例](https://github.com/show-kami/frog-sync/blob/develop/drawSpaceDistribution.R))，自動的にforの中身を動画にしてくれる方法。
実行環境はmacOS Sierra。

# 環境整備
## FFmpegのインストール
`saveVideo`関数の使用のためには，FFmpegというツールのダウンロードが必要になります。

1. FFmpegを[ここ](http://ffmpegmac.net/)からダウンロードする
    2. 解凍すると，`ffmpeg`という名前の実行ファイルがあるはず？
3. ターミナルにて，次のコマンドを実行する
    4. ```sudo cp "上記ffmpegのフルパス" /bin ```
        5. パスは，上で解凍して見つけた実行ファイルをターミナルのウィンドウにドラッグアンドドロップすれば自動的に入力される。
    6. もし`Operation not permitted`というエラーが出たら，次のようにして対処する。 (これは，macOSに搭載されているRootlessというセキュリティが原因。このRootlessを解除する。) (一連の流れは[動画](https://youtu.be/wq0PyKrwIVY)でも見られる。)
        1. Macを再起動する。起動時にCmd + Rを押下し続け，リカバリーモードで起動する。
        2. ターミナルで`csrutil disable`というコマンドを打つ。
        3. `Successfully disabled System Integrity Protection. 云々`というメッセージが出たことを確認し，ターミナルを閉じる。

これで，無事FFmpegがインストールされたはず！

# `saveVideo`関数の使い方
```R:example.R
saveVideo(
    {
        ani.options(interval = ...)
        expr
    },
    video.name = ... ,
    other.opts = -pix_fmt yuv420p -b 1000k
)
```

# 参考

- [`animation`パッケージのドキュメント](https://cran.r-project.org/web/packages/animation/animation.pdf)
- [Macでffmpeg(使い方)](http://note.chiebukuro.yahoo.co.jp/detail/n301863)
- [Mac OS X 10.11 EI CapitanでOperation not permittedが出た時の解決法](http://www.starlod.net/mac-os-x-10-11-ei-capitan-operation-not-permitted.html)
改行によるinlin要素の隙間を滅したい

改行とかインデントによって、inlineやinline-block要素の間にスペースが入りますよね。例えばこんなhtml書くとできる例の隙間です。

```html
// 例のhtml
<body>
<span style="background:#ccc;">いろはにほへと</span>
<span style="background:#ccc;">ちりぬるを</span>
</body>
```
![localhost-63342-untitled-test2.png](https://qiita-image-store.s3.amazonaws.com/0/68087/3c580e52-51bb-c931-80f9-56af706b4c36.png)

皆さん困ってますよね？画像やナビゲーションを横に並べたいのに隙間ができてしまって鬱陶しく思う経験は誰もが通る道ですよね？

よく見る対応としては

* 男らしく改行もインデントも無しで書く
* <!-- -->で改行やインデントをコメントアウト
* CSSで隙間を調整

あたりでしょうか。生活の知恵ですね。でもやっぱりここは「改行とインデントを削除する」という方法が望ましいのではないでしょうか。

まさにこの改行とインデントを削除するためだけにあるgulpプラグインがこれです

**gulp-rmindentation**
https://www.npmjs.com/package/gulp-rmindentation

別にhtmlのminifyがしたいわけではなく、ただただ純粋に「改行によるinlin要素の隙間を滅したい」そういう思いから作られたプラグインです。作られたというか作ったプラグインです。

* 行頭の空白（半角、全角、タブ文字）を削除する
* 行末の改行（CR、LF、CRLF）を削除する
* ただしpreタグ、scriptタグ、styleタグの中身はそのまま

という仕様です。
この世の空白による悲しみを少しでも埋めることができれば幸いです。

※ [前回の記事← ](http://qiita.com/nabepon/items/f73b850c7af7ca979108)でも書いたんですが、同様のことができるプラグインあったら教えて欲しいです。
PHPのバッチでmemory_limitの上限を無くす方法

よくある設定として

1. 実行するプログラムの中に書く

```hoge.php
ini_set('memory_limit', '256M');
```

1. 実行時に指定
```
php -d memory_limit=512M hoge.php
```

がよく見かけるけどlimit無制限で実行する方法は

```
php -d memory_limit=-1hoge.php
```
マイナス値を入れる

ソースは下記
http://www.php.net/manual/en/ini.core.php#ini.memory-limit
> Note that to have no memory limit, set this directive to -1.


localとかの開発環境や占有できる環境でしか使わなそうだけど、とりあえず重いバッチ(PHP)を動かしたい場合はつかえるかな
[Apex] スケジュール済みジョブを一括削除する方法

以下のApexコードを実行します。

```java
List<CronTrigger> ctList = [SELECT Id FROM CronTrigger WHERE CronJobDetail.JobType = '7'];

// ジョブ名を指定して削除する場合
// List<CronTrigger> ctList = [SELECT Id FROM CronTrigger WHERE CronJobDetail.JobType = '7' AND CronJobDetail.Name = 'ジョブ名'];

for(CronTrigger ct:ctList){
    System.abortJob(ct.Id);
}
```

##　参考リンク
* [CronTrigger - SOAP API 開発者ガイド](https://developer.salesforce.com/docs/atlas.ja-jp.204.0.api.meta/api/sforce_api_objects_crontrigger.htm)
* [CronJobDetail - SOAP API 開発者ガイド](https://developer.salesforce.com/docs/atlas.ja-jp.204.0.api.meta/api/sforce_api_objects_cronjobdetail.htm)
* [クエリで使用できるスケジュール済みジョブの名前と種別 - Salesforce.com Winter '14 リリースノート](https://releasenotes.docs.salesforce.com/ja-jp/winter14/release-notes/rn_186_apex_job_name_type.htm)
* [Apexスケジューラを使用したジョブのスケジュール - Trailhead](https://trailhead.salesforce.com/ja/asynchronous_apex/async_apex_scheduled)
相関サブクエリ


「販売単価（sel_price）が、全体の平均の販売単価より高い商品」を選び出すには、スカラ・サブクエリを使えば実現出来ます。今度は少しこの条件を変えて「商品分類（category_id）ごとに平均販売単価より高い商品」を、商品分類のグループから選び出すことを考えてみましょう。

エラーになる理由は、前節でも述べたとおり、このサブクエリが複数行を返してしまい、スカラ・サブクエリにならないからです。WHERE 句でサブクエリを使用する場合は、必ず結果は 1 行である必要があります。
このような場合に使用するのが相関サブクエリです。相関サブクエリは、テーブル全体ではなく、テーブルの一部のレコード集合に限定した比較をしたい場合に使います。

  WHERE I1.category_id = I2.category_id
  上記が、相関サブクエリになる。

###   相関サブクエリの注意点
これは、サブクエリの中にあった条件を、外側に移動させただけで、その他は何の変更も加えていません。ところが、この SELECT 文はエラーになって正しく実行出来ないのです。
エラーの原因は相関名のスコープです。相関名というのは、I1 や I2 など、テーブルの別名としてつけた名前です。サブクエリ内部でつけられた相関名は、そのサブクエリ内でしか使用出来ません。I1 は外側でつけられた名前なので SELECT 文全体で使用出来ますが、I2 はサブクエリ内でつけられた名前なので、サブクエリの括弧内でしか使用は出来ません。

相関的に行ごとに値を移動させて、合致したものを返す。forみたい。
トランザクション



トランザクションは、次の 4つの特性を満たさなければなりません。これら 4つの特性は、それぞれの名前の頭文字をとって ACID 特性といいます。

- 原子性 (ATOMICITY)
トランザクションは、それ以上分割することのできない最小の作業単位であるということです。このため、トランザクションを構成する処理の結果がすべて有効になるか、またはすべて無効になるかのいずれかであるということです。
例えば、あるトランザクションに処理 A と処理 B があるとします。処理 A と処理 B が正しく実行されたときは両方の処理結果が有効になります。しかし、処理 A だけ、または処理 B だけが正しく実行された場合は、両方の処理結果が無効になります。

- 一貫性 (CONSISTENCY)
トランザクションで処理されるデータは、実行前と後でデータの整合性を持ち、一貫したデータを確保しなければなりません。

- 隔離性 (ISOLATION)
処理対象が同じデータである複数のトランザクションを一度に実行する場合は、それぞれのトランザクションは隔離された (独立された) 状態でデータの変更を行わなければなりません。
トランザクション A とトランザクション B がデータを共有している場合、トランザクション A で変更中のデータを、トランザクション B で処理することは認められないということです。トランザクション A が終了し、データが確定した後であればトランザクション B でデータを処理することができます。

- 持続性 (DURABILITY)
トランザクションで処理されるデータの状態はトランザクションが終了するまで変化しないということです。トランザクションで処理を変更する SQL 文を実行しますが、トランザクションの最後で変更を確定するまでは実際のデータの変更は行われないということです。
これらのトランザクションの特性により、データベースへの同時アクセスを制御したり、障害発生時の処理を制御することができるようになります。それぞれ、例をあげて説明します。


## トランザクションの必要性

10 万円の引き算と 10 万円の足し算を、分割出来ない１つの処理として扱い、もし 10万円の足し算が失敗したら 10 万円の引き算も取り消されるようにするのです。このように、複数の処理をまとめて扱う機能がトランザクションです。
トランザクションを始めてから、結果をデータベースに反映させることをコミット（COMMIT）、また反映せずに、元に戻すことをロールバック（ROLLBACK）といいます。

## トランザクションにおけるロック

DDL 文(ALTER CREATE DROP)を実行したとき
接続を切断(異常終了)したとき
↓
終了してしまう。

このロック機能により、Oracle では、A さんが SELECT しているとき、B さんが UPDATEすることによって SELECT の内容が途中で変わってしまう、あるいは後で ROLLBACK されたので、意味のないデータを SELECT してしまうといったことは起こりません。常に、整合性のある確実なデータが読み取れるという特徴、これを読み取り一貫性と呼びます。Oracle は古くから、この読み取り一貫性が強みです。

## 自動コミット機能

Oracle では、DML 文（SELECT、INSERT、UPDATE、DELETE）が実行されても自動的にコミットはしません。逆に、DDL 文（ALTER、CREATE、DROP）が実行された場合は自動的にコミットされます。
DML 文を実行すると自動的にコミットされてしまうことを自動コミット機能といいます。
Oracle では、デフォルトではこの自動コミット機能はオフの状態になっているのですが、これをオンにして、UPDATE、INSERT、DELETE を実行すると、自動的にすぐにコミットする設定にも出来ます。
インデックス・シーケンス


## インデックスとは

 一般的な「SELECT～FROM～WHERE 条件」で検索する場合、全ての行に対して WHERE の条件と一致するかどうかを調べます。基本的にデータベースの行は、規則性の無い並び方をしていますので、検索には時間がかかります。
   これに対して、あらかじめインデックスを設定しておけば検索には表そのものではなくインデックスを利用します。
   
   
### インデックスの作成と削除

主キー制約のあるカラムに対しユニークな値を設定するのが面倒となる場合があります。例えば、掲示板などにおける記事番号や、その記事に対するコメント番号などは、自動的にユニークな値が採番（このケースであれば１ずつ増加）されると便利です。 そんなときに用いる仕組みが順序。


インデックスを定義するには、CREATE INDEX 文を使用します。基本構文は次の通りです。


```sql
CREATE [UNIQUE] INDEX インデックス名
       ON テーブル名(列名 [ ASC | DESC ],...) ;

```

## シーケンス

### シーケンスの作成と利用
シーケンスとは、自動的に連番を発行するデータベースオブジェクトです。シーケンスを用いると、条件に沿った番号を簡単に得ることが出来ます。条件には値の開始値、増減値、最大値など様々なオプションを定めることが出来ます。

### シーケンスの利用
シーケンスを使用するときは、SQL 文中で CURRVAL 疑似列、NEXTVAL 疑似列を用います
.DS_Storeじゃまじゃね？

## .DS_Storeを作成しないようにする。

タイトルどおり、.DS_Storeが邪魔だったので、生成しないようにする方法を調べた。

ターミナルで以下のコマンドを叩けば、生成されなくなるようだ。

```
defaults write com.apple.desktopservices DSDontWriteNetworkStores true
```

だが、いちいちターミナルを開いて、このコマンドを実行するのは、すっごく手間なので、こんなときはAutomatorを使いましょう！

１．　アプリケーション -> automator　を開く
<img width="172" alt="スクリーンショット 2016-11-29 20.06.18.png" src="https://qiita-image-store.s3.amazonaws.com/0/32982/ce984437-b4ce-85e5-226f-31a8db3d7478.png">

２．　Automatorの新規書類を押して、アプリケーションを選択。
![スクリーンショット 2016-11-29 20.07.30.png](https://qiita-image-store.s3.amazonaws.com/0/32982/c3126f2b-a3bf-b2e5-9609-602fca207a63.png)

３．　検索窓に「シェルスクリプト」入力し、「シェルスクリプトを実行」を表示し、右にドラッグアンドドロップ。
![スクリーンショット 2016-11-29 20.07.44.png](https://qiita-image-store.s3.amazonaws.com/0/32982/baef994d-4122-dc42-7a82-55e33d597ffb.png)

４．　`defaults write com.apple.desktopservices DSDontWriteNetworkStores true`を入力し、[cmd＋S]で保存。(保存先はアプリケーションディレクトリにおいておくと良いかと)
![スクリーンショット 2016-11-29 20.08.02.png](https://qiita-image-store.s3.amazonaws.com/0/32982/2dde9007-886a-21f7-65f2-f086a4e986bb.png)

５．　アプリケーションディレクトリから、先程作成したアプリをダブルクリックして、実行。(実行しても、特に何も表面的には変化がないですが、スクリプトは実行されています。)
<img width="177" alt="スクリーンショット 2016-11-29 20.15.36.png" src="https://qiita-image-store.s3.amazonaws.com/0/32982/7ce1c974-cafd-652d-d167-fd824901fde4.png">

６．　PCを再起動する。

以上で、.DS_Storeは作成されなくなったかと思います。

## 過去に作られた.DS_Storeを削除する

ターミナルで削除可能ですが、削除系は、なるべくターミナルではなく、
アプリなどで目で確認しながらのほうがいいかと思いますので、アプリで削除する方法を紹介。
### アプリで消す

[MacForkCleaner](http://www.vector.co.jp/soft/dl/mac/util/se485623.html)
こちらを使えば、削除できます。
使い方は、簡単。

1. ダウンロード
2. アプリ起動
3. アプリに、ローカルディレクトリをドラッグアンドドロップ
4. 以上で、そのディレクトリ内の.DS_Storeが全て削除されます。

私は、Documentsをまるっとドラッグアンドドロップして、削除しました。
スッキリ！

#### 参考記事
http://blancbooth.com/archives/62
[Emacs]macでspacemacsをインストールしたら'Symbol's function definition is void: cl-struct-define'というエラーが出た時の対処


## 対処

ターミナルで以下のコマンドを実行する。

```shell:shell
$ cd ~/.emacs.d/
$ find . -name '*.elc' | xargs rm
```

## 原因

おそらくバージョン違いのemacsでコンパイルされた.elcファイルがあったため。

## 参考

[https://github.com/syl20bnr/spacemacs/issues/3129](https://github.com/syl20bnr/spacemacs/issues/3129)
jq の練習

# 問題

`jq` が難しい。

# 解決策

練習し、慣れるしかない。

# 練習の記録

## 1. 数値や文字列などはそのまま処理される

```bash
echo '"abc"' | jq '1'
#=> 1

echo '{"a":1,"b":"2"}' | jq '"Hello, World!"'
#=> "Hello, World!"

echo '["a","b","c"]' | jq '[123]'
#=> [123]

echo '["a","b","c"]' | jq '{"a":456}'
#=> {"a":456}
```

## 2. `.` は id (そのままを返す)

※注意: 対象としてここでは JSON の root が渡されている

```bash
echo '"abc"' | jq '.'
#=> "abc"

echo '["a","b","c"]' | jq '.'
#=> ["a","b","c"]

echo '{"a":1,"b":"2"}' | jq '.'
#=> {"a":1,"b":"2"}
```

## 3. `.key` は Object の property access

```bash
echo '{"a":1,"b":"2"}' | jq '.a'
#=> 1

echo '{"a":1,"b":"2"}' | jq '.b'
#=> "2"

echo '{"a":1,"b":"2"}' | jq '.c'
#=> null
```

## 4. `.key` と Object を組み合わせてみる

```bash
echo '{"a":1,"b":"2"}' | jq '{ "k": .a }'
#=> {"k":1}
```

## 5. Object の key は JavaScript のように `"` を省略できる

```bash
echo '{"a":1,"b":"2"}' | jq '{ k: .a }'
#=> {"k":1}
```

## 6. `{ key: .key }` は `{ key }` と省略できる

```bash
echo '{"a":1,"b":"2"}' | jq '{ a }'
#=> {"a":1}
```

## 7. `map()` は Array の各要素、または Object の各 value を走査できる

※注意: `map()` の対象としては JSON の root を取る。

```bash
echo '["a","b","c"]' | jq 'map(1)'
#=> [1,1,1]

echo '{"a":1,"b":"2"}' | jq 'map("Hello")'
#=> ["Hello","Hello"]
```

## 8. `map()` と `.` を組み合わせる (さきの例だと各要素かが分からないので……)

※注意: `map()` の対象としては JSON の root を取る……が、
`map(.)` の `.` は root でなく「各要素 or 各 value 」である。

```bash
echo '["a","b","c"]' | jq 'map(.)'
#=> ["a","b","c"]

echo '{"a":1,"b":"2"}' | jq 'map(.)'
#=> [1,"2"]
```

## 9. `map()` と `.key` を組み合わせてみる

```bash
echo '[{"k":"a"},{"k":"b"},{"k":"c"}]' | jq 'map(.k)'
#=> ["a","b","c"]

echo '[{"k":"a"},{"k":"b"},{"x":123}]' | jq 'map(.k)'
#=> ["a","b",null]
```

## 10. `map()` と `.key` と `{ key }` を組み合わせてみる

```bash
echo '[{"k":"a"},{"k":"b"},{"x":123}]' | jq 'map({ k })'
#=> [{"k":"a"},{"k":"b"},{"k":null}]
```

## 11. `select()` で不要な要素を削る

※注意: JavaScript とは truthy / falsy の判定が異なる。
`false` `null` が falsy でそれ以外は truthy だと思う。

※注意: `map(.)` の `.` は各要素になるが、`select(.)` はそうならない。

```bash
echo 'true' | jq 'select(.)'
#=> true
# (`.` は `true` なので truthy)

echo 'false' | jq 'select(.)'
#=>
# (`.` は `false` なので falsy)

echo '0' | jq 'select(.)'
#=> 0
# (`.` は `0` なので truthy 。JavaScript だと `0` は falsy だが、jq では truthy)

echo '""' | jq 'select(.)'
#=> ""
# (`.` は `""` なので truthy。JavaScript だと `""` は falsy だが、jq では truthy)

echo 'null' | jq 'select(.)'
#=>
# (`.` は `null` なので falsy)

echo '{"k":"a"}' | jq 'select(.)'
#=> {"k":"a"}
# (`.` は `{"k":"a"}` なので truthy)

echo '{"k":"a"}' | jq 'select(.k)'
#=> {"k":"a"}
# (`.k` は `"a"` なので truthy)

echo '{"k":"a"}' | jq 'select(.a)'
#=>
# (`.a` は null なので falsy)
```

## 12. `map()` と `select()` を組み合わせてみる

```bash
echo '[{"k":"a"},{"k":"b"},{"x":123}]' | jq 'map(select(.))'
#=> [{"k":"a"},{"k":"b"},{"x":123}]

echo '[{"k":"a"},{"k":"b"},{"x":123}]' | jq 'map(select(.k))'
#=> [{"k":"a"},{"k":"b"}]
```

……続く
Editor拡張　SceneInBuild内でActiveでないものを除外する　メモ

下記ページを参考に作成
http://baba-s.hatenablog.com/entry/2015/04/10/101720

追記：11月30日
　Jenkinsのバッチモードからだと正しく反映されなかったので書き直し

■Jenkinsからのバッチモード
　ビルド手順の追加で"「Invoke Unity3d Editor」"を選択
　「Unity3d installation name」にUnity
　「Editor command line argument」に
　-batchmode -executeMethod SceneInBuildRefresh.Refresh -nographics -projectPath "${WORKSPACE}/プロジェクト名" -quit　を追加

■理由
　AssetBundle対応のため、Sceneファイルが削除されSceneInBuildが更新されていない
　そのため下記処理をいれた。

■やっている事
　１．Resources内のフォルダ削除された後のAssetDatabaseから
　　　Assets/Resourceフォルダにあるシーンをすべて引っ張ってくる

　２．EditorBuildSettingは更新されていないので
　　　EditorBuildSettingのシーンリストを取得する。

　３．EditorBuildSettingのシーンリストの順番を維持したまま
　　　AssetDatabaseから検索して、まだSceneInBuildに含める必要のあるシーンリストを再構築する。

```
using UnityEditor;
using UnityEngine;
using System.Linq;
using System.Collections.Generic;

public static class SceneInBuildRefresh  {

    /// <summary>
    /// SceneInBuild内を再構成
    /// </summary>
    [MenuItem("Assets/SceneInBuildRefresh")]
    public static void Refresh()
    {
        AssetDatabase.Refresh();
        List<string> pathList = new List<string>();

        // AssetDatabaseを使用してAssets/Resources以下のシーンを列挙してリストを作成
        foreach (var guid in AssetDatabase.FindAssets("t:Scene"))
        {
            string path = AssetDatabase.GUIDToAssetPath(guid);

            if (path.Contains("Assets/Resources") == true)
            {
                string sceneName = System.IO.Path.GetFileNameWithoutExtension(path);
                Debug.Log("path=" + path);
                pathList.Add(path);
            }
        }

        // 更新用シーンリスト
        List<EditorBuildSettingsScene> sceneList = new List<EditorBuildSettingsScene>();

        // Editor上のシーンリスト
        var editorSceneList = EditorBuildSettings.scenes.Select(scene => scene.path).ToList();

        // シーンは順番が関係するので現在シーンの羅列から検索
        foreach(var editorScene in editorSceneList)
        {
            if(pathList.Exists(sceneName => editorScene.Contains(sceneName) == true))
            {
                Debug.Log("scenePath=" + editorScene);
                sceneList.Add(new EditorBuildSettingsScene(editorScene, true));
            }
        }

        EditorBuildSettings.scenes = sceneList.ToArray();

        AssetDatabase.Refresh();
    }
}
```
Use AT & T Yahoo Emailing Service to Carry on Virtual Communication

All of us are aware from this fact that communication plays an important role for making the strong bond between the families or the different organization. But, each person does not have the sufficient time to meet the person for fix tome interval. So, they have to take the association of the different mediums to make the fast conversation. For fulfilling this objective, one should have to take part in the mailing service. Amongst all the communication services, one should have to choose the AT& T yahoo web mail service. The desired customer should have to dial AT&T yahoo Mail support Number@+1888- 411-1123 to go through the advantage of this emailing service as well. 
Through connecting on this web mail service, there does not lie any hindrance to get in the touch of the college friend and other lovable personalities. AT&T is a multinational telecommunication company and has established their organization in Texas.  It has joined hand along with yahoo and offering the exceptional service to the account holder. This is the main reason there is the less opportunity to come up on the contact of the embarrassing result. In case it will occur in this reliable emailing platform, then one must have to plan to remove the negative consequence in it. So, there should not come any break to give the expected output in the defined time slot. This objective is not possible for those persons, who are not in the strong technical knowledge. So, it is the obvious that you should have to take the help of the professional to resolve the technical glitches as soon as possible.
The impeccable solution of the problem can be given only by the experienced professional.  For getting the best remedy of the errors, one should have to check track record of the professional. If most previous users are gratified from their service and support, then an individual can take the support of the particular third party destination without thinking too much. It is recommended that account holder of AT& T yahoo mail should have to last their search on our third party destination. Our expert holds the proven track record to cater the demand of the professional in the effective manner. Dial AT & T Yahoo customer number USA @+1888- 411-1123 to put the long list of the complaint with us. We are offering the impeccable solution of the problem, so that recapping the frustrating and irritating issue cannot take place further.  Come on our web address to know more information.

To know more visit us: http://emailhelpnumber.com/at-t-help-number.html
![AT&T EMAIL.jpg](https://qiita-image-store.s3.amazonaws.com/0/151749/00b51524-55f9-6d3c-997d-213c56e9da19.jpeg)
UIViewをベースにしたカスタムポップアップ【Swift3.0】

## 完成見本
![mihon.png](https://qiita-image-store.s3.amazonaws.com/0/151314/68d66462-a6bc-75cf-50ff-df51c7b99d39.png)

* * *

### 1.　カスタムポップアップ　xibファイル作成
###### メニュー：File→New→Fileと辿り、User InterfaceのViewファイルを選択します。ファイル名はPopupView.xibとしました。
<img width="727" alt="2.png" src="https://qiita-image-store.s3.amazonaws.com/0/151314/e347c3a9-3726-293e-7acd-1ba9e38cc5e1.png">

### 2.　カスタムポップアップ　クラスファイル作成
###### メニュー：File→New→Fileと辿り、Cocoa Touch Classのテンプレを選択して、SubclassはUIViewを選択します。ファイル名はPopupview.swiftとしました。

<img width="726" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/151314/cd9a97b6-a851-73bc-6321-78ba695127a3.png">
※ 「Also create XIB file」をチェックすれば.swiftと.xibが同時に作成できますが、今回は別々にやってます。
### 3.　xibとクラスファイルの紐付け

###### 左が***PopupView.swift***、右が***PopupView.xib***です。左サイドからPopupView.swiftを選択した後、オプションを押しながらPopupView.xibを選択すると図のような並びになるはずです。右画面のPopup Viewを選択（①）して、右側のCustom Class欄で***PopupView***を選択（②）します。あとは通常通りコントロールを押しながらアウトレットとアクションの接続（③）をおこないます。今回BaseView（白バックの部分）をアウトレット接続してるのはコードで角を丸くするためです。OKボタンには閉じるアクションを割り当ててます。
<img width="６００" alt="3.png" src="https://qiita-image-store.s3.amazonaws.com/0/151314/2a7cca9b-8694-2b5d-f973-9fc6a7c0b273.png">


```swift

// PopupView.swift

import UIKit

class PopupView: UIView {

    @IBOutlet weak var baseView:UIView!
    
    @IBAction func close(_ sender:UIButton) {
        self.removeFromSuperview()
        
    }
}
```

### 4.　実装

###### 今回はviewDidLoad()内に書いてみました。実用するならサブルーチン化して呼び出すのがよいでしょう。ちなみにアルファ(透過度)の設定はインターフェースビルダーからでもできそうですが、そこで設定しちゃうとすべてのオブジェクトに適用されちゃう（継承しちゃう？）のでコードからおこなっています。
 
```swift
    // swift 3.0

    override func viewDidLoad() {
        super.viewDidLoad()
        
        //  カスタムポップアップ
        let popupView:PopupView = UINib(nibName: "PopupView", bundle: nil).instantiate(withOwner: self,options: nil)[0] as! PopupView
        
        // ポップアップビュー背景色（グレーの部分）
        let viewColor = UIColor.black
        // 半透明にして親ビューが見えるように。透過度はお好みで。
        popupView.backgroundColor = viewColor.withAlphaComponent(0.5) 
        // ポップアップビューを画面サイズに合わせる
        popupView.frame = self.view.frame

        // ダイアログ背景色（白の部分）
        let baseViewColor = UIColor.white
        // ちょっとだけ透明にする
        popupView.baseView.backgroundColor = baseViewColor.withAlphaComponent(0.7)
        // 角丸にする
        popupView.baseView.layer.cornerRadius = 8.0
        
        // 貼り付ける
        self.view.addSubview(popupView)


    }
```
Railsでhtml template内のJSON-LDをjbuilderを使って楽に書く

例えばslim, jbuilder環境だとして

```
$ tree app/views
app/views
├── users
│   └── show.html.slim
└── schemas
    └── person.json.jbuilder
```

というファイル構成の場合に

```slim:users/show.html.slim
script type="application/ld+json"
  /escapeされてしまうので、`==`でraw出力
  == render partial: 'schemas/person.json', locals: { name: 'damele0n' }
```

```jbuilder:schemas/person.json.jbuilder
# json.@contextのようには記述できないので、`set!`を用いてSymbolで指定する
json.set! :@context, 'http://schema.org/'
json.set! :@type, 'Person'
json.name name
```

のように、partial templateとしてjbuilderで記述したtemplateを呼び込むとある程度楽に記述できる。

---

※script内でraw出力しているので、間違った指定やtemplateをrenderすると簡単にXSSを起こせるので注意すること
GitHubでREADME.mdに手軽に画像を使用したい

# 1. リポジトリからIssuesタブを開いて、新規Issueを作成する。

<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151736/90cd11c9-a699-6aca-f806-4524a3a60429.png">
<img width="400" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151736/63964bcc-7424-6dbc-a026-aeab21f6d3dd.png">


# 2. 画像をドロップする
<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151736/99f6bcd6-e33f-7448-af4f-12c9f1ad6500.png">


# 3. 画像URLが生成されるので、コピーしてREADME.mdにペーストします。終わり。
<img width="800" src="https://qiita-image-store.s3.ap-northeast-1.amazonaws.com/0/151736/d3c76d29-ba7f-7dc0-feba-cbc9504f7f79.png">
Windows.Web.Http.HttpClientの認証ダイアログを抑制する。

Windows.Web.Http.HttpClientでBasic認証に失敗したときにダイアログが出てきて面食らったので。

```csharp
var client = new HttpClient();
var req = new HttpRequestMessage(HttpMethod.Post, new Uri("https://hoge.hoge/hoge"));
req.Headers.Authorization = new HttpCredentialsHeaderValue("Basic", CredentialString);

var responese = await client.SendRequestAsync(req);
```

みたいなコードで認証に失敗すると、認証ダイアログが出る。
![AuthDialog.PNG](https://qiita-image-store.s3.amazonaws.com/0/46063/38bf6f3f-b9a1-eb15-3b2f-134246bf08ad.png)

HttpBaseProtocolFilterクラスのAllowUIプロパティをfalseにして、HttpClientのコンストラクタに渡せばOK。

```csharp
var filter = new HttpBaseProtocolFilter();
filter.AllowUI = false;
var client = new HttpClient(filter);
```
Ruby | エンコーディングを指定してBOM付きファイルを作る

# 解決: こうだ！

例: BOM 付き `UTF16-LE` の CSVファイル の場合。

```rb
File.open('example.csv', 'w:UTF-16LE') do |f|
  f.write "\uFEFF"
  f.write "あ\tい\tう\tえ\tお"
end
```

## エンコードの確認

linux の `file` コマンドでエンコードが分かる。

```bash
$ file example.csv
example.csv: Little-endian UTF-16 Unicode text, with no line terminators
```


## 中身の確認

`more` で中身を見てみる。

```
$ more example.csv
<FF><FE>B0      ^@D0    ^@F0    ^@H0    ^@J0
```

## エクセルで確認

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/c3b53c8a-4c62-cafc-d8df-be1f5cf5d670.png)

# 以下、失敗例

## 改行を入れてしまった

puts だと二行に分けた時に改行が入ってしまう。

```rb
File.open('example.csv', 'w:UTF-16LE') do |f|
  f.puts "\uFEFF"
  f.puts "あ\tい\tう\tえ\tお"
end
```

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/0ef45aa8-b983-6aa1-732f-b8c3f926a0a2.png)

## BOM をシングルクォートで囲ってしまった

```rb
File.open('example.csv', 'w:UTF-16LE') do |f|
  f.write "\uFEFF"
  f.write "あ\tい\tう\tえ\tお"
end
```

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/cf1c975d-a89c-cdf9-cec3-e137663f9c33.png)

## BOM の指定間違え

Wikipediaを参考にしてみたが、`"\xFF\xFE"`　って書くとダメっぽい。(まだよく分かっていない)

![image](https://qiita-image-store.s3.amazonaws.com/0/89618/f343034f-04aa-5c00-8b9d-5d127d602988.png)

```rb

File.open('example.csv', 'w:UTF-16LE') do |f|
  bom = %w(FF FE).map { |e| e.hex.chr }.join # => "\xFF\xFE"
  f.write bomf
  f.write "あ\tい\tう\tえ\tお"
end

# => Encoding::UndefinedConversionError: "\xFF" from ASCII-8BIT to UTF-8
```

## コンソールでの確認

`cat` とか `head` コマンドだと、中身にもBOMが文字化けして見えてしまい、うまく作れていないと思いこんでいた。
( `more` / `less` だといい感じだった )

```
$ cat example.csv
��B0	D0	F0	H0	J0% 
```

```
$ head example.csv
��B0	D0	F0	H0	J0%
```

# 備考

- ここにたどり着くまでけっこう長かった。


# 環境

- ruby 2.3.1
- Max OS X El Capitan








<!-- Update From Qiita API -->

# チャットメンバー募集


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

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





# Twitter


https://twitter.com/YumaInaura


<!-- Update From Qiita API -->
爆速：Node.jsでローカルホストからjsonデータをGETする方法


使用 PCはmacです。

## Node.jsのインストール


1. [Node.js公式サイト]http://nodejs.jp/nodejs.org_ja/
上記URLから手順に従いインストールしていきます。

</n>
2.  ターミナルを開きます。

```
$ node -v
```

v0.11.11　verの数が表示されていたらOK

## Expressの設定

Express は、Web アプリケーションとモバイル・アプリケーション向けの一連の堅固な機能を提供する最小限で柔軟な Node.js Web アプリケーション・フレームワークです。
詳しくはhttp://expressjs.com/ja/

それではExpressを設定しましょう。
以下のコマンドを打ちます。

```
$ mkdir test
$ ls
```
testフォルダがあることを確認しましょう。

```
$ cd test
$ npm init
# 情報を入力する(とりあえずEnterでOK)
$ ls
```
testディレクトリの階層に進み、package.jsonファイルが作成されたことを確認しましょう。

```
$ npm install express --save
$ ls
```
node_modulesフォルダがあることを確認しましょう。
Expressアプリの基礎が出来上がります。
![参考画像1.png](https://qiita-image-store.s3.amazonaws.com/0/143374/91df0c8a-70af-edd1-4c9b-20b0162924e6.png "参考画像1.png")

## APIの作成

1. app.jsファイルの作成
ファイル名は任意でOKです。

```
$ touch app.js
$ ls
```
app.jsファイルがあることを確認しましょう。


2. 処理の実装

説明は省いているので気になる方は下記の方が詳しく丁寧に書いているので要チェック。
http://qiita.com/nkjm/items/723990c518acfee6e473


```app.js
/* 1. expressモジュールをロードし、インスタンス化してappに代入。*/
var express = require("express");
var app = express();

/* 2. listen()メソッドを実行して3000番ポートで待ち受け。*/
var server = app.listen(3000, function(){
    console.log("Node.js is listening to PORT:" + server.address().port);
});

/* 3. 以後、アプリケーション固有の処理 */

// サンプルデータ jsonデータを書く
// ここを変更するだけで大丈夫だよ！！
var apiSample = [
    {
        id: "1",
        name: "yamada",
        sex: "men",
        age: 19,
    },{
        id: "2",
        name: "suzuki",
        sex: "men",
        age: 27,
    }
]

// 取得するAPI
// http://localhost:3000/api
app.get("/api", function(req, res, next){
    res.json(apiSample);
});

```

## APIの取得
testフォルダの階層にいることを確認ます。

```
$ node app.js
# Node.js is listening to PORT:3000(これが返ってくるとOK)
```

ブラウザで下記URLを検索
http://localhost:3000/api


```
[{"id":"1","name":"yamada","sex":"men","age":19},{"id":"2","name":"suzuki","sex":"men","age":27}]
```
app.jsで実装した値が帰ってきます(ↂↄ̫ↂ)
これをjson parserで見てみると正常なJSONデータになっていました！！<( ΄ ^◞౪◟^ ` )>
http://json.parser.online.fr/
![参考画像2.png](https://qiita-image-store.s3.amazonaws.com/0/143374/037530c1-8f0c-8103-ec81-121a7fc7b9be.png "参考画像2.png")

#### 最後にローカルホストを切断する

ターミナルでcontrol + c を入力すると切断されます。






## 参考URL
http://www.tettori.net/post/293/
http://qiita.com/nkjm/items/723990c518acfee6e473
defragTreesがよさそう

ちゃお……†

今回はdefragTreesという機械学習ライブラリを紹介します。

# defragTreesとは
RandomForestやXGBoostなどに対して、できるだけ精度やカバレッジを下げないようにしつつ、モデルをシンプルに(ルールを減らす)表現する手法を使ったライブラリです。
ルールが少ないので人間が見たときのわかりやすさがあります。
<img width="479" alt="cap 2016-11-29 0.47.38.png" src="https://qiita-image-store.s3.amazonaws.com/0/48207/51e9cfcc-8709-8b29-89eb-fc314a3d6b0b.png">
たとえば、元はシンプルなデータ(Figure 1 の a)でもアンサンブル学習すると無駄に複雑になってしまうことがあります (Figure 1 の b)。そこで、defragTreesを使うとオリジナルと同じようなシンプルさになります (Figure 1 の c)。

- コード: https://github.com/sato9hara/defragTrees
- 論文: https://arxiv.org/abs/1606.09066

# 使い方
```py3

from defragTrees import DefragModel

Kmax = 10 # uppder-bound number of rules to be fitted
mdl = DefragModel(modeltype='regression') # change to 'classification' if necessary.
mdl.fit(y, X, splitter, Kmax)
```
`splitter`としてRのRandomForest, XGBoostやscikit-learnのデータが使えます。

## scikit-learnでirisを分類してdefragしてみる

```py3
from sklearn.datasets import load_iris
from sklearn.ensemble import GradientBoostingClassifier
from defragTrees import DefragModel

iris = load_iris()
tree = GradientBoostingClassifier()
tree.fit(iris.data, iris.target)

splitter = DefragModel.parseSLtrees(tree)
mdl = DefragModel(modeltype='classification')
mdl.fit(iris.target, iris.data, splitter, 10, fittype='FAB')
```
ここで`print(mdl)`するとルールを見ることができます。

```
[Rule  1]
y = 0 when
	 x_4 < 0.800000

[Rule  2]
y = 1 when
	 x_2 < 3.150000
	 x_3 < 4.750000
	 x_4 >= 0.800000

[Rule  3]
y = 2 when
	 x_1 >= 4.950000
	 x_3 >= 3.900000
	 x_4 >= 1.350000

[Otherwise]
y = 0
```

シンプルなルールでirisを分類できることがわかりました。
React Native と Firebase のビギナーズ ガイド の拡張

「React Native と Firebase のビギナーズ ガイド（2016年8月8日月曜日）」を参考にアプリを作成しています。元々は食料品リストの追加・削除・一覧のCRUDの事例です。

これをイベント管理用に仕上げています。１画面はイベント一覧です。イベントを選択して予約します。
２画面目は、予約一覧です。問題は、２画面目が空白で受け渡っていないようです。
以下、処理概要ですが、何か分かりましたらお知らせ下さい。

DBのクラスは、
イベント用クラス（イベント名、、、）
予約用クラス（ユーザー毎に予約一覧を作るため）

１画面はイベント一覧でのFirebase database処理概要
'
    this.itemsRef = this.getRef().child('items’);　イベント一覧用参照ポインタ
    this.userRef = this.getRef().child('user’);　　予約一覧用参照ポインタ

　　　　getRef() {return firebaseApp.database().ref();}

  var user = firebase.auth().currentUser;　　ユーザーアカント取得
  this.setState({user: user});　render用に設定

render部
　　　　mail=this.state.user.email;
  console.log('mail = '  + mail);
  mail=mail.substring(0,mail.indexOf("@"));
  this.userRef = firebaseApp.database().ref('user/' + mail);
  this.userRef.push(new User(event,password,user);
これで以下のDBが作成されます。
rera06x
*
 -KXih12q_2XE24UQ6S7p
    *
 event: 
    *
 password: 
    *
 user
        *
 _key: 
        *
 title: 
*
 -KXih_ZHuf12YujhC0Bl
    *
 event
        *
 _key: 
        *
 title: 
    *
 password
        *
 _key: 
        *
 title: 
    *
 user
        *
 _key: 
        *
 title: 
*
 -KXikRGmj9LTENY3yBDr
    *
 event
        *
 _key: 
        *
 title: 
    *
 password
        *
 _key: 
        *
 title: 
    *
 user
        *
 _key: 
        *
 title: 

２画面は予約一覧でのFirebase database処理概要
　　　　var user = firebase.auth().currentUser;　同じようにユーザー取得

　　　componentDidMount() {
　　　this.listenForItems(this.userRef);

  this.userRef = firebaseApp.database().ref('user/' + mail);

　　　　listenForItems(userRef) {　　　　　　　此所で、予約一覧取得
  userRef.on('value', (snap) => {　　　　★★★★★★★★★★★★★これで入れば、renderできるはず
      // get children as an array
  var user = [];
  snap.forEach((child) => {
  user.push({
      event: child.val().event,
      _key: child.key
        });
      });
    
 this.setState({
        dataSource: this.state.dataSource.cloneWithRows(user)
      });
    });
  }

render() {
    return (
<ListView
          dataSource={this.state.dataSource}
          renderRow={this._renderItem.bind(this)}
          enableEmptySections={true}
          style={styles.listview}/>
省略
_renderItem(user) {
    const onPress = () => {
      Alert.alert(
        '受付登録',
        null,
        [
          {text: '受付登録', onPress: (user) =>　uketukeExec },
          {text: 'Cancel', onPress: (user) => console.log('Cancelled')}
        ]
      );
    };
    return (
      <ListItem1 item={user} onPress={onPress} />　★★★★★★★★★★★
    );
  }
}

class ListItem1 extends Component {
　　　　render() {
  return (
  <TouchableHighlight onPress={this.props.onPress}>
  <View style={styles.li}>
  <Text style={styles.liText}>{this.props.item.event}</Text>　これが空白になる。
          </View>
  </TouchableHighlight>
省略

'
python+OpenCVでエッジ抽出(Sobelフィルタ、ラプラシアンフィルタ)

微分フィルタの求め方、基礎
http://qiita.com/shim0mura/items/5d3cbef873f2dd81d82c

OpenCVはSobelフィルタとラプラシアンフィルタをかける機能がある。

## Sobelフィルタ

`cv2.Sobel(src, ddepth, dx, dy[, dst[, ksize[, scale[, delta[, borderType]]]]]) → dst`
http://docs.opencv.org/3.0-last-rst/modules/imgproc/doc/filtering.html?highlight=laplacian#sobel

- src: 入力画像
- dst: 出力画像
- ddepth: 出力の色深度
- dx: x方向の微分の次数
- dy: y方向の微分の次数
- ksize: カーネルサイズ、1, 3, 5, 7のどれかを指定

カーネルサイズが1の時は1x3のカーネルか3x1のカーネルを使うよと書いてあるけど、k=5,7の場合はどうなるんだろうと思うとこんな感じになるらしい。
http://stackoverflow.com/questions/9567882/sobel-filter-kernel-of-large-size

```python
import cv2
from matplotlib import pyplot as plt

img = cv2.imread('Lenna.jpg', 0)

sobelx = cv2.Sobel(img, cv2.CV_32F, 1, 0, ksize=3)
sobely = cv2.Sobel(img, cv2.CV_32F, 0, 1, ksize=3)
sobelx5 = cv2.Sobel(img, cv2.CV_32F, 1, 0, ksize=5)
sobely5 = cv2.Sobel(img, cv2.CV_32F, 0, 1, ksize=5)

plt.subplot(2,2,1),plt.imshow(sobelx,cmap = 'gray')
plt.title('Sobel X k=3'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,2),plt.imshow(sobely,cmap = 'gray')
plt.title('Sobel Y k=3'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,3),plt.imshow(sobelx5,cmap = 'gray')
plt.title('Sobel X k=5'), plt.xticks([]), plt.yticks([])
plt.subplot(2,2,4),plt.imshow(sobely5,cmap = 'gray')
plt.title('Sobel Y k=5'), plt.xticks([]), plt.yticks([])
plt.show()
```

結果：
<img width="400" alt="スクリーンショット 2016-11-29 15.59.30.png" src="https://qiita-image-store.s3.amazonaws.com/0/2164/029af130-0047-c95f-728b-10b0cded5019.png">

k=3のときよりk=5のほうが線が濃くなってぼかしが強くなっている。

## ラプラシアンフィルタ

`cv2.Laplacian(src, ddepth[, dst[, ksize[, scale[, delta[, borderType]]]]]) → dst`
http://docs.opencv.org/3.0-last-rst/modules/imgproc/doc/filtering.html?highlight=laplacian#laplacian

- src: 入力画像
- dst: 出力画像
- ddepth: 出力の色深度
- ksize: カーネルサイズ

ラプラシアンなので1次微分のものと違って方向の指定はいらない。

```python
import cv2
from matplotlib import pyplot as plt

lap = cv2.Laplacian(img, cv2.CV_32F)
lap5 = cv2.Laplacian(img, cv2.CV_32F,ksize=3)

plt.subplot(1,2,1),plt.imshow(lap,cmap = 'gray')
plt.title('Laplacian'), plt.xticks([]), plt.yticks([])
plt.subplot(1,2,2),plt.imshow(lap5,cmap = 'gray')
plt.title('Laplacian k=3'), plt.xticks([]), plt.yticks([])

plt.show()

```

結果：
<img width="400" alt="スクリーンショット 2016-11-29 16.25.00.png" src="https://qiita-image-store.s3.amazonaws.com/0/2164/c7bdbc43-2484-7c10-f9c7-5513a7334f93.png">


参考:

ディジタル画像処理(https://www.cgarts.or.jp/book/img_engineer/)
http://labs.eecs.tottori-u.ac.jp/sd/Member/oyamada/OpenCV/html/py_tutorials/py_imgproc/py_gradients/py_gradients.html#gradients
http://qiita.com/supersaiakujin/items/494cc16836738b5394c8
CentOSで簡易なトラフィックモニタ

こんにちは。

少し前にSDN/NFV基盤上で基盤そのものや仮想ロードバランサを試す機会があり、トラフィックが中継・バランスされている様子をキャプチャするだけだと面白くないなと思い、あくまで「眺める用」ですが、CentOS6.x上で簡単なトラフィックモニタを製作してみました。

実は/sys/class/netの下にあるインタフェースの統計情報のファイル（テキスト）を毎秒参照してncursesで画面更新しているだけなのですが、実際トラフィックを流すとそれなりにモニタできている（トラフィックが流れている感がある）ので面白いです。

# 見ているファイル

このあたりのファイルを見ています。他にもコリジョン数とかいろいろあるのでディレクトリを覗いてみるとよいと思います。
"eth0"としている箇所はお使いのインタフェース名で読み替えてください。
これらのファイルには単にパケット数やバイト数といった数値が格納されています。

```
/sys/class/net/eth0/statistics/rx_packets
/sys/class/net/eth0/statistics/rx_bytes
/sys/class/net/eth0/statistics/rx_errors
/sys/class/net/eth0/statistics/rx_dropped
/sys/class/net/eth0/statistics/tx_packets
/sys/class/net/eth0/statistics/tx_bytes
/sys/class/net/eth0/statistics/tx_errors
/sys/class/net/eth0/statistics/tx_dropped
```

# こんな感じ

OpenStackのHorizonからコンソールで見る想定でncursesを使ったので「いまどき風」ではないですが。

![monitor_screen_shot.png](https://qiita-image-store.s3.amazonaws.com/0/150030/c53eb5ac-f856-f6a0-c011-b1916cb939b7.png)

# [おまけ]L2 transparent

本題とそれますが、NFV基盤上の試験のためL2トランスペアレントなVNF(Virtual Network Function)の疑似をしたいと思い、このモニタを動かすLinux上で左右のインタフェースをLinuxブリッジでつないだので、叩いたコマンドを備忘録的に書き留めます。
下記の"brvnf"はブリッジ名で任意です。下例では[eth1-brvnf-eth2]とつなぎ、トランスペアレント動作をさせています。

```
  brctl addbr brvnf
  brctl addif brvnf eth1
  brctl addif brvnf eth2
  ifconfig brvnf up
```

# まとめ

一見実装が面倒そうなトラフィックモニタですが、Linux上であればこれらのファイルを参照し簡易に行うことができます。
プレーンテキストなのでシェルスクリプト等でも簡単に扱えますね。

ソース全体は[ここ(github)](https://github.com/msozawa/simple-tools/tree/master/simple_tra_mon)に上げてありますので興味のある方はご自由にお取りください。

それでは。
リアルタイム分析ツールZoomDataについて

最近注目しているリアルタイム分析ツール"ZoomData"についてご紹介します。

# ZoomDataとは？
ZoondDataはUS生まれのリアルタイム分析ツールです。ひとえに分析系のツールといっても様々なツールが存在しますが、ZoomDataはビジネスインテリジェンス（BI）系に位置づけられるツールになります。大量データのリアルタイム処理を得意とする特徴から今後BigData分野で注目される可能性があります。プロプライエタリなツールですが60日間はトライアルで利用できます。

[ZoomData公式サイト](http://www.zoomdata.com/)

デモでイメージをつかむこともできます。

[デモ](http://www.zoomdata.com/free-trial/)

# 適用領域
USでは金融機関などで使われ始めているようです。カードの不正利用検出や在庫管理といった即時性が求められる分野にフィットするようです。ただしセンサーや株価など超即時性を問われる場合には合わない可能性があります。先ほどリアルタイム分析ツールと紹介しましたが、正確には"ニア"リアルタイム処理になる為です。

# 仕組み
ZoomDataサーバから外部DBのデータを参照します。一定期間のデータがZoomDataサーバ内にキャッシュされます。オリジナルのデータを変更することはありませんが、参照されている間はDBに負荷がかかる点が注意です。大量のデータ処理の為に裏ではApache Sparkが動いています。

# 豊富なデータソース
特徴として豊富なデータソースへの対応が挙げられます。

- Aurora
- Cloudera Search
- Elastic Search
- Flat File（CSVファイルなど）
- Google Analytics
- HDFS
- Hive On Tez
- Impala
- Kinesis
- Marketo
- Mem SQL
- MongoDB
- MySQL
- Oracle
- Phoenix
- PostgreSQL
- Redshift
- S3
- SQL Server
- Salesforce
- SendGrid
- Solr
- Spark SQL
- Twitter
- Upload API（ユーザが自分で定義）
- Zendesk

# 使い始めるまで
ZoomDataはオンプレ版とクラウド版が用意されています。オンプレ用のZoomDataはLinuxパッケージで提供されます（Ubuntu or CentOS）。ZoomData用のサーバを構築して、そこに対してブラウザでアクセスする使い方になります。バージョン2.3からはスクリプトを実行するだけで簡単にインストールできるようになりました。

次回はオンプレ環境にインストールしてみたいと思います。
PythonでRESTを叩きNew Relicからデータを取得する

こんにちは。

Pythonのrequestsライブラリを使ってRESTクライアントを作成し、New Relicから情報を取り出すスクリプト例です。
と言っても、一般的なRESTクライアントなので参考になる方は少ないかもしれません。。

# 1. 必要なもの

- python実行環境（筆者の環境は2.7.12）

```
[ec2-user@xxx ~]$ python --version
Python 2.7.12
```

- pythonのrequestsライブラリ（以下コマンドでインストール）

```
[ec2-user@xxx ~]$　pip install requests
```

- New Relicで監視しているなにか（今回はPythonアプリケーション）

# 2. サンプルコード

エラーハンドリング等諸々端折っていますので、適宜必要に応じ追加してください。

```python
#! /usr/bin/env python
# -*- coding: utf-8 -*-

import requests

# def getAppInfo( sApiKey, sAppID ):
def getAppInfo( sApiKey ):

    sURL = "https://api.newrelic.com/v2/applications.json"
    sHeaders = { 'X-Api-Key': sApiKey }

    stRes = requests.get( sURL, headers=sHeaders )
    # stData = stRes.json()

    return stRes


if __name__ == '__main__':

    sApiKey = "{API Key}"
    # sAppID = "{Application ID}"

    # stRes = getAppInfo( sApiKey, sAppID )
    stRes = getAppInfo( sApiKey )

    print stRes.text
```

# 3. 実行結果

requestsのgetメソッドの実行結果のテキストをそのまま出しているだけの単純なつくりのため、mjson.toolで整形して表示させています。

![apm_gray_status.png](https://qiita-image-store.s3.amazonaws.com/0/150030/de7af908-f6a9-aa67-24db-541b4f6129d3.png)

```json
{
    "applications": [
        {
            "health_status": "gray",
            "id": 12345678,
            "language": "python",
                  中略
            "name": "Python Agent Test",
            "reporting": false,
            "settings": {
                "app_apdex_threshold": 0.5,
                "enable_real_user_monitoring": true,
                "end_user_apdex_threshold": 7.0,
                "use_server_side_config": false
            }
        }
    ],
    "links": {
        中略
    }
}
```

１つしかアプリケーションがなく状態もヘルシーでない(gray)のであまりいい例ではないですが、アプリケーションの情報を取得できていることがわかります。
他のNew Relic APIもこれの応用で同じように叩くことができます。

なお、[このようなライブラリ](https://pypi.python.org/pypi/newrelic-api)もあるようで、より楽にRESTクライアントの実装ができそうです。この辺りも試したら記事にしたいと思います。

それでは。
Visual Studio 2015 のイミディエイトウィンドウで改行を含む String がシリアライズされてしまう

## 問題

VS2008 から VS2015 に乗りかえた際に以下のような問題がでました。

VS2008 では...

```vbnet
Dim varName As String = "foo" & vbCrLf & "bar"
```

... として、イミディエイトウィンドウで...

```console
? varName
```

... とすると、ちゃんと...

```console:出力例(1).VS2008の場合
foo
bar
```

...と表示してくれたのですが、VS2015 から...

```console:出力例(2).VS2015の場合
"foo" & vbCrLf & "bar"
```

...のように、シリアライズ（？）されて出力されてしまいます。

文字列変数に格納した SQL をデバッグしたい時など不便です。

## 解決

出力例(1)のようにするには、以下のようにイミディエイトウィンドウに入力します。

```console
? System.Diagnostics.Debug.Print(varName)
```
[WIP] わずか8ドルのRaspberryPi互換機 NanoPiNEO でSPI接続のDAコンバータを使う [書きかけ]


相変わらず煽ってますがラズパイと一部ピンコンパチなだけです。斧を投げないでください・・・

例のごとくNanoPi NEOの情報は探してもあんまり見つからないです。
そこで、同じSoC（Allwinner H3）を搭載しているOrangePiの名でぐぐります。

インストラクタブルにOrangePiでSPI接続のADCを使う説明があがってたのでこれを見てみます。

http://www.instructables.com/id/Orange-Pi-One-Analog-Devices-Using-MCP3008-Via-SPI/

SPI-Pyが使えるようです。

https://github.com/lthiery/SPI-Py

続く...
New RelicのAPMとINFRASTRUCTUREを使って監視してみました（前半）

# はじめに
AWS上にWordPressサーバを構築する機会があったので、New Relicで監視してみました。

簡単にNew Relicを説明すると、パフォーマンスをモニタリングするSaaSサービスになり
2016年11月21日の段階で下記7種類のサービスを提供しています。
(ServersはInfrastructureに統合されなくなったようです）

| 機能 | 説明 |
|:---|:---|
|APM|アプリケーション性能監視|
|BROWSER|ブラウザアプリケーション監視|
|SYNTHETICS|URL外形監視|
|MOBILE|ネイティブアプリケーション監視|
|PLUGINS|外部モジュール監視|
|INSIGHTS|カスタムダッシュボード＆多元分析|
|INFRASTRUCTURE|サーバリソース監視|

今回はWordPressのパフォーマンス監視にAPM（前半）、サーバのリソース監視にINFRASTRUCTURE（後半）を使用する方法について紹介したいと思います。

# APMのインストール方法

## New Relicサイトにログイン
まずは[New Relicサイト](https://newrelic.com/)に行きログインします。
（アカウントない方は、無料ですので"Sign UP"で作成してください）
　
## PHP Agentの入手と設定
　
**1. APM Agetの選択**
APMを選択すると、言語選択画面が泡われるのでPHPを選択します
![1.jpg](https://qiita-image-store.s3.amazonaws.com/0/150422/c663890b-cbad-a6c5-5e6f-3acda4005929.jpeg)

　 
**2. ライセンスキーの表示**
Agentの入手から設定方法まで表示されるので手順通り実行します。
"Reveal license key"ボタンを押すと、ライセンスキーが表示されます。Agent設定の際に使用するのでコピー又はメモしときます。
![2.jpg](https://qiita-image-store.s3.amazonaws.com/0/150422/4e09c934-0e6c-c001-774b-b16ac7aafb7b.jpeg)

　
**3. Agentをインストールする環境を選択**
AWSにはUbuntuサーバを用意したので、"Debian-based"を選択。
![3.jpg](https://qiita-image-store.s3.amazonaws.com/0/150422/53882d7f-3fe1-dc0c-e9af-192fc05a8aa4.jpeg)

**4. New RelicレポジトリーのKey取得と追加**
`wget -O - https://download.newrelic.com/548C16BF.gpg | sudo apt-key add -`
`sudo sh -c 'echo "deb http://apt.newrelic.com/debian/ newrelic non-free" > /etc/apt/sources.list.d/newrelic.list'`

**5. Agentインストール**
`sudo apt-get update`
`sudo apt-get install newrelic-php5`

・ライセンスの設定
debconfでライセンスキーの入力画面が表示されるので、先ほどコピーしたライセンスキーを入力します。
![4.jpg](https://qiita-image-store.s3.amazonaws.com/0/150422/5de40ba4-2b68-cc7c-c997-e9aecfe1b128.jpeg)

・アプリケーション名の設定
debconfでAPMで表示されるアプリケーション名の入力画面が表示されるので、"WordPress App"などわかりやすい名前に変更します。（デフォルト名はPHP Application ）
![5.jpg](https://qiita-image-store.s3.amazonaws.com/0/150422/12ec825d-53b5-ba40-abb2-25118d0d209e.jpeg)

再設定した場合は、 
`sudo dpkg-reconfigure newrelic-php5`

手動設定ファイルを変更する場合は、
`sudo vim /etc/php/7.0/mods-available/newrelic.ini`

**6. 設定ファイルの編集**

下記コマンドで設定ファイルをコピー
`sudo newrelic-install install`

ライセンスキーの入力画面が表示されるので、先ほどコピーしたライセンスキーを入力します。
![6.jpg](https://qiita-image-store.s3.amazonaws.com/0/150422/bbff92fc-2232-5f20-d970-7e7295a449f5.jpeg)

設定ファイルをがコピーされるので、アプリケーション名を変更する為に
下記DSOの設定を編集します。

DSO (Dynamic Shared Object)
`sudo vim /etc/php/7.0/apache2/conf.d/newrelic.ini`

修正前
>newrelic.appname = "PHP Application"

修正後
>newrelic.appname = "WordPress APP"`



**7. PHPサービスの再起動**
httpd,nginx,php-fpmなどのサービスとnewrelic-daemonを再起動します。
今回はApacheを使用したので下記方法にて再起動。
`sudo systemctl restart apache2`
`sudo service newrelic-daemon restart`


**8. APMで確認**
New Relicはアクセスがないとメトリック情報をアップデートしないため、確認のためWordPressにアクセスします。反映には約5分程度必要なので、じっと待ちます。

APMを確認すると正常に監視できている事を確認できました。
![7.jpg](https://qiita-image-store.s3.amazonaws.com/0/150422/aa90418b-f26d-c13c-5c7f-8ee7185593af.jpeg)

後半では[INFRASTRUCTUREのインストール方法](http://qiita.com/KUROPON/items/c5a6e0aff2fd8b850da0)について紹介したいと思います。
備忘録 - Bash on Ubuntu on Windows

備忘録なので今後いろいろ追加していく（と思われる）。

# ~/.bashrc

## プロンプトの設定

フォーマットはお好みで（検索すると出てくるので詳細は割愛）。
私は下記な感じ。

```
export PS1="[\d \t \W]\\$ "
```

実際の表示はこんな感じ。

```
[Tue Nov 29 18:01:22 ~]#
```

yyyy/MM/dd にする方法無いのかしら。
コメント募集中。

## プロキシの設定

環境変数へセットする（大抵これでなんとかなる）。

認証有り

```
export http_proxy=http://<ProxyUser>:<ProxyPassword>@<ProxyFQDN>:<ProxyPort>
export https_proxy=http://<ProxyUser>:<ProxyPassword>@<ProxyFQDN>:<ProxyPort>
```

認証無し

```
export http_proxy=http://<ProxyFQDN>:<ProxyPort>
export https_proxy=http://<ProxyFQDN>:<ProxyPort>
```

# ~/.curlrc

## curl コマンドに対するプロキシ設定

curl さんは環境変数を読みに行かないのでホームディレクトリに作成しましょう。
認証無しなら `proxy-user` は不要。

```
proxy-user = "<ProxyUser>:<ProxyPassword>"
proxy = "<ProxyFQDN>:<ProxyPort>"
```

# ~/.gitconfig

## git に対する各種設定

git さんのインストール後にやりましょう。
`git config` でできるけど、config 弄った方が早いし楽だよね。
私の備忘録なので内容は各自お好みで。
proxy 認証無しの場合は、.bashrc の書きっぷりを参考に。

```
[http]
        proxy = http://<ProxyUser>:<ProxyPassword>@<ProxyFQDN>:<ProxyPort>
[user]
        name = <GitUserName>
        email = <GitUserMailAddress>
[core]
        editor = vim -c \"set fenc=utf-8\"
        quotepath = false
[color]
        diff = auto
        status = auto
        branch = auto
[push]
        default = simple
```
TeamPassのitem一覧でdescriptionのトリミングがマルチバイトを理解しない問題の対策

TeamPass というパスワード管理ツールがあるのですが、項目一覧で説明(description)のところを30文字に切り詰める処理がマルチバイト理解しないので、変なところで切り詰められてしまいます。

とりあえず substr() を mb_substr() に変更することで回避しました。
できれば文字幅を考慮すべきですが、実害がないのでマルチバイトでも30文字のままにしています。

~~~
sources/items.queries.php- sources/items.queries.php
--- sources/items.queries.php-	2016-08-16 05:03:17.000000000 +0900
+++ sources/items.queries.php	2016-11-29 17:53:16.128242854 +0900
@@ -314,7 +314,7 @@
                 '&nbsp;<a id="fileclass'.$newID.'" class="file" onclick="AfficherDetailsItem(\''.$newID.'\', \'0\', \'\', \'\', \'\', \'\', \'\')" ondblclick="AfficherDetailsItem(\''.$newID.'\', \'0\', \'\', \'\', \'\', true, \'\')">' .
                 stripslashes($dataReceived['label']);
                 if (!empty($dataReceived['description']) && isset($_SESSION['settings']['show_description']) && $_SESSION['settings']['show_description'] == 1) {
-                    $html .= '&nbsp;<font size=2px>['.strip_tags(stripslashes(substr(cleanString($dataReceived['description']), 0, 30))).']</font>';
+                    $html .= '&nbsp;<font size=2px>['.strip_tags(stripslashes(mb_substr(cleanString($dataReceived['description']), 0, 30))).']</font>';
                 }
                 $html .= '</a><span style="float:right;margin:2px 10px 0px 0px;">';
                 // mini icon for collab
@@ -1955,9 +1955,9 @@
                         if (!empty($record['description']) && isset($_SESSION['settings']['show_description']) && $_SESSION['settings']['show_description'] == 1) {
                             $tempo = explode("<br />", $record['description']);
                             if (count($tempo) == 1) {
-                                $html .= '&nbsp;<font size="2px">['.strip_tags(stripslashes(substr(cleanString($record['description']), 0, 30))).']</font>';
+                                $html .= '&nbsp;<font size="2px">['.strip_tags(stripslashes(mb_substr(cleanString($record['description']), 0, 30))).']</font>';
                             } else {
-                                $html .= '&nbsp;<font size="2px">['.strip_tags(stripslashes(substr(cleanString($tempo[0]), 0, 30))).']</font>';
+                                $html .= '&nbsp;<font size="2px">['.strip_tags(stripslashes(mb_substr(cleanString($tempo[0]), 0, 30))).']</font>';
                             }
                         }
                         $html .= '</a>';
~~~
C++ Builder XE4 > IDE > ボタンのフォームへの配置方法 3つ

```txt:動作確認
C++ Builder XE4
```

TButtonコンポーネントのフォームへの配置方法は以下のようなものがある。

前準備: 「ツールパレット」においてキーワード検索用ボックス(?)にて「button」と入力しておく。TButtonが選択された状態になる。

### 1. ドラッグ

TButtonをドラッグして、フォームにドロップする。

- デフォルトのサイズのボタンが生成される
- 時々、よく分からない位置にボタンが生成される
   - そして探すのが面倒になるので、そっとフォームを閉じて、「なかったこと」にしたりする

### 2. ダブルクリックもしくはEnter

TButtonをダブルクリックする。
TButtonが選択された状態で、Enterキーを押下でもいい。

- デフォルトのサイズのボタンが生成される
- 生成場所はだいたいフォームの中心
   - フォームにフォーカスがある場合
   - ボタンがすでに中心にあれば、ずれた位置に生成されるようだ

- 欠点: 中心にTRichEditなどがあると、TLabel生成時はTRichEditの裏に行ってしまう。TButtonの場合はTRichEditの全面に出るので問題ない。

### 3. サイズ(領域?)選択

TButtonを選択状態にしておく。
フォーム上にてマウス左クリックしたまま、右下に動かして、マウス左クリックをリリースする。

- 任意のサイズのボタンが生成される
- 生成場所はマウスで動かした領域となる
   - 行方不明になりにくい（気がする)

こちらの方法は、今日偶然見つけた。

指定した位置にきちんと生成されるのが良い点、ボタンのサイズが毎回変わってしまうのは難点か。

### どれを使うか。

「2. ダブルクリックもしくはEnter」が以下の点でいいような気がする。

- 生成ボタンが迷子になりにくい
   - フォームにフォーカスを合わせておくと、フォームの中心になる
- デフォルトサイズになる


ボタン生成で行方不明になる、ということをこれまで20回ほどしたので、調べた。