OmniAICreator/Qiita-1.07M huggingface dataset:
Linux - 標準出力で先頭指定行飛ばしたり、後ろ指定行読み

飛ばしたりする方法
tailコマンドやheadコマンドを使って標準出力の行を制御。これは便利！

### 先頭5行飛ばして6行目から出力する
```
tail -n +6 test.txt
```

### 後ろ5行出力しない
```
head -n -5 test.txt
```

### 参考
http://d.hatena.ne.jp/iww/20130623/tail
Linux - dfコマンドでファイルシステムタイプを確認するコマンド

ファイルシステムの確認コマンドです
dfコマンドでできるので簡単

### コマンド
```
df -T
```
### サンプル
```
$ df -T
Filesystem     Type     1K-blocks    Used Available Use% Mounted on
/dev/xvda1     ext4       8125880 4231828   3458240  56% /
none           tmpfs            4       0         4   0% /sys/fs/cgroup
udev           devtmpfs    289524      12    289512   1% /dev
tmpfs          tmpfs        60272     240     60032   1% /run
none           tmpfs         5120       0      5120   0% /run/lock
none           tmpfs       301356       0    301356   0% /run/shm
none           tmpfs       102400       0    102400   0% /run/user
/dev/xvdf      ext4     103081248 2701108  95120876   3% /backup
```
MongoDB - データ型(BSON Type)を確認する方法

MongoDBの特定のフィールドのBSON Typeを確認したかったので調べた時のメモ

### 動作確認環境
* OS: Ubuntu14.04
* MongoDB: 3.0.4

### BSON Type一覧
|Type                   |Number    |Notes              |
|:----------------------|---------:|:------------------|
|Double                 |     1    |                   |
|String                 |     2    |                   |
|Object                 |     3    |                   |
|Array                  |     4    |                   |
|Binary data            |     5    |                   |
|Undefined              |     6    | Deprecated.       |
|Object id              |     7    |                   |
|Boolean                |     8    |                   |
|Date                   |     9    |                   |
|Null                   |    10    |                   |
|Regular Expression     |    11    |                   |
|JavaScript             |    13    |                   |
|Symbol                 |    14    |                   |
|JavaScript (with scope)|    15    |                   |
|32-bit integer         |    16    |                   |
|Timestamp              |    17    |                   |
|64-bit integer         |    18    |                   |
|Min key                |   255    | Query with ``-1``.|
|Max key                |   127    |                   |

### 確認方法
#### まずはテストデータ
```
db.test.save({id:1})
db.test.save({id:NumberLong(1)})
db.test.save({id:"1"})
```
#### テストデータ確認
```
db.test.find()
{ "_id" : ObjectId("55b0a23cb32d11a401f7dd7a"), "id" : 1 }
{ "_id" : ObjectId("55b0a2cfb32d11a401f7dd7d"), "id" : NumberLong(1) }
{ "_id" : ObjectId("55b0a27eb32d11a401f7dd7b"), "id" : "1" }
```
#### String Typeの抽出
```
db.test.find({id:{$type:2}})
{ "_id" : ObjectId("55b0a27eb32d11a401f7dd7b"), "id" : "1" }
```
#### 64-bit integer Type型の抽出
```
db.test.find({id:{$type:18}})
{ "_id" : ObjectId("55b0a2cfb32d11a401f7dd7d"), "id" : NumberLong(1) }
```

### 参考
http://docs.mongodb.org/manual/reference/bson-types/
http://tm8r.hateblo.jp/entry/20110630/1309364124
Rack(Rails/Sinatra)でアップロードされたファイルを都度削除する

Rackはアップロードされたファイルをtempフォルダに保存し、これらのファイルは自動で削除されない模様。

公式のmiddlewareとして提供されている[Rack::TempfileReaper](http://www.rubydoc.info/github/rack/rack/Rack/TempfileReaper)を使えばリクエスト処理後に自動削除してくれる。

なぜか公式HPでは同梱ミドルウェアの一覧が適当にされており、ソースを見ないと見つけることができない。
NS_DESIGNATED_INITIALIZER でコンパイルエラーになった時の対処方法

Xcode5.1でAdMobSDK 7.3 をコンパイルしようとしてエラーが出たので、対処方法をメモ。

NS_DESIGNATED_INITIALIZERマクロが定義されていないので、

```lang:Objective-C
#ifndef NS_DESIGNATED_INITIALIZER
#if __has_attribute(objc_designated_initializer)
#define NS_DESIGNATED_INITIALIZER __attribute__((objc_designated_initializer))
#else
#define NS_DESIGNATED_INITIALIZER
#endif
#endif
```
を適切な場所に追加すればOK

※stackoverflow の投稿を参考にしました
[NS_DESIGNATED_INITIALIZER expected : (colon)](http://stackoverflow.com/questions/24119896/ns-designated-initializer-expected-colon)
Scilabでファイルの検索を再帰的に行う関数

#はじめに
Scilabにはファイルの検索を行う関数`findfiles`が標準ライブラリの中に存在しますが、再帰的な検索を行うことができません。パッと見た限り、再帰的に探す方法が出てこなかったので、自分で書いてみました。

#実装
ただのファイル検索ですし、ファイル名と一致するかどうかは関数`findfiles`に任せることができますから、仕組みとしては簡単です。関数の再帰呼び出しは好きではないので、列ベクトルを用いて実装しました。

```scilab
function [files] = findfilesRecursively(path, filespec)
    // [files] = findfilesRecursively([path, [filespec]])
    //
    // 説明:
    // 関数 findfilesRecursively はファイルを再帰的に検索します。
    //
    // 出力:
    // - files: 合致するファイルのフルパスが格納された行列
    //
    // 入力:
    // - path: 検索を行うパス
    // - filespec: 検索を行うファイル名

    [lhs, rhs] = argn(0);
    if rhs < 1 then
        path = pwd();
    end
    if rhs < 2 then
        filespec = "*.*";
    end
    
    files = [];
    dirs = [path];
    while size(dirs, 'r') > 0 do
        maskedFiles = findfiles(dirs(1), filespec);
        if size(maskedFiles, 'r') > 0 then
            files = [files; dirs(1) + '\' + maskedFiles];
        end

        allFiles = findfiles(dirs(1));
        if size(allFiles, 'r') then
            for allFile = (dirs(1) + '\' + allFiles)' do
                if isdir(allFile) then
                    dirs = [dirs; allFile];
                end
            end
        end

        dirs = dirs(2:$);
    end
endfunction
```

#さいごに
Scilabにまだまだ慣れていないため、関数`length`を使いそうになったり、行ベクトルと列ベクトルを間違えそうになったりして、いい勉強になりました。
この記事で示したコードはパブリックドメイン、つまりご自由に使っていただいて大丈夫です。ただし、一切の責任を取りかねますのでご了承ください。
CasperJSの導入時、Error: Cannot find module 'casper'が出てプログラムが実行できなかった時の対処法

#発生時の状況
ちょっとPhantomJSに興味が出たのでCasperJSと一緒に導入してみた

WindowsからPhantomJS,CasperJSをインストールし、test.jsという名前でGooleのキャプチャを取ってくるプログラムを作成。

```js:test.js
var casper = require('casper').create();

casper.start('http://google.com/', function(){
	this.capture('google.png');
	
});

casper.run();

```
を　

```$ phantomjs test.js ```
で実行したところ

```Error: Cannot find module 'casper'```

"casper"が見つからないらしい…

今度はOSをUbuntuに変えてやってみたがまた同じエラー

ちなみにバージョンはPhantomJS 1.9.0,CasperJS 1.1.0-DEVでした


# 対処

    $ casperjs test.js

で実行する。

phantomjsラッパーのcapserjsがインストールしてあるので、わざわざphantomjsからcasperをrequireしなくで直接casperjsから実行すればいい
ということなのだと思われる。

# その他の対処法
phantomjsからどうしても呼び出したいときは、casperの場所を明示してあげなきゃいけない(?)らしく、具体的には以下の二行を追加する。

```
phantom.casperPath = '/path/hoge/casperjsフォルダ';
phantom.injectJs(phantom.casperPath + "/bin/bootstrap.js");
```

変更後のプログラムはこのようになった

```js:test.js
phantom.casperPath = '/home/genm/programfiles/casperjs';
phantom.injectJs(phantom.casperPath + "/bin/bootstrap.js");

var casper = require('casper').create();

casper.start('http://google.com/', function(){
	this.capture('google.png');
	
});

casper.run();
```

これで再度
```$ phantomjs test.js ```

を実行したところちゃんとGoogleのキャプチャを撮ってきてくれた


#まとめ
知ってる人にとっては、当たり前なのかもしれないけどJS触ったこともない初心者にはちょっとつらかった。
「Error: Cannot find module 'casper'」で検索かけると日本語ではcoffeescriptで拡張したライブラリ云々のことしかのってなかったので、同じ症状で困っている人の参考になれば良いと思ってる。
Riak CS 2.0 を docker で動かす


hectcastro/docker-riak-cs を2.0に対応させた。ついでに、make で複数インスタンス起動させたた時に、デフォルトでhaproxyを前に立てるようにした。

https://github.com/mtakahashi-ivi/docker-riak-cs

## ビルド方法

上記をチェックアウトして

```
make build
```
## 起動方法

```
make start-cluster
```

5インスタンスが起動する。
起動すると、以下のようにクレデンシャルが表示される。

```
$ make start-cluster
DOCKER_RIAK_CS_HAPROXY=1 DOCKER_RIAK_CS_AUTOMATIC_CLUSTERING=1 DOCKER_RIAK_CS_CLUSTER_SIZE=5 ./bin/start-cluster.sh

Bringing up cluster nodes:

  Successfully brought up [riak-cs01]
  Successfully brought up [riak-cs02]
  Successfully brought up [riak-cs03]
  Successfully brought up [riak-cs04]
  Successfully brought up [riak-cs05]
  Successfully brought up [riak-cs-haproxy]

  Riak CS credentials:

    admin_key: HPHEOYFZ46Y5LWO5WBAB
    admin_secret: 3sDWdPDIc_4m09s5NfjLBjVTuoZTh_f8eFhEbQ==

Please wait approximately 30 seconds for the cluster to stabilize.
```

## 停止方法

```
make stop-cluster
```

## s3cmd の設定

上記クレデンシャルを、~/.s3cfg に記載する。
最後の行の `signature_v2 = True` をわすれずに。
Riak CSはs3.amazon.com のプロキシとして使用するとかの説明は、[コチラ](http://docs.basho.com/riakcs/latest/tutorials/fast-track/Testing-the-Installation/) を参照

```
[default]
access_key = HPHEOYFZ46Y5LWO5WBAB
bucket_location = US
cloudfront_host = cloudfront.amazonaws.com
cloudfront_resource = /2010-07-15/distribution
default_mime_type = binary/octet-stream
delete_removed = False
dry_run = False
encoding = UTF-8
encrypt = False
follow_symlinks = False
force = False
get_continue = False
gpg_command = /usr/local/bin/gpg
gpg_decrypt = %(gpg_command)s -d --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
gpg_encrypt = %(gpg_command)s -c --verbose --no-use-agent --batch --yes --passphrase-fd %(passphrase_fd)s -o %(output_file)s %(input_file)s
gpg_passphrase = lksa13
guess_mime_type = True
host_base = s3.amazonaws.com
host_bucket = %(bucket)s.s3.amazonaws.com
human_readable_sizes = False
list_md5 = False
log_target_prefix = 
preserve_attrs = True
progress_meter = True
proxy_host = localhost
proxy_port = 8080
recursive = False
recv_chunk = 4096
reduced_redundancy = False
secret_key = 3sDWdPDIc_4m09s5NfjLBjVTuoZTh_f8eFhEbQ==
send_chunk = 4096
simpledb_host = sdb.amazonaws.com
skip_existing = False
socket_timeout = 300
urlencoding_mode = normal
use_https = False
verbosity = WARNING
signature_v2 = True
```
unity > スレッドが動いたままになる > OnApplicationQuite()にてthr.Abort()をする

Thread型で宣言して動かしたスレッドはApplicationQuitした後も動き続けるように思われる。

```csharp
using UnityEngine;
using System.Collections;

using System;
using System.Text;
using System.Net;
using System.Net.Sockets;
using System.Threading;

public class udpEchoServer : MonoBehaviour {
	Thread rcvThr;
	UdpClient client;
	public int port = 6000;

	public string lastRcvd;
	private bool stopThr = false;

	void Start () {
		init ();
	}

	void OnGUI() {
		if (GUI.Button (new Rect (10, 250, 100, 40), "Quit2")) {
			stopThr = true;
			print ("Quit now");
			Application.Quit ();
		} 
	}

	void init() {
		rcvThr = new Thread( new ThreadStart(FuncRcvData));
		rcvThr.Start ();
	}

	void OnApplicationQuit() {
		rcvThr.Abort ();
	}

	private void FuncRcvData()
	{
		int count = 0;
		client = new UdpClient (port);
		client.Client.ReceiveTimeout = 300;
		while (stopThr == false) {
			try {
				IPEndPoint anyIP = new IPEndPoint(IPAddress.Any, 0);
				byte[] data = client.Receive(ref anyIP);
				string text = Encoding.ASCII.GetString(data);
				lastRcvd = text;

				client.Send(data, data.Length, anyIP); // echo
			}
			catch (Exception err)
			{
				print(err.ToString());
			}
			Thread.Sleep(300);
			string msg = count.ToString();
			count++;
			print (msg);
		}
		print ("stopThr=true");
	}

}
```

上記の例ではスレッドが動き続ける間、print(msg)にてcountの値を増やしながら表示していくようにしている。

void OnApplicationQuit()にて rcvThr.Abort (); をコメントアウトした場合、UnityのPlay mode終了後にもConsoleにはcountの値が出力され続ける。

一方で rcvThr.Abort() をアンコメントした場合は、Playmode終了後にcountの出力は停止する。

ApplicationQuitが不正終了時にはスレッドはゾンビ化するのだろうか？
KotlinでString.formatみたいなことする


Kotlinのエバンジェリストの@ngsw_taroくんに教えてもらったのでメモ

Intに拡張関数を追加すると出来る

```kotlin
fun main(args: Array<String>) {
    for (i in 0..10) {
	    println("${i.format(2)}")
    }
}

private fun Int.format(disits: Int) = java.lang.String.format("%0${disits}d", this)
```
unity > udp > 受信タイムアウト(msec)を設定 > client.Client.ReceiveTimeout = ...;

UDPで受信するときのタイムアウト時間をmsecで設定する。

```csharp
UdpClient client;

client = new UdpClient (port);
client.Client.ReceiveTimeout = 300;
```

http://stackoverflow.com/questions/2281441/can-i-set-the-timeout-for-udpclient-in-c
centOS6.5にmysql5.6をインストールする


# 初めに

前回の[記事](http://qiita.com/tiwu_offical/items/f135e6b6fbbe3ec6aa54)ではvagrantを用いてcentOSを立ち上げ、PHPの開発環境を構築しました。
今回はcentOSにmysqlをインストールします。
次回の記事でPHPからmysqlを利用し、テーブルから情報を取得して
ブラウザで確認したいと思います。

ステップ１→[vagrantを用いたPHPの環境構築](http://qiita.com/tiwu_offical/items/f135e6b6fbbe3ec6aa54)
ステップ２(本記事)→[centOS6.5にmysql5.6をインストールする](http://qiita.com/tiwu_offical/items/5ff3fa38611de058704a)
ステップ３→[PHPからmysqlの操作](http://qiita.com/tiwu_offical/items/3415fad87fb3a6d68666)

### 前提条件

* 前回の[記事](http://qiita.com/tiwu_offical/items/f135e6b6fbbe3ec6aa54)を読んでいる
* vagrantを用いてcentOSを立ち上げ済み



### 開発環境

* OS X Yosemite
* Windowsでも動作確認済み


# 1.mysqlの確認、削除

centOSにログインをし、centOSにデフォルトでmysqlが入っているか確認します。

	$ rpm -qa | grep mysql
	
	
>mysql-libs-5.1.73-3.el6_5.x86_64

等表示される場合、mysql5.6をインストールする時競合するため削除します。

	$ sudo yum remove mysql*
	
	
	
# 2.mysqlのインストール
次にmysqlをインストールします。

	$ sudo yum install http://dev.mysql.com/get/mysql-community-release-el6-5.noarch.rpm
	$ sudo yum install mysql-client mysql-server
	
インストールが終わったら確認します。

	$ rpm -qa | grep mysql
	
>mysql-community-release-el6-5.noarch
>mysql-community-server-5.6.20-4.el6.x86_64
>mysql-community-common-5.6.20-4.el6.x86_64
>mysql-community-client-5.6.20-4.el6.x86_64
>mysql-community-libs-5.6.20-4.el6.x86_64

等表示されたら成功です。
mysqlのバージョンを確認。

	$ mysql -version

>mysql  Ver 14.14 Distrib 5.6.20, for Linux (x86_64) using  EditLine wrapper

上記のようにバージョンが表示されると思います。

# 3.mysqlにログイン

次にmysqlにログインしたいと思います。
まず、mysqlを起動します。

	$ sudo /etc/init.d/mysqld start

次に

	$ sudo mysql -uroot -p

でログインします。

自分がMAC環境で行った時はパスワードは求められませんでした。
しかし、Windows環境ではパスワードを求められました。（調査中）
パスワード求められた場合は何も打たずエンターを押してしてログインしてください。


ログインが終わったらまず、パスワードを設定します。

	$ mysql> set password = password('New Pass');


New Pass -> 新しいパスワード


# 4.mysqlに自動起動の設定

最後にmysqlをOSが立ち上がった時に自動で起動するように設定をします。
まずmysqlからログアウトします。

	$ mysql> exit
	
ログアウトしたら、下記コマンドを打ってください。

	$ sudo chkconfig mysqld on
	
これで設定は終わりです。
確認のため下記コマンドを打って

	$ sudo chkconfig | grep mysql
>mysqld 0:off	1:off	2:on	3:on	4:on	5:on 6:off

と表示されたら成功です。



# 終わりに

これでcentOSにmysqlのインストールは終わりです。
次回はPHPからmysqlを操作したいと思います。
PHPで「進捗・どう・です・か」135バイト

[「進捗・どう・です・か」をPHPで書いてみた](http://qiita.com/kiimiiis/items/2f98e19d00616d95d0ce)


```php
<?for(;substr($s,-7)!=1011129;$s.=rand(9,12));echo str_replace([10,11,12,9],[進捗,どう,です,か],$s),"???
",strlen($s)+3,文字で煽られた;
```

これが限界。
誰か続き頼んだ。
echo str_replaceのあたりとか絶対どうにかできると思うんだけどなあ。

ちなみに最初書いたのはこう。

```php
<?for(;substr($s,-4)!=1234;$s.=rand(1,4));$s=str_replace([1,2,3,4],[進捗,どう,です,か],$s)."???
";echo$s,mb_strlen($s)+3,文字で煽られた;
```

1バイト削れた。
Raspberry Pi -> Mac -> Internet環境でsudo apt-get update時に404 Not Found


Raspberry Piでsudo apt-get updateしようとしたら404 Not Foundが出て詰まったのでメモしておきます。

## 困ったこと

Raspberry PiをMacとEthernetケーブルで接続して、MacのInternet共有で外界と接続していました。

この環境で

```bash
sudo apt-get update
```

を実行すると、`404 Not Found`が発生してしまいました。

## 解決方法

先に解決方法を書いておきます。

Raspberry PiをMac経由でなく、直接WiFi経由でインターネットに接続すれば問題なくupdateできます。 

## 試したこと

そのときのパッケージリストの確認先は

```bash:/etc/apt/source.list
deb http://mirrordirector.raspbian.org/raspbian/ wheezy main contrib non-free rpi
```

```bash:/etc/apt/sources.list.d/raspi.list
deb http://archive.raspberrypi.org/debian/ wheezy main
```

となっていました。

この接続先をMacのブラウザで確認したところ普通に接続できます。
ところがRaspberry Pi上で

`wget http://mirrordirector.raspbian.org/raspbian/`

を実行すると、404 Not Foundとなります。
ところが

`wget http://mirrordirector.raspbian.org/`

とすると、index.htmlが取得できます。

う〜ん謎！

`mirrordirector.raspbian.org`
を
`archive.raspberrypi.org`
に変更しても同じ。

## 解決のきっかけを得る

いろいろ調べてると、認証付きproxyかましてると認証エラー時に404 Not Foundになるという記事を発見。

もしかするとMacを踏み台にしてるせい？という疑問が湧きました。

出先だったのでWiFi接続は断念し、自宅に戻ってRaspberry PiをWiFi接続して`sudo apt-get update`を実行しました。

すると正常終了！

## わかったこと

Raspberry PiをMacのインターネット共有で接続すると、不都合がある場合があるということでした。

この環境でも正常にupdateできる方法があると思うのですが、これ以上調べるコストはかけられないので断念しました。
（ご存知の方がいらっしゃればコメントもらえると助かります）
リモートサーバーに mongoDB を置いてみた

今のところ、いろんなアプリケーションが混在するサーバーに mongoDB を置いているのだが、そうすると、各種パラメータ等の設定が面倒（こっちを立てるとあっちが立たない、みたいな感じになりがち）なので、mongoDB をリモートのサーバーに置いて、そこにデータを登録するようにしてみた。


##システム構成
(mongoDBサーバー)

* CPU Intel(R) Core(TM) i7-4771 CPU @ 3.50GHz HyperThread OFF
* MEMORY 20 GB
* LAN 100Mbps
* DISK WDC WD5000BPVT-00HXZT1 500GB
* クライアントとはスイッチングハブを介して接続


##mongoDB バージョン
  3.0.4


##データ登録

  mongo shell から insert コマンドでデータを登録する。
　insert ドキュメントを配列としてバルクサイズを変えて、ネットワーク転送量をメインに確認した。


##サンプルDML

    (hoge.sql)
    for(i=0;i<100000;i++){
        db.test.insert([{"header":{"time":1,"offset":9,"host":"host0001","item":"item0001"},"data":[{"parameter":"parameter0001","value":1.1},{"parameter":"parameter0002","value":2.2},{"parameter":"parameter0003","value":3.3}]},{"header":{"time":1,"offset":9,"host":"host0001","item":"item0001"},"data":[{"parameter":"parameter0001","value":1.1},{"parameter":"parameter0002","value":2.2},{"parameter":"parameter0003","value":3.3}]}...])}

    (mongo shell)
    \> mongo 192.168.1.1:27017 < hoge.sql


##ドキュメントサイズ
    > db.test.stats()
    {
        "ns" : "test.test",
        "count" : 10000,
        "size" : 2700000,
        "avgObjSize" : 270,
        "storageSize" : 356352,
        "capped" : false,
    ...


##コマンド実行ホストからmongoDBホストへのping

* ドキュメントサイズに TCP のヘッダ分(20bytes)を加えて 290 bytes を設定

    > ping -s 290 -c 100 192.168.1.1
    PING 192.168.1.1 (192.168.1.1) 290(318) bytes of data.
    298 bytes from 192.168.1.1: icmp_seq=1 ttl=64 time=0.836 ms
    ...
    --- 192.168.1.1 ping statistics ---
    100 packets transmitted, 100 received, 0% packet loss, time 99001ms
    rtt min/avg/max/mdev = 0.374/0.533/0.836/0.056 ms


##結果
|バルクサイズ|ネットワーク転送率|関連情報|
|:-:|:-:|---|
|1|313.6Kバイト/sec||
|2|462.0Kバイト/sec||
|4|547.9Kバイト/sec||
|8|965.5Kバイト/sec||
|16|1.1Mバイト/sec||
|32|1.3Mバイト/sec||
|64|1.8Mバイト/sec|このあたりから vmstat で block I/O 待ちが起こった|
|128|2.3Mバイト/sec||
|256|2.7Mバイト/sec||

* CPU, MEMORY, I/O についてはパフォーマンス的に特に問題はなかった


##気付き

*リモートサーバーへのアクセス、それも、シングルでのインサートを考える
時は、ネットワーク性能がそれなりによくないときつい。

バルクインサートで極力パケットを詰め込んでネットワーク性能を引き出すのがベターなのはわかったのだが、それにしても ping 結果と比べて 1 insert 時のパフォーマンスがあまりに悪すぎる、ような気がする。

もう少し踏み込んで確認してみようと思う。
Actian Matrix と Actian Vector

#カラム指向データベースの Actian Matrix と Actian Vector について、何が違うのかを確認した。


##Actian のホームページより

Matrix
  >  Fast MPP Analytics Database

Vector
  >  Agile SMP Analytics Database

そのものずばり、キーワードは、MPP と SMP

ということで、このキーワードをざっくり再整理


##MPP (Massively Parallel Processing:超並列処理)

* スケールアウト
* 独自のメモリやI/Oシステム,OS
* 多数のコンピュータを高速なネットワーク(infinibandとか)で接続してクラスタを構成
* Amazon Redshift (Actian Matrix は、この Redshift の元となったデータベース) 

##SMP (Symmetric Multi Processing:対称型マルチプロセシング)

* スケールアップ
* 共通のメモリとI/Oシステム
* スケールアップにより共有バスがボトルネックになる => リニアな拡張が難しい
* HyperThread (みたいなもの、厳密には違うようですが)


##つまり

Matrix は膨大なデータを扱い、Vector は、agile と謳っているとおり、簡単にさっと使える感じのするデータベース、ということでしょうか。
PEPPER 目のLEDを複雑に光らせる


# 概要

PepperのLEDを光らせる場合、
標準のEye LEDsボックスを使う方法がありますが、
このボックスを使うと目が全部光ってしまいます。

これを解決するためにはLedの光り方をプログラミングする必要があるので
今回はそれについて解説したいと思います。

# 実装

```py
import time

class MyClass(GeneratedClass):
    def __init__(self):
        GeneratedClass.__init__(self)

    def onLoad(self):
        self.leds = ALProxy("ALLeds")

    def onUnload(self):
        self.leds.reset("AllLeds")

    def onInput_onStart(self):
        eyes = ["FaceLed0", "FaceLed2", "FaceLed4", "FaceLed6"]

        # LEDを点灯する
        for id in eyes: self.leds.fadeRGB(id, 0xffb361, 0.1)

        # 3秒間sleep
        time.sleep(3)
        
        # ledをリセット
        self.leds.reset("AllLeds")    
        self.onStopped()

    def onInput_onStop(self):
        self.onUnload()
        self.onStopped()
```

# 解説

Pepperの目のLEDは8個ずつ付いています。
また、これらのLEDはnaoqiでグループ化されていて、
ALLeds.fadeRGBメソッドでグループ、色を指定することで光らせることができます。
グループについてはALLedsのページに記載されてます。

![led_eyes.png](https://qiita-image-store.s3.amazonaws.com/0/84155/48888588-6996-e388-ebf8-36d084828cc0.png)

ちなみに耳のLEDも同様にIDが振られています。

![led_ears.png](https://qiita-image-store.s3.amazonaws.com/0/84155/54e8d9e9-2209-3a27-22c4-809ed01f0c96.png)

今回は目を光らせたいので
FaceLedグループを指定しています。

fadeRGBの引数は左から

* LEDグループ名
* カラー
* フェードインの時間

です。

FaceLed[x]を指定することで
両目の同じインデックスのLEDを光らせることができます。
左右対象でLEDを光らせたい場合に便利です。

これを別々に光らせたい場合は
RightFaceLed[x]やLeftFaceLed[x]などを指定することで別々の光らせ方をさせたり、
ALLeds.createGroupで新たにグループを宣言することもできます。

使用後の注意としては、
ALLeds.reset("ALLLeds")などを呼び出して元の色に戻さないと
ずっと同じ色になってしまうのでUnload及びonStop時に必ずresetを呼ぶようにしましょう。
たまに使うコマンド


### sshを切ってもプロセスが残るようにする

```sh:
nohup script/run &
```

### 変更を監視する

```sh:
watch --no-title ls -l
```

### 最近更新されたファイル一覧

```sh:
ls -lt | head
```

### プロセスツリー表示

```sh:
pstree -p
```

### プロセス強制終了

```sh:
kill -9 12345
```

### tgz圧縮

```sh:
tar zcvf template.tgz --exclude='.DS_Store' *
```
有効期限日のa,b,..,z日前の対象を取得

# 概要
パスワードの有効期限が迫ってきているので、ユーザにパスワード変更を促すメールを期限日の30,15,5日前に出したい、というようなケースで、リマインドする対象を取得するサンプル（というか設計アイディア？）です。

play javaの2.2系なのでサンプルコードはjava7です。
Ebeanのin句、TypeSafeConfig、DateTime、Guavaを組み合わせてやります。

次のようなUserオブジェクト

```lang:User.java
@Entity
@Table(name="User")
public class User extends Model {
   
   @Id
   private long id;

   private String name;

   private Date passwordExpired;

   /* 中略 */

   public static Finder<Long, User.class> find = ...

}
```

## 通知するタイミングを整数のリストで設定

通知するタイミングを後からコントロールできると便利なので、その部分を設定ファイルに外出しします。
TypeSafeConfigなら、設定ファイルの値を型つきでとれるので何かと便利です。

### 設定ファイルのインポート

ここでは簡略化のため、application.confからとれるようにします。

conf/remind.confを追加して、application.confに下記を追記します。

`
include "remind.conf"
`

これで、`ConfigFactory.load()` でremind.confの値をとりにいけます。

### remind.confの内容

配列は下記のように[]でくくります。

```
password.intervals=[30,15,5]
```

これで下記のようにして整数のリストとして取得できます。要は期限日までの猶予期間のリストです。

```
Config config = ConfigFactory.load();
List<Integer> intervals = config.getIntList("password.intervals");
```

## 整数のリストをリマインド対象日のリストに変換

上記のリストを、GuavaのFunctionとLists.transformでDateTimeのリストに変換します。

```
// 日付のみが必要なので、hour以降は0を指定
final DateTime now = DateTime.now()
        .withHourOfDay(0)
        .withMinuteOfHour(0)
        .withSecondOfMinute(0)
        .withMillisOfSecond(0)
        ;

// 整数xを当日からx日後の日付に変換する関数を生成
Function<Integer, DateTime> toRemindDate = new Function<Integer, DateTime>(){
                public DateTime apply(Integer interval) {
                    return now.plusDays(interval);
                }
            };
List<DateTime> days = Lists.transform(intervals, toRemindDate);
```

※ java7でやっているので、joda-timeとguavaを使っていますが、java8ならStream、Date and Time APIとラムダ式で同じことがもっと楽にできるでしょう。

## 日付リストをin句に渡す

あとはEbeanのFinderを使うだけです。

```
List<User> targets = User.find.where()
                              .in("passwordExpired", days)
                              .findList(); 
```

これで、パスワード有効期限が30,15,5日前のユーザが取得できます。

### 空のリストを渡したとき

in句のところに空のリストを渡すとどうなるかが気になります。数学の空集合のように扱ってくれるなら、「空集合に入る要素はない」ということで空のリストが返ってきて欲しいところです。

これは、ちゃんと空のリストが返ってきます。ebeanのログをはかせてSQLを見ると、in句に対応する部分が「 1 = 0」になっていました。空集合としての扱いをこういった形で実現しているようです。

### マイナスや0をいれたとき

次のように、0やマイナスの値をいれた場合はどうなるでしょうか。

```
password.intervals=[30,15,5,0,-10]
```

DateTime#plusDays(int days)がよろしくやってくれるので、0やマイナスをいれても大丈夫です。この場合は、

0 →　当日
-10 →　期限日から10日後

となります。


#　まとめ

設定ファイルから型を指定してとれると、なにかと便利ですね。
今回の場合だと、期限日前、当日、期限日後のタイミング指定できた上に、空列を渡せばリマインド対象の取得処理を止めることにもなります。

java7でもGuavaや他のライブラリを使えば、ちょこっと関数型っぽいことができるので、なんとかしのいでいけます。（scalaをやったあとにこれをやっているので、javaがオブジェクト指向であることを痛感します。）
WPのタイトル出力を変更させる

主に自分用のメモ書きです。

よくフロントページだけ独自のタイトルにしたいって時に、4.0？からだったと思うけど、add_theme_support()でタイトルが使えるようになってから、どうやればいいんだろうってなって書いたものです。
固定ページでフロントと投稿を分ける設定の時に使ってます。

```php:functions.php
add_filter('wp_title', 'my_theme_title_setup', 10, 2);
function my_theme_title_setup( $title ) {
  global $post;
  // フロントページの場合は固定ページのタイトルをそのまま反映させる
  if( is_front_page() ) {
    return wp_kses_post($post->post_title);
  }
  // フロントページ以外は、標準設定に則るようにそのまま返す
  return $title;
}
```
出力時は「設定」の「タイトル」が付かない状態で出力されます。
webアプリをサクっと公開できるサイトを作った

#ショーウィンドウ
![icon のコピー.png](https://qiita-image-store.s3.amazonaws.com/0/36652/b4937eff-7f7c-a855-e35b-a2eef729412e.png)

[http://show-window.com](http://show-window.meteor.com/)
![スクリーンショット 2015-07-23 16.56.08.png](https://qiita-image-store.s3.amazonaws.com/0/36652/f9360132-05d4-1785-f6c0-8fda2b82d261.png)

##手順①
右上の’アプリ登録’をクリック
![スクリーンショット 2015-07-23 17.10.35.png](https://qiita-image-store.s3.amazonaws.com/0/36652/c700b10a-30e9-a871-bc1c-3095594de05d.png)

##手順②
情報を入力して、公開
![スクリーンショット 2015-07-23 17.11.34.png](https://qiita-image-store.s3.amazonaws.com/0/36652/fa0e95ac-72b2-32e7-b927-7a2d1ebff464.png)
[PHP] composerのPROXY設定

世によく言われている``HTTP_PROXY_REQUEST_FULLURI``の設定が異なっていて、すごくはまった。

## 失敗時

### 環境変数

```shell-session
HTTP_PROXY=http://proxy-host:proxy-port/
HTTP_PROXY_REQUEST_FULLURI=0
HTTPS_PROXY=http://proxy-host:proxy-port/
HTTPS_PROXY_REQUEST_FULLURI=0
```
### composerのチェック

```shell-session
$ composer diagnose
Checking composer.json: OK
Checking platform settings: OK
Checking git settings: OK
Checking http connectivity to packagist: FAIL
[Composer\Downloader\TransportException] The "http://packagist.org/packages.json" file could not be downloaded (HTTP/1.0 400 Bad Request)
Checking https connectivity to packagist: OK
Checking HTTP proxy: OK
Checking HTTP proxy support for request_fulluri: FAIL
Unable to assess the situation, maybe packagist.org is down (The "http://packagist.org/packages.json" file could not be downloaded (HTTP/1.0 400 Bad Request))
Checking HTTPS proxy support for request_fulluri: OK
Checking github.com rate limit: OK
Checking disk free space: OK
Checking composer version: OK
```

httpsは成功するのに、httpが失敗する！

## 成功時

### 環境変数

```shell-session
HTTP_PROXY=http://proxy-host:proxy-port/
HTTP_PROXY_REQUEST_FULLURI=1
HTTPS_PROXY=http://proxy-host:proxy-port/
HTTPS_PROXY_REQUEST_FULLURI=0
```

``HTTP_PROXY_REQUEST_FULLURI``を``true``にする

### composerのチェック

```shell-session
$ composer diagnose
Checking composer.json: OK
Checking platform settings: OK
Checking git settings: OK
Checking http connectivity to packagist: OK
Checking https connectivity to packagist: OK
Checking HTTP proxy: OK
Checking HTTP proxy support for request_fulluri: OK
Checking HTTPS proxy support for request_fulluri: OK
Checking github.com rate limit: OK
Checking disk free space: OK
Checking composer version: OK
```

ようやくできた。
github で削除したブランチと同名のブランチをプッシュできないことがあったので理由を調べた

github でブランチを削除してから、
同名のブランチをプッシュしようとしたところ、失敗することがありました。

どうやら下の通りの手順で発生する模様です。

1. foo というブランチを作成
2. foo からプルリクを出す
3. foo を削除
4. 同じ名前の foo というブランチでプッシュ


この場合、2. で出したプルリクはクローズになりますが、
プルリクを開くと、当時のコードを読むことができます。

原因は、予想ですが、下のとおりです。

1. ブランチを削除しても、プルリクを出してある場合は、コードを残すために、github が、ブランチを裏で保存してある
2. そのため、同名のブランチをプッシュしようとすると、ブランチ名が衝突して失敗する
bootstrapでmodalがスクロールできなくなる場合の対処法について


bootstrapで、モーダルが画面の外まで表示されているときに、スクロールできなくなる場合がありました。

1. モーダルAを表示(show)
2. モーダルBを表示(show)
3. モーダルBを非表示(hide)
4. モーダルAがスクロールできない！

これは、モーダルBを非表示した際に、bodyについているクラスmodal-openが削除されてしまうためでした。modal-openは、モーダルを表示した際に追加されるクラスです。モーダルを非表示した場合に消えるのは当然なのですが、まだある場合は残しておいて欲しいものです…。

# 対処法

考えた対処法は、モーダルが消えたタイミングまだ表示中のモーダルがあれば、bodyにmodal-openクラスを追加するというものです。

```coffee:coffeescript
$ ->
  $(document).on 'hidden.bs.modal', '.modal', ->
    $('body').addClass('modal-open') if $('.modal').is(':visible')

```

これで、スクロール可能になりました。
Gitに大きなサイズのファイルをあげてしまい消せないだと？


強引に全コミットから該当のファイルを削除してしまうなど

```
$ git filter-branch --force --index-filter \
  'git rm --cached --ignore-unmatch 大きなファイル' \
  --prune-empty --tag-name-filter cat -- --all
$ git commit --amend -CHEAD
```

cf. http://huguma.hatenablog.com/entry/2014/10/03/184232
Rails で required 属性指定した際に Safari でフォームが送信できない


Rails で input 要素の required 属性を指定したときに、Safari でフォームを送信できない問題があった。

```
$ rails new cannot_submit
$ cd cannot_submit
$ rails g controller home show
```

```
<!-- app/views/home/show.html.erb -->
<form action="/">
<input required="required" name="user">
<input type="submit">
</form>
```

Safari でこの form を表示し、何も入力せず submit を押すと、何も起こらない (リクエスト発行されない / 表示変わらない / エラーも発生しない)。

調べると下記の条件で再現する。

- jquery_ujs を require している
- required 属性と name 属性を指定している input の value が空
- Safari / Mobile Safari を使用

どうやら、jquery_ujs が required な input を検証して、送信をキャンセルしているようだ。

Chrome や Firefox では、required な input が空なら submit 時にポップアップがでるが、Safari にはその機能がないため、何が原因で送信できないのか非常にわかりにくい。

[2011 年に issue として挙げられている](https://github.com/rails/jquery-ujs/issues/233) が、"desired behavier" であるとの理由で close されたまま。うーむ。

とりあえずの回避策としては、jquery_ujs による検証失敗時に発火する `ajax:aborted:required` イベントをハンドルして `false` を返せば、リクエストが送信されるようになる。Chrome や Firefox の動作にも影響はない。

```coffeescript
$ ->
  $("form").on "ajax:aborted:required", ->
    false
```
c++ builder XE4, 10.2 Tokyo > TComboBox > リスト以外の入力をさせない > style = csDropDownList

```txt:動作確認
C++ Builder XE4
Rad Studio 10.2 Tokyo Update 2 (追記: 2017/12/26)
```

TComboBoxでリスト以外の入力をさせないにはstyleプロパティをcsDropDownListにする。

<hr>
この設定の場合、選択状態から未選択状態にする良いユーザインタフェースがわからない。

TButtonを別途用意して、ボタン押下時にItemIndex=-1とするのが一つの方法。
TCheckBoxを横に置いて、「選択」か未選択切替するというのが別の方法。

いまいち直観的ではないように思う。
データ構造まとめ


全体像を簡単に知りたい方向けです。データ構造はプログラミングの難易度や計算回数に直結します。実務でそこまで意識する機会もないと思いますが、一通り知っておくと裏側で起きている計算まで理解することができるでしょう。

# データ構造の種類
- 配列と文字列
- 連結リスト
- スタックとキュー
- 木とグラフ


# 配列と文字列
## ◯配列
変数にインデックスを付けて扱えるようにするもの。

## ◯ハッシュテーブル
任意の種類のオブジェクト(キー)から任意の種類のオブジェクト(値)への関連付けを行うことが出来る。

## ◯※配列リスト(可変長配列)
実行時に自由にサイズを変えられる配列
Ruby/Perl/Pythonは自動的に調整してくれる。


# 連結リスト(リンクリスト)
自分の次、及び前の要素を示す情報を持つことで要素を連結させたリスト。

# スタックとキュー
## ◯スタック(後入れ先出し)
スタックは、あるデータの集合にデータを一つ追加し、その後一つ取り出すと、最初に追加したものが取得できる性質のもの。
To Doリストなど。一番最後に登録したタスクから処理していく。
ex) [1,2,3,4]に5を入れる。(push)　5が出てくる。(pop)

## ◯キュー(先入れ先だし)
スタックと逆の動作。データの集合にデータを一つ追加し、その後一つ取り出すと、最初に追加されたデータが出てくる。
待合室データなど。一番最初に登録した人を処理していく。
ex) [1,2,3,4]に5を入れる。(enqueue)　1が出てくる。(dequeue)


# 木とグラフ
![5kJXf.gif](https://qiita-image-store.s3.amazonaws.com/0/71616/2c40072a-df54-4712-24d0-f7988745efc4.gif "5kJXf.gif")

## ◯二分木と二分探索木
二分木とは、あるノードが持つ子の数が高々2であるもの。
二分探索木は、左の子ノードと親ノードより小さいか等しいかつ、右ノードよりも小さくなければならない。

## ◯平衡木と非平衡木
木構造のうち、根ノードから葉ノードまでの高さ(深さ)が等しくなるように構築されたもの。


## ◯完全二分木
全ての葉が同じ深さをもつ二分木。
openFrameworksでUTF-8文字列を１文字ずつ分割する

通常のASCII文字列であれば
`string str = "ABCDE";
cout << str.at( 0 );`
というふうにstringのat()関数を使えば指定したインデックスの１文字が取得できます。

正確には、at()関数で取得できるのは指定したインデックスの1バイトであるため、2バイト文字や3バイト文字を含む日本語文字列( UTF-8 )を分割しようとすると、困ったことに本来2バイトや3バイトで一文字になっているものも容赦なく1バイトずつに分割されてしまいます。

そこで、ここ( [UTF8エンコードをデコードする](http://www.eva.hi-ho.ne.jp/cgi-bin/user/zxcv/decodeUTF8.cgi) )を参考にして、

一度at()関数で1バイトずつ分割
　　　　　　　▼
UTF-8での1バイトごとのビットパターンを識別
　　　　　　　▼
2~3バイト文字の場合は連結して1文字に
　　　　　　　▼
string型のvectorに連結した文字を追加

という手順で実装しました。

```cpp:ofApp.h
class ofApp : public ofBaseApp
{
public:
  void setup();
  vector< string > separateUTF8String( string _srcStr );
  
  string srcStr;
};
```

```cpp:ofApp.cpp
void ofApp::setup()
{
  srcStr = "はろーわーるど！Hello, world!";
  vector< string > letters_uc = separateUTF8String( srcStr );
  for( string s : letters_uc )
  {
    cout << s << endl;
  }
}

vector< string > ofApp::separateUTF8String( string _srcStr )
{
    vector< string > letters;
    
    for( int i = 0; i < _srcStr.length(); ++i )
    {
        string bin_str = ofToBinary( _srcStr.at( i ) );
        
        // 1 byte character
        if( bin_str.find( "0" ) == 0 )
        {
            letters.push_back( ofToString( _srcStr.at( i ) ) );
        }
        // 2 byte character
        else if( bin_str.find( "110" ) == 0 )
        {
            letters.push_back( ofToString( _srcStr.at( i ) ) + ofToString( _srcStr.at( i + 1 ) ) );
        }
        // 3 byte character
        else if( bin_str.find( "1110" ) == 0 )
        {
            letters.push_back( ofToString( _srcStr.at( i ) ) + ofToString( _srcStr.at( i + 1 ) ) + ofToString( _srcStr.at( i + 2 ) ) );
        }
        // continue byte ( second or later byte )
        else if( bin_str.find( "10" ) == 0  )
        {
            
        }
    }
    
    return letters;
}
```

実行結果
>は
>ろ
>ー
>わ
>ー
>る
>ど
>！
>H
>e
>l
>l
>o
>,
> 
>w
>o
>r
>l
>d
>!
Windows で vagrant up 中にエラーが出たら (`gsub!': invalid byte sequence in Windows-31J)

Windows で virtualbox の仮想サーバーをつくるために vargant を使ってます

いろいろいじっていたら急に
`vagrant up `
した時に以下のようなエラーが発生するようになってしまいました

```
==> default: Running cleanup tasks for 'shell' provisioner...
C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.7.2/plugins/provisioners/shell/provisioner.rb:179:in `gsub!': invalid byte sequence in Windows-31J (
ArgumentError)
       from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.7.2/plugins/provisioners/shell/provisioner.rb:179:in `with_script_file'
       from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.7.2/plugins/provisioners/shell/provisioner.rb:52:in `provision_ssh'
       from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.7.2/plugins/provisioners/shell/provisioner.rb:24:in `provision'
       from C:/HashiCorp/Vagrant/embedded/gems/gems/vagrant-1.7.2/lib/vagrant/action/builtin/provision.rb:133:in `run_provisioner'
## ～ 以下省略 ～
```

いろいろ調べてみると、 config.vm.provision に設定したプロビジョニング用のシェルに全角文字のコメントを追加したのが原因のようでした

コメントはそのまま残したかったので Vagrantfile に以下の設定を追加することでエラーを解消できました
`
Encoding.default_external = 'UTF-8'
`


※参考 (助かりました！)
http://dqn.sakusakutto.jp/2014/02/vagrant_up_gsub_invalid_byte_se.html
c++ builder XE4, 10.2 Tokyo > C:\Program Files(x86)を取得する > String ProgFilesDir = GetEnvironmentVariable("ProgramFiles(x86)");

```txt:動作確認
C++ Builder XE4
Rad Studio 10.2 Tokyo Update 2 (追記: 2017/12/26)
```

64bit版Windows上にて32bit対応のプログラムをインストールした時は 「C:\Program Files (x86)」というフォルダにインストールされる。
このフォルダ名の取得。

```cpp
String ProgFilesDir = GetEnvironmentVariable("ProgramFiles(x86)");
```

C:\Program Files (x86)
がないPC上ではProgFilesDirは L""になる。

以下は参考になったページ。
http://www.gesource.jp/weblog/?p=4709
http://office-qa.com/win/win182.htm

<hr>
32bit OS, 64bit OSどちらでもフォルダ名を取得するには (ただし、32bitソフトという前提では)。

```cpp
static String getProgramFilesDir()
{
	String ProgFilesDir = GetEnvironmentVariable(L"ProgramFiles(x86)"); // 32bit ソフト on 64bit OS

	if (ProgFilesDir.Length() == 0) {
		ProgFilesDir = GetEnvironmentVariable(L"ProgramFiles");
	}

	return ProgFilesDir;
}
```
Install Erlang on EC2


## Install Erlang on EC2

Source Link
http://www.erlang.org/download.html

```
$ sudo yum install gcc gcc-c++ glibc-devel make ncurses-devel openssl-devel autoconf java-1.8.0-openjdk-devel unixODBC unixODBC-devel fop
```

```
$ cd /usr/local/src/
$ sudo wget http://www.erlang.org/download/otp_src_18.0.tar.gz
$ sudo tar -zxf otp_src_18.0.tar.gz
$ cd otp_src_18.0
$ export ERL_TOP=`pwd`
$ sudo ./configure
$ sudo make
$ sudo make install
```

```
$ erl
Erlang/OTP 18 [erts-7.0] [source] [64-bit] [async-threads:10] [hipe] [kernel-poll:false]

Eshell V7.0  (abort with ^G)
1>
```
plotly でいい感じのグラフをつくる

plotly のつかいかた  
前回からつかってみてだいぶ慣れたのでつづき
trace にデータセットして Data でまとめるという感じ

![scatter.png](https://qiita-image-store.s3.amazonaws.com/0/17228/b3ae47f2-9184-6bac-bf1e-65eb4246db43.png)

```py3:scatter
import plotly.plotly as py
from plotly.graph_objs import *

trace = Scatter(x=list(range(10)), y=list(np.random.randint(0,30,10)))
data = Data([trace])
py.image.save_as(data, filename='scatter.png')
```
![bar.png](https://qiita-image-store.s3.amazonaws.com/0/17228/fd741d50-39f3-bb24-3378-108fa7577976.png)

```py3:bar
trace = Bar(x=list(range(10)), y=list(np.random.randint(0,30,10)))
data = Data([trace])
py.image.save_as(data, filename='bar.png')
```
![histogram.png](https://qiita-image-store.s3.amazonaws.com/0/17228/cb50b41b-451e-4429-4c83-9afeafcbaad8.png)

```py3:histogram
trace = Histgram(x=np.random.randn(500))
data = Data([trace])
py.image.save_as(data, filename='histogram.png')
```
![heatmap.png](https://qiita-image-store.s3.amazonaws.com/0/17228/4df77161-7f26-385a-31e1-ec9a02878cf8.png)


```py3:heatmap
trace = Heatmap(
    z=[np.random.randint(1,50,50) for _ in range(50)],
    colorscale='YIGnBu',
)
data = Data([trace])
py.image.save_as(data, filename='heatmap.png')
```
![bar_scatter.png](https://qiita-image-store.s3.amazonaws.com/0/17228/564a55c5-bacd-ff92-18ca-7c0195ed8d3a.png)

```py3:multiple_chart
trace = Bar(x=list(range(8)), y=list(np.random.randint(0,10,8)))
trace2 = Scatter(x=list(range(8)), y=list(np.random.randint(0,10,8)))
data = Data([trace, trace2])
py.image.save_as(data, filename='multiple.png')
```
![fap.png](https://qiita-image-store.s3.amazonaws.com/0/17228/72854ddc-5faf-5848-260d-e15c1b986589.png)

```py3:field_area_plots
trace = Scatter(
    x=list(range(8)),
    y=list(np.random.randint(0,10,8)),
    fill='tonexty',
    mode='none'
)
trace2 = Scatter(
    x=list(range(8)),
    y=list(np.random.randint(0,10,8)),
    fill='tonexty',
    mode='none'
)
data = Data([trace, trace2])
py.image.save_as(data, 'field_area_plots.png')
```
マージコミットのあるブランチでのgit rebaseには-pオプションを付ける

僕の会社ではmasterブランチからtopicブランチをきって開発を行っています。
topicブランチにmasterの差分を取り入れたいときは、mergeではなくrebaseで行うよう推奨しているのですが、稀にmergeでmasterの変更を取り入れてしまう人がいて、topicブランチにmasterブランチからのマージコミットログが残っています。

masterのHEADにマージコミットがある場合はgit reset等を使って、マージコミットをなかった事にしてもらっているのですが、

例)
```
master    
|　　topic
| 　 |
|　　○
| ／ |
○　　○
|　　|
○　　○
| ／ 
○
```

masterのマージコミットの上にさらにtopicブランチでの開発をすすめている場合は、修正が厄介です。

例)
```
master    
|　　topic
|　　|
|　　○ C4
|　　|
|　　○ C3
| ／ |
○　　○ C2
|　　| 
○　　○ C1
| ／ 
○
```

そういう時はgit resetでの修正も面倒になってくるので、以下のようにgit rebase -iに-pオプションをつけて実行して解決します。

git rebase -i -p ${消したいマージコミットハッシュの一つ前のコミット}
※git rebaseで指定するマージコミットのハッシュは上の例の場合はC2のハッシュを指定します。

エディタでマージコミットの行を削除すればマージはなかった事になります。

ほかにいい方法があれば教えてほしいですが、今の所ベストな解決方法かなと思っています。
javascriptで文字列内に任意の文字列が含まれているかをtrue/falseで返す

よく忘れるのでメモ。

```js
'検索される文字列'.indexOf('検索') != -1
```

`indexOf`はtrue/falseを返さない。

一致した文字列が何文字目から始まるかを返す。検索文字列が存在しなかった場合は-1を返す。


    > '検索される文字列'.indexOf('検索') != -1
    > true
    > '検索される文字列'.indexOf('あ') != -1
    > false
セル内の値によって背景色を切り替えたい（Excel2013）

## はじめに

ありふれた内容ですが、いつも確実に忘れるのでメモしておきます。
課題管理表やQA表などを作るとき、終了ステータスになっている項目は、行全体を自動的にグレーにしたいことがよくあります。
今回は以下のような表を例に、ステータス項目が解決済になっている行がグレーになるように設定したいと思います。

## 手順

まずは適用したいセルを範囲選択します。今回は赤枠の部分です。

![1.png](https://qiita-image-store.s3.amazonaws.com/0/78285/a3182a90-0733-dbf5-289e-de6e696d68ed.png)

メニューから条件付き書式->新しいルールを選択すると、新規ルール作成ダイアログが出ますので、赤枠のとおり入力してOKを選択します

![2.png](https://qiita-image-store.s3.amazonaws.com/0/78285/9f20249e-2658-8167-14eb-7ed4e0bf64f1.png)

うまいこと解決済の行がグレーになりました。ほかの行も解決済にすればグレーになるはずです。

![3.png](https://qiita-image-store.s3.amazonaws.com/0/78285/d0eef413-90c8-fc43-f22b-8994e80de3af.png)

おしまい
Slackにgerritのstream-eventsの内容を流すgerrit-slackを使ってみた

https://github.com/ddonahue99/gerrit-slack

# 使い方

READMEに書いてある通りで、

- cloneしてきて
- bundleして
- ymlをsampleからコピーして必要事項を記入して
- bin/gerrit-slack を起動する

だけ。1個だけ詰まったところがあったので書いとく。

## channels.ymlの*の意味

書いてある通りなんだけど、普通のワイルドカードじゃなくて、プロジェクト名の最後につけると「当該プロジェクトの通知は、ownerが誰であっても行う」という意味です。なので、どっちにしてもプロジェクト名はちゃんと書かないとだめです。

# 便利なとこ

* alias.ymlに書くと、slackとgerritで名前が違う人にも@が飛ぶ。

# 不便なとこ

* 行に対して書いたコメントが表示されない。これはgerritのstream-eventsに含まれてないから仕方ないところはある。
* Slackに登録されてない :yuss: とか :dancing_cool: とかの絵文字を使おうとする。まあ登録したらいい気がします。
* コメントに改行入ると読みにくい

まあ、そんなに難しいことしてないんで、変えたいところは普通に変えたらいい気はしてます。
Dell Digital Deliveryでエラーになった場合の対応

#Dell Digital Deliveryでエラーになった時に取った対応

##構成
Dell Vostro 15 3000（3549）
Windows8.1
Dell Digital Delivery V3.0

##現象
新しくDellPCを購入し、付属ソフトウェア（McAfee SecurityCenter)をインストールするため、Dell Digital Deliveryを起動すると下記のエラーが発生した。

*Dell digital Delivery is currently being upglade. Please wait a minute and try again*

というようなエラーが発生し、正常にインストールが進まない状態になった。

##対応
Dell Updateなど様々な方法を試してみたが、何をやっても状態は変わらず
最終的に取った手段が、

1.Dell Digital Deliveryをアンインストール
2.Dell Digital DeliveryをDellのサイトからダウンロードして再インストール
　ダウンロードサイトから落としたものは、バージョン2.9

すると、Dell Digital Deliveryインストール完了後に自動的に起動し
McAfee SecurityCenterのインストールが無事完了した。
すべてのformにnovalidateを追加するブックマークレットのご紹介

`novalidate`の存在を知って、書いて、調べて、車輪の再発明を知る。

[Disable HTML5 form validation with novalidate!]

[Bookmarklet to disable HTML5 Form Validation]

いや、あるはずだということはわかっていましたけどね。

自分が作ったのは↓でした

```js
javascript:
var forms = document.getElementsByTagName('form');
Array.forEach(forms, function(item){
  item.setAttribute('novalidate', '');
});
```

参考:[配列ライクなオブジェクトをforEachするときのイディオム - ぷちてく - Petittech]

[document.forms]なんて…ずるい…

サーバーサイドvalidationの動作テストに便利だと思います。
けど、そんな感じに使っている検索結果が出ないので、皆さんは実際どうやってるんでしょうね？

自分は一度、自分で導入した`required`属性をインスペクタで一つずつ消してバリデーションの動作テストをするのに心底うんざりしました。
でもあるとユーザーとしては便利ですよね…

[Disable HTML5 form validation with novalidate!]:http://novalidate.com/
[Bookmarklet to disable HTML5 Form Validation]:https://gist.github.com/rewmike/7146063
[配列ライクなオブジェクトをforEachするときのイディオム - ぷちてく - Petittech]:http://ptech.g.hatena.ne.jp/noromanba/20120521/1337639496
[document.forms]:https://developer.mozilla.org/ja/docs/Web/API/Document/forms
スマホアプリの自動テストサービスMovaTestingを試してみた

朝日新聞のこんな掲載[Androidアプリ・サイトのテスト自動化クラウドサービス「Mova Testing」を本日より提供開始致します](http://www.asahi.com/and_M/information/pressrelease/CPRT201521928.html)を見て、MovaTestingを試してみた。

①MovaTestingにアカウント登録
 [MovaTesting ホームページ](https://www.movatesting.com/)でアカウントを新規登録。メールアドレスとパスワード設定で登録してみた
 アカウント登録通知メールが来て、再度、アクセスすれば、登録完了。一般的な感じ。


②実際にMovaTestingを動かしてみた
![image](https://qiita-image-store.s3.amazonaws.com/0/87261/80c46299-4575-638f-1cdb-6c83fd4a37b6.png)
手動操作とやらに入ると端末が並ぶ。17端末あった。ちょっと少ないか？

![image](https://qiita-image-store.s3.amazonaws.com/0/87261/17ce770f-a778-135a-260d-fa50fd031cd3.png)
![image](https://qiita-image-store.s3.amazonaws.com/0/87261/a0084abd-aa60-ba2b-8e69-e0ca1a98c5e1.png)
Ｆ−0３Fを利用してみた。自分のアプリをF-03Fにインストールして、PCで動かす。“アプリ選択”でアップロードするだけ。操作性は良い。比較的、レスポンスも良い。


![image](https://qiita-image-store.s3.amazonaws.com/0/87261/9e9c0204-33ec-0df0-104e-7d57b9356b75.png)
“人工知能に利用”を使ってみた。端末を操作すると自動でスクリプトが生成される。これは、珍しい。端末操作とともに、リアルタイムにスクリプトが生成されていく。誰でもスクリプトが作成できそうな感じ。

![image](https://qiita-image-store.s3.amazonaws.com/0/87261/bedcce0c-0e54-4899-b875-de2a228b643b.png)
インストールしたアプリと“人工知能に利用”で生成されたスクリプトで自動テストを流してみた。アプリと、スクリプトを指定後、テストしたい端末を選ぶだけ。

![image](https://qiita-image-store.s3.amazonaws.com/0/87261/504d7b89-6e82-cdec-f401-c4ec48e20ef0.png)
自動テストが始まった。スタートボタンを押して、十秒位待つと複数台同時にテストが走り始めた。あとは待つだけ。意外と待った。3台はスタートボタンを押した後、即完了したが、残り２台の実行開始まで時間が掛かった。端末によるものか？

③MovaTestingを操作してみて
一連の操作を行った。操作性、レスポンスは悪くない。端末数が増えていけば使える感じがします。
C++　複数条件でのソート。

複数条件でのソートにまつわる問題

C++11

複数の条件でソートしたかった。
例えば以下の感じ
意図：アルファベットで整列させてから、数値でソートするとグループ毎にソートされないかなと。
1A
1B
1C
2B
3A
4B

普通のソート
std::sort()
ぐちゃった。　それまでソートされた順序も変更される

安定ソート
std::stable_sort()
それまでの順番が保持される。
JSON > JSONを利用することで冗長なXMLと比べて通信時のデータ量を削減できるなどのメリットもあります

http://thinkit.co.jp/article/70/1/

> JSONはXMLと比べるとタイプ数も少なく、きちんとインデントされていれば可読性も高いことがわかります。
...
> このようにJavaScriptとの親和性の高さから現在ではAjaxでのデータ交換フォーマットとして広く利用されるようになりました。
...
> JSONを利用することで冗長なXMLと比べて通信時のデータ量を削減できるなどのメリットもあります。

構造的な文字列を送受信する手段として、XMLよりもJSONの方がいいのかもしれない。
csharp > プロパティ > private re; public double Re {...} > 命名規則? 

http://ufcpp.net/study/csharp/oo_property.html

上記に以下のようなコード例があった。

```csharp
class Complex
{
    // 実装は外部から隠蔽(privateにしておく)
    private double re; // 実部を記憶しておく

    // 実部の取得・変更用のプロパティ
    public double Re
    {
        set { this.re = value; }
        get { return this.re; }
    }
    ... 
```

reというprivate変数に対して、プロパティRe()を用意してる。

他のサイトでも同じように小文字のprivate変数(name)に対して先頭大文字のプロパティ名(Name())の例があった。
http://qiita.com/shell/items/1908decb889ad60fb8d2

こういう命名規則があるのだろうか? それは一般的なのだろうか?
画像認識を利用したドローンのコーディング方法

画像認識を利用したドローンのコーディング方法が詳しく書いてある文献を見つけた。
必要を生じたときに、詳しく読んでみるためにメモを残しておくことにした。


githubでソースコードも公開している。

修士論文(master's thesis)
http://digitalassets.lib.berkeley.edu/techreports/ucb/text/EECS-2014-117.pdf

Github
https://github.com/ssk2/drones-267



Githubのページを見ていくと、
papers
presentations
などをさらに読み勧めていくことができる。
image segmentation

Bryan Catanzaro 他　[drones-267/papers/Efficient,High-Quality Image Contour Detection.pdf](https://github.com/ssk2/drones-267/blob/f6920127ef8c9a5ef0d20719a7bb1fca50bad46d/papers/Efficient%2CHigh-Quality%20Image%20Contour%20Detection.pdf)
の論文にたどりつく。


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

リアルタイム性が要求される分野なのでSIMDやマルチスレッド化などの考え方がふれられている。2014年の時点で、どのようなARMベースのボードを選択したか、どのようなライブラリを、どう置き換えて使用したのか、手法の選択によって処理時間にどれだけの差を生じたのかが書いてある。

24 点のコーナー点。
6自由度で48の方程式をSVD(特異値分解)で解いている。
コーナー点の検出がhotpointだったと書いている。


BeagleBone Black Hardkernel Odroid XU
Robotics Operating System (ROS),
などを使っている。

###**Arucoについて**

ARマーカーを使ってカメラ位置を推定する。
Github Aruco-with-Python
https://github.com/JanezCim/Aruco-with-Python

　　　どうやらArucoライブラリへのPython bindingを作ったものらしい。


https://www.arnavichara.com/ar_about2.html
　　　ARマーカーへの解説記事


[軽量な AR ライブラリの ArUco について調査中](http://qiita.com/nonbiri15/items/b893cb614d7dd6c8c86a)






###**付記：**
[ドローンにもオープンソース化の流れがある](http://qiita.com/drafts/1ed21fb75979ed55e158/edit)
ubuntuでSelenium2を使ったIEブラウザテスト

ubuntuでSelenium2を使ったIEブラウザテスト

まずubuntu環境にVirtualBoxとModernIEをインストールします

## VirtualBoxインストール
sudo apt-get update
sudo apt-get install virtualbox

## ModernIEインストール
https://www.modern.ie/ja-jp

http://qiita.com/muran001/items/60fe5c52c8bc11906f21

Modern.IEは90日間無償で利用できる、IEテスト用のVMイメージです。
ライセンスが切れたら削除して再度ダウンロードしてくる必要があります。
なので、Modern.IEを利用するために必要なことは手順書として残しておいたほうがよさそうです。

### 日本語化する
- 参考サイト：http://qiita.com/hnakamur/items/5f2f9e817dd0de60abb2 

### ubuntuからVirtualBoxに接続するための設定
- ファイル　＞　環境設定　＞　ネットワーク　＞　ホストオンリーネットワークを追加
- 設定　＞　ネットワーク　＞　アダプター2でホストオンリーアダプタを設定すると先ほど追加したネットワークが名前の箇所に自動で割り当てられる
- ipconfigで192.168.xxx.xxxが割り当てられていれば成功です。

### ubuntuに存在するテストコードからModern.IEのブラウザを起動させるためSelenium Standalone Serverを構築する
- Modern.IE環境にて、Selenium Standalone Serverを任意の場所にダウンロード（http://www.seleniumhq.org/download/）
- Selenium Standalone Serverをダウンロードした同じ場所にThe Internet Explorer Driver Serverをダウンロードする
- 起動コマンド。リッスンポートを4444にした

```
java -jar selenium-server-standalone-2.46.0.jar -Dwebdriver.ie.driver=./IEDriverServer.exe -p 4444 > ./active.log 2> error.log
```

### ファイアーウォールにポート4444のアクセス許可を追加

- コントロールパネル　＞　システムとセキュリティ　＞　Windowsファイアウォール　＞　詳細設定
- 受信の規則画面で、新しい規則をクリックし、ポートにチェック、TCPを選択し、特定のローカルポートに4444を指定して適当な名前をつけて保存。

## ubuntuに存在するテストコードからModern.IEのブラウザを起動させてテストする

ログインテストを行う処理です。ieドライバーを利用するように設定します。

```rspec:spec/features/login/login_spec.rb
describe 'ログイン管理' do

  before :each do
    # IEドライバーを利用するように設定。このあとのsetup_utility.rbのsetup_ieを実行します。
    @driver = SetupUtility.setup_ie wait_time: 30

    # ページインスタンスの用意
    @private_login_page = PrivateLoginPage.new(@driver)

    # オペレータの用意
    @login_op    = LoginOperator.new(@driver)
    @entry_op    = EntryOperator.new(@driver)
    @front_op    = FrontBlogOperator.new(@driver)

    # ページを開く
    @private_login_page.open
  end

  after :each do
    @driver.quit
  end

 describe "ログイン：Private" do
   〜〜　省略　〜〜
```

ログインテストから実行され、各種ドライバーをセットアップする処理です。
IEのドライバをセットアップする箇所のみ記載しています。

```rspec:spec/support/selenium/setup_utility.rb
  # IEのドライバをセットアップする
  def setup_ie(args)
    # タイムアウト設定
    $implicit_wait_time = args[:wait_time]  ||  30

    # IEドライバーを設定
    capabilities = Selenium::WebDriver::Remote::Capabilities.ie

    # ドライバを生成します。192のIPは先程Modern.IEでipconfigで確認したものを設定します。
    # 4444はSelenium Standalone Serverがリッスンしているポートです。
    # /wd/hubはSeleniumサイトのドキュメントに記載している通りに指定しています。
    driver = Selenium::WebDriver.for :remote,
                                     :url => 'http://192.168.56.101:4444/wd/hub', 
                                     :desired_capabilities => :ie

    # タイムアウト時間を設定する
    driver.manage.timeouts.implicit_wait = $implicit_wait_time

    return driver
  end
```


こんな感じです。これでIEの自動テストもバッチリ！かも。
Laravel5.0でlaravel-debugbarを使う

# パッケージインストール
https://github.com/barryvdh/laravel-debugbar
これの2.xを使う。

```json:composer.json
  "require-dev": {
    "barryvdh/laravel-debugbar": "2.*@dev"
  },
```

⇒ composer update

# 設定
`config/app.php` の`providers`, `aliases`に追記。

```php:app.php
    'providers' => array(
        // ...
        'Barryvdh\Debugbar\ServiceProvider',
    )

    ...

    'aliases' => array(
        // ...
        'Debugbar'  => 'Barryvdh\Debugbar\Facade',
    )
```

# env設定
```php:.env
APP_DEBUG=true
```

# appのURL指定確認
```php:config/app.php
  /*
   |--------------------------------------------------------------------------
   | Application URL
   |--------------------------------------------------------------------------
   |
   | This URL is used by the console to properly generate URLs when using
   | the Artisan command line tool. You should set this to the root of
   | your application so that it is used when running Artisan tasks.
   |
   */

  'url' => '動作環境でのURL',
```
（ここで別ドメイン等を指定していると`_debugbar/assets/`配下ファイルが読み込めずデバッグバーが表示されない）


→ここまでで画面下にデバッグバーが表示される。

# サンプルコード
## 実行時間計測
```php:
use Debugbar;

// 計測開始
Debugbar::startMeasure('key','ファイルアップロードにかかった時間');

// 測りたい部分

// 計測終了（デバッグバーのTimelineに実行時間が表示される）
Debugbar::stopMeasure('key');
```

開始と終了で同じ`'key'`を指定した部分の実行時間が計測される模様。
いつも忘れるGitコマンド

diff across branches
`git diff hoge fuga foo.txt`

checkout tag
`git checkout -b tagname refs/tags/tagname`

pull branch
`git checkout -b newbranch origin/newbranch`

merge remote develop change
`git checkout develop && git merge origin/develop`

untrack files
`git rm -r --cached "path/to/foo/"`

submodule update
`git submodule update --init --recursive`

squash commits
http://labs.timedia.co.jp/2010/11/git-squash-commits.html

submodule local repo
`git submodule add --reference /path/to/local_repo git://example.com/repo.git`
Mac OSXにFiddlerをインストールする

## About the App

App name: Fiddler
App description: fiddler (App: Fiddler.app)
App website: http://www.telerik.com/fiddler


## Install the App

Press Command+F and type Terminal and press enter/return key.
Run in Terminal app:
```ruby -e "$(curl -fsSL https://raw.githubusercontent.com/Homebrew/install/master/install)" < /dev/null 2> /dev/null ; brew install caskroom/cask/brew-cask 2> /dev/null```
and press enter/return key. Wait for the command to finish.
Run:
```brew cask install fiddler```
Done! You can now use Fiddler.

Ref: http://macappstore.org/fiddler/
classes.dexファイルをjarファイルに変換する


## 準備

### ツールをあらかじめ落としておいてね
[dex2jar](https://github.com/pxb1988/dex2jar)からダウンロードする


こいつを変換します

```
$ file classes.dex
classes.dex: Dalvik dex file version 035
```


## 実行

```
$ d2j-dex2jar.sh classes.dex
dex2jar classes.dex -> classes_dex2jar.jar
Done.
```
vmwareクローン後にネットワークアダプタが認識しない件

#ネットワークアダプタの設定

##環境

* vCenter
* RedHatEnterprise 7.1

##起こったこと
RHEL7.1をクローンして、NICを追加したら認識してくれません！


##解決方法

```
#NICを認識させる
nmcli connection add autoconnect yes ifname xxxx type ethernet ipv4 xx.xx.xx.xx

#NICにIPをきちんと割り振る
nmcli connection modify xxxx ipv4.method manual ipv4.address xx.xx.xx.xx/xx ipv4.gateway xx.xx.xx.xx

#変更を反映する
nmcli connection up xxxx