OmniAICreator/Qiita-1.07M huggingface dataset:
Elasticsearchの複数タグをもつドキュメントがどのように検索できるか試してみる

senseで実行します。

# indexの作成とデータの挿入

```json
# Delete the `my_index` index
DELETE /my_index

# Create index
PUT /my_index

# Index example docs
PUT /my_index/my_type/1
{
  "tags": [
    "search"
  ],
  "tag_count": 1
}

PUT /my_index/my_type/2
{
  "tags": [
    "search",
    "open_source"
  ],
  "tag_count": 2
}
```

# 検索

## searchというタグが含まれているものを検索

```json
# クエリ
GET /my_index/my_type/_search
{
  "query": {
    "constant_score": {
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "tags": "search"
              }
            }
          ]
        }
      }
    }
  }
}

# 結果
{
  "took": 8,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 2,
    "max_score": 1,
    "hits": [
      {
        "_index": "my_index",
        "_type": "my_type",
        "_id": "2",
        "_score": 1,
        "_source": {
          "tags": [
            "search",
            "open_source"
          ],
          "tag_count": 2
        }
      },
      {
        "_index": "my_index",
        "_type": "my_type",
        "_id": "1",
        "_score": 1,
        "_source": {
          "tags": [
            "search"
          ],
          "tag_count": 1
        }
      }
    ]
  }
}
```

# open_sourceという単語が含まれているものの結果は以下

```json
# クエリ
GET /my_index/my_type/_search
{
  "query": {
    "constant_score": {
      "filter": {
        "bool": {
          "must": [
            {
              "term": {
                "tags": "open_source"
              }
            }
          ]
        }
      }
    }
  }
}

# 結果
{
  "took": 1,
  "timed_out": false,
  "_shards": {
    "total": 5,
    "successful": 5,
    "failed": 0
  },
  "hits": {
    "total": 1,
    "max_score": 1,
    "hits": [
      {
        "_index": "my_index",
        "_type": "my_type",
        "_id": "2",
        "_score": 1,
        "_source": {
          "tags": [
            "search",
            "open_source"
          ],
          "tag_count": 2
        }
      }
    ]
  }
}
```


# 参考
* https://www.elastic.co/guide/en/elasticsearch/guide/current/structured-search.html
* nullの扱いに関しては以下
    * https://www.elastic.co/guide/en/elasticsearch/guide/current/_dealing_with_null_values.html
* https://www.elastic.co/guide/en/elasticsearch/guide/current/_finding_multiple_exact_values.html
OmniFocusをAlfredでToggle

# 目的
AlfredのWorkFlowで素早くOmniFocus２の標示をトグル。

OmniFocus2でGTDモドキを運営しているが、
必要ないときは、隠れていてほしい。
そこでWorkflowを作ってみた。

#条件
 - Alfredは有償版を使用
  

#方法
Workflowの追加＞template > File and Apps > Launch file group form hotkey

を選択

![160901-0005.png](https://qiita-image-store.s3.amazonaws.com/0/6903/9035d15a-f605-a856-4d95-d80ade4cb700.png)


name （とDescription）を書く

![160901-0004.png](https://qiita-image-store.s3.amazonaws.com/0/6903/549dfdf7-8447-3f59-e534-9697c67e5e06.png)


右クリックからConfigure Objectを選択して、Omnifocus.appをドラック＆ドロップする。

ホットキーを選択して終了。



これでいつでもOmniFocusが出し入れできます。
さくらのレンタルサーバでmysqldumpを実行すると文字化けする件とその対応方法

# はじめに

さくらのレンタルサーバのMySQLは、デフォルトの文字コードがujis(EUC-JP)のため、utf-8なデータベースやテーブルをmysqldumpでエクスポートすると文字化けする場合があります。

```
mysql> show variables like "chara%";
+--------------------------+----------------------------------+
| Variable_name            | Value                            |
+--------------------------+----------------------------------+
| character_set_client     | ujis                             |
| character_set_connection | ujis                             |
| character_set_database   | ujis                             |
| character_set_filesystem | binary                           |
| character_set_results    | ujis                             |
| character_set_server     | ujis                             |
| character_set_system     | utf8                             |
| character_sets_dir       | /usr/local/share/mysql/charsets/ |
+--------------------------+----------------------------------+
```

# 対応方法

以下に示すように、mysqldump実行時に「--default-character-set=utf8」を付けることで文字化けしなくなります。

## エクスポート時

```
mysqldump --default-character-set=utf8 -h mysql***.db.sakura.ne.jp -u [hogeuser] -p[hogepassword] [hogedb] > ~/hoge.sql
```

## インポート時

```
mysql -h mysql***.db.sakura.ne.jp [hogeuser] -p[hogepassword] [hogedb] < ~/hoge.sql
```

インポート時に文字化けする場合は、「--default-character-set=utf8」を付けて再度確認してください。
linux > du -s * > display only a total for each argument

```txt:動作環境
CentOS 6.8 
```

関連 http://qiita.com/dolaemoso/items/95d9461e93e64c0b4b79
関連 http://qiita.com/okb_m/items/a3096c873e1855bae7d8
関連 http://qiita.com/dikaiosynee/items/b1a153dab0e9cc75e520

使用している容量を調べる方法で`du -s *`を使っている例が自分が使いたいものだった。

-sは何かはman duで見ると

> display only a total for each argument

実行すると以下のようになった。

```
$ du -s *
4	Desktop
4	Documents
522548	Downloads
4	Music
134904	NCEP_FNL_DATA
4	Pictures
4	Public
0	public_html
4	Templates
4	Videos
8	WORK
10303448	WPS
270044	WRF_DATA
1124512	WRFV3
```
Atomで前回終了時のウィンドウをリストアしない

Atomのデフォルトの動作では、起動時に前回終了時のウィンドウをリストアします。

Atomはメモ帳代わりに使っているのでデフォルトではOffになっていてほしい機能です🙍

これを無効にするには、設定ファイル(`config.cson`)に`core.restorePreviousWindowsOnStart`を追加して`false`に設定します（***Atom1.8以降***）。

```config.cson
"*":
  core:
    # ...
    restorePreviousWindowsOnStart: false # 追加
  # ...
```

`config.cson`に`core.restorePreviousWindowsOnStart`を追加するとSettings画面にも項目が表示されます。こちらでOn/Offを切り替えることも可能です。

![atom_restore_previous_windows_on_start.png](https://qiita-image-store.s3.amazonaws.com/0/10459/4db34cf5-57cf-abd0-86cb-cef17e595aed.png)


これで晴れ晴れとした気持ちで使えます🙆
Rails 電話番号、メールアドレスのバリデーション

## メールアドレスバリデーション
VALID_EMAIL_REGEX = /\A[\w+\-.]+@[a-z\d\-.]+\.[a-z]+\z/i
validates :email, presence: true, uniqueness: true, format: { with: VALID_EMAIL_REGEX }

## 電話番号
固定電話と携帯番号(ハイフンなし10桁or11桁)
VALID_PHONE_REGEX = /\A\d{10}$|^\d{11}\z/
validates :phone, presence: true, format: { with: VALID_PHONE_REGEX }
セレクトボックス選択時に、下の要素のcursor指定が優先される（IE11 / Edge）

# セレクトボックス選択中にポインタが変わる
確認したのは、IE11とEdge。
例えば、セレクトボックスの次（下）にdisabledになっているinput要素があった場合。
セレクトボックス選択中、disabledになっているinputの上にかかるoption要素の上にマウスをもってくると、 `not-allowed` のカーソルになる。
けれど、選択自体はできて、cursorの表示だけが変わる模様。
https://codepen.io/eedamame/full/GjKAwg/

これ、下にdisabledの要素じゃなくて、テキストがあった場合でもcursorが `text` になるので、レアケースってわけではなさそう。

## こういう感じ（Edge/virtualbox）
[![https://gyazo.com/2b4e1dcffe852f6b6d5a4df12e3ea266](https://i.gyazo.com/2b4e1dcffe852f6b6d5a4df12e3ea266.gif)](https://gyazo.com/2b4e1dcffe852f6b6d5a4df12e3ea266)

## ブラウザのバグのよう
https://github.com/twbs/bootstrap/issues/14528
https://developer.microsoft.com/en-us/microsoft-edge/platform/issues/817822/

## 他のブラウザでは？？
開いたselectboxのdisabledに重なる部分にカーソルをあわせてももちろん `default` のまま。
selectboxを開いた状態で、他の要素にカーソルをあわせても `default` のまま。
ということは、selectboxを開いている時は、カーソルはどこいっても `default` ということっぽい。
（仕様書とかの該当箇所わかれば知りたい）

# 対応
selectがfocus状態の場合に、bodyにclassつけて、全称セレクタで `cursor: default` する。  
すべてのブラウザに対しての指定になってしまうけど、IE11/Edgeという現在進行形のブラウザに対してのUA判定とかは将来怖いのでやめておいた。

## css
```css
body.is-select-active * {
  cursor: default !important;
}
```

## js(jquery)
```js
$("select").on("focusin", function() {
  $("body").addClass("is-select-active");
});
$("select").on("focusout", function() {
  $("body").removeClass("is-select-active");
});
```
ActiveModel::Serializersでネストされたリソースを扱う

## 環境
Rails 5.0.0.1
active_model_serializers 0.10.2

## 概要
リソースを2段階以上ネストしたときに、2段階目以降がシリアライズの結果に入ってこない。
include オプションを使う。

## 詳細

### テーブル

こんな感じ。 

|テーブル名|カラム|
|:--|:--|
|hoges|id, hogehoge|
|fugas|id, hoge_id, fugafuga|
|bars|id, fuga_id, barbar|

### モデル

普通にhas_manyになっている。

```rb
class Hoge < ApplicationRecord
  has_many :fugas
end

class Fuga < ApplicationRecord
  has_many :bars
end

class Bar < ApplicationRecord
end
```

### Serializer

次のように書く。

```rb
# app/serializers/hoge_seralizer.rb
class HogeSerializer < ActiveModel::Serializer
  attributes :id, :hogehoge
  has_many :fugas

  class FugaSerializer < ActiveModel::Serializer
    attributes :id, :fugafuga
    has_many :bars

    class BarSerializer < ActiveModel::Serializer
      attributes :id, :barbar
    end
  end
end

```

注: ネストして書いたが、別のファイルに書いてもよい。両方書くと自分の中のクラスが優先される。
詳細は [ここ](https://github.com/rails-api/active_model_serializers/blob/dba85f2720a167aa3e37c0367cf7fc9861840126/docs/general/getting_started.md) の Model Associations and Nested Serializers っていうところにある。

### Controller

Controllerで次のように書く。

```rb
@hoge = Hoge.first
render json: @hoge
```

### 結果
結果のjsonが以下のようになっている。

```js
{
  id: 1,
  hogehoge: 'hoge',
  fugas: [
    {
      id: 1,
      fugafuga: 'fuga'
      // ここに bars が入ってこない!
    }
  ]
}
```

## 対応方法
active_model_serializers 0.10より、 ネストされたリソースは自動的に展開されなくなったとのこと。
https://github.com/rails-api/active_model_serializers/issues/1077

renderに include というオプションを渡すと、入ってくるようになる。

```rb
@hoge = Hoge.first
render json: @hoge, include: { fugas: [:bars] }
```

結果

```js
{
  id: 1,
  hogehoge: 'hoge',
  fugas: [
    {
      id: 1,
      fugafuga: 'fuga',
      bars: [ // 入ってきた
        {
          id: 1,
          barbar: 'bar'
        }
      ]
    }
  ]
}
```

ActiveRecordに対するincludes/preloadと同じような形式で渡すことができる。

※参考:公式ドキュメント https://github.com/rails-api/active_model_serializers/blob/0-10-stable/docs/general/adapters.md#include-option

## 落穂拾い

### デバッグ
render でやり続けてるとデバッグが効率わるい。もう少しローレベルなAPIを使ってデバッグする。

`ActiveModelSerializers::SerializableResource.new(Hoge.first, include: { fugas: :bars }).as_json`

詳細[このへん](https://github.com/rails-api/active_model_serializers/blob/master/docs/howto/outside_controller_use.md)

### キー名を変えているときは、変えたあとのキー名で指定する
シリアライザでキー名を変えることができる。こんなふうに

```rb
class HogeSerializer < ActiveModel::Serializer
  attributes :id, :hogehoge
  has_many :fugas, key: :foos
end
```

この場合は、変えたあとのキー名 `foos` を指定する。

```rb
render json: @hoge, include: { foos: [:bars] }
```

よくよく考えれば当然なんだけど、これにちょっとハマった。
UnityでJSONの構造を確認して、構造に応じた型へ変換する


[すごい広島 172](http://great-h.github.io/events/event-172.html)のメモ
以下のJSONをUnityで読み込みたい。

```
{
	"type": "Point",
	"value": {
		"x": 1,
		"y": 2,
		"z": 3,
	}
}
```

```
{
	"type": "Press",
	"value": {
		"code": "a",
	}
}
```

typeによってvalueの中身が違うようなJSONです。
JsonUtilityではDictionary型への変換はできなくて、変換する先の型を用意する必要がある。
こういったタイプの読み込み型の方針については公式にもちゃんとかいてある。

> # 型が未知の場合の FromJson() の使用
> JSON を「共通」のフィールドを持つクラスか構造体にデシリアライズします。それから、そのフィールドの値を利用して、2 度目のデシリアライズで実際に求める型にします。
>
> http://docs.unity3d.com/jp/current/Manual/JSONSerialization.html

ということで以下のような４つのクラスを用意する。

```
// typeを読むためのクラス
[Serializable]
class SeekJSONType {
	public string type;
}

// typeがわかった後に使うルート要素のクラス
[Serializable]
class Envelope<Value> {
	public string type;
	public Value value;
}

[Serializable]
class PointMessage {
	public float x;
	public float y;
	public float z;
}

[Serializable]
class PressMessage {
	public string code;
}
```

以下のように使う

```
var seekType = JsonUtility.FromJson<SeekJSONType>(str);
switch (seekType.type) {
	case "Point":
		var point = JsonUtility.FromJson<Envelope<PointMessage>>(str);
		// pointを使った処理
		break;
	case "Press": {
		var press = JsonUtility.FromJson<Envelope<PressMessage>>(str);
		// pressを使った処理
		break;
	}
}
```

### 実行例

コード。

```
using UnityEngine;
using System.Collections;

using System;

// typeを読むためのクラス
[Serializable]
class SeekJSONType {
	public string type;
}

// typeがわかった用のルート要素のクラス
[Serializable]
class Envelope<Value> {
	public string type;
	public Value value;
}

[Serializable]
class PointMessage {
	public double x;
	public double y;
	public double z;
}

[Serializable]
class PressMessage {
	public string code;
}


public class JsonFromSample : MonoBehaviour {

	// Use this for initialization
	void Start () {
		read ("{\"type\":\"Point\",\"value\":{\"x\":1,\"y\": 2,\"z\":3}}");
		read ("{\"type\":\"Press\",\"value\":{\"code\":\"a\"}}");
	}

	void read (string jsonString) {
		var seekType = JsonUtility.FromJson<SeekJSONType>(jsonString);
		switch (seekType.type) {
		case "Point":
			var point = JsonUtility.FromJson<Envelope<PointMessage>> (jsonString).value;
			Debug.Log (String.Format("Point<{0},{1},{2}>", point.x, point.y, point.z));
			break;
		case "Press":
			var press = JsonUtility.FromJson<Envelope<PressMessage>>(jsonString).value;
			Debug.Log (String.Format("Press<{0}>", press.code));
			break;
		}
	}
	
	// Update is called once per frame
	void Update () {
	
	}
}
```

実行結果。

![Kobito.BWSJaU.png](https://qiita-image-store.s3.amazonaws.com/0/5840/097fa3cd-48e1-2f30-6087-2370d65c428a.png "Kobito.BWSJaU.png")



### 感想

ジェネリクスが使えてちょっと楽ができた。
switchが文字列でも使えてちょっと楽ができた。
C#細かいところわからないので、Scalaでかけたらいいなって個人的には思った。

### 参考

* [JsonUtility をつかって Unity で JSON を取り扱う方法](http://qiita.com/sea_mountain/items/6513b330983ffa003959)
* [Unityマニュアル - JSON 形式にシリアライズ](http://docs.unity3d.com/jp/current/Manual/JSONSerialization.html)
* [JsonUtility.FromJson](http://docs.unity3d.com/jp/current/ScriptReference/JsonUtility.FromJson.html)
[廃版] onlineTool > 緯度経度からgoogleマップへマーカー表示

WRF(Weather Research and Forecasting Model)
で領域を指定するのだが、どのような範囲かを地図で見ながら拡大縮小したい。

googlemapを使えばいいかもしれない。
http://www.hucc.hokudai.ac.jp/~x10508/gomaplv7.html

>東京駅,35.681283,139.766092
>大阪駅,34.702177,135.495114

のようにして、緯度経度の値を入力して「マーカーを表示」を押す。

(追記 2016/10/05)
メキシコ座標 (ただのサンプル実行用)。
>左下,18.9,-99.70
>右上,20.1,-98.5

### リンク切れ
(追記 2017/10/04)

上記のリンクが切れていました。
便利なツールがまた一つなくなりました。
iPad の Bluetooth認証情報

iPad の Bluetooth qualification の情報 へのリンクをまとめてみました。

#iPad Pro
* iPad Pro (9.7-inch)
 * A1673, A1674, A1675 [D027617](https://www.bluetooth.org/tpg/QLI_viewQDL.cfm?qid=27617)
* iPad Pro (12.9-inch)
 * A1584, A1652 [D023032](https://www.bluetooth.org/tpg/QLI_viewQDL.cfm?qid=23032)

#iPad Air
* iPad Air 2
 * A1566, A1567 [D021077](https://www.bluetooth.org/tpg/QLI_viewQDL.cfm?qid=21077)
* iPad Air
 * A1474, A1475, A1476 
 * A14xx [B020717](https://www.bluetooth.org/tpg/QLI_viewQDL.cfm?qid=20717)
 * iOS 6.x - host [B019959](https://www.bluetooth.org/tpg/QLI_viewQDL.cfm?qid=19959)

#iPad mini
* iPad mini 4
 * A1538, A1550 [D023029](https://www.bluetooth.org/tpg/QLI_viewQDL.cfm?qid=23029)
 * iOS 8.x - host update D022834
 * iOS 8.x - profile update D021078
 * iOS 7.0 - profile B020230
 * iOS 6.x - profile B019960
 * iOS 5.x - profile B018432
* iPad mini 3
 * A1599, A1600, A1601 
* iPad mini 2
 * A1489, A1490, A1491
 * A14xx [B020717](https://www.bluetooth.org/tpg/QLI_viewQDL.cfm?qid=20717)
 * iOS 6.x - host [B019959](https://www.bluetooth.org/tpg/QLI_viewQDL.cfm?qid=19959)

* iPad mini
 * A1432, A1454, A1455 	[B019434](https://www.bluetooth.org/tpg/QLI_viewQDL.cfm?qid=19434)

#iPad
* iPad(4th)
 * A1458, A1459, A1460 [B019433](https://www.bluetooth.org/tpg/QLI_viewQDL.cfm?qid=19433)
* iPad(3rd)
 * A1416, A1430, A1403  [B016556](https://www.bluetooth.org/tpg/QLI_viewQDL.cfm?qid=16556)
* iPad 2
 * A1395, A1396, A1397 [B017722](https://www.bluetooth.org/tpg/QLI_viewQDL.cfm?qid=17722)
* iPad
 * A1219, A1337 [B015878](https://www.bluetooth.org/tpg/QLI_viewQDL.cfm?qid=15878)
 * BCM4329 B015630
[Mac]Rustのクレートhyperを使うためにしたこと


Macで[Rustでhyper使ってHTMLを扱ってみた](http://qiita.com/kakkunpakkun/items/2c4646d829477a1ac3e8)の記事のコードをビルドしようとしてうまくいかなかった。

エラーの内容は、 ```cargo:warning=src/c_helpers.c:1:10: fatal error: 'openssl/ssl.h' file not found
``` となっている。
どうやら、opensslのヘッダーファイルをうまく見つけられていないようだ。

以下の対処でなんとかビルドできるようになった。

```bash
$ brew link --force openssl
$ export OPENSSL_INCLUDE_DIR=/usr/local/opt/openssl/include
```

参考：
 [Faild build On OSX 10.11(Elp)](https://github.com/sfackler/rust-openssl/issues/255)
Vagrant: Unknown configuration section 'vbguest' と言われる

以下のようなエラーで起動できなくなった ……

```zsh
There are errors in the configuration of this machine. Please fix
the following errors and try again:

Vagrant:
* Unknown configuration section 'vbguest'.
```

原因が判明していないが、すでに `vagrant-vbguest` がインストール済みの状態で何度か `vagrant plugin install vagrant-vbguest` していた（プロビショニングスクリプトのテストをしていたため）。

結論としては、  `vagrant-vbguest` の再インストールで解決した。

```zsh
vagrant plugin uninstall vagrant-vbguest
vagrant plugin install vagrant-vbguest
```
Apple TV の Bluetooth認証情報

Apple TV の Bluetooth qualification の情報へのリンクをまとめてみました。

# Apple TV

* Apple TV 4th
 * A1625 [D023030](https://www.bluetooth.org/tpg/QLI_viewQDL.cfm?qid=23030)
 * iOS 8.x - host update [D022834](https://www.bluetooth.org/tpg/QLI_viewQDL.cfm?qid=22834)
 * iOS 8.x - profile update [D021078](https://www.bluetooth.org/tpg/QLI_viewQDL.cfm?qid=21078)
 * iOS 7.0 - profile [B020230](https://www.bluetooth.org/tpg/QLI_viewQDL.cfm?qid=20230)
 * iOS 6.x - profile [B019960](https://www.bluetooth.org/tpg/QLI_viewQDL.cfm?qid=19960)
 * iOS 5.x - profile [B018432](https://www.bluetooth.org/tpg/QLI_viewQDL.cfm?qid=18432)
* Siri Remote
 * A1513 [D023031](https://www.bluetooth.org/tpg/QLI_viewQDL.cfm?qid=23031)
 * Controller subsystemしかないです。 プロトコルスタックはCSR101xのソフトウェアを使っているのだと思います。HID over GATTのDevice(Server)のProfileは下のかな
 * HIDS profile [D027615](https://www.bluetooth.org/tpg/QLI_viewQDL.cfm?qid=27615)

* Apple TV 3rd
 * A1469 [B020242](https://www.bluetooth.org/tpg/QLI_viewQDL.cfm?qid=20242)
 * A1427 [B020243](https://www.bluetooth.org/tpg/QLI_viewQDL.cfm?qid=20243)
* Apple TV 2nd
 * A1378 [B020582](https://www.bluetooth.org/tpg/QLI_viewQDL.cfm?qid=20582)
* Apple TV 1st
 * Bluetoothなし
Quantum Chemistry - Schrodinger Equation "Derivation"

関連 http://qiita.com/7of9/items/d3a1799928734375f34f

CG分野で使われるSpherical Harmonics。自分の数値シミュレーション計算に用いたいと思い調べると、量子化学の講義にたどり着く。

短く分かりやすそうな159本のビデオを少しずつ消化中。

Quantum Chemistry - Schrodinger Equation "Derivation"
https://www.youtube.com/watch?v=CSCSGFbt_Y0&list=PLm8ZSArAXicL3jKr_0nHHs5TwfhdkMFhh&index=12

- Schrodinger Equationを導出している
- 緑の式
  - [こちらのビデオ](https://www.youtube.com/watch?v=OpTAXlTVnT4&index=9&list=PLm8ZSArAXicL3jKr_0nHHs5TwfhdkMFhh)の左側黄色の式
  - classical wave equation
- ピンクの式
  - u(x,t) = プサイ(x) cos(omega t)と置けると仮定する
  - プサイ(x)はspatial amplitudeと言う
- 水色の式
  - 緑の式にピンクの式を代入して、偏微分する
  - u(x,t)のxによる微分ではcos(omega t)は係数として前に出てくる
  - 水色の右側の式はcos(omega t)をtで2階微分することにより出る
  - cos(omega t)を1階微分で -sin(omega t) * omega
  - -sin(omega t) * omega をさらに1階微分で -cos(omega t) * omega^2
- オレンジの式
  - 水色の式の右側の項を左の項に移行して得られる
- 紫の式
  - omegaの定義
  - omega = 2pi ニュー : 高校生向けの物理の本などで出てくる
  - ニュー lambda = ヴィ : ここでイメージをしずらくなった

- ニュー lambda ヴィ
  - ニュー: 周波数(1/s)
  - lambda: 波長(m)
  - ヴィ: 速度(m/s)
  - 次元解析によると ヴィ(m/s) = lambda(m) * 周波数(1/s)で次元が合う
- 緑の式
  - オレンジの式のうち2つ目の項の係数についてみる
  - 紫の式でomega = とニュー lambda =が得られているのでそこから得られる
- 紫の式
  - オレンジの式の2つ目の項の係数(omega^2 / ヴィ^2)を緑の式で置き換えた
- ピンクの式
  - エネルギーの定義
  - kinetic energyとpotential energyを足したもの
  - p2 / 2 / mはよく見かける1/2 * m * v^2と同じ (p=mvから分かる)
- オレンジの式
  - ピンクの式を変形してpの式とした
- 緑の式
  - de Broglie hypothesisより
- オレンジの式
  - エイチバーの定義: hを2 piで割った値
- 紫の式
  - 4 pi^2 / lambda^2に緑の式を代入して
  - さらに左下のオレンジの式を代入して得られる
- ピンクの式
  - 左下の紫の式の4 pi^2 / lambda^2を右上の紫の式で置き換えたもの
  - <font color=red>ただし、2つ目の項のプサイ(x)が脱落している</font>
  - 式の修正についてはTMP Chemさんに連絡済みで、「将来のバージョン用の資料は修正した」と連絡いただいた
- 黄色の式
  - ピンクの式(にプサイ(x)が入ったもの)から変形して求まる
  - 時間に依存しないSchrodinger Equationが求まった
- プサイ(x)
  - 波動を表す関数
Quantum Chemistry - Vibrating String Animation

関連 http://qiita.com/7of9/items/d3a1799928734375f34f

CG分野で使われるSpherical Harmonics。自分の数値シミュレーション計算に用いたいと思い調べると、量子化学の講義にたどり着く。

短く分かりやすそうな159本のビデオを少しずつ消化中。

Quantum Chemistry - Vibrating String Animation
https://www.youtube.com/watch?v=yNJ06JQDGEM&index=11&list=PLm8ZSArAXicL3jKr_0nHHs5TwfhdkMFhh

- [前回](http://qiita.com/7of9/items/464e2080743a3fa8b1d0)得た式をanimation表示
- https://www.desmos.com/calculator/rvjl0f5rs8
  - ブラウザで見れる
  - すごい
- P(n,x,t)の式
  - [ビデオ](https://www.youtube.com/watch?v=wtcdLjAyEBM&list=PLm8ZSArAXicL3jKr_0nHHs5TwfhdkMFhh&index=10)の右下のピンクの式のsummationの中身を実装
- U(x,t)
  - P(n,x,t)のsummationを取ったもの
  - total()というのがsummationのようだ
- c1
  - それぞれのnormal modesにかかる係数
  - c1 = [0,1]はnormal modesのうち、2つ目だけ見たい時の設定
- L
  - P(n,x,t)において、sin(), cos()の周期を変更する効果がある
- ν (nyu)
  - P(n,x,t)において、cos()の中身を変更する効果がある
- n1
  - Nmまである
- Nm
  - 設定したc1の大きさ
- N
  - c1のsummationを取ったもの
  - これにより値を規格化している

- 例としてc1=[1,0]
  - 1つ目のnormal modeを見ている
  - 波が同じ位置で振幅を変更しているだけのstanding wave
- Nの変化、Lの変化、ν(nyu)の変化など見ている
- c1=[1,1]
  - 1つ目と2つ目のnormal modesが合わさった効果
- combinations
  - 色々なnormal modesが合わさった結果により、あらゆるfunctionを再現できる
Quantum Chemistry - Vibrating String

関連 http://qiita.com/7of9/items/d3a1799928734375f34f

CG分野で使われるSpherical Harmonics。自分の数値シミュレーション計算に用いたいと思い調べると、量子化学の講義にたどり着く。

短く分かりやすそうな159本のビデオを少しずつ消化中。

Quantum Chemistry - Vibrating String
https://www.youtube.com/watch?v=wtcdLjAyEBM&list=PLm8ZSArAXicL3jKr_0nHHs5TwfhdkMFhh&index=10

- 左上のブロック
  - [前回](https://www.youtube.com/watch?v=OpTAXlTVnT4&index=9&list=PLm8ZSArAXicL3jKr_0nHHs5TwfhdkMFhh)に求められた式
- 境界条件
  - 位置の端における条件
  - x=0とx=エルにおいては固定しているので0となる
  - それらはあらゆる時刻tにおいて0である
- 緑の式
  - 左の水色の式 X(x)に対してx=0を代入した時の式
  - 境界条件から X(0) = 0
  - sin(0)=0, cos(0)=1なので、式が成り立つにはA=0となる
- ピンクの式
  - 左の水色の式 X(x)に対してx=エルを代入した時の式
  - 境界条件から X(エル) = 0
  - A=0がすでに求められているので B sin(beta エル)が残る
- ピンクの式の右側の黄色の式
  - ピンクの式 0 = B sin(beta エル)から変形
  - 両辺をBで割る
  - sin^-1(0) = beta エル
  - sinの値が0となるのは n piの時 (nは整数: 太字Zで表している)
  - beta エル = n pi から beta = n pi / エル が求まる
- 水色の式
  - ピンクの式 X(エル) = B sin(beta エル)のbetaに黄色の式を代入して得られる
- オレンジの式
  - 左側の水色の式 T(t) = ...にbetaの式を代入して得られる
  - sin()の式はphase factor ファイを使ってcos()の式に変形できる。三角関数の加法定理
  - 結果としてcos()でくくった Ecos(... + ファイの式になる
- 緑の式
  - 左の紫の式 u(x,t) = X(x)T(t)にこれまで得られたX(x)とT(t)の式を代入して得られる
- ピンクの式
  - 緑の式に対して、総和(summation)シグマを取る式に変形している
  - 係数A, phase factorファイにインデックスnが付く
  - オレンジの式: 以上によりどのような関数も {An, ファイn}を使って表せる
- 黄色の式
  - ピンクの概念をu_n()として対応させた
- 水色の式
  - u_n(x,t)のセットはそれぞれnormal modeと呼ぶ
  - 1つ1つのnormal modeはstanding waveという波の位置が変わらないものとなる
  - 次回のanimationでそれが分かる
技術英語 > the [ins and outs] of using pointers. / number of [yeas and nays]

@ Code Complete (No. 10768 / 36077)

> ... describes <font color=red>the ins and outs</font> of using pointers.

http://eow.alc.co.jp/search?q=ins+and+outs&ref=sa
> 1. 《the ～》〔複雑な状況などの〕一部始終、裏と表、内面と外面

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

http://eow.alc.co.jp/search?q=yeas
> number of <font color=red>yeas and nays</font>
賛否の数
Chrome53はCSSによるアニメーションがすごく速くなるらしい

下記の資料と記事によると、Chrome53はどうやらCSSを使ったアニメーションに関して飛躍的なパフォーマンスアップがありそう。なぜか日本ではChrome53に関する記事はFlashのことばかりでこれには言及していない。

Motion Mark Analysis
https://docs.google.com/document/d/1vKNGim07lvPCYL1ctiNss1BqhjfE49t6LwZkwoTkeXU

Chrome 53 Should Be Blazing Fast
http://www.phoronix.com/scan.php?page=news_item&px=Chrome-53-Speed-Improvements

資料ではChrome51とChrome53、SafariとChrome53についてMotion Markというベンチマークの結果を比較している。
特にAndroidにおける改善が大きくてHTML suiteの項目ではスコアが+589%になっている。
HTML suiteの項目の中には「CSS bouncing ～」という項目が並んでおり、それぞれ相当なスコアアップが記載されている。
これはおそらくCSSのkeyframeを使ったbounceアニメーションに関するベンチマークだと思われる。
学習進捗状況　CI/CD

jenkins 設定
以下の設定
・JDK　・・・ビルドツール
・Ant　・・・ビルドツール
・Maven　・・・ビルドツール
・Git　・・・バージョン管理システム　
　
・jenkinsのアカウントパスワードを失念してしまった場合の対処方法
・GitとSVNの違い
・Githubのインストール及び設定
UE4 Android SDK Install

#はじめに
UE4 + Galaxy S6 = 最強なモバイルなのは解るのですが、ポジショントラッキングが無いのに高解像度で少してこずります。ここではインストールを主体に説明し設定は暇を見てチョコチョコやってこうと思います。ファブ２デナントカナランカノー。
私は既存のiOSなどで使っているNDKとかをリンクするだけと思っていました。

~~正解は実際に業務としてやっている方々に聞くのが近道で、UE4用のAndroid SDKをインストールでした。~~
コメントでご指摘いただいた通り、UE4.10.4以前は調べてませんが、NVIDIAのSDKが入っているようです。

*以下は、古い情報になります。*
~~#NVIDIAのCodeWorks for Androidをインストールする~~
~~当たり前といえば当たり前ですね。UE4とAndroidの性能をフルに発揮できるようにチューニングされたSDKをインストールします。~~
~~[Donwload Center search word 1r](https://developer.nvidia.com/gameworksdownload#?search=1r)~~
![1R4DownloadSelect.png](https://qiita-image-store.s3.amazonaws.com/0/25895/7aa403f8-cf3a-6a89-ec5d-68f7f4bfe729.png)

~~Log inを求められるので持っていなければJoinしましょう。~~
![1R4loginerror.png](https://qiita-image-store.s3.amazonaws.com/0/25895/5af63613-641a-85f7-9b08-12a471bac923.png)
*ここまで、古い情報になります。*

いつ頃からかUE4.10.4以前を入れていないため調べ切れていませんが、UE4.10.4には既にAndroidSDKがインストールされているようです。
![ueandroidexe.png](https://qiita-image-store.s3.amazonaws.com/0/25895/52f6d46c-802f-51c9-7898-f6cd42b513fa.png)

上記ディレクトリーのUE4.10.4,UE4.11.2:AndroidWorks-1R1-windows.exe, UE4.12.5,UE4.13.2:CodeWorksforAndroid-1R4-windows.exe, UE4.14.1:CodeWorksforAndroid-1R15-windows.exeをダブルクリックで実行します。
![ueandroidexe1.png](https://qiita-image-store.s3.amazonaws.com/0/25895/45b9e851-5afc-bfa9-33cd-72f5749b362f.png)

Next>をクリック
![next.png](https://qiita-image-store.s3.amazonaws.com/0/25895/a23b0276-4c04-bd4a-3aaa-eda8f51d1fa4.png)

すべてのNDIVIAデバイスをサポートしているようですが、Next>をクリック
![next2.png](https://qiita-image-store.s3.amazonaws.com/0/25895/f3b058d2-64be-18e2-36fe-03029da16911.png)

ここの詳細は良く解らないのでそのまま、Next>をクリック
![next3.png](https://qiita-image-store.s3.amazonaws.com/0/25895/038e53ee-a393-3899-15f7-ad369cd61400.png)

##UE4の設定変更
追記予定

##Oculus Signature Fileの取得とインストール
https://docs.unrealengine.com/latest/JPN/Platforms/GearVR/Prerequisites/index.html

https://dashboard.oculus.com/tools/osig-generator/

##参考資料
コメント欄
herokuにpopplerをインストールする

Gemfileに gem poppler を指定してherokuへpushすると、 libpoppler-glib-dev まわりのエラーが出てしまうので、その対策を調べました。

# 手順

ビルドパック heroku-buildpack-ruby-poppler を適用させます。

```
$ heroku buildpacks
=== yanbarukuina Buildpack URL
heroku/ruby

$ heroku buildpacks:add --index 1 https://github.com/MattFenelon/heroku-buildpack-ruby-poppler.git
Buildpack added. Next release on yanbarukuina will use:
  1. https://github.com/MattFenelon/heroku-buildpack-ruby-poppler.git
  2. heroku/ruby
Run git push heroku master to create a new release using these buildpacks.
```

popplerは最新の3.0.9でなく3.0.8を指定。

```rb:Gemfile
gem 'poppler', '3.0.8'
```

```
$ bundle install
$ git add .
$ git commit -m "Set gem poppler -v 3.0.8"
$ git push heroku master
```

以上です。

# 参考

- [poppler | RubyGems.org | your community gem host](https://rubygems.org/gems/poppler/versions/3.0.8)
- [Using Multiple Buildpacks for an App](https://devcenter.heroku.com/articles/using-multiple-buildpacks-for-an-app)
- [Third-Party Buildpacks](https://devcenter.heroku.com/articles/third-party-buildpacks)
- [MattFenelon/heroku-buildpack-ruby-poppler](https://github.com/MattFenelon/heroku-buildpack-ruby-poppler)
Vimmer のための Processing 

マット・ピアソンの[ジェネラティブ・アート](http://amzn.to/2bBZc33)を最近購入して、ジェネラティブ・アートにハマりそうです。

ただ、Processing の開発環境(Processing Development Environment; PDE) でコード書くのめんどくさい！どうにかして Vim で書きたい！と思い、その環境をなんとか整えたので備忘録を書かせていただきたく思います。

<i class="fa fa-chevron-right" aria-hidden="true"></i> 対象者
========
- Vimmer
- CLI 中毒者
- お気に入りのエディタで編集してコマンド叩いて実行したい人など


<i class="fa fa-chevron-right" aria-hidden="true"></i> 実行環境
===============
- Mac OS X El Capitan 10.11.6
- Processing 3.1.2
- Vim 8.0.3
- dein.vim

<i class="fa fa-chevron-right" aria-hidden="true"></i> `processing-java` のインストール
==============================
以下、Mac を対象にして書きます。Linux や Windows ユーザの方は適宜読みかえたり調べてください、申し訳ありません。

まず、Processing の開発環境である PDE は [processing.org](https://processing.org) からダウンロードすることができます。寄付を求められますが、とりあえず今のところは No Donation を選んでおけばいいでしょう。

PDE をインストールしても CLI で利用可能なコマンド `processing-java` がインストールされていません。PDE を起動して、メニューバーにある `Tools > Install "processing-java"` を選択することでインストールすることが可能です。

<i class="fa fa-chevron-right" aria-hidden="true"></i> インストール確認
=======================
以下のコマンドを叩いて、パスが返ってきたらインストールは成功しています。

```bash
$ which processing-java
```



<i class="fa fa-chevron-right" aria-hidden="true"></i> `processing-java` の使い方
======================
使い方は、`--help` オプションで見ることができるのですが、この[記事](http://www.dsfcode.com/using-processing-via-the-command-line/)を見つけたので、これに従って試していました。しかし、次のコマンドを打つと Processing 3.1.2 ではうまくいきません。

```bash
$ processing-java --run --sketch=$(pwd)/test_sketch --output=$(pwd)/test_sketch/output
```

なんどやっても `No sketch path specified.` と言われるので、しらべてみるとこの [Issue](https://github.com/processing/processing/issues/3878) に辿り着きました。そうです、こうすればいいのです。

```bash
$ processing-java --sketch=$(pwd)/test_sketch --output=$(pwd)/test_sketch/output --force --run 
```

最初から help の英語をちゃんと読んでいれば、すぐに解決したものを...

みなさん、英語は勉強しましょうね☆←

コマンド引数に渡す値も help を読めばわかりますが、どういう流れでビルドやランをすればいいのかは、先程の[この記事](http://www.dsfcode.com/using-processing-via-the-command-line/)を読めばいいと思います。

<i class="fa fa-chevron-right" aria-hidden="true"></i> `vim-processing` のススメ
===============================
Vimmer なら、 `processing-java` をインストールした状態で `vim-processing` を入れることで幸せになれます。 僕は、dein を使っているのですが、 NeoBundle の人は読み替えてください。いつもどおり、追加します。

```
call dein#add('sophacles/vim-processing')
```

これで、`vim-processing` がインストールされ、PDE なしで素敵な Processing ライフを送れます。追加される機能は以下です。

- シンタックスハイライト
- `K` でドキュメント参照
- `:make` でスケッチの実行

さいごに
=======
`vim-processing` が最高です。最高。
openFrameworks on the Raspberry Pi での画像、動画、文字表示について

Raspberry Pi で openFrameworks でグラフィックスまわりがどのくらいいけるのか知りたかったので、とりあえず（１）画像の表示、（２）ムービーの表示、（３）文字の表示についてスーパーざっくり調べました。


# ためした環境

- ハード : raspberru pi 2 model type b
- OS : raspbian jessy 
- インストールまわりはopenFrameworks公式サイトの[Getting your Raspberry Pi ready for openFrameworks](http://openframeworks.cc/ja/setup/raspberrypi/raspberry-pi-getting-started/)に書いてあることだけやった。


# 画像の表示について
ふつうにofImageのインスタンス作って、load(),update(),draw()するだけのプログラムを書いて、以下の解像度のjpgをロードして、表示した。

```
◯ : 1000 x 545[px]
✕ : 1100 x 600[px]
✕ : 1980 x 1080[px]
```

✕と書いたときに、特にエラーはでず、何も表示されなかった感じでした。


# ムービーの表示について
同様にofVideoPlayerを使って、以下の解像度のムービーをロードして、表示した。

```
◯ : 320 ×240[px]のmov
◯ : 640 x 358[px]のmp4
✕ : 960 x 538[px]のmp4
✕ : 1280x720[px]のmp4
✕ : 1668 × 936[px]のmp4
```

だめなときは、`ofGstVideoUtils: update() ofGstVideoUtils not loaded`というエラーがでていた。


# テキストの表示について
- [ここ](http://mknod.jp/?p=166)のページに従って、TrueTypeFontが通常どおり描画されることは確認しました。
- 日本語ありフォント5MB、 英語だけフォント143KBで確認した。どっちも表示された。
- ※ OTFはまだ試せていません。


# その他のmacでのoFとくらべて、ツラさを感じたこと
- macとraspberry pi で 最初から付属している graphics example をただ実行した結果がちがう。詳しく見てないが、使えるAPIが違いそう。

<img width="1295" alt="Screen Shot 2016-09-01 at 03.05.37.png" src="https://qiita-image-store.s3.amazonaws.com/0/30407/f6dc5147-fa16-ac8e-0bb6-032966e0f258.png">

- Macで動いたプログラムを、raspberry PIにもっていったらといってそのまま動かないことが多い。
- コンパイルに約1分〜３分かかる。１回のトライアンドエラーにかかる時間が長い。
- まえの実行失敗をひきずって次の実行が通らないことが多い気がする （`make clean` とかでなんとかなるかもしれないが `make clean`するとまた3分...）
Go で WebSocket を簡単に扱えるパッケージを作った

https://github.com/shiwano/websocket-conn

趣味で Go 言語で WebSocket サーバーを書いてるんですが、そこで使ってる WebSocket コネクションのハンドリング部分をパッケージとして切り出したら便利なんじゃないかと思って切り出してみました。ベースは [github.com/gorilla/websocket](https://github.com/gorilla/websocket) です。

## インストール方法

```bash
$ go get github.com/shiwano/websocket-conn
```

## 使い方

```go
func Connect(ctx context.Context, settings Settings, url string, requestHeader http.Header) (*Conn *http.Response, error)
func UpgradeFromHTTP(ctx context.Context, settings Settings, w http.ResponseWriter, r *http.Request) (*Conn, error)

type Conn struct {
	Stream() <-chan Data
	Err() error
	SendBinaryMessage(data []byte) error
	SendTextMessage(text string) error
}
```

## サンプルコード

サーバー側:

```go
package main

import (
	"context"
	"net/http"
	"github.com/shiwano/websocket-conn"
)

func main() {
	http.HandleFunc("/", func(w http.ResponseWriter, r *http.Request) {
		ctx, cancel := context.WithCancel(context.Background())
		defer cancel()

		c, err := conn.UpgradeFromHTTP(ctx, conn.DefaultSettings(), w, r)
		if err != nil {
			w.Write([]byte("Error"))
			return
		}
		d := <-c.Stream()
		c.SendTextMessage(d.Message.Text() + " World")
		cancel()
	})
	http.ListenAndServe(":5000", nil)
}
```

クライアント側:

```go
package main

import (
	"context"
	"log"
	"github.com/shiwano/websocket-conn"
)

func main() {
	c, _, err := conn.Connect(context.Background(), conn.DefaultSettings(), "ws://localhost:5000", nil)
	if err != nil {
		log.Fatal(err)
	}
	c.SendTextMessage("Hello")
	d := <-c.Stream()
	log.Println(d.Message.Text()) // Hello World
	for d := range c.Stream() {
		if d.EOS {
			log.Println("Closed: ", c.Err())
		}
	}
}
```

上記のコードをそれぞれ実行したら、クライアント側で `Hello World` と出力されるはずです。こんな感じでけっこうお手軽に WebSocket サーバーとそのクライアントを作れるので、よかったら使ってみてください(´・ω・`)
uname is dead, long live 君の名は。!

## インストール
```
$ npm install --global kimi-no-na-ha
```

## 使い方
```
$ 君の名は
```

![スクリーンショット 2016-08-31 22.24.41.png](https://qiita-image-store.s3.amazonaws.com/0/15319/8a348241-a4d2-c5d3-09d9-316f086698f3.png)


## おまけ

![スクリーンショット 2016-09-01 02.03.04.png](https://qiita-image-store.s3.amazonaws.com/0/15319/344788b1-6648-fdde-f7d3-5c947f79a3d5.png)

かわいい


[akameco/kimi-no-na-ha: 君の名は。](https://github.com/akameco/kimi-no-na-ha)
コメントも含めてDB構造をマークダウン形式で取得する

#### 概要

DBの構造を文書化したい時、マークダウン形式でカラム名とそのコメントがあると追記しやすくなる。
MySQL DBからテーブル名とカラム名をマークダウン形式にして引っこ抜いてくる手法について記載する


---

### 結論

下記スクリプトとそれを使用したコマンドでマークダウン形式の文書が手に入る。

#### コマンド

```
mysql -u [username] -p -D [database_name] -e "show full columns from [table_name];" | ruby ./convert_db_structure_to_markdown.rb
```

#### rubyスクリプト

```ruby:convert_db_structure_to_markdown.rb
require'pp'

convert_array = []

STDIN.read.each_line do|line|
  convert_array.push(line.gsub(',','').gsub(/\t/,',').chomp)
end


convert_array.delete_at(0)
convert_array.delete_at(0)

convert_array.each do |str|

  arr = str.split(',')
  pp''
  pp " - #{arr[0]}"
  if arr.count>8
  pp''
    pp "#{arr[8]}"
  end
  pp''

end

```


#### 結果例

```
""
" - id"
""
""
" - member_id"
""
""
"メンバーのユニークID"
""
""
" - start_date"
""
"課金開始日"
""
""
" - expire_date"
""
"期限切れに成る日"
""
""
" - del_flg"
""
""
" - created"
""
""
" - updated"
""

```

それなりにそれっぽいものが出来た。
これをwikiか何かに貼り付ければ、既存のコメントも含めたDBの構造解説ページみたいなものが作りやすくなるだろう。
ダブルクオーテーションがくっついていて邪魔なのでそのうち改良したい。

---

### 以下解説

おおまかに下記流れで処理をしている。


1. ｍｙｓｑｌの`show full columns`を利用してテーブル構造をTSV形式で持ってくる。
2. 持ってきたデータをスクリプトに食わせて、整形、マークダウン形式にする。

テーブルの構造情報を引っ張ってくるには下記二通りの方法がある。

 - information_scheme
 - show full columns

テーブルに登録されたコメントも含めて取ってくるには、後者でしか出来なかったため、今回は`show full columns`を使用した。
おそらく`information_scheme`を使うほうがスクリプトが書きやすくなるはず。
そのうちそのちらのバージョンの方についても記事にまとめる。
DBpedia と neo4j で声優と出演作品をグラフ表示してみた


研究室の合宿で京都へ

夜中、なんか開発したいねということで、短時間のハッカソンを行いました（2人で）。

ラボメンの研究進捗のあとだったりしたので、研究でお世話になっているツールを使おうということで、

+ DBpedia Japanese
+ neo4j

を使って、声優と出演作品をグラフ表示してみました。

## [DBpedia Japanese](http://ja.dbpedia.org/)

> DBpediaはWikipediaから情報を抽出してLOD (Linked Open Data)として公開するコミュニティプロジェクトです．本家のDBpediaは主にWikipedia英語版を対象としています．DBpedia Japanese の目的は，Wikipedia日本語版を対象としたDBpediaを提供することです．

オープンデータといえば、これという感じ

SPARQL という RDF 向けのクエリ言語で、必要な情報を取得することができます。

今回は声優と、出演作の関係が必要だったので、利用したクエリはこんな感じ

```
select distinct ?anime_name ?actor_name where {
?anime <http://www.w3.org/1999/02/22-rdf-syntax-ns#type> <http://dbpedia.org/ontology/Anime> ;
    <http://xmlns.com/foaf/0.1/name> ?anime_name ;
    <http://ja.dbpedia.org/property/出演者> ?actor .
?actor <http://www.w3.org/2000/01/rdf-schema#label> ?actor_name .
}
```

## [neo4j](https://neo4j.com/)

> Neo4j is a highly scalable native graph database that leverages data relationships as first-class entities, helping enterprises build intelligent applications to meet today’s evolving data challenges.

関係表現したり、クエリできるグラフデータベースです（ざっくりしかまだ分かっていない）

Cypherクエリで操作します。

## 今回の流れ

1. DBpedia から SPARQL を使ってデータを取得
2. データを Cypher クエリに整形
3. neo4j に登録

1, 2 は ruby でやります。githubにソースはおいておきます。

3は、手動。

## Cypher クエリを作る

[him0/neo4j-voice-actor-graph](https://github.com/him0/neo4j-voice-actor-graph)

```
bundle install --path=vendor/bundle
bundle exec ruby app.rb| pbcopy # クリップボードにクエリを突っ込む
```

## neo4j の環境構築

neo4j は、Dockerコンテナを利用 Kitematic で速攻コンテナを作る。

![スクリーンショット_2016_09_01_1_03.png](https://freee.qiita.com/files/01905973-fff1-6652-bdc5-4fecfe3726fd.png "スクリーンショット_2016_09_01_1_03.png")


![スクリーンショット_2016_09_01_0_09.png](https://freee.qiita.com/files/de9bd7a7-9005-0b3b-3e93-da788697f11d.png "スクリーンショット_2016_09_01_0_09.png")

Port 情報をもとにブラウザを開く

![スクリーンショット 2016-09-01 0.09.54.png](https://freee.qiita.com/files/ef9d0d21-7c35-e854-712b-0300a173adb4.png "スクリーンショット 2016-09-01 0.09.54.png")

Password 初期は `neo4j` みたいです。新規パスワードを求められるので登録。

作ったクエリを実行

![Neo4j.png](https://freee.qiita.com/files/2d5ef277-3588-88f5-aaa2-85ad3cd3d781.png "Neo4j.png")


初期だと表示数が少ないので表示数の設定を変えます。

```
:config initialNodeDisplay: 5000
```

いざ表示

```
MATCH ()-[r]->() RETURN r
```

![Neo4j 3.png](https://freee.qiita.com/files/1c610e3f-8f47-ed00-24f2-4ebf810b3c39.png "Neo4j 3.png")

![Neo4j.png](https://freee.qiita.com/files/5a29b755-fb13-421e-3076-df53ddd2dc97.png "Neo4j.png")

できた。
Python3でバイト型データをs3にgzipで圧縮してアップロード

Python3での例があまりなかったので。
やってみたコードを適当に真似て書いただけなので適宜置き換えてください。

```py3
import io
import gzip
from boto.s3.connection import S3Connection
from boto.s3.key import Key

def upload(data):  # dataはバイト型のデータ
    stream = io.BytesIO()
    gzip_file = gzip.GzipFile(fileobj=stream, mode='w')
    gzip_file.write(data)
    gzip_file.close()
    conn = S3Connection(AWS_ACCESS_ID, AWS_SECRET_KEY, host=S3_HOST)
    bucket = conn.get_bucket('bucket_name')
    k = Key(bucket, 'key_name')
    k.set_contents_from_string(stream.getvalue(), headers={"Content-Type": 'application/x-gzip'})
```
AndroidStudioでコピー履歴から文字列を選んでペーストする


# 概要

AndroidStudioでは`⌘ + c`で文字列をコピーし、`⌘ + v`でペーストできますが、`Shift + ⌘ + V`を入力すると`⌘ + c`でコピーした文字列の履歴からペーストする文字列を選ぶことができ便利でした。

# コピー

`⌘ + c`で複数の文字列をコピーします。

![copy_text.gif](https://qiita-image-store.s3.amazonaws.com/0/43438/19b61735-0220-f446-5016-76fd64059672.gif "copy_text.gif")

# ペースト

`Shift + ⌘ + V`を入力するとダイアログ表示され、コピー履歴からペーストする文字列を選択できます。履歴は直近の5つまで表示可能なようです。

![history_paste.gif](https://qiita-image-store.s3.amazonaws.com/0/43438/8d6ad9ee-ca0c-0f27-573a-31df5892fb01.gif "history_paste.gif")
DockerのプライベートレジストリとしてGitLabのContainerRegistryを使う

GitLabのversion8.8からDockerコンテナレジストリの機能が使えるようになりました。
今回はGitLabContainerRegistryを使得るようになるまでの手順を書こうと思う。

### 対象者
パッケージ(yumやapt)でGitLabをインストールした人
※今回は苦行インストールした人は対象にしません、ごめんなさい><

### 前提
- GitLabのversion8.8+がインストール済みであること
- 今回は最低限の設定しか書きません。

### 設定手順
(1) 証明書の作成

```bash:console
mkdir /certs
openssl req \
    -newkey rsa:4096 -nodes -sha256 -keyout /certs/registry.key \
    -x509 -days 365 -out /certs/registry.crt
```

(2) GitLabのContainerRegistryの設定

- 下記の三箇所を変更する

```ruby:/etc/gitlab/gitlab.rb
###############################
# Container registry settings #
###############################

registry_external_url 'https://registry.example.com'


(省略)


##################
# Registry NGINX #
##################

registry_nginx['ssl_certificate'] = "/certs/registry.crt"
registry_nginx['ssl_certificate_key'] = "/certs/registry.key"
```

(3) 各種設定の再読み込み

```
gitlab-ctl reconfigure
```

※ reconfigureはGitLabが起動している状態からを期待して動作してるっぽい

(4) GitLabにアクセスし、リポジトリの真ん中編のRegistryが表示されている場合は、ポチッと！

- ない場合は、下記の一番下の「Edit Project」を選択する。

<img src="https://qiita-image-store.s3.amazonaws.com/0/52545/ccc3c790-a227-cdbc-ab96-3b1f9572eef0.png" width="200" ></img>

- Features -> Container Registryにチェックをいれ、[Save changes]を設定し、Registryを押す。

<img src="https://qiita-image-store.s3.amazonaws.com/0/52545/31f21b94-9160-b1ac-adca-3334f3bc5fff.png" width="280"></a>


### 使い方
(1) ログインしてみましょう

```docker
docker login registry.example.com
```

- IDとパスワードが聞かれるので、GitLabにログインするときのものを使用する。
- 例：root / 5iveL!fe
- ログイン成功するとsuccessと表示される

これで使用する準備ができました！

(2) ログイン後はイメージのビルドや、プッシュが可能になる。

```docker
# カレントディレクトリのDockerfileがビルドされる。
docker build -t registry.example.com/test/test_prj .

# 作成したイメージをレジストリにプッシュする
docker push registry.example.com/test/test_prj
```

(例)成功すると下記の様に画面に見える。
![DockerImage.png](https://qiita-image-store.s3.amazonaws.com/0/52545/3050b97d-1589-eab1-09ab-9a01493e8153.png "DockerImage.png")



### Tips
#### Centos系の場合
```
update-ca-trust enable
cp /certs/registry.crt /etc/pki/ca-trust/source/anchors/
update-ca-trust extract
```

#### Macの場合
(1) Macにファイルを持ってきて、openでKeyChainで読み込む

```
open ~/registry.crt
```

(2)  Docker にinsecureレジストリ登録

<img src="https://qiita-image-store.s3.amazonaws.com/0/52545/ed3f58d8-a0de-d48c-f4fb-0c46c017c074.png" width="200"></img>
	
<img src="https://qiita-image-store.s3.amazonaws.com/0/52545/181f6a5e-1372-33ee-2df7-d5a4ae381e04.png" width=200></img>


(3) Dockerのリスタート
<img src="https://qiita-image-store.s3.amazonaws.com/0/52545/4e8b12e0-e2d1-860e-761c-9a3c54208e03.png" width=200></img>
アラートビューでテキストを入力して処理を追加する方法



使用頻度が多いので覚えるためにメモ

よくあるこれの実装方法
![スクリーンショット 2016-08-28 3.19.12.png](https://qiita-image-store.s3.amazonaws.com/0/64331/a7f4fcf5-9afb-e3b9-2296-5c60ada4be2e.png "スクリーンショット 2016-08-28 3.19.12.png")



以下をaction button等にコピペすればok

```
var inputTextField: UITextField?

//alertの表示文言
let alertController: UIAlertController = UIAlertController(title: "文言タイトル", message: "メッセージ", preferredStyle: .Alert)

//キャンセルボタンを押す
let cancelAction: UIAlertAction = UIAlertAction(title: "キャンセル", style: .Cancel) { action -> Void in
    // キャンセルを押した時の処理
}
alertController.addAction(cancelAction)

let addAction: UIAlertAction = UIAlertAction(title: "追加", style: .Default) { action -> Void in
    //追加ボタンを押した時の処理
}

alertController.addAction(addAction)

alertController.addTextFieldWithConfigurationHandler { textField -> Void in
    inputTextField = textField
    textField.placeholder = "追加するテキスト"
}
presentViewController(alertController, animated: true, completion: nil)
```
[小ネタ] Windows Update の実行結果(success/fail)をPowerShellでシンプルに取得する

# Windows Serverの月例パッチ当て問題
- ご担当者の皆様、いつも本当におつかれさまです。
- パッチ当ての自動化をやってる所は多いと思いますが、Windows Updateの実行結果をPowerShellでシンプルに拾って色々捗らせたい
(例) 失敗したホストをSlackに通知

そんな時に役立ちそうな方法を見つけたのでメモ。

# "win32_reliabilityRecords" vs "Windows Update Agent COM object"
普通に調べると、win32_reliabilityRecordsを使ってWindowsUpdateの結果（success/fail）を取得する参考がたくさん出てきます。

- win32_reliabilityRecordsを使って失敗したWindowsUpdate一覧を取得するPowerShellの例

```ps1
Get-WmiObject -Class win32_reliabilityRecords -filter "sourcename = 'Microsoft-Windows-WindowsUpdateClient'" `
| where {$_.message -match 'failure'} `
| select @{LABEL = "date"; EXPRESSION = {$_.ConvertToDateTime($_.timegenerated)}},@{LABEL = "failed updates"; EXPRESSION = {$_.productname}} `
| Format-Table -AutoSize –Wrap
```

ただこの方法には少々問題がありまして、対象のホストで"reliability WMI provider"が有効になっていないといけません。
全ホストにそんなことやってられない…

そこで、COM objectを使ってWindowsUpdateの結果を取得します。
この方法であれば古いWindows Server2008とかでも特に何か下準備をすることなく使えると思います。

```ps1:CheckWindowsUpdateResult.ps1
$Session = New-Object -ComObject Microsoft.Update.Session
$Searcher = $Session.CreateUpdateSearcher()
$HistoryCount = $Searcher.GetTotalHistoryCount()
# http://msdn.microsoft.com/en-us/library/windows/desktop/aa386532%28v=vs.85%29.aspx
$Searcher.QueryHistory(0,$HistoryCount) | ForEach-Object -Process {
    $Title = $null
    if($_.Title -match "\(KB\d{6,7}\)"){
        # Split returns an array of strings
        $Title = ($_.Title -split '.*\((KB\d{6,7})\)')[1]
    }else{
        $Title = $_.Title
    }
    # http://msdn.microsoft.com/en-us/library/windows/desktop/aa387095%28v=vs.85%29.aspx
    $Result = $null
    Switch ($_.ResultCode)
    {
        0 { $Result = 'NotStarted' }
        1 { $Result = 'InProgress' }
        2 { $Result = 'Succeeded' }
        3 { $Result = 'SucceededWithErrors' }
        4 { $Result = 'Failed' }
        5 { $Result = 'Aborted' }
        default { $Result = $_ }
    }
    New-Object -TypeName PSObject -Property @{
        InstalledOn = Get-Date -Date $_.Date;
        Title = $Title;
        Name = $_.Title;
        Status = $Result
    }

} | Sort-Object -Descending:$true -Property InstalledOn |
Select-Object -Property * -ExcludeProperty Name | Format-Table -AutoSize -Wrap
```

尚、このままだと遡って過去の物も一気に取得してしまうので、
必要に応じて当月分だけを抜き出してあげるようにすれば便利になると思います。

これをベースにすれば簡単に失敗を検知できますね。

# 出典
- Getting Windows Updates installation history  
https://p0w3rsh3ll.wordpress.com/2012/10/25/getting-windows-updates-installation-history/
CoreOSを VMware ESXiにインストール

ESXiにCoreOSをインストールしログインするまでの設定方法です

主な流れ

- CoreOSをインストール
- user_data を作成しiso化
- 作成したisoをCoreOSからマウント

参考:[Running CoreOS on VMware]( https://coreos.com/os/docs/latest/booting-on-vmware.html#cloud-config)

# CoreOS のインストール
1. vSphere Clientから[ファイル]-[OVF テンプレートのデプロイ]を開きます
2. 以下のURLを入力し[次へ]
     >  ``https://stable.release.core-os.net/amd64-usr/current/coreos_production_vmware_ova.ova``

3.VMの名前を入力し[次へ]
4.``thin provision`` を選択し[次へ]


# Cloud-config

- 鍵を作る 

```bash
$ ssh-keygen -t rsa
```
-  configdrive.isoの作成

```bash
mkdir -p ~/new-drive/openstack/latest
cd !$
vi user_data
```
cloud-configについては[cloud-config](https://github.com/coreos/coreos-cloudinit/blob/master/Documentation/cloud-config.md)を参照

```bash:user_data 
#cloud-config

# 先ほど作成した公開鍵もしくは自分の公開鍵を入力します
ssh_authorized_keys:
  - ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQDGdByTgSVHq.......
coreos:
  etcd2:
    discovery: https://discovery.etcd.io/<token>
    advertise-client-urls: http://$private_ipv4:2379,http://$private_ipv4:4001
    initial-advertise-peer-urls: http://$private_ipv4:2380
    listen-client-urls: http://0.0.0.0:2379,http://0.0.0.0:4001
    listen-peer-urls: http://$private_ipv4:2380
  units:
    - name: etcd2.service
      command: start
    - name: fleet.service
      command: start
```

ユーザーを追加する場合は


```bash:user_data
users:
  - name: "elroy"
    passwd: "$6$5s2u6/jR$un0AvWnqilcgaNB3Mkxd5yYv6mTlWfOoCYHZmfi3LDKVltj.E8XNKEcwWm..."
    groups:
      - "sudo"
      - "docker"
    ssh-authorized-keys:
      - "ssh-rsa AAAAB3NzaC1yc2EAAAADAQABAAABAQC0g+ZTxC7weoIJLUafOgrm+h..."
```

```bash
cd ~
mkisofs -R -V config-2 -o configdrive.iso new-drive
```

# configdrive.isoを読み込む
1. vSphere Clientの[データストアブラウザ]から**configdrive.iso**を適当なところに配置
2. 先ほどインストールした**CoreOS**の[仮想マシンのプロパティ]から[ハードウェア]タブ→[CD/DVD ドライブ]→[データストアISOファイル]を選択し[参照]から**configdrive.iso**を選択します。
3. [パワーオン時に接続]を忘れずに

これで``ssh core@10.0.0.1 -i ~/.ssh/秘密鍵``でログインできるはずです。
さくらVPS+CentOS7 SSHの初期設定を変更

# さくらVPS + CentOS7 SSHの初期設定を変更

## 前提
「さくらのVPS」 http://vps.sakura.ad.jp/
メモリ:2G SSD:50G CPU:仮想3コアのプラン
カスタムOSインストール:CentOS7 
詳しくはインストール時の記事を参照 http://qiita.com/__fu__/items/39560d8e9317b2559134

## さくらVPS+CentOS7でSSHの初期設定を変更する理由
→rootでパスワード認証ができてしまう状態です。
より安全な公開鍵認証に変更しましょう。

## 設定変更 
※リモートコンソールからrootで作業前提とします。

###ユーザー設定
ログインユーザー追加
※この例では追加するユーザーをhogeuserで説明しています。

```shell-session
# useradd hogeuser      ※ユーザーhogeuser追加
# passwd hogeuser       ※ユーザーhogeuserのパスワード設定
Changing password for user hogeuser.
New password:           ※パスワード入力
Retype new password:    ※パスワード再確認
passwd: all authentication tokens updated successfully.
```

hogeuserをwheelグループに加えます

```shell-session
# usermod -G wheel hoge
```

wheelグループがパスワード無しでsudoを実行できるように修正します。

```shell-session
# visudo
-- viで編集 --
## Same thing without a password
 %wheel ALL=(ALL)       NOPASSWD: ALL ※先頭の#を取ってコメント解除
-------------
```

suをグループ内のユーザーだけが使えるように設定変更

```shell-session
# vi /etc/pam.d/su
--viで編集--
auth           required        pam_wheel.so use_uid　※先頭の#を取ってコメント解除
-----------
```

### 鍵の作成
hogeuserにユーザー変更した上で作業します。

```shell-session
$ ssh-keygen -t rsa
Generating public/private rsa key pair.
Enter file in which to save the key (/Users/hogeuser/.ssh/id_rsa): ※ファイル名がそのままで良ければENTER
Enter passphrase (empty for no passphrase): ※パスワード入力
Enter same passphrase again:                ※パスワード再入力
```
秘密鍵(id_rsa)と公開鍵(id_rsa.pub)が作成されます。

authorized_keysファイルを作成しておきます。

```shell-session
$ touch ~/.ssh/authorized_keys 
```

作成した公開鍵をauthorized_keysに追記します。ついでにパーミッションも変更します。

```shell-session
$ cat ~/.ssh/id_rsa.pub >> ~/.ssh/authorized_keys 
$ chmod 600 ~/.ssh/authorized_keys 
```

### SSHの設定変更
SSHの設定変更を行います。

```shell-session
# vi /etc/ssh/sshd_config  
--viで編集--
PermitRootLogin no         ※rootでのログイン不許可
PasswordAuthentication no  ※パスワード認証不許可  
UsePAM no                  ※PAM不使用
-----------
# systemctl restart sshd   ※sshd再起動
```

## 接続確認
作成した秘密鍵(id_rsa)をクライアント側に持ってきて追加したユーザーでログインできれば成功です。
併せてパスワード認証でログインできないこと、rootでログインできないことも確認しましょう。

## 謝辞
以下を参考にさせていただきました。ありがとうございます。

さくらのVPSを借りたら真っ先にやるべきssh設定
http://blog.myfinder.jp/2010/09/vpsssh.html

さくらvpsの設定自分メモ - ssh設定① - for mac
http://tweeeety.hateblo.jp/entry/20140103/1388702277
Let's Encryptの初期設定の際に登録したメールアドレスを変更する

Let's Encryptの初期設定の際に登録したメールアドレスは特定のファイルに書かれている。

### Linuxの場合

[Let's Encrypt クライアント](https://letsencrypt.jp/docs/using.html)を使ってインストールした場合、下記のファイルにメールアドレスが記載されている。

```

/etc/letsencrypt/accounts/acme-v01.api.letsencrypt.org/directory/ハッシュ値/regr.json

```

### Windowsの場合

[letsencrypt-win-simple](https://github.com/Lone-Coder/letsencrypt-win-simple/releases)を使ってインストールした場合、下記のファイルにメールアドレスが記載されている。

```

C:\Users\Administrator\AppData\Roaming\letsencrypt-win-simple\httpsacme-v01.api.letsencrypt.org\Registration

```

このメールアドレスを変更すれば、今後の期限切れ等の通知も新しいメール宛に来るかどうかは検証できていない。

少なくとも、Windows版はここでメールアドレスを変更しても、最初に登録したメールで期限切れ通知が届いているので、この変更は意味ないのかも。
React Native for Windows

# 環境
* Windows10
* react-native @0.32.0
* Android Studio 2.1.3

# 概要

とりあえずAndroidで動いたので記録しておきます。

https://facebook.github.io/react-native/docs/getting-started.html#content
を参考に進めます。

bash使っているとハマった所がいくつかあったので素直にPowerShell使うと良いと思います。

# インストール

管理者権限に注意してください。
Chocolatey入っていない人は入れてください。
また、結構前に入れた場合はChocolatey自体のバージョンを上げないとpython2が入りませんでした。

```bash
choco install nodejs.install
choco install python2
npm install -g react-native-cli
```

Android Studioをインストールします。

# プロジェクトの作成
Android Studioプロジェクトを作って動作確認をしてください。

私は、JDK関連のエラー以外は問題ありませんでした。
http://tmegos.hatenablog.jp/entry/AndroidStudioErrorBuildtools24.0.1

実機が無い人はここでエミュレータも作成して起動できるようにしておいてください。

続いてReactの方のプロジェクトも作成します。

```bash
$ react-native init AwesomeProject
$ cd AwesomeProject
```

# ビルド

そのままだとビルドが通らなかったのでAndroidStudioの方から設定ファイルをコピーします。

```bash
$ cp AndroidStudioProject/local.properties AwesomeProject/android

$ cp -r AndroidStudioProject/gradle AwesomeProject/android/gradle

$ vim AwesomeProject/android/build.gradle
# classpathをAndroidStudioで生成したものへ変更
# classpath 'com.android.tools.build:gradle:1.3.1'

$ vim AwesomeProject/android/app/build.gradle
# compileSdkVersion
# buildToolsVersion
# targetSdkVersion
# 上記の項目をAndroidStudioのものへ変更
```

この辺りは取りあえずエラーを見て順番に直していったので綺麗じゃないですがご容赦ください。

#実行

実機を繋ぐかエミュレータを立ち上げた状態で下記のコマンドを実行すると動作が確認できます。

```bash
$ react-native run-android
```