OmniAICreator/Qiita-1.07M huggingface dataset:
古いPC上にVirtualboxのテスト環境を作ってみたらハマった

# はじめに
古いPCにvirtualBox 環境を作ろうとしたらいろいろハマったというお話。

## 構築準備
必要な部品を揃えます。

- VirtualBox+vagrant（CentOS)

### VirtulBox
下記からダウンロード

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

### vagrant
下記からダウンロード

[Vagrant](https://www.vagrantup.com/downloads.html)

## 構築開始
windows に仮想マシン関連のファイルが作成されるディレクトリを作成
vagrantを初期化

````
c:\> mkdir vmbox
c:\> cd vmbox

c:\> vagrant init
````

vagrant設定用のファイル (Vagrantfile)が作成されるのでこれを修正

````
# config.vm.box = "base"
config.vm.box = "puphet/centos65-x64"
````

この修正により、centos 6.5がインストールされます
（実はすでにここに落とし穴があった）

````
c:\vmbox> vagrant up
````

ダウンロードされて起動を開始します

## エラー発生
OSの起動をしようとするところでrubyが connection_nonlock というエラーメッセージを出して止まってしまいました。

この vagrant up というコマンドでは、コマンドラインで動いているため、どのような状況になっているのかが分かりません。

が、実は　インストールある　VirtualBox のアプリを起動すればこれを見ることが可能です。



今回の場合、仮想マシンの起動状況を見てみると、そもそもゲストOSが起動していませんでした。インストールに指定した　Centosの　64bit版が　ホストマシンでは起動できないのが原因でした。（どれだけ古いマシンかばれてしまう）

再度インストールするため　下記で　32bit版をさがします

[Vagrant Cloud](https://vagrantcloud.com/)

bento/centos-6.7-i386　というのがありましたのでvagrant設定用のファイル (Vagrantfile)を修正

````
# config.vm.box = "base"
config.vm.box = "bento/centos-6.7-i386"
````

再度、仮想マシンを起動するわけですが、このとき仮想マシンが中途半端に立ち上がった状態になっているのでこれを止めてから　再度起動させます

````
c:\vmbox> vagrant halt

c:\vmbox> vagrant up
````

次に止まったのが ssh の設定を行っているところで下記のエラーで止まってしまいます

````
 default: Warning: Remote connection disconnect. Retrying...
 default: Warning: Remote connection disconnect. Retrying...
C:/HashiCorp/Vagrant/embedded/lib/ruby/2.2.0/socket.rb:60:in `connect_nonblock':Invalid atgument - onnect(2) for 127.0.0.1:2222(Errno::EINVAL)
````
そもそも、接続ができずにリトライを繰り返しています。
これも前述の通り VartualBoxを起動しながら状況を確認。
すると、OSがまだ起動を終わっていないことが分かり愕然。

気長に起動するまで待ったのち、コマンドラインから　ssh の設定を行います。これにより、sshの設定が表示されます


````
c:\vmbox> vagrant ssh

Host: 127.0.0.1
Port: 2222
Username: vagrant
Private key: C:/vmbox/.vagrant/machines/default/virtualbox/private_key

c:\vmbox> 
````

ここまでくれば、CentOS環境での作業になるので問題解決。

# 結局

新しい情報見ながら、古い環境で何か作ろうとするとハマるというおちです
まあ、こんなことにはまる人も少ないと思いますが、せっかく時間を消費したので備忘録として残しておきます。

# 参考
この本を参考に構築しました。

JS+Node.jsによる　Webクローラー/ネットエージェント[開発テクニック]
【俺メモ】CentOS7にMariaDBのインストールまで（そのあとNode.jsや）

っていうか、なんかわからんけど、Node.jsでSqlite3使うパッケージが上手く動かんから、MariaDBに移行や。
（大したもん作ってるわけでもないんやけどなぁ。）

※文字化け対策が甘かったから修正したわ。（5/12）
server.confに"skip-character-set-client-handshake"が無いとNode.jsから呼んだ時に文字化けしたし。

# インストール

## yumリポジトリファイル追加

まずは、yumでインストール出来るようにリポジトリファイルの作成や。
とりあえず、現時点の最新安定版の10.1系を入れるで。

```bash:cmd
$ sudo touch /etc/yum.repos.d/MariaDB.repo
$ echo '[mariadb]' | sudo tee -a /etc/yum.repos.d/MariaDB.repo
$ echo 'name = MariaDB' | sudo tee -a /etc/yum.repos.d/MariaDB.repo
$ echo 'baseurl = http://yum.mariadb.org/10.1/centos7-amd64' | sudo tee -a /etc/yum.repos.d/MariaDB.repo
$ echo 'gpgkey=https://yum.mariadb.org/RPM-GPG-KEY-MariaDB' | sudo tee -a /etc/yum.repos.d/MariaDB.repo
$ echo 'gpgcheck=1' | sudo tee -a /etc/yum.repos.d/MariaDB.repo
```

## MariaDBインストール

んで、インストールな。

```bash:cmd
$ sudo yum install MariaDB-server MariaDB-client -y
```

Galera Clusterをインストールする場合はこっちやで。

```bash:cmd
$ sudo yum install MariaDB-Galera-server MariaDB-client galera -y 
```

# 日本語対応設定

起動前に設定ファイルに追記してUTF8をデフォで使用できるようにするで。

```bash:cmd
$ echo '' | sudo tee -a /usr/share/mysql/my-small.cnf
$ echo '[client]' | sudo tee -a /usr/share/mysql/my-small.cnf
$ echo 'default-character-set = utf8' | sudo tee -a /usr/share/mysql/my-small.cnf
$ echo '' | sudo tee -a /usr/share/mysql/my-small.cnf
$ echo '[mysqld]' | sudo tee -a /usr/share/mysql/my-small.cnf
$ echo 'character-set-server = utf8' | sudo tee -a /usr/share/mysql/my-small.cnf
$ echo 'skip-character-set-client-handshake' | sudo tee -a /usr/share/mysql/my-small.cnf
```

# MariaDB起動

設定ファイルをコピーして起動や。

```bash:cmd
$ sudo cp -p /usr/share/mysql/my-small.cnf /etc/my.cnf.d/server.cnf
$ sudo systemctl enable mariadb
$ sudo systemctl start mariadb
```

# 初期設定

対話式の初期設定やで。
まずはコマンドで設定開始や。

```bash:cmd
$ sudo /usr/bin/mysql_secure_installation
...
```

続いて、問いに答えるで。

```bash:cmd
Enter current password for root (enter for none): {空Enter}
...

Set root password? [Y/n] Y
New password: {パスワード}
Re-enter new password: {パスワード}
...

Remove anonymous users? [Y/n] Y
... Success!

Disallow root login remotely? [Y/n] Y
... Success!

Remove test database and access to it? [Y/n] Y
 - Dropping test database...
... Success!
 - Removing privileges on test database...
... Success!

Reload privilege tables now? [Y/n] Y
... Success!

...
Thanks for using MariaDB!
```

で設定完了な。

# Vagrantでプロビジョニング

今回、インストールに使用したコマンドをVagrantfileにそのまま張り付ければ使えるで。
sshだけでファイル・ディレクトリ転送(scp, sftpなし)

リモートホストとの間でファイルやディレクトリを転送（送信・受信）したいんだけど、何らかの事情でscpやsftpが使えない（or 使いたくない）からsshだけでなんとかしたい、という時の方法。

# まずは結論から
## 送信
ローカルホストにあるファイル `source_dir/source_file` をリモートホストの `destination_dir` に転送するには:

    tar czf - -C source_dir source_file | ssh user@remote-host 'tar zxvf - -C destination_dir'

とします。`source_file` はファイルでもディレクトリでも大丈夫です（ディレクトリなら再帰的に転送されます）。

## 受信
リモートホストにあるファイル `source_dir/source_file` をローカルの `destination_dir` に転送するには:

    ssh user@remote-host 'tar czf - -C source_dir source_file' | tar zxvf - -C destination_dir

とします。`source_file` はファイルでもディレクトリでも大丈夫です（ディレクトリなら再帰的に転送されます）。

# 解説

`ssh` コマンドはホスト名の後に引数を与えると、通常の動作と異なり、リモートホスト上でその引数をコマンドとして実行して終了します。
その際、**ローカルホストとの間でパイプをつなげることができます。**

つまり、ローカルホストのコマンドの標準出力をリモートホストのコマンドの標準入力で受け取ったり、
リモートホストのコマンドの標準出力をローカルホストのコマンドの標準入力で受け取ったりできます。

さて、あるディレクトリ以下のファイルを再帰的にコピーするのに `tar` を利用する方法があります。
使用頻度は少ないものの、小さいファイルが大量にある場合には `cp -r` を使うより速かったりします。こんな具合ですね。

    tar cf - -C source_dir source_file | tar xvf - -C destination_dir

アーカイブを生成して標準出力に書き出し、標準入力で受け取って別ディレクトリで展開しています。

そう、結論で書いたのは、この方法をリモートホストとの間でやっているだけです。
ついでに、ネットワークを経由しますので `tar` コマンドにgzip圧縮のオプション `z` を加えています。

ちなみに、パイプで繋げられるなら `tar` じゃなくても大丈夫じゃないか？と思われた方、その通りです。
例えば、単一のファイルなら `cat` でも転送を実現できます。送信なら

    cat source_dir/source_file | ssh user@remote-host 'cat > destination_dir/destination_file'

ですね。ネットワーク帯域の消費を節約するためgzip圧縮したいなら、

    gzip -c source_dir/source_file | ssh user@remote-host 'gunzip > destination_dir/destination_file'

としてもいいでしょう。

他にもいろいろ応用が効くと思います。tarのオプションを工夫すれば特定ファイルの除外なども可能ですね。

# 参考
https://meinit.nl/using-tar-and-ssh-to-efficiently-copy-files-preserving-permissions
Android アプリ開発　全アプリ共通でやっておきたいUIまわりテスト

Androidアプリ開発にて、テスト中に確認する項目をメモっておきます。
Android開発経験1ヶ月程度の人間が書いてるので、間違ってるかもしれません。

必要に応じて、ちょくちょく追加・修正予定です。

[iOS編](http://qiita.com/homyu/items/fa39dec7d161bef9de0e)も作りました

# 確認項目一覧

* 低速回線でのアプリ動作
* ボタンの同時押し
* ネットワークエラー時の動作
* アクティビティ破棄時の動作
* 戻るボタンの動作
* 複数OS,dp解像度での確認
* RxAndroid使用時のNPE確認

# テストをする前の前準備

UI周りのテストをする前にビルドするときは、リリースするアプリに近い状態が良いので、**proguard**が掛かっている状態で行うのがオススメです。


# 低速回線でのアプリ動作
開発中は、固定回線のためアプリがサクサク動きますが、実際の環境ではモバイル回線なので、
モバイル回線時の環境に近い状態で正常に動作することをテストする。

【方法】
個人的な理想では、mvnoのSIM（あまり速度のでない回線）を用意してテストするのが良さそうです。
ただ、用意できない場合は、低速回線環境をシュミレートしてテストする必要があります。

# ボタンの同時押し
ボタンの同時押しができると、意図しない画面遷移をするので、不必要に同時押しができないことを確認する。

【対策】
マルチタッチを必要としないアプリであれば、
Activityのstyleに

>android:splitMotionEvents="false"

を設定すれば同時押しを無効化できます。

【参考】
http://myhappiness.hatenablog.com/entry/2013/02/16/040858

# ネットワークエラー時の動作
ネットワークエラー時の仕様がある場合、ネットワークエラーの動作確認を行う。

【方法】
実装次第では、更新ボタン、PullToRefresh等で更新した時に、表示が崩れたり、クラッシュしたりするので、しっかりと確認する。


# アクティビティ破棄時の動作
Androidアプリでは画面がいつお亡くなりになるのかわからないので、なるべく全画面アクティビティ破棄時の動作を確認する。

【方法】
設定 ->開発向けオプション->アクティビティを保持しない
にチェックを入れます。

ホームボタンやアプリ一覧ボタン?を押して、一度アプリから離れるとアクティビティが強制的に破棄されるので、アクティビティ破棄時の動作確認ができます。

【対策】
基本的には、開発中からアクティビティが破棄されることを念頭に置いて開発すると良さそうです。
[icepick](https://github.com/frankiesardo/icepick)などを使うと、オブジェクトの保存が簡単にできるのでオススメです。

# 戻るボタンの動作
Fragmentの遷移を行っている画面で、戻るボタンを使用して前の画面に戻れることを確認する。
実装次第では、戻るボタンでアプリが終了できなくなっている場合もあるので要チェックです。

# 複数OS,dp解像度での確認
当たり前ですが、動作保証内のOS、端末解像度での動作確認をする。

【対策 複数OS】
動作保証内の端末を準備して、動作確認をしておく。

【対策 dp解像度】
とりあえず、今のところは下記環境でチェックしてます。

スマホ　　：横が320,360,410dpの端末
タブレット：横が960,1280dpの端末
を用意して一通りデザインが崩れていないか確認する。

【備考】
私は使用したことがないですが、
  * [Scirocco Cloud](http://www.scirocco-cloud.com/)
  * [Remote Testkit](https://appkitbox.com/testkit/)
を使用するとブラウザ上でいろいろな端末でテストできるみたいです。


# RxAndroid使用時のNPE確認
RxAndroid使用時に適切にunsubscribeしないとメモリリークする恐れがあるそうです。
NPEでアプリがクラッシュする可能性もあると思うので、一応リストに加えました。

【対策】
http://qiita.com/rejasupotaro/items/18f3b7c62ab071c9fee5
http://qiita.com/hide92795/items/02533c8593ce51070b57
などを参考に。


とりあえずここまで！！
【メモ】Scala Play-frameworkをインストールしてみる

#実行環境
・Windows7
・Java 1.8.0_91
・IntelliJ IDEA CE
・activator-dist-1.3.10

#事前準備
・Javaのインストール及びセッティング(java及びjavacコマンドの実行確認まで)
・IntelliJのインストール

#Scalaのインストール
IntelliJのプラグインからScalaを検索してインストール、これだけ。
Scala公式をインストールする必要は無く、既に動かせる状態に。
**ただし、**プラグインのバージョンとScalaのバージョンは違うため
**Scala自身の正確なバージョンが不明。**(流石にどこかに記述はあると思うけど…)
今回はプラグインのバージョンは3.0.3

#Play-frameworkのインストール
Playの公式サイトからactivator-distのzipをダウンロードして任意のディレクトリに解凍。
解凍先に特に指定は無いが**読み取り・書き込み**両方に権限が必要。
今回はユーザー配下に配置。

さらに、activatorコマンドを使えるようにするため環境変数に以下を追加。

`path = %_任意のディレクトリ%\activator-dist-1.3.10\bin;`

追加後に`activator -help`を実行してパスが通っていることを確認。

#プロジェクトの作成
IntelliJでプロジェクトを作成。
Terminalを開いて以下を実行してPlay-frameworkを追加する。

`activator new "任意のプロジェクト名" play-scala`

`play-scala`を`play-java`にすればJava版が入る。


インストールが完了したら作成プロジェクト内で以下を実行しサーバーを立ち上げる。

`activator run`

`Listening for HTTP on /0:0:0:0:0:0:0:0:9000`が表示されたら
http://localhost:9000 に接続して実行を確認。


以上。
PlistBuddy 使い方

# エントリ追加
```
/usr/libexec/PlistBuddy -c "Add :ProgramArguments:0 string ABC" ./application.plist
```

# エントリ編集
```
/usr/libexec/PlistBuddy -c "Set :ProgramArguments:0 ABC" ./application.plist
```

# エントリ削除
```
/usr/libexec/PlistBuddy -c "Delete :ProgramArguments:0 string" ./application.plist
```
AWSでポチポチっとアクセス制限

## 概要
あー、なんか変な出処のIPからむちゃくちゃなリクエストを受けている…。アクセス制限しよう。ただ、その度にデプロイ走らせたり、ミドルウェアの設定弄るのは嫌だな…。

お…？AWSコンソールからポチポチするだけでアクセス制限できるじゃん最高！

## 仕組み
みんなだいすきセキュリティグループはAllowが基本なので、特定のIPだけDenyするのには使えません。そこで、[ネットワークACL](http://docs.aws.amazon.com/ja_jp/AmazonVPC/latest/UserGuide/VPC_ACLs.html)を使用します。（参考: [ネットワークACLとセキュリティグループの機能比較](http://docs.aws.amazon.com/ja_jp/AmazonVPC/latest/UserGuide/VPC_Security.html#VPC_Security_Comparison)）
ネットワークACLはAllowだけではなくDenyも可能で、優先順位順に適用されていきます。これを利用します。

## 方法
AWSコンソールのVPCに入り、左メニューからネットワークACLを選択します。デフォルトだとVPCごとにネットワークACLが作成されているので、アクセス制限を行いたいVPCのネットワークACLを選択します。
するとデフォルトではインバウンドルールが以下の様になっています。

|ルール#|タイプ|プロトコル|ポート範囲|送信元|許可/拒否|
|---|---|---|---|---|---|
|100|すべてのトラフィック|すべて|すべて|0.0.0.0/0|許可|
|*|すべてのトラフィック|すべて|すべて|0.0.0.0/0|拒否|

アクセス制限したいIPが192.168.0.1〜192.168.0.255の時は、以下の様に一つルールを追加します。

|ルール#|タイプ|プロトコル|ポート範囲|送信元|許可/拒否|
|---|---|---|---|---|---|
|50|すべてのトラフィック|すべて|すべて|192.168.0.1/24|拒否|
|100|すべてのトラフィック|すべて|すべて|0.0.0.0/0|許可|
|*|すべてのトラフィック|すべて|すべて|0.0.0.0/0|拒否|

これで完了です。試しに自分が持っている単一IPをアクセス制限し、正常に動作するか確認してみるのが良いと思います。

## おわりに
おっ、いけるじゃーん！みたいなノリでやったので、この記事の誤りを見つけたり何か知見をお持ちの方は編集リクエストなど頂けると嬉しいです ( _ _)
Github Gitlab で差分を見る際に、スペースやインデント等の whitespace を無視した差分を見る

# Github Gitlab で差分を見る際に、スペースやインデント等の whitespace を無視した差分を見る

## Github の場合は、パラメータ w= を追加

```
https://github.com/hoge/diff?w=
```

## Gitlab の場合は、パラメータ w=1 を追加

```
https://gitlub.com/hoge/diff?w=1
```


<img width="1981" alt="diff.png" src="https://qiita-image-store.s3.amazonaws.com/0/57631/ef66dd55-2156-9e2f-1bc0-ff2e43ea27bf.png">
RTOS > Starvation > リソースが他のタスクに割り振られている

@ Adam Taylor MicroZed Chronicles - Using the Zynq 101 [Kindle Edition]
No. 1727/2129

> Starvation - Occurs when a task cannot run as the resources it needs are always allocated to another task.

Starvationという用語は初めてみた。

http://stackoverflow.com/questions/1162587/what-is-starvation
RTOS > FirmRTOS > (意訳)致命的ではないが、望んだ結果にならないため、deadlineはきちんとする。

@ Adam Taylor MicroZed Chronicles - Using the Zynq 101 [Kindle Edition]
No. 1709/2129

> FirmRTOS - Occasionally missing a deadline is acceptable and not seen a failure

HardRTOSとSoftRTOSは知っていたが、FirmRTOSというのは初めてみた。

http://www.thegeekstuff.com/2012/02/rtos-basics/

> Firm RTOS : These type of RTOS are also required to adhere to the deadlines because missing a deadline may not cause a catastrophic affect but could cause undesired affects, like a huge reduction in quality of a product which is highly undesired.

(意訳)致命的ではないが、望んだ結果にならないため、deadlineはきちんとする。

上の文章(acceptable)と説明が異なる(required to adhere to the deadlines)。
insert 比 unshift慢262倍

https://github.com/JuanitoFatas/fast-ruby#arrayinsert-vs-arrayunshift-code

```rb
[3] pry(main)> [1,2,3,4,5].insert(0,5)
=> [5, 1, 2, 3, 4, 5]
```

```rb
[1] pry(main)> [1,2,3,4,5].unshift(5)
=> [5, 1, 2, 3, 4, 5]
```
ruby count length size

https://github.com/JuanitoFatas/fast-ruby#arraylength-vs-arraysize-vs-arraycount-code

```rb
[1] pry(main)> [1,2,2,3,4,5].count(2)
=> 2
[2] pry(main)> [1,2,2,3,4,5].count
=> 6
```
underscoreコードリーディング（now）



underscoreに詳しくないので、勉強半分でソースコードを読む。



##利用するバージョン
[underscore.js(v1.8.3)](https://github.com/jashkenas/underscore/tree/1.8.3)


##nowとは

###[underscorejs.orgのnow](http://underscorejs.org/#now)

こんな説明。
>####_.now() 
> Returns an integer timestamp for the current time, using the fastest method available in the runtime. 
> Useful for implementing timing/animation functions.


```javascript
_.now();
=> 1392066795351
```

------------- 
ランタイム上で利用できるもっとも早い方法を利用し、現在時刻をintegerのタイムスタンプを返します。
タイミングやアニメーションの関数を実行する時に役立ちます


###[underscore.now](https://github.com/jashkenas/underscore/blob/1.8.3/underscore.js#L1330)
コード的にはこのあたり。

```javascript
  // A (possibly faster) way to get the current timestamp as an integer.
  _.now = Date.now || function() {
    return new Date().getTime();
  };


```

Date.nowを用いるか、存在しない場合はDateをnewしたものからgetTime関数を用いて返す。
Android testing overview

Googleが公式に提供しているドキュメントをベースにして、どういうテストがあるのか俯瞰できるようにまとめてみました。
（全て自分で試したわけではありません）

細かい導入方法は各公式ドキュメントで最新情報を確認してください。

# 対象読者

JUnitやRSpec等の使用経験があり、自動テストの一般的な知識がある方

# Androidテストの分類

※ 以下のドキュメントを元に、テストの目的・スコープ別に分類しています。
http://developer.android.com/intl/ja/tools/testing/testing_android.html
※ 実際にはEspressoがInstrumentedなAPIを利用していたりして、それぞれのテストが独立しているわけではないので注意してください。

## ユニットテスト

各クラスの単体テスト。Androidフレームワークに依存するクラスかどうかで選択肢が変わる。

### ローカルでのユニットテスト

ローカルのJVM上で動かすので高速で実行コスト小。
積極的に書くべきテスト。
一般的なユニットテストなので、アプリをやってこなかった人でもとっつきやすい。

* スコープ
  - Androidフレームワークに依存しないクラス（or Android依存部分はMockitoでモック化）
  - `e.g. ○○UtilTest`
* 導入方法
  - http://developer.android.com/intl/ja/training/testing/unit-testing/local-unit-tests.html

### Instrumentedなユニットテスト

**※まだ試してません！**

エミュレータor実機上で動かす。実行コスト大。
ローカルユニットテストでのモック化が難しい時、面倒な時に使う。

* スコープ
  - Activity等のAndroidフレームワークに依存するクラスの単体テスト
  - モック化が難しい時に使う？　後述するRobolectricの方が使い勝手良さそう。
* 導入方法
  - http://developer.android.com/intl/ja/training/testing/unit-testing/instrumented-unit-tests.html

### Robolectric

**※まだ試してません！**

Google公式ではないが、実績多数。開発も活発。
ローカルのJVM上で動かすので高速で実行コスト小。
Mockito等の一般的なモック用ライブラリを使用せずに使える。

* スコープ  
  - Activity等のAndroidフレームワークに依存するクラスの単体テスト  
* 導入方法
  - http://robolectric.org/

## 結合テスト（機能テスト、UIテスト）

「この画面でこのボタンをタップしたらこうなる」といった、実際のユーザーから見たアプリの機能のテスト。
アプリの最終的な品質を担保するという意味では、ユニットテストより重要。
ただし、ユニットテストと比べて自動化しづらい部分があるので、必要に応じてテスターによるマニュアルのテストも併用する。

http://developer.android.com/intl/ja/training/testing/ui-testing/index.html

### Espresso

WebアプリでいうSeleniumのようなUIテストが書ける。

* スコープ
  - アプリ内で完結する機能テスト
  - `e.g. 検索ボックスにテキストを入力して検索すると、結果のリストが表示される`
* 導入方法
  - http://developer.android.com/intl/ja/training/testing/ui-testing/espresso-testing.html


### UIAutomator

**※まだ試してません！**

* スコープ
  - 他のアプリやシステムと連携する機能テスト
  - `e.g. デフォルトカメラアプリを起動する、他のSNSアプリでシェアする`
* 導入方法
  - http://developer.android.com/intl/ja/training/testing/ui-testing/uiautomator-testing.html


# 最後に

Androidのテストいろいろありすぎて何から手を付けて良いのか迷いますね。。
アプリやってこなかった人がとりあえず書いてみるという意味では、ピュアなJavaクラスのローカルで動かすユニットテストから始めるのが良いと思います。
アプリ開発での有効なテストという意味では、Espressoを使用したUIテストで主要機能を担保しておくのがよいかなぁと思いました。導入も楽です。

Androidのテスティングフレームワークは乱立してますが、ドキュメントもそれなりに充実してます。
時間のある人は公式ドキュメントから辿ってみるとよさそうです。

- http://developer.android.com/intl/ja/tools/testing/index.html
- http://developer.android.com/intl/ja/training/testing/index.html

Androidアプリ開発、まだ始めたばかりなので、いろいろ試してまた更新します。
Django、QuerySetでgroup byする方法

DjangoのORMでgroup byは"annotate"を使ってるみたいですが、うまくいかなかったので、"QuerySet"使いました。


```
from django.db.models.query import QuerySet

query = cls.objects.filter(id=id, status=1).query
query.group_by = ['user_id']
result = QuerySet(query=query, model=cls)
```

以上です。
CentOS 7.2以降でDockerをインストールしOverlayFSを設定する

本記事は、Mesosphereが出している以下のPDF資料を元に日本語にしたものである。ただし、直訳ではなく、コマンド実行部分は自分の環境の結果を記したものである。
[Install Docker on CentOS](https://docs.mesosphere.com/wp-content/uploads/pdf/1-7/administration/installing/custom/install-docker-centos.pdf)


# はじめに
CentOS 7.2以降では、[XFSに関連するバグ](https://github.com/docker/docker/issues/10294)が改修されたおかげで、OverlayFSサポートが改善している。

CentOS 7.2のリリースノードは以下のような記載がある。
[Only XFS is currently supported for use as a lower layer file system](https://access.redhat.com/documentation/en-US/Red_Hat_Enterprise_Linux/7/html/7.2_Release_Notes/technology-preview-file_systems.html)

# インストール

CentOSを7.2以降にアップグレードする。

```shell-session
$ sudo yum upgrade --assumeyes --tolerant
$ sudo yum update --assumeyes
```

カーネルのバージョンが3.10以降であることを確認する。

```shell-session
$ uname -r
3.10.0-327.13.1.el7.x86_64
```

OverlayFSを起動時にカーネルモジュールとして読みこむようにする。

```shell-session
sudo tee /etc/modules-load.d/overlay.conf <<-'EOF'
overlay
EOF
```

一度リブートしてカーネルモジュールを再読み込みする。

```shell-session
$ sudo reboot
```

OverlayFSが有効であることを確認する。

```shell-session
$ lsmod | grep overlay
overlay                42451  0
```

Dockerのyumリポジトリを設定する。

```shell-session
$ sudo tee /etc/yum.repos.d/docker.repo <<-'EOF'
[dockerrepo]
name=Docker Repository
baseurl=https://yum.dockerproject.org/repo/main/centos/$releasever/
enabled=1
gpgcheck=1
gpgkey=https://yum.dockerproject.org/gpg
EOF
```

Docker Daemonが起動時にOverlayFSを使うように設定する。

```shell-session
$ sudo mkdir -p /etc/systemd/system/docker.service.d && sudo tee
/etc/systemd/system/docker.service.d/override.conf <<- EOF
[Service]
ExecStart=
ExecStart=/usr/bin/docker daemon --storage-driver=overlay -H fd://
EOF
```

Dockerをインストールし、デーモンを起動する。

```shell-session
$ sudo yum install --assumeyes --tolerant docker-engine
$ sudo systemctl start docker
$ sudo systemctl enable docker
```

`docker info`で確認する。

```shell-session
$ docker info
Containers: 0
 Running: 0
 Paused: 0
 Stopped: 0
Images: 0
Server Version: 1.11.1
Storage Driver: overlay
 Backing Filesystem: xfs
Logging Driver: json-file
Cgroup Driver: cgroupfs
Plugins:
 Volume: local
 Network: bridge null host
Kernel Version: 3.10.0-327.13.1.el7.x86_64
...
```

ちゃんとStorage Driverがoverlayになっている。
SendGridでメール配送を始めるためのまとめ


# 概要
新しくSendGridを使ってメール配送するときの参考資料とかまとめ

# SendGridとは
クラウディなメール配送サービス。
メールの運用は自前でやろうとすると辛い。
その辛い運用をお金で解決出来るサービス。
webapiとかsmtpapiとかpostfix等のMTAからも使えるので導入が簡単。

メールの運用が辛いのとSendGridを使うと良いという話は以下が参考になる。
http://qiita.com/koichiro/items/d65ac1af03b9063f0592

# SendGridを試す
テスト用であれば本家の [Try for Free]からサクッと始める事が出来る
https://sendgrid.com/

SendGrid本家を使う場合、ドルで請求される。
本格的に使う場合は社内稟議とか諸々課題になるので
本番用としては正規代理店の構造計画研究所を利用するのが良いと思う。
https://sendgrid.kke.co.jp/

# サーバからSendGrid経由でメールを送る方法
サーバからの送り方は3種類になる

- web-apiを叩く
- smtp-apiを叩く
- MTAを使う(smtp-api)

web-apiでは文字コードがUTF8固定になるのでガラケー等で利用しているキャリアメールに送る場合は文字化けしないか注意が必要。
また、アプリケーションからweb-api/smtp-apiを叩く場合、ネットワーク障害とか一時的にサーバ<=>SendGridで疎通が取れない時に再送する処理を実装する必要がある。
それが面倒であれば、sendmail/postfix等のMTAを使うのがてっとり速いと思われる。

https://sendgrid.kke.co.jp/docs/Integrate/Mail_Servers/postfix.html
https://sendgrid.kke.co.jp/docs/Tutorials/A_Transaction_Mail/send_transaction_mail.html

# APIキーの発行について
API仕様についての情報が新旧わかりにくかったので記載。
メール送信する際のSendGridの認証には2016/05現在はapi-v3の[API Keys]を利用するのが良い。
https://sendgrid.kke.co.jp/blog/?p=3659
https://sendgrid.kke.co.jp/docs/Tutorials/A_Transaction_Mail/manage_api_key.html

SendGridではapi-v3以前では[Credentials]でapi認証してたもよう。
ただ、[Credentials]は細かく権限設定出来ず、所謂 ReadOnlyとか送信専用的な権限を設定出来ない。
api-v3からは[API Keys]で、少々細かく権限管理出来るようになった

万一ユーザ名、パスワードが流出するとマズいので基本的に権限を絞ったAPIキーを使いましょう。

# メールの到達精度を高める方法
用途によって異なると思うけれど、例えば一般ユーザ宛にメール配送したい場合メールの到達精度は大きな課題になる。
SendGridを使えば全て解決するわけではなく、精度を高めるための施策は必要。

独自ドメインを使ってメール送信する場合、最低限[Domain Whitelabel] をやっておきましょう。
https://sendgrid.kke.co.jp/docs/Tutorials/D_Improve_Deliverability/using_whitelabel.html

SendGridのプランによって固定IPアドレスを取得できるので
その場合は[IP Whitelabel]も設定しましょう。

# アカウント周り
例えばサービス毎にキャパシティを設定したい、課金額を把握したいという場合はサービス毎にアカウントを発行するイメージを持つと思う。
SendGridではサブユーザというものが作れるので、アカウントを一々発行せずにサービス毎にサブユーザを発行するとよい。
https://sendgrid.kke.co.jp/docs/User_Manual_JP/Settings/Subusers/index.html
Windows XP > Link > ハイパーターミナル > 制御文字の送信 > Ctrl使用 / Alt使用

```txt:動作環境
Windows XP
```

昔のPCで環境を変更できない（ソフトを追加できない）状況で、RS-232C経由の装置に制御文字(0x11など)を送信したい場合。

参考 http://seetron.com/archive/html/ht_tip1.htm

上記には以下の方法が記載されていた

- Ctrlを押しながら入力
  - 0x11の場合はCtrl+Q
- Altを使った方法

>  For example, to send ASCII 133, press and hold Alt, type 0 1 3 3 on the keypad, then release Alt.

ascii code: http://wls.wwco.com/ref/ascii.html
複数リモートサーバにループでsshログインしてコマンドを実行する方法

リモートサーバの特定のバージョン確認をしたい場合などに一気に確認でき便利です。

```
$ for i in $(seq 1 10) ; do ssh 10.3.0.${i} -i id_rsa command /usr/local/nginx/sbin/nginx -v ; done

nginx version: nginx/1.9.14
nginx version: nginx/1.9.14
nginx version: nginx/1.9.14
nginx version: nginx/1.9.14
nginx version: nginx/1.9.14
nginx version: nginx/1.9.14
nginx version: nginx/1.9.14
nginx version: nginx/1.9.14
nginx version: nginx/1.9.14
nginx version: nginx/1.9.14
```
メモ:Qjail用イメージファイルの拡張

自宅サーバー(FreeBSD 10.2R)で運用しているQjail環境のディスク容量がそろそろ溢れそうなので拡張手順をメモ。

# ファイルシステムイメージの拡張

## ..の前にQjailの停止
Qjailはイメージファイルのあるディレクトリに`/dev/md*`をマウントしてしまうため、jail環境起動中はイメージファイルを操作できない。

なので作業中はQjailを停止しておく。
## スパースファイルの拡張
Qjailのイメージファイルはスパースファイルなので、拡張する領域はスパースにしておく。

```shell-session:例(1GBに拡張する場合)
dd if=/dev/zero of=/usr/jail/Jail名/Jail名.img bs=1g seek=1 count=0
```
## ファイルシステムの拡張
Qjailを起動してから、マウントされたファイルシステムを`growfs`
(jail停止中に手作業で`mdconfig`して`growfs`するべきだけど面倒なので...)

```shell-session:
root@hoge# qjail start jail_sample
Jail successfully started  jail_sample
root@hoge# growfs /usr/jails/jail_sample
Device is mounted read-write; resizing will result in temporary write suspension for /usr/jails/jail_sample.
It's strongly recommended to make a backup before growing the file system.
OK to grow filesystem on /dev/md4, mounted on /usr/jails/jail_sample, from 400MB to 1.0GB? [Yes/No] Yes
super-block backups (for fsck_ffs -b #) at:
 819904, 922368, 1024832, 1127296, 1229760, 1332224, 1434688, 1537152, 1639616, 1742080, 1844544, 1947008, 2049472
root@hoge#

```

以上。
javascriptで外部ファイルを読み込むときは、URLのプロトロコル部分は省略する


参考記事:http://dqn.sakusakutto.jp/2013/05/script_src_http.html


外部サイトのJSやCSSなどを読み込むときは
`<script src="http://example.com/js/jquery.js"></script>`

というように書くのではなく、"http:"の部分は省略して
`<script src="//example.com/js/jquery.js"></script>`
と書くのが良いらしい。
MySQLでも愛が生まれた


元ネタ: [愛が生まれた](http://qiita.com/dongri/items/041ff3e7dde6c99beeb0)(golangによる実装)
関連ネタ: [SQLでも愛が生まれたけど](http://qiita.com/damassima/items/fb5d404898cce00acc00)(SQLによる実装)

```mysql
SELECT CHAR(ORD('生') & ORD('死'));
```

クライアント側の文字コードをutf8とする必要がある。

他のRDBMSを試せる環境がないため未確認だが、恐らく各RDBMSに`CHAR()`及び`ORD()`に似たような独自の関数が定義されていると思うので、それらに置換すれば動くはずだ。

## 他のRDBMS

- [PostgreSQLの場合](http://qiita.com/damassima/items/fb5d404898cce00acc00#comment-6f9621abbcf01993b745)
MQTTは弱ネットワーク環境の表現について

## Background

MQTT 3.1 は弱ネット環境（2G/3Gなど）の表現は良くないため、いろいろ反省したいと思う。

## 弱ネット環境の表現

携帯は弱ネット環境でpackageの紛失率が高くので、`MQTT Server`との接続成功率が低いです。HTTPのモデルと比べると、実際HTTPの成功率はMQTTより高くになる。

携帯端末は毎回TCP切断された後、直ぐTCP再接続を行う。接続成功する場合、今まで接続のstepは改めて踏み、`CONNECT`や、`SUBSCRIBLE`など。外から見ると、このプロセスは特に問題がないと見えるが、弱ネット環境で`connect -> subscrible`のコストが高いです。

```
TCP接続の３回 handshackから、subscribleコマンドを送るまで、TCP stack毎回データを受けた後のACKも考えて、
一回接続のため、server <-> client の間で、少なくでも10回以上な通信を行った。
```

その原因です、もともと不安定の弱ネット環境で、この負担はさらに重くになる。下記何れのstepで突発性の接続失敗を発生する可能がある。

* TCP接続できない、またはhandshack時失敗、handshackした後のpackage を紛失、clientのtimeout時間が短いすぎ。
* TCP接続後、`CONNECT`送った後、TCPのACK packageを受け取れない、またはclientのtimeout時間が短い過ぎで、sub失敗。
* `SUBSCRIBLE`を送ったが、サーバーまで届けないとか、package紛失とかなど、sub失敗
* `SUBSCRIBLE`を発送成功したが、キャリアネットによる、ネットワーク切断、timeoutなど。

TCPは無感知的な接続です。切断されたの両方に対して、すぐ分かることができないです、でないと、`keepalive`の心拍方式は入らないです。

現在業務中のLogから軽く見ると、`CONNECT`だけの状況で、一日約数百万回の感じです。

## 少し改善

### 業務の改善

* clientの`timeout``keepalive`は少し伸ばす。

```
The Keep Alive timer, measured in seconds, defines the maximum time interval between messages received from a client.
It enables the server to detect that the network connection to a client has dropped, without having to wait for the long TCP/IP timeout. 
The client has a responsibility to send a message within each Keep Alive time period. 
In the absence of a data-related message during the time period, the client sends a PINGREQ message, which the server acknowledges with a PINGRESP message.

If the server does not receive a message from the client within one and a half times the Keep Alive time period (the client is allowed "grace" of half a time period), it disconnects the client as if the client had sent a DISCONNECT message. 
This action does not impact any of the client's subscriptions. See DISCONNECT for more details.
```

* `retain`を利用して、接続成功することを検知する。
* `will` を利用して、ある程度ネットワーく切断状況を判断する。

## MQTT-SN

TCP/IPなどサポートしていないデバイス環境について、MQTTは使えないです。例えば、センサー系やなど。よう使うのは`IEEE 802.15.4`に従って低速無線ネットワーク(LR-WPAN)とか、UDP packageなど。

MQTT-SN はこの状況に対応するため設計された技術です。

![Image_thumb.png](https://qiita-image-store.s3.amazonaws.com/0/65102/fa1e24e0-d8ba-696a-e61a-fd12d90a0518.png)

### 弱ネット環境で

まず、ネットの使用量を少し計算してみる。

* 共通
    * Ethernet Head at least 18 bit
    * IP 固定　Head 20 bit
    * キャリア費用計算　8 bit
* TCP
    * TCP Head 20 bit
    * TCP Data Head at least 66 bit
* UDP
    * UDP Head 8 bit
    * UDP Data Head at least 54 bit

つまり、UDPの場合、TCPより12 bit少なくになる。

弱ネットで表現から見ると

* ネットワーク到達可能状況で、TCPはまた１回目のhandshackのとき、UDP はすでにデータを送ってしまった。
* 三回handshack の間に、UDPは一回完全的なデータ送信（ping-pong）を完成可能。

プロトコル面

* TCPは接続にたいして, status の管理とメンテのコストがあります。良く見えるのは　`reset`異常など。一回請求するデータは必ず一台サーバーで完成する。
* UDPは無接続の特徴がある、一回請求するデータは復数のサーバーに分けることが可能。

まとめ、リアルタイム性、速やかに通信するたえ、UDPで考えで良いかも。状況による、MQTT/HTTP/UDPを混雑して利用することが良いかも。

## Next : webRTC x IoT

なぜここでwebRTCで出す、webRTCはUDPベースで実装された、リアルタイム性が非常に良いです。次に詳しく話す。
SSLで直接HTTPコマンドを叩く

HTTPのときtelnetで直接HTTPプロトコルを叩いたときのSSL版

```
$ openssl s_client -host dev -port 443
CONNECTED(00000003)
...
---
GET / HTTP/1.0

HTTP/1.1 200 OK
Date: Wed, 11 May 2016 02:48:33 GMT
```
ネットが繋がらなくなったときに素人がやること

ネットが繋がらなくなった。悲しい。

まず、ルーターとの疎通を確認する。

Macの場合、`ネットワーク>詳細` から、ルーターのIPアドレスを調べる。そしてピンする。

```bash
ping 192.168.xx.1
```

ルーターが大丈夫そうなら、次にDNSが動いているか調べる。

```bash
nslookup google.com
```

これで、動いていなければ、

`ネットワーク>詳細>DNS` から、DNSサーバーを`8.8.8.8`とかに指定して確認する。

今回はこれで治った。（ルーター指定のDNSサーバーが壊れていたみたいだ。CTOがルーターのコンパネからDNSサーバーの指定を切り替えてくれたようで、回復した。）
Dockerを使ってman辞書を作る。あるいはDockerのyumでドキュメントをインストールする方法

`man`を読むためだけのDockerイメージを作ろうと思ったものの、一回ではうまくいかなかったのでメモ。

MacからLinux(CentOS 6)のmanを読むためのものを想定しています。

わざわざDockerじゃなくても、Vagrant+sshでも良いじゃない、というのは理解はできるけど、今回はやめました。

Dockerfileは以下の通り。

```dockerfile:Dockerfile
FROM centos:centos6
RUN yum --setopt="tsflags=''" -y install man man-pages
RUN makewhatis
```

`--setopt="tsflags=''" `が無いと、ドキュメント類がインストールされないため、manコマンドがインストールされても、`man-pages`の中身がからっぽになってしまいます。

まあ、普通のDockerの用途ではドキュメントのインストールは容量だけ食って不要な存在なので仕方有りません。`/etc/yum.conf`に設定が書いてあるので、確認してみると良いと思います。

イメージを構築。

```shell-session
$ docker build -t man .
```

あとは、以下のコマンドで引けます。

```shell-session
$ docker run --rm -it man man <コマンド名>
```

面倒くさいので、.bashrcに以下を記述してます。

```bash
alias lman='docker run --rm -it man man'
```

hayajoさん、ありがとうございました！
SqliteManager UTF-8

下記ファイルの文字コード設定箇所を変更します。
lang\japanese.inc.php



// $charset = 'euc-jp';
// $langSuffix = 'ja-euc';


↓


$charset = 'utf-8';
$langSuffix = 'ja-utf-8';


lang\japanese.inc.phpファイルをUTF-8で保存します。
Mac版SourceTreeでGithub2段階認証の設定。

# Mac版SourceTreeでGithub2段階認証の設定。

Githubを2段階認証にしたらSourceTreeからPushできなくなったので対応。

## Github設定

### Settings
<img width="381" alt="1.png" src="https://qiita-image-store.s3.amazonaws.com/0/9907/0cdb95b5-4221-18a7-a4be-982e0fabdec5.png">

### Personal access tokensでトークン作成

<img width="1007" alt="2.png" src="https://qiita-image-store.s3.amazonaws.com/0/9907/ec649c8d-5157-89a2-1f0e-a07bd92d5d48.png">
※Scopeは全部チェックしてますが自分のみ使用だからです。
![3.png](https://qiita-image-store.s3.amazonaws.com/0/9907/0256f090-8f67-f5b4-cc61-2cab15b73bb4.png)

### トークンをコピーする
<img width="1021" alt="4.png" src="https://qiita-image-store.s3.amazonaws.com/0/9907/5b782b03-df00-1184-2fef-4fe5761b7374.png">

## Mac版SourceTree

Githubのパスワードにトークンを設定する

<img width="1027" alt="5.png" src="https://qiita-image-store.s3.amazonaws.com/0/9907/6d9491f1-8303-0fd8-2dcb-b15fab3d94f5.png">
<img width="877" alt="6.png" src="https://qiita-image-store.s3.amazonaws.com/0/9907/50461954-f55d-246a-6cbf-d15650119f1b.png">
Safariでインライン要素に謎の空白ができる

safariで謎の空白ができた。

こんなの↓
<img width="595" alt="スクリーンショット 0028-05-11 10.09.03.png" src="https://qiita-image-store.s3.amazonaws.com/0/117538/f2236921-91b2-8974-e383-d4f758b611fd.png">

HTML↓

```lang:filename
<p>
おいっす〜<strong>＜ストロング＞うっすうっすちーっす＜ストログ＞</strong>おいっす〜
</p>
```

margin:0;
padding:0;にしても治らなくて、なんだかな だったんだけど、font-familyが悪さしてたみたい。

font-familyに指定してたOsakaをなくしたら治った。


問題→Safariでspan,strong,b,aを使うと謎の空白ができる。
解決方法→font-family:Osaka を使わない。
npm管理のライブラリが提供する css をインポートする

# 概要
[![English](https://img.shields.io/badge/English-here-lightgrey.svg?style=flat)](https://www.jkawamoto.info/blogs/import-css-from-npm/)
クライアントサイドのパッケージ管理は，[bower](http://bower.io/) から [npm](https://www.npmjs.com/) に移した方が良いらしい．npm 管理の JavaScript パッケージは，[Browserify](http://browserify.org/) を使えばインポートできる．では，CSS はどうやってインポートすれば良いのか？例えば，bootstrap を npm でインストールして `bundle.css` に取り込むにはどうすれば良いのか？調べた結果をまとめる．

# 前提
タスクランナーとして [Gulp](http://gulpjs.com/) を使う．また，各パッケージのフォルダ構成に依存しない方法を探す．また，下記の例では bootstrap を使用しているが， `npm i --save bootstrap` にてインストール済みとする．

# Parcelify を使う
JavaScript のインポートに Browserify を使う場合，プラグインの一つである [Parcelify](https://github.com/rotundasoftware/parcelify) の利用はメジャーな方法だろう．逆に，JavaScript をまったく使わないプロジェクトではダミーが必要になると思う．

Parcelify を使う場合，`package.json` の `style` 要素にインポートする CSS ファイルを列挙する必要がある．

```json:package.json
{
  "style": [
    "./node_modules/bootstrap/dist/css/bootstrap.min.css",
    "./src/css/main.css"
  ]
}
```

例えば，bootstrap と自前の CSS ファイルの両方をインポートする場合は上記のように書く（他の項目については省略した）．そして，Gulp のタスクは次の通り．

```coffeescript:gulpfile.coffee
gulp = require "gulp"
browserify = require "browserify"
parcelify = require "parcelify"
source = require "vinyl-source-stream"

gulp.task "browserify", ->
  b = browserify
    entries: ["./src/main.js"]
    extensions: [".js"]
  parcelify b,
    bundles:
      style: "./public/bundle/bundle.css"
  b.bundle()
    .pipe source "bundle.js"
    .pipe gulp.dest ".public/bundle/"
```

これで，`browserify` タスクを実行すれば  `package.json` の `style` 属性に指定した CSS ファイルが一つにまとめられ`public/bundle/bundle.css` に書き出される．

この方法の微妙なところは，`package.json` にインポートする CSS ファイルの相対パスを列挙する必要があるところで，パッケージのフォルダ構成が変わると，毎回設定しなおす必要がある．もしかしたら，各パッケージの `package.json` から情報を引っ張ってくる方法があるのかも知れないが，調べた限りでは分からなかった．

# rework を使う
[rework](https://github.com/reworkcss/rework) のプラグイン [rework-npm](https://github.com/reworkcss/rework-npm) は，各パッケージの `package.json` を調べて，必要な CSS ファイルをインポートしてくれる．rework を使う方法は複数あるが，Gulp から使うために [gulp-rework](https://github.com/sindresorhus/gulp-rework) を用いることにする．

まず，インポートするパッケージを列挙した css ファイルを用意する．例えば，bootstrap をインポートする場合，次のように書く．

```css:src/main.css
@import "bootstrap";

/* その他の項目は省略 */
```

そして，Gulp のタスクは次の通り．

```coffeescript:gulpfile.coffee
gulp = require "gulp"
rework = require "gulp-rework"
reworkNPM = require "rework-npm"

gulp.task "css", ->
  gulp.src "./src/*.css"
    .pipe rework(reworkNPM())
    .pipe gulp.dest "./public/bundle/"
```

これで，`css` タスクを実行すれば，bootstrap を含んだ CSS が  `public/bundle/main.css` にできる．

この方法だと，bootstrap のフォルダ構成をいちいち調べなくても必要なファイルがインポートできる．ただし，これがうまくいくのは，各パッケージの `package.json` に `style` 属性があり，適切に記述されている場合のみである．`style` 属性がないパッケージについては，個別にフォルダ構成を調べなければならず，結局 Parcelify を使う場合と同じ手間がかかる．

# まとめ
npm管理のライブラリが提供する css のインポート方法として，Parcelify を使う方法と rework を使う方法についてまとめた．
他にもっと良い方法があったら教えてください．

# 参考

- [npm と gulp でフロントエンドライブラリを管理してリポジトリから消してみる](http://qiita.com/youhei/items/1621f87f096d3d35da7d)
- [“style” field in package.json@stack overflow](http://stackoverflow.com/questions/32037150/style-field-in-package-json)
ROS_03:準備編　Tutrialsから環境など

#参考
http://wiki.ros.org/ROS/Tutorials

#ROS環境のインストールとセットアップ
##環境変数を管理する

環境変数はセットアップで

```
$echo "source /opt/ros/jade/setup.bash" >> ~/.bashrc
```

と.bashrcに書き込んだので端末を開くごとに自動で読まれる。

#ことば
robotpilotさんの[[ROSロボットプログラミング] ROSで使われる専門用語](http://qiita.com/robotpilot/items/4aa18b0923953165b5dd)
が詳しい
##補足
Tutrialsから
###パッケージ
パッケージ(Packages): パッケージはROSのコードを構成するソフトウエア構造の一単位です。各パッケージにはライブラリ、実行ファイルやスクリプト等何でも含まれます． 

###マニフェスト(package.xml)
マニフェスト(package.xml): マニフェストはパッケージの説明書です．パッケージ間の依存関係を明示し、パッケージのバージョン、ライセンス、メンテナンス担当者等といった付加的な情報を保存します 

###ノード
ノードは ROS パッケージ内の実行ファイルに他なりません。ROS ノードは ROS クライアント ライブラリを使用して他のノードとやりとりします。ノードはトピックへ配信したり購読したりできます。ノードはサービスを提供したり、使用したりすることができます。

##補足２
<dl>
<dt>ノード(Nodes)</dt><dd>１つのノードは ROSを使用して他のノードとやりとりします。</dd>
<dt>トピック(Topics)</dt><dd>ノードはメッセージをトピックへ向けてPublish(配信)し、同様にSubscribe(購読)することでトピックからメッセージを受け取ることができます。一方向非同期通信。</dd>
<dt>サービス(Service)</dt><dd>同期通信、センサーのデータ通信に適している。</dd>
<dt>サービスメッセージ通信</dt><dd>httpみたいなリクエストとレスポンスから構成され、1メッセージで通信が終わる。
</dd>
<dt>メッセージ(Messages)</dt><dd>トピックへ配信したり購読したりするときの ROS のデータ型です． </dd>
<dt>マスター(Master)</dt><dd>ROSのネームサービス（例えば、ノードがお互いを検索することを助けます）</dd>
<dt>rosout</dt><dd>ROS における stdout や stderr と同等の機能です。</dd>
<dt>roscore</dt><dd>マスター + rosout + パラメータ サーバ </dd>
</dl>
pandasで連続値カウント

## 目的
データ系列中に何回同じ値が連続しているか調べたい

## 思想
実直にfor文を回してもいいけどスマートに書きたい

## 解決手段
pandasのshift, cumsum, groupbyを存分に使う

## 実装

```py
import numpy as np
import pandas as pd
import random

 def continue_count(df):
    # NaNはグルーピング時に無視されるので適当に入れ替えておく
    df['new_value'] = df['value'].fillna('-')
    # 1個シフトした行が違う値なら +1cumsum, 同じ値なら no cumsum 
    df['changepoint_cumsum'] = (df['new_value'] != df['new_value'].shift()).cumsum()
    # new_valueとcontinue_cumsumでグルーピング
    df_group = df.groupby(['new_value', 'changepoint_cumsum'])
    mi_df = df.set_index(['new_value', 'changepoint_cumsum'])
    # 各グループに入っている値をカウント & 元データとガッチャンコ
    mi_df['continue_count'] = df_group['new_value'].count()
    # インデックスをもどして上げる
    df = mi_df.reset_index()
    return df.drop(['new_value', 'changepoint_cumsum'], axis=1)

if __name__ == '__main__':
    ASSET = [-30, -1, 1, 5, 100, np.nan]
    # "1, 3, 5, nan"からどれか１つを5000回選んでのデータセットを用意
    df = pd.DataFrame({'value': [random.choice(ASSET) for i in range(5000)]})
    print(continue_count(df))
```

出力は以下のようになる

```py
      value  continue_count
0       1.0               1
1     -30.0               2
2     -30.0               2
3     100.0               1
4       5.0               1
5     -30.0               1
6       NaN               1
7     -30.0               1
8       5.0               2
9       5.0               2
10    100.0               2
11    100.0               2
...
```

なので、5回以上連続している行を調べたいときは

```py
df[df['continue_count'] >= 5]
```

で得ることができるようになる。
UnityのネイティブプラグインをGoで書く #golang #unity


## ネイティブプラグイン用のGoのコードを書く

以下のようなコードを用意し、`hoge.go`としておきます。
どうやら`main`パッケージでないとダメなようです。
`cgo`経由で関数をエクスポートするので、`import "C"`を書きます。
`Hoge`関数をエクスポートするために`//export Hoge`というコメントを書きます。

```hoge.go
package main

import "C"

//export Hoge
func Hoge() int {
    return 100
}

func main() {
}
```

## Androidのネイティブプラグインを作る
Android用に`.so`ファイルを作ります。

```
$ CGO_ENABLED=1 \
CC=arm-linux-androideabi-gcc \
GOOS=android \
GOARCH=arm \
GOARM=7 \
go build -buildmode=c-shared -o libhoge.so hoge.go
```

作成した`.so`ファイルをUnityに取り込みます。
`Assets`以下に`Plugins/Android`以下にできた`libhoge.so`ファイルを置きます。

## iOSのネイティブプラグインを作る

クロスコンパイラを再ビルドしないといけないらしいので、[$GOROOT/misc/ios](https://github.com/golang/go/tree/master/misc/ios)にある通りに、`make.bash`を走らせます。なお、通常のGo（1.5以上）をソースからビルドする際と同じように`$GOROOT_BOOTSTRAP`も設定する必要があります。

※追記
以下の記事にGo Mobileのツールチェインを使う方法について書きました。
この方法であれば、ツールチェインをビルドし直す必要がありません。
http://qiita.com/tenntenn/items/11b2d08af6186b436422
---追記 終わり----

```
$ cd $GOROOT/src
$ GOROOT_BOOTSTRAP=/path/to/go1.4/ \
GOARM=7 \
CGO_ENABLED=1 \
GOARCH=arm \
CC_FOR_TARGET=`pwd`/../misc/ios/clangwrap.sh \
CXX_FOR_TARGET=`pwd`/../misc/ios/clangwrap.sh ./make.bash
```

続いて、`.a`ファイルを以下のように作ります。

```
CGO_ENABLED=1 \
GOARCH=arm \
go build -buildmode=c-archive -tags=ios hoge.go
```

`hoge.a`ファイルができるので、それをUnityに取り込みます。
`Assets`以下に`Plugins/iOS`以下にできた`hoge.a`ファイルを置きます。
`hoge.h`はなくてもビルドできるようです。

XCodeプロジェクトを出力した後に以下の設定を行います。

* BuildSettings > Build Options > Enable BitcodeをNoにする
* BuildSettings > Architectures > ArchitecturesをArm7だけにする。

試していませんが、Arm64用もビルドすれば、おそらく動くとは思います。

## Unity側に呼び出すコードを書く

以下のようなコードを書くと呼び出せます。
うまく呼び出せていたら、`n = 100`とコンソールに表示されます。

```
using UnityEngine;
using System.Runtime.InteropServices;

public class Sample : MonoBehaviour
{

#if UNITY_IPHONE
    [DllImport("__Internal")]
#else
    [DllImport("hoge")]
#endif
    private static extern int Hoge();

    void Start()
    {
        var n = Hoge();
        Debug.LogFormat("n = {0}", n); // n = 100
    }
}
```

## まとめ
UnityからGoで書いたネイティブプラグインを呼び出す方法について紹介しました。
`net/http`などの標準ライブラリは問題なく使えると思うので、通信部分をGoで書くということもアリなのではないかなと思います。
気になるのは、`.so`ファイルや`.a`ファイルの容量ですが、今回作った`.so`ファイルについては1.1MBで`.a`ファイルについては883KBでした。
`go build`する際に`-ldflags "-s"`を指定して、シンボルテーブルを削ると、`.so`ファイルは793KBまで減りました。
おそらく、`.a`ファイルについても同様に軽くなると思います。

Go MobileのJavaバインドみたいにC#バインドを書けばもっと便利になりそうです。
また、UnityのネイティブプラグインはJavaやObj-Cでも書けるので、頑張れば`gomobile bind`で作ったGoのSDKも使えるとは思います。
Swiftで色定義する場合のパターン提案

アプリ内で使う色をEnumerationやStructureで一元管理したい欲求ありますよね。

その定義の仕方について、良さそうなパターンが見つかったので、共有します。
もちろん方法は他にも沢山あるので、こっちの方が良いよ！などあれば教えてください。

```swift
import UIKit

public struct XXXColor { // (1)
    public enum Common: UInt32, XXXColorEnum { // (3)
        case text       = 0x333333FF
    }
    
    public enum OrderList: UInt32, XXXColorEnum {
        case background = 0xEFEFF4FF
    }
}

public protocol XXXColorEnum { // (2)
    var rawValue: UInt32 { get }
}
extension XXXColorEnum {
    public final var color: UIColor {
        return UIColor(hex: self.rawValue)
    }
}

extension UIColor {
    /// 0x1166AAFF
    internal convenience init(hex: UInt32) { // (4)
        let divisor = CGFloat(255)
        let red     = CGFloat((hex & 0xFF000000) >> 24) / divisor
        let green   = CGFloat((hex & 0x00FF0000) >> 16) / divisor
        let blue    = CGFloat((hex & 0x0000FF00) >>  8) / divisor
        let alpha   = CGFloat( hex & 0x000000FF       ) / divisor
        self.init(red: red, green: green, blue: blue, alpha: alpha)
    }
}
```

## (1) XXXColor
* 用途ごとに1階層設けるためstructをトップに持ってきています。
* UIColorの独自定義ということでSwiftですが3文字接頭辞つけています。まあColorでもどっちでも良いです。

## (2) XXXColorEnum
Enumの色定義に対して、

```swift
print(XXXColor.Common.text.color)
```

と繋げればUIColorが返されるように、プロトコル拡張を使っています。

## (3) UInt32で色定義
16進数でUInt32を指定していけば色定義できるようにしています。
```UIColor(...```と毎回指定するのだるいですよね。

## (4) 8桁UInt32をUIColorに変換するためのconvenience init
念のためテスト書きたいのでinternalにしています。
Excelでも愛が生まれた

元ネタ：[愛が生まれた](http://qiita.com/dongri/items/041ff3e7dde6c99beeb0)
愛が生まれる理由：[なんで愛が生まれるのか](http://qiita.com/tienlen/items/44daf3a52eb872085556)

||A|B|
|:--:|:--|:--|
|1|生|=UNICODE(A1)|
|2|死|=UNICODE(A2)|
|3|=UNICHAR(B3)|=BITAND(B1,B2)|

結果

![無題.png](https://qiita-image-store.s3.amazonaws.com/0/22648/f8b0632d-557f-72c7-a744-a478062b7585.png)
ErgoDox EZ 買った

困っている点

 * エンターキーを右手小指位置に入れると一列足りない。
 * 指が届きづらいキーがいくつかある。自分の指が短いからかもしれない。
 * iMac に繋いで使っているが、本体がスリープ時にキー押下で復帰できない。また右のLEDがリセット時のように点滅する。
   * [Issue](https://github.com/jackhumbert/qmk_firmware/issues/237) は上がっていた。未解決でクローズされているが。
   * `keyboard/ergodox_ez/Makefile` 中の `SLEEP_LED_ENABLE = yes` をコメントアウトしたら良くなった。もしかしてスリープしていない？

気になっている点

* どうも右側上部の数字を一列押し間違う。置く角度(物理)を調整すれば間違わなくなる？
* KC_LANG1, KC_LANG2 を設定したときに入力されない。(Karabinar を使っているので問題はない)
gitsomeのオートコンプリートがパワフルだった---gitsomeの紹介です

[gitsome](https://github.com/donnemartin/gitsome)はgitとshellのオートコンプリートに加えてGithubを統合したものです。`git`や`gh`のサブコマンドが説明付きで出てきますし、オプションもオートコンプリートしてくれるので、gitを使うのが楽しくなりそうです。

また、[xonsh](https://github.com/scopatz/xonsh)をベースに開発されているので、git抜きにしても、お洒落でモダンなシェルとして楽しく使えます。

必要となるのはPython 3.4以上。pipでインストールできます。以下はMacにインストールするときの例:

```
# インストール
brew install python3
pip3 install gitsome

# gitsomeのシェルを起動する
gitsome
```

とにかくお洒落で使いやすいです。
guacamoleのdocker作る

#楽しいGW
RaspberryPiとLeap Motionで楽しいGWを過ごそうと思っていたけど、
arm対応してないし、どうにもできなさそうなので、
[Guacamole](http://guac-dev.org/)で楽しく過ごした感じを演出する。


#やる事
VM上のCoreOSにGuacaoleのサーバを立てて遊ぶ。

#作業
CoreOSのインストールに関しては[こちらの記事](http://qiita.com/sokotsu/items/a071cf1b34656cbee0f7)が超参考になるので、
割愛。

docker-composeを入れる。

```bash
sudo -i
mkdir -p /opt/bin
curl -L https://github.com/docker/compose/releases/download/1.7.0/docker-compose-`uname -s`-`uname -m` > /opt/bin/docker-compose
chmod +x /opt/bin/docker-compose
docker-compose -v
```
docker-composeのコマンド叩いてもコンソールに何も表示されない事を確認し、
docker-composeを使わない事を決意する。

次に、必要なimageをpull

```bash
docker pull glyptodon/guacd
docker pull mysql:latest
docker pull glyptodon/guacamole
```

mysql初期化用スクリプト作る

```bash
docker run --rm glyptodon/guacamole /opt/guacamole/bin/initdb.sh --mysql > initdb.sql
mv ./initdb.sql /tmp/
```

いよいよguacamole起動

```bash
docker run -d --name guacd \
  -p 4822:4822 \
  glyptodon/guacd
docker run -d --name mysqld \
  -e MYSQL_DATABASE=guacamole_db \
  -e MYSQL_USER=guacamole_user \
  -e MYSQL_PASSWORD=guacamole  \
  -e MYSQL_ROOT_PASSWORD=guacamole \
  -v /tmp/initdb.sql:/docker-entrypoint-initdb.d/initdb.sql \
  mysql
docker run -d --name guacamole \
  --link guacd:guacd \
  --link mysqld:mysql         \
  -e MYSQL_DATABASE=guacamole_db  \
  -e MYSQL_USER=guacamole_user    \
  -e MYSQL_PASSWORD=guacamole \
  -p 8080:8080 \
  glyptodon/guacamole
```

結果はこんな感じ。

```basg
docker ps -a
CONTAINER ID        IMAGE                 COMMAND                  CREATED              STATUS              PORTS                    NAMES
964e5d6ce423        glyptodon/guacamole   "/opt/guacamole/bin/s"   About a minute ago   Up About a minute   0.0.0.0:8080->8080/tcp   guacamole
83664f8d0133        mysql                 "docker-entrypoint.sh"   About a minute ago   Up About a minute   3306/tcp                 mysqld
9e7f267d8bb2        glyptodon/guacd       "/usr/local/sbin/guac"   About a minute ago   Up About a minute   0.0.0.0:4822->4822/tcp   guacd
```

ローカルからアクセスしてみる。
http://host:8080/guacamole/

![guacamole01.png](https://qiita-image-store.s3.amazonaws.com/0/42445/ad631874-49ad-10f1-eac6-bd3abde60329.png)

デフォルトはguacadmin/guacadmin。


[クライアント](https://github.com/glyptodon/guacamole-client)は次回書く
Rails の便利なメソッド（数値オブジェクト編）

Rails の便利な数値オブジェクト拡張まとめ

# `multiple_of?(number)`

オブジェクトが `number` で割り切れるかを boolean で返す。

```rb
0.multiple_of?(0) #=> true
6.multiple_of?(3) #=> true
6.multiple_of?(4) #=> false
```

# `to_s(format, options)`

to_s が拡張されていて、いろいろなフォーマットで、文字列を返す。
指定できるフォーマットは `:phone, :currency, :percentage, :delimited, :rounded, :human, :human_size`

```rb
# phone
1234567890.to_s(:phone) #=> "123-456-7890"
1234567890.to_s(:phone, area_code: true, extension: 111) #=> "(123) 456-7890 x 111"
1234567890.to_s(:phone, country_code: 81) #=> "+81-123-456-7890"

# currency
12345.to_s(:currency) #=> "12,345円"
12345.to_s(:currency, locale: :us) #=> "$12,345.00"
12345.to_s(:currency, unit: 'えん', delimiter: '_', format: '合計 %n %u') #=> "合計 12_345 えん"

# その他
12345.to_s(:delimited) #=> "12,345"
123.to_s(:percentage) #=> "123.000%"
123.05.to_s(:rounded, precision: 1) #=> "123.1"
1234567.to_s(:human) #=> "1.23 百万"
123.to_s(:human_size) #=> "123バイト"
```

他にもいろいろオプションがあるので、見てみて下さい！

# `day`, `month`, `year`

秒に変換して返す。`days` の様に複数形にしても OK
`second`, `minute`, `hour`, `week`, `fortnight` もある。

```rb
1.day #=> 86400
2.months #=> 5184000
```

`from_now` と合わせて使うと便利！

```rb
Time.zone.now #=> Sun, 08 May 2016 06:20:50 UTC +00:00
1.day.from_now #=> Mon, 09 May 2016 06:20:52 UTC +00:00
```

現在から◯◯後の日付を取得できる。

ちなみに、ミリ秒にしたい場合は `in_milliseconds` メソッドが用意されている（1000 倍しているだけ）

```rb
1.hour.in_milliseconds #=> 3600000
```



# `byte`, `kilobyte`, `megabyte`

`day` と同じように byte 数を計算して返す。
`exabyte` まである。

```rb
1.kilobyte #=> 1024
2.kilobytes #=> 2048
```


# `ordinalize`

序数にして返す。

```rb
1.ordinalize #=> "1st"
2.ordinalize #=> "2nd"
3.ordinalize #=> "3rd"
```

接尾辞だけ返す `ordinal` もある。

```rb
1.ordinal #=> "st"
2.ordinal #=> "nd"
```



以上が ActiveSupport の core_ext で拡張されているメソッドです！
Rails 5 では、これらに加えて正負を判定する `positive?`, `negative?` が追加されていますが、こちらは Ruby 2.3 に標準で入っているメソッドで、ver 2.2 以前の Ruby 用に追加されています。
技術英語 > Ever try to work in a coffee shop, but your concentration [gets derailed by all the talking], / they were easily distracted

http://www.scientificamerican.com/podcast/episode/more-creative-types-may-face-concentration-challenges/

> Ever try to work in a coffee shop, but your concentration <font color=red>gets derailed by all the talking</font>,

http://eow.alc.co.jp/search?q=derailed&ref=sa

railから外れるとして、derailとして覚えた。

<hr>
関連して思い出したのは

distracted

http://eow.alc.co.jp/search?q=distracted
> 気を散らされた、ボーッとして、気がそぞろで、気を取られて、注意散漫で

http://www.scientificamerican.com/podcast/episode/more-creative-types-may-face-concentration-challenges/

> Kafka, Darwin, Chekhov and Proust were reported to avoid distractions while working because <font color=red>they were easily distracted</font>
maxのきほんてきなobjectのメモ

[公式ドキュメント](https://docs.cycling74.com/max7/)を検索すれば、以下意外にもすごいいっぱいあるのですが、ざつに概観をつかむために、ハイパー初心者の私が書いたメモです。

# UI
- umenu : dropdownメニュー
- key : キーボード入力をレポートする


# object指向系
- p,patcher : inletとoutletをつなげてやる。UIがなくてもいけるサブパッチはこれでやる。
- bpatcher : UI付きのサブパッチを作れる。extrasメニューででてくるGlobalTransportとかへのリンクも貼り付けられる。うれしい。
- inlet : pを作るときに引数になる
- outlet : pを作るときに返り値になる


# 通信系
- udpsend : oscなどで外部アプリと通信する
- s,send : maxの中でrへ送る
- r,recive : maxの中でsから受け取る


# math系
- > : 不等号
- / : わりざん 
- expr,min,max,int,float,pow,avg,sin,cos,random : とか math系はいっぱいあるぽい
- counter : 数を数えるときに使えるかんじ
- zmap : map関数ににてる
- scale : 数字を指定した範囲でscaleしてくれる
- line : tweener感がある。start〜endまで何秒でいくみたいなのができる。


# message系
- set : messegeをsetする
- prepend : messageを前方に追加する
- apppend : messageを後方に追加する
- `$1`,`$2`,`$3` : メッセージを引数にして受け取る
- `#1`,`#2`,`#3` : bpatcherのargumentsの受け取り方
- pack : 複数のmessageを結合する
- unpack : 複数のmessageを空白文字列でsplitする
- loadmess : パッチがロードされた瞬間にmessageを送る
- trigger,t : メッセージを指定の型にフォーマットして、複数箇所に送れる

# デバッグ系
- print : consoleにmessageを出力する。`print @popup 1`と書くとlocalに出力する。


# タイマー系
- metro : メトロノームの機能。このヘルプに載ってるGlobalTransportとかいう機能が便利そう。
- tempo : テンポの管理機能。
- clock : setIntervalに似てる気がする
- pipe : messagingをdelayさせる。機能豊富ぽい。コレとは別にふつうにdelayもある。


# 条件分岐系 
- gate : switch文に近い感じがする
- sel,select : 左上から送られてきた値が一致してたら左下から信号おくる。そうじゃないときは右下から信号送る。
- route : messageの中にある文字が含まれているかでルートを分岐してくれる

# その他
- プレゼンテーションモード : 右クリックした時にpresentationモードにしたときに隠すかどうか決めれる。
- メニューバー -> Object -> Show on Lock, Hide on Lock : lockしたときに隠すかどうか決められる。
空白について質問です

２日前に始めたばかりです。
質問ですが
Pythonで

Good morning = input（””）
Hey

と入力して、
Good morning と打ち込んだ時に Hey と返ってくるプラグラムを作ろうとしたのですがGood morningの空白が読み込まれずエラーが出てしまいます。
どうすれば空白を文字列として認識させられますか？
ファイルの途中行を表示する(便利tips集)

TL;DR
---
- head | tail はやめましょう. bodyコマンドとかいらないです.
- GNU環境であれば `sed -ns "N,M"を使いましょう`. (BSDでは-sオプションがない)
- 少しリッチに操作したいなら `awk 'FNR==N,FNR==M'`
- awkは神コマンド

# ファイルの○○○行目から○○○行目までを表示したい

何万行もあるファイルの中から一部分だけ確認するときどうしてますか？
head | tailですか？

僕はawkを使います. 
sedもいいですね(コマンドが短くて, 早いので)

N行目からM行目まで表示するのに使うコマンドは各自以下の様な感じになります.

```shell-session:tail_and_head
tail -n + $N | head -n $($N-$M) 
```

```shell-session:sed
sed -sn 'N,Mp' ファイル名
```

```shell-session:awk
awk 'FNR==N,FNR==M' ファイル名
```

## head | tail は Bad Practice

head | tail はやめましょう理由は簡単

__複数ファイル指定ができないからです__

つまりこんな感じにファイルを表示できません.
`tail -n + $N * | head -n $($N-$M)` 

あと評価式を挟む必要があるので
個人的な不満として書きづらいです.

## sed, awk は Best Practice

sed(GNU), awkならできます

```shell-session:multiple_file_w_sed
sed -sn 'N,Mp' *
```

```shell-session:multiple_file_w_awk
awk 'FNR==N,FNR==M' *
```

## sedは相対表示が可能

```shell-session:N行より+10行を表示する
sed -sn 'N,+10p' *
```

## リッチな操作をしたいならawk

### ファイルの境目に何か出力したい(GNU)

BEGINFILE or ENDFILE を使う
```shell-session:multiple_file_w_awk
awk 'BEGINFILE{print FILENAME} ENDFILE{print "\n"} FNR==N,FNR==M' *
```

### ファイルの境目に何か出力したい(BSD)

BEGINFILE or ENDFILE を使う
```shell-session:multiple_file_w_awk
awk 'FNR==1{print FILENAME} FNR==N,FNR==M' *
```

### 行番号を表示したい

ファイル毎の行番号を表示したいなら　FNR.
複数ファイルを通して 行番号を利用したいならば NR
```shell-session:multiple_file_w_awk
awk 'FNR==3,FNR==10{print FNR,$0}' *
```
Eclipse + EGitでヒストリー表示した時に表示崩れが起きた時の対応

# 症状
EclipseでEGitを使ってヒストリー表示すると以下のような表示崩れが起きる。
![1.png](https://qiita-image-store.s3.amazonaws.com/0/23101/cc45e5dc-90df-093b-4bdc-e843171905e4.png)


# 原因
Glanceというインクリメンタルサーチプラグインを表示していると発生する模様。
[Glanceとは](http://did2memo.net/2012/11/06/eclipse-iterative-search-plugin-glance)

# 解決策

### 1.Glanceを非表示にする
Glanceにフォーカスがある状態で Esc を押し、非表示にする。
※Glanceは Ctrl + J で表示できます。Ctrl + Jで表示されない場合は、以下のページのやり方でGlanceのショートカットキーバインドの確認ができます。
http://www.itcowork.co.jp/blog/?p=2230

### 2.Glanceプラグインを削除する
dropinsディレクトリ内にあるGlanceディレクトリを削除する。

# 恒久対応(2016/07/08追記)

@cypher256 さんからコメントがある通り、https://github.com/cypher256/glance
で恒久対応されます。Pleiades All in One へは 2016/09 の 4.6.1 Neon SR1 で反映予定です。

# 参考
https://osdn.jp/projects/mergedoc/forums/2758/36846/