OmniAICreator/Qiita-1.07M huggingface dataset:
Prolog

# Prolog
Prolog is a **logic programming** language especially useful for artificial intelligence related purposes. Even though it is rather old (more than 40 years old) it is still used today.
A Prolog program is made of declarative statements named **clauses**, and is run by executing a **query**.

## Clauses
There are two types of clause: **facts** and **rules**.

### Facts
A fact is a statement which is always true. For example, "Yumemi is a company" is a fact. In Prolog, this could be written like this:

```yumemi.prolog
isCompany(yumemi).
```
In this clause, `yumemi` is called an **atom** and can be thought of as a constant.

### Rules
A rule contains a head and a body. It is used to infer new facts from existing ones. Here is an example:

```car.prolog
hasWheels(X) :- car(X).
```
Here `X` is a **variable**. It can be replaced by any atom as long as it's the same on both sides. This rule reads "X has wheels if X is a car".

## Queries
A **query** is simply a question asked to the system, using the same syntax as for the clauses. Let's take a simple prolog program:

```weapon.prolog
has(link, sword).
isWeapon(sword).
hasWeapon(A) :- has(A, B), isWeapon(B). 
```

[Live example](http://ideone.com/LVTWhm)
One can ask : "Does Link have a weapon ?" like this:

```prolog
hasWeapon(link).
```
The output will be:

```
yes
```

One can also ask:

```prolog
hasWeapon(X).
```
which means, "Who has a weapon ?" and get the following result:

```
X = link
yes
```

## How does it work ?
When getting the query

```prolog
hasWeapon(link).
```
the system looks for a rule which gives such a result. The first one which matches is

```weapon.prolog
hasWeapon(A) :- has(A, B), isWeapon(B). 
```
with `A` = `link`.
For `hasWeapon(link)` to be true, `has(link, B)` and `isWeapon(B)` need to be true.
First, the engine tries to validate `has(link, B)`, which is true for the fact

```weapon.prolog
has(link, sword).
```
so `B` becomes `sword`.
Then, `isWeapon(sword)` is true because the program contains exactly this fact.

**Conclusion:** `has(link, B)` and `isWeapon(B)` are true, so `hasWeapon(link)` is true.
Rustのコードを最低限理解するための例


他の言語（C++など）を既にやったことがある人向け

# 基本型

* bool(true/false)
* i8(8bit integer), i16, i32, i64
* u8(8bit unsigned integer), u16, u32, u64
* f32(32bit-floating point), f64
* isize, usize(そのマシンのポインタサイズと同じサイズの整数型）

```rust
true, false, 10i32, 100us, 1.234f32
```

* 固定長配列: array, tuple

```rust
[1i32, 2i32, 3i32]  # array: 同じ型
(1i32, "hello", true)  # tuple: 型は自由
```

* &[T]: slice
* &str：文字列リテラル=文字配列のスライス


```rust
"UTF-8の文字列のみOK"
```

# リテラルの書き方

## コメント

```rust
// 一行
/* /* */ */  // ネストOKなブロックコメント
```

## bool

```rust
true, false
```

## 文字列

```rust
'あ'  // UTF-8一文字: char型
"文字列\u3000\U30000000"  // UTF-8文字列: &str型
r"raw文字列"
r#"ダブルクォート(")がそのまま書けるraw文字列"#
r####"無限に#記号を増やせる"####
```

## バイト配列

```rust
b'a`  // 1バイト: u8型
b"abc\x20"  // バイト配列: &[u8]型
br"rawバイト列"
```

## 数値型

数字のリテラルの末尾に、型を付記して宣言する。

```rust
// 数値型にはアンダースコアを自由に付けて見やすく出来る
100_000_000i32  // 数値型(32bit integer)
0xffffis, 0o77us, 0b10101010u64, 1.2e3f32  // 16進, 8進, 2進, 32bit浮動少数
```

isize, usizeはそれぞれis, usと省略が可能
型を省略した場合、整数ならi32, 浮動小数ならf64になる模様

```rust
println!("{:?}, {:?}", 1, 1.2);  // => 1i32, 1.2f64
```

# 関数, struct, enum, module, trait定義

```rust
// module: namespaceみたいな
mod name {
}

// fn 関数名(引数: 型) -> 返り値 { 中身 }
fn function(x: i32) -> bool {
    if x == 1 { true } else { false }
}
// struct { メンバ, メンバ, }
struct Point {
    x: i32,
    y: i32,
}
// enum { メンバ, メンバ, }
enum Words {
    Hello,
    World,
}
// tuple struct
struct IntArray2(i32, i32);

// enum with value
enum WithInt {
    Value(i32),
    Nothing,
}

// trait: インターフェイスみたいな実装制約
trait Trait {
    fn func(&self) -> bool;
}
```

# 変数バインディング(宣言)

```rust
// let 変数名: 型 = ...;
let x: i32 = 1i32;
let y: &str = "Hello";
// mutキーワードで変更可能(非const)
let mut z: usize = 10us;
z = 5us;
// 型は推論されるので適宜省略可能
let a = 1.0f32;
```

# 制御

```rust
// if
let x = 2i32;
if x == 1 {
    // ...
} else if x == 2 {
    // ...
} else {
    // ...
}
// ifは{}内でセミコロンを付けなければその条件に応じた値を返す
let y = if x == 1 { true } else { false };

// for, while, loop: break, returnはC/C++と同じ様に使える
for x in range(0, 10) {...}
while condition == true {...}
loop {/* 無限ループ */}
```
[GPS]pyprojを使用してGPSの緯度経度から距離、方位角、仰角を算出する


# 概要
ロケットやラジコンヘリにGPSをつけて飛ばした時、飛行物体のGPSの情報からデータを作成する時などに使える。
GPSの**緯度経度、高度**の情報から**距離、方位角、仰角**を算出する方法。
pythonのpyprojライブラリを使用すると便利なので、その利用法。

## 事前準備
pyprojのインストール
`pip install pyproj`

または  

1.[pyprojのページ](https://pypi.python.org/pypi/pyproj?)からソースをダウンロード  
2.`python setup.py build` を実行  
3.`python setup.py install` を実行

## 目的
基準点をp1、飛んでいる対象をobjとする。
pyprojパッケージのGeodクラスのinv()メソッドでp1, objの緯度経度から距離と方位角を求める。
距離は地図上の距離と基準点から物体までの直線距離を求める。
さらにobjの高度も含めてmath.atan2()を使って仰角(見上げた時の角度)を求める。
![2d.jpg](https://qiita-image-store.s3.amazonaws.com/0/55766/907c564b-f06f-86f6-c8e2-614422fb375e.jpeg)

![3d.jpg](https://qiita-image-store.s3.amazonaws.com/0/55766/c9ae577f-c3c5-0982-cddb-878e9a237a98.jpeg)

### ソース
```py:geod_sample.py
#!/usr/bin/env python
#-*- coding: utf-8 -*-
import math
from pyproj import Geod

# 基準点(p1)となる緯度(p1_latitude)、経度(p1_longitude) 
# 単位はDegree
p1_latitude = 35.3524
p1_longitude = 135.0302

# 飛行物体は緯度(obj_latitude)、経度(obj_longitude)、高度(obj_altitude)のところにある
obj_latitude = 35.3532
obj_longitude = 135.0305
obj_altitude = 1000 # 単位は(m)

# ellpsは赤道半径。GPSはWGS84を使っている。距離は6,378,137m
g = Geod(ellps='WGS84')

# inv() method
# 引数は inv(p1の経度, p1の緯度, 対象の経度, 対象の緯度, radians=False)
# radiansで出力が変わる。無し、またはFalseでDegree、Trueを入れればRadianで出力される
# 戻り値は方位角(azimuth)、反方位角(back_azimuth)、距離(distance_2d)の順番
azimuth, back_azimuth, distance_2d = g.inv(p1_longitude, p1_latitude, obj_longitude, obj_latitude)

# 必要なものだけ欲しいなら以下でも可
result = g.inv(p1_longitude, p1_latitude, obj_longitude, obj_latitude)
azimuth = result[0]
back_azimuth = result[1]
distance_2d = result[2]

# inv()で求めた距離が分かれば、GPSの高度と合わせて仰角(elevation)が分かる
# math.degrees()はmath.atan2()の戻り値がRadianなので、Degree(°)に変換している。
elevation = math.degrees(math.atan2(obj_altitude, distance_2d)

# 飛行物体までの直線距離(distance_3d)はmathを使ってピタゴラスの定理 
# math.pypotで求められる。
distance_3d = math.hypot(distance_2d, obj_altitude)

print '基準となる位置から飛行物体までの地図上距離は' + str(distance_2d) + "m"
print '基準となる位置から飛行物体までの直線距離は' + str(distance_3d) + "m"
print '基準となる位置から飛行物体までの方位角は' + str(azimuth) + "°"
print '基準となる位置から飛行物体までの反方位角は' + str(back_azimuth) +"°"
print '基準となる位置から飛行物体までの仰角は' + str(elevation) + "°"
```
[rbenv] Homebrew環境下のとあるWebデザイナーの$PATH [node]

MacOSX 10.7, hombrew, rbenv, nodeを使用

<dl>
<dt>.bash_profile とか .zshrc に記載:</dt>
<dd>
<pre>
# むかし文字化けしたので入れることにしてる
export LANG=ja_JP.UTF-8

# rbenvが管理するディレクトリを変更
export RBENV_ROOT=/usr/local/var/rbenv

# gem
export PATH=/usr/local/var/rbenv/shims/gem:$PATH

# homebrew
export PATH=/usr/local/bin:$PATH
export PATH=/usr/local/sbin:$PATH

# npm
export PATH=/usr/local/share/npm:$PATH

# rbenvによる初期化
if which rbenv > /dev/null; then eval "$(rbenv init - zsh)"; fi
</pre></dd>
</dl>
angular入門 ng-model



## ng-model
inputで受けた値をすぐ画面に反映させる。リアクティブなんちゃらってやつ？よくわかんないけど。

```html:html
<html ng-app="myApp">
  <body>

    <h4>ng-modelでデータバインド</h4>
    入力：{{test}}<br>
    <div><input ng-model="test"></div>

    <h4>js側で指定したデータバインド</h4>
    <div ng-controller="myCtrl">
      入力：{{test}}<br>
      <input type="textarea" ng-model="test">
    </div>
    
  </body>
</html>
```

```javascript:javascript
myApp = angular.module("myApp",[]);

myApp.controller("myCtrl", function($scope){
  $scope.test = "HOGE!";
});
```

[触ってみるよろし](http://codepen.io/tetuo/pen/emgBEx)


\<input\>などの入力可能な要素にng-modelを指定すると、入力値を変数に格納してくれる。そして{{変数}}とすると表示してくれる。そんな感じ。

ng-controllerを経由すると初期値を設定できる。

あと注目すべきは変数のスコープ。ng-controllerを指定すると、その配下がスコープになる。同じ変数名での範囲外の変数への影響はない。
ng-controllerなしの場合はmyApp全体がスコープになる。



間違ってたらごめんちゃい。
AtomでSSH越しのファイルを編集する


[Atom][Atom]ではRemote Atomを使うことでSSHで接続しているリモートホストのファイルを簡単に編集できる（ただし，最初のセットアップはちょっと面倒）．EmacsやVimに慣れずに，毎回ローカルで編集して転送している人にどうぞ．

[Atom]: https://atom.io

Remote Atomのセットアップ
----------------------
![remote-atom.png](https://qiita-image-store.s3.amazonaws.com/0/56302/8cec4e17-19e9-b0b0-e80b-85ac57cd418b.png "remote-atom.png")

![remote-atom2.png](https://qiita-image-store.s3.amazonaws.com/0/56302/84e05d1b-a170-dde2-aa6d-e34599ae0c5c.png "remote-atom2.png")

![remote-atom3.png](https://qiita-image-store.s3.amazonaws.com/0/56302/a7429c41-bfc4-8ac5-e33c-38291b254cfb.png "remote-atom3.png")

SSHの設定
--------

普段の接続に`-R 52698:localhost:52698`をつけてポート転送をする．

```sh
ssh hogehoge.foo.bar -R 52698:localhost:52698
```

ポート番号は`52698`がデフォルトだけれども，複数人で共有しているマシンではかぶると良くないので変えたほうが良いかもしれない．ここを変更した場合にはRemote Atomの設定も変更する必要がある．

[rmate][rmate]のインストール
--------------------------

パスの通ったところに`rmate`を設置する．この例では`$HOME/local/bin`にダウンロードしているが，お好みでどうぞ．Rubyで書かれているので，rubyが入っていないシステムではrubyを入れておいてください．

```sh
mkdir -p ~/local/bin
curl -Lo ~/local/bin/rmate https://raw.githubusercontent.com/textmate/rmate/master/bin/rmate
chmod +x ~/local/bin/rmate
export PATH=$HOME/local/bin:$PATH
```

最後の`export PATH=$HOME/local/bin:$PATH`はログインの度に必要なので，`$HOME/.bashrc`などに書いておくとよいでしょう．

[rmate]: https://github.com/textmate/rmate

[rmate][rmate]を使ってみる
------------------------

Atomが立ち上がった状態で

```sh
rmate hogehoge.txt
```

と実行すると`hogehoge.txt`がAtomで開かれる．ファイルを保存すると直接リモートホストに保存される．もし，ポート番号を変更している場合には`-p`でポート番号を指定するか，環境変数`RMATE_HOST`でポート番号を設定しておく．

SSHの接続の度に`-R ...`をつけるのが面倒くさい
---------------------------------------

`$HOME/.ssh/config`に以下の設定をしておくと，今後`-R`のオプションをつける必要がなくなる．

```conf
# -*- mode: conf -*-

Host *
	RemoteForward 52698 localhost:52698
```

なお，最初の`52698`の後ろに`:`が無いのは間違いではない．
HTML5のマークアップで迷ってる新人用に書いたガイドライン

# 文脈と経緯

*以下は「一通りのタグの種類や、アウトラインアルゴリズムについては一応理解しているので何も分からない訳ではないけど、デザイン画をどんな風に実際のコードとしてマークアップしていけばいいかよく分からない」と言っていた新人デザイナー向けに書いたドキュメントです。*

*新人の子は、セクションを厳密に定義しようとして時間をかけすぎてしまっていました。それも重要ですが、実際の業務における優先順位を明確にしたかったという意図もあります。*

*筆者もデザイナーです。*

---

HTMLのマークアップをする時は、以下の3段階のルールでどんな要素が適当かを判断してください。

# 第1段階：正しく技術仕様に沿っているか

タグの入れ子関係には一定の仕様があり、
これをHTML5では「コンテンツ・モデル」と言います。
XHTML1やHTML4で言うところの「ブロックレベル要素とインラインレベル要素」の
関係を複雑化して更に分かりにくくしたものです。

・ulの直下にはliしか入らない
・pの中にpは入らない
・aの中にaは入らない

みたいなルールがたくさんあり(もっと複雑です)、これに反する記述は
「それなりに」ブラウザ上で表示されることもありますが、
その挙動は予想が付かないものになり、バグの原因になります。
(挙動が仕様に定められていない為、ブラウザによって異なる動作をする可能性があります。)

たとえば、button要素にa要素を内包すると、
ブラウザによってはa要素のリンクが効きますが、
ブラウザによっては動作しなくなります。

コンテンツモデルを完全に把握するのは
正直かなり面倒くさいのですが、
以下のサイトが割と分かりやすいです。

* HTML5の｢コンテンツ・モデル｣と｢カテゴリー｣を理解してマークアップするためのまとめ
  http://mnemoniqs.com/web/html5-contents-model/
* HTML5入門！画像でわかるコンテンツモデル最強チートシート  http://webgoto.net/136/

技術仕様に反さない記述をすることは、
いかなるプロジェクトにおいても必要なことです。

とはいえコンテンツモデルは結構複雑なので、
実は私でも100%把握していないことがあります。

少しばかり仕様から外れても壊れていなければ良いですが、
ブラウザの挙動に支障を来たすような壊れ方をするのは
避けてください。

# 第2段階：使い勝手に影響するマークアップを正しく行っているか

ラジオボタンやチェックボックスには、label要素がないと
クリックできるエリアが狭くて使いにくくなります。
また、画像のalt属性は仕様上必須です。

入力フォームにlabelが付いていなくても仕様違反ではありませんが、
後述の第3段階に比べると、UIの使い勝手に影響するためより重要です。

(スクリプトを多用する特殊なデザインのUIの場合はこの限りではありません)

# 第3段階：正しいセマンティクスに沿っているか

セマンティクスとは「情報の意味」のことで、
これは第1段階とは異なるレイヤーで考えるべきことです。

つまり、見出しが見出しとしてマークアップされ、
箇条書きが箇条書きとしてマークアップされ、
アウトラインがアウトラインとしてマークアップされていることを指します。

セマンティクスは軽視されるべきではありませんが、
(というか私は滅茶苦茶こだわりますが)
あえて矛盾することを言うとどうでもよい場合もあります。

* とにかく見た目が見本と同じになればそれで良い案件
* とにかく急いで作る必要がある案件
* 一般向けに公開されるWebサイトではない社内システムなどの案件

上記のようなケースでは、セマンティクスは2の次3の次という
場合も少なくありません。
(やる意味がない、という訳ではなく、やればやるだけのメリットはあります。)

セマンティクスを重視する理由については、以下のページが詳しいです。

[HTML]セマンティックで正しいコードを書こうとする理由 ― 二人の主を戴く技術者 http://webcre8.jp/think/semantic-html-reason.html

# まとめると

第1、第2段階の配慮はいかなる状況においても、
コーディング時には気をつかってください。
第3段階については軽視して良い場合もあります。
再帰的ファイル探査



globstar をonにすると ** で再帰的ファイル探査(?)ができる。便利。

````
$ find . -ls
11408305    4 drwxrwxr-x   3 foo     bar         4096 Jan  8 18:45 .
11408313    4 drwxrwxr-x   3 foo     bar         4096 Jan  8 18:45 ./a
11408314    4 drwxrwxr-x   3 foo     bar         4096 Jan  8 18:45 ./a/a
11802386    4 drwxrwxr-x   3 foo     bar         4096 Jan  8 18:45 ./a/a/a
11802388    4 drwxrwxr-x   3 foo     bar         4096 Jan  8 18:45 ./a/a/a/a
11802389    4 drwxrwxr-x   2 foo     bar         4096 Jan  8 18:46 ./a/a/a/a/a
11802390    4 -rw-rw-r--   1 foo     bar            5 Jan  8 18:46 ./a/a/a/a/a/a
$
$ cat ./a/a/a/a/a/a
hoge
````
こんな階層で 今まで find . -type f | xargs egrep hoge 的に
しなければいけなかったものがglobstarをonにすると

````
$ shopt -s globstar
$ grep hoge **
a/a/a/a/a/a:hoge
$
````

** で再帰的に拾える。(bash 4.0以上) 

find との比較したいな。
create sample image -dummy image generator (html5のcanvasでダミー画像生成)

html5のcanvasを使用してサンプル画像ダミー画像生成のjsを作成しました。

jpeg・pngの画像を生成することができます。
生成した画像を保存して使用するか、URL化したimgタグをコピペ、で使用できます。（html5対応ブラウザのみ）

~~http://jsdo.it/lofttecs/8CES~~

codepen:
https://codepen.io/lofttecs/pen/KKPaqrQ

Gist:
https://gist.github.com/lofttecs/e2fdcdb0c4e632d992f5
Excel VBA を外部エディタで開発するための怠惰な私の import/export ツール

#概要
Excel VBA (に限らないかもしれないけれど VBA かな) を開発するために、私は外部エディタを使いたいので、そのために作った「標準モジュール」を晒しておきます。

#できること
とりあえず使っているものをそのまま晒します。汎用的な作りにはなっていませんが、適当に書き換えて使ってください。
##想定
*標準モジュールやらクラスモジュールのファイルをある特定のフォルダにまとめておく。
*外部エディタで編集したら ImportComponents() 関数を実行して、指定したファイルを全部インポートする。
*VBE で編集するのも便利なことがあるのでそっちで編集したら ExportComponents() 関数で、指定したファイルを全部エクスポートする。
*import/export の対象のファイルは対象フォルダの cmps.txt に LF 区切りで書いておく。
*なんとなく、標準モジュールの拡張子は`.vb.bas`、クラスモジュールの拡張子は`.vb.cls`としておく。(emacs の auto-mode-alist で VBA のファイルに特定のモードを割り当てたかったから、というのを思い出した。)
*このモジュール（仮称 `Hashiradaka`) も同じフォルダに入れておくといいけど、こいつの import/export だけは手動で行う。

##コード

「標準モジュール」はこんな感じ。

```vbnet:hashiradaka.bas
Const MyName As String = "Hashigodaka"
Const MyDir As String = "P:\tabiclient"
Private Sub ImportComponents()
    DeleteComponents
    For Each name In GetComponentNames()
        ThisWorkbook.VBProject.VBComponents.Import name
    Next name
End Sub
Private Sub DeleteComponents()
    Dim comp As Variant
    For Each comp In ThisWorkbook.VBProject.VBComponents
        If (comp.Type = 1 Or comp.Type = 2) And (Not comp.name = MyName) Then
            ThisWorkbook.VBProject.VBComponents.Remove comp
        End If
    Next comp
End Sub
Private Sub ExportComponents()
    Dim comp As Variant
    For Each comp In ThisWorkbook.VBProject.VBComponents
        Dim ext As String: ext = IIf(comp.Type = 1, "bas", IIf(comp.Type = 2, "cls", ""))
        If ext <> "" Then
            comp.Export MyDir & "\" & comp.name & ".vb." & ext
        End If
    Next comp
End Sub
Private Function GetComponentNames() As Collection
    Set GetComponentNames = New Collection
    On Error GoTo Err
    Dim buf As String, fileNo As Integer: fileNo = FreeFile
    Open MyDir & "\cmps.txt" For Input As #fileNo
    Line Input #fileNo, buf
    Close #fileNo
    Dim name
    For Each name In Split(buf, vbLf)
        Dim path As String: path = MyDir & "\" & name
        If name <> "" And Dir(path) <> "" Then
            GetComponentNames.Add path
        End If
    Next name
Err:
    
End Function

```

import/export 対象のファイル/コンポーネントを指定する cmps.txt はこんな感じで。

```text:cmps.txt
Module1.vb.bas
Tabibito.vb.cls
TabinotochuWEBClient.vb.cls
Customer.vb.cls
Deliveries.vb.cls
Delivery.vb.cls
DeliItem.vb.cls
DeliTemplateA.vb.cls
DeliTemplateB.vb.cls
JSONLib.vb.cls
```
CodePenでangularJS


## CodePenとは
web上でhtmlとかcssとかjsを書けるサービス。
jsの外部ライブラリを使えたり、Sassが使えたりで結構便利。
http://codepen.io/

## AngularJS
jsのフレームワークです。詳細は割愛。

## angularの読み込み
jsの設定画面で「External JS File or Another Pen」に
angularのパスを指定する。
パスが分からない場合は、cdnjs.comのリンクから検索できるので便利。
今回はcdnjs.comで検索してangular.min.jsの1.3.8を設定。

![angular読込み画像](http://f.cl.ly/items/2o2g0C1u112t3X2J0r3Y/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202015-01-08%2018.24.27.png)


## HelloWorld!!

```html:html
<html ng-app="myApp">
  <body>
    <div ng-controller="myCtrl">
      {{hoge}}
    </div>
  </body>
</html>
```
```javascript:javascript
myApp = angular.module('myApp', []);

myApp.controller('myCtrl', function($scope){
  $scope.hoge = "hello World!!";
});
```

[こんな感じ](http://codepen.io/tetuo/pen/bNgBpr)に画面下部の真っ白領域に「hello World!!」と出れば成功です。
おめでとう。
[JavaScript] jQueryのメソッドにCallback関数を適応させる時のメモ

大前提：~~JavaScriptとjQueryのコードが混合している場合、~~
　　　　~~JavaScriptのコードが実行されてからjQueryのメソッドが実行される~~
　　　　コールバック関数は、処理終わってから実行される。

```js

// main
$("#hoge").click(function () {
    console.log("function main start");

    // 適当なメソッド
    console.log("method animate start");
    var value;
    $("#foo").animate({
        right: 100
    }, 1000 ,callback(value)
    );
    console.log("method animate end");

    console.log("function main end"); 
});

// callback関数
var callback = (function(value)  {
    console.log("function callback start");
    if (value !== "undefined") {
        console.log("condition true");
    }
    console.log("function callback end");
});
```

実行される順番
"function main start"
　"method animate start"
　　"function callback start"
　　　"condition true"
　　"function callback end"
　"method animate end"
"function main end"

やりたかったことと何か違う…
FacebookDialog.ShareDialogBuilderで、255byte以上のnameをセットするとエラーが出てシェアできない

※ 2015/01/08時点、FacebookSDK3.5の情報です。

タイトルの通りなんですが、FacebookSDKのFacebookDialogでシェアを実装する時、`setName()`で255byte以上のテキストをセットするとエラーが出てシェアできません。

```java
FacebookDialog.ShareDialogBuilder builder = 
    new FacebookDialog.ShareDialogBuilder(activity)
        .setName("もう誰も恨まなくていいの。誰も呪わなくていいんだよ") // ←これ
        .setDescription("もう誰も恨まなくていいの。誰も呪わなくていいんだよ")
        .setLink(url);
```

![Screenshot_2015-01-08-18-07-02.png](https://qiita-image-store.s3.amazonaws.com/0/15267/bebcebab-7b6e-2780-6ebe-af309ba7d05d.png "Screenshot_2015-01-08-18-07-02.png")

プレビューまでは問題ないですが、右上の投稿ボタンを押すとすぐにバイブとともにエラートーストが出ます。

実はnameの上限があるらしく、アルファベットだと **255文字**、マルチバイト文字だと **85文字**までにしないとシェアできません。それ以上のテキストが来る可能性がある場合は、文字数チェックしてsubstringなどしてあげる必要があります。

そもそもここはタイトル部分なのでそんなに長いテキストはセットするなよということなのかもしれませんが、探した限りどこにも明記されていなかったのでハマりました。
Django / Apache / mod_wsgi: Internal Server Error 500

Django + Apache + mod_wsgiでInternal Server Errorが出たらやること。
基本の”き”。

・django-admin.py startproject mysite直後の動作確認で躓く
<a href="https://docs.djangoproject.com/en/1.7/howto/deployment/wsgi/modwsgi/">公式サイト掲載の設定</a>を確認する。

書いてあるようにApacheで下記の設定ができてれば大抵OK・・・なんだけど。
<pre>
WSGIScriptAlias / /path/to/mysite.com/mysite/wsgi.py
WSGIPythonPath /path/to/mysite.com

&lt;Directory /path/to/mysite.com/mysite>
&lt;Files wsgi.py>
Require all granted
&lt;/Files>
&lt;/Directory>
</pre>

・Apacheのエラーログを確認
これで大抵のことは解決。
むしろtail -fを常にしておくといいかもね・・・
<pre>
tail -f /var/log/httpd/error_log
</pre>

随時追加予定。
VirtualBox上のCent OSにGuest Additionsをインストールする方法

Guest Additionsは、VirtualBox上の仮想環境を操作しやすくするためのソフトウェアです。
ですが、VirtualBox上のCent OSにインストールする際には、少々コツが必要なようなのでまとめます。

#Guest Additionsをインストールするにあたり必要なソフトウェアのインストール
【ゲストOS】以下のコマンドを入力し、アップデートと必要なソフトウェアのインストールを行います。

```
$ su
# yum -y update
# yum -y install kernel-devel kernel-headers gcc gcc-c++
```

**【ゲストOS】終了後、再起動します(重要)。**

#Guest Additionsのインストール
1. 【ホストOS】VirtualBoxの[デバイス]-[Guest AdditionsのCDイメージを挿入]をクリックします。
2. 【ゲストOS】CDを実行するかどうかを尋ねるダイアログが表示されるので、[実行する]をクリックします。
3. 【ゲストOS】現在使用しているアカウントのパスワードの入力を求められるので入力します。
3. 【ゲストOS】端末が立ち上がり、自動的にインストールが始まります。
4. 【ゲストOS】端末に`Press Return to close this window...`という表示が出てきたら、エンターキーを押します。

#参考文献
[CentOSへGuest Additionsをインストールしたときのエラー対処方法](http://little-braver.com/536/)
【cocos2d-x】v2.0.4からv2.2.6に一気に上げた際にやったことをメモ【iOS 64bit対応】

# iOS 64bit対応
既存のcocos2d-xプロジェクトの64bit対応という~~メ(ry~~案件が緊急で飛び込んで来まして、
2015年2月1日より実施と思っていたのですが、
具体的には

* 新規 = **2015年2月1日**より**64bit対応**してないと申請通しませんよ
* 更新 = **2015年6月1日**より**64bit対応**してないと申請通しませんよ

[原文](https://developer.apple.com/news/?id=12172014b)

という事だったのですが、反射的に対応してしまったため、
その時にやったことをメモしておきます。

# cocos2d-x v2系について
cocos2d-x v2.0.4のプロジェクトをそのまま、
arm64をarchitecturesに入れてビルドしたら以下のようなエラーが出ました。

![1.png](https://qiita-image-store.s3.amazonaws.com/0/26453/ff56f1b7-82ce-ae9f-b988-4881e696c5cb.png)

cocos2d-x v2系はアナウンスが出た当時、64bitに対応していませんでした。

その時に以下のトピックで対応の議論がされていました。
[cocos2d-x v2系 64bitについて](http://discuss.cocos2d-x.org/t/64-bit-and-ios-8-requirements-for-new-apps/17797/2)

そして**64bit対応版v2.2.6**がリリースされましたので、
そちらに更新した際に行った事をメモっておきます。

# void init()

![2.png](https://qiita-image-store.s3.amazonaws.com/0/26453/ef81143e-e980-032d-7b5b-f5e703d436ab.png)

こんなエラーが結構ありました。

```cpp:Test.cpp
bool init();
```

が正しいので、voidからboolに修正。

# CCFileUtils::getWritablePath()

![3.png](https://qiita-image-store.s3.amazonaws.com/0/26453/ffc9c8f2-1487-f3db-b5d6-c9db25649859.png)

typoですかね。

* v2.0.4 : **writeable**
* v2.2.6 : **writable**

となっています。writableに修正。

# CCMenu::initWithItems()

![4.png](https://qiita-image-store.s3.amazonaws.com/0/26453/79fab729-5a08-1b96-4bad-817e18b2c33f.png)

v2.0.4では**initWithItems()**という関数があったのですが、
その後、無くなったようです。

対応方法はいくつかあると思います。

* CCMenuを拡張し、**initWithItems()**を作っちゃう
* initWithItemsは結局**CCArray化→initWithArray()**してるだけなので、そうする
* 別のやり方にする(使わないとか)

今回はサクッとinitWithArrayを使うように修正。

# Error : Cast from pointer to smaller type ～

![5.png](https://qiita-image-store.s3.amazonaws.com/0/26453/6b043847-b391-9ebe-f20c-362027c7a82b.png)

こんなの。
これは何かと言いますと、**CCNodeのgetUserData()**の戻り値を**int**にキャストしてると発生します。

```cpp:CCNode.cpp
//～
void * CCNode::getUserData()
{
    return m_pUserData;
}

void CCNode::setUserData(void *var)
{
    m_pUserData = var;
}
//～
```

```cpp:Test.cpp
void Test::receive(CCMenuItem* sender)
{
    int value = (int)sender->getUserData(); // ←コレ
}
```

こんな感じで使ってたりすると出ます。
cocosって言うより、C → C++ の問題かな？

~~以下のように対応。~~

```cpp:Test.cpp
/*
void Test::receiveMenuItem(CCMenuItem* sender)
{
    int value = *(int*)sender->getUserData();
}
*/
```

追記：上記実装だと実行時に落ちてしまいました。
素直に

```cpp:Test.cpp
void Test::receiveMenuItem(CCMenuItem* sender)
{
    CCInteger* value = (CCInteger*)sender->getUserData();
}
```

ラッパークラスを使うのが正しいですね。

# Error : expacted unqualified-id
これは以前にも書きましたので、そっちのリンクを貼っておきます。
[Qiita記事](http://qiita.com/kuuki_yomenaio/items/6edc7cb16a81d2bc9ef5)

C++とObj-Cが混在しているクラスがあると発生します。
**Identify and Type → Type を Objective C++**にして対応。

# 以上
とりあえずこんなもんでビルドが通るようになりました。
細かい動作までは把握しきれていませんので、
もしやる方がいたら動作確認はしっかりと行いましょう。
keynoteでcommand+Nを"新規スライド"にする

Keynoteで Cmd + N を押すと新しいプレゼンを作ろうとする．うっとうしいので新規スライド (command + shift + N)と入れ替える．

1. システム環境設定を開く
2. ショートカットタブ => アプリケーション => "+" ボタンを押して画像のように変更
3. "新規..."についても同様に変更する

![スクリーンショット 2015-01-08 17.59.53.png](https://qiita-image-store.s3.amazonaws.com/0/28835/33c90ec8-74ab-7e18-3e5e-fc38eb92f9e9.png)

*(この方式でkeynoteだけじゃなく代替のアプリのショートカット変更が可能)*


おしまい
Django / Apache / mod_wsgi: No module named importlib

自分メモ。

importlibがないという言葉にしたがってpip install

<pre>
$ sudo pip install importlib
Requirement already satisfied (use --upgrade to upgrade): importlib in /usr/local/lib/python2.7/site-packages
Cleaning up...
</pre>


あるって言われる。
stackoverflowをさまよっているといくつか情報を発見。
どうやらpython-pathにsite-packagesが入ってないときにでてくるエラーらしい。
単純にパスが通ってないだけだった・・・。

ということでvirtualhost-example.com.confを編集。
<pre>
&lt;VirtualHost *:80&lg;
    #site-packagesとwsgi.pyにパスを通す
    WSGIDaemonProcess example.com python-path=/your/python/site-packages:/home/user/example.com
&lt;/VirtualHost&lg;
</pre>

<pre>
$ sudo apachectl graceful
</pre>

無事動作。
Swift + Realm DB　をCocoaPodsで導入する手順

## MacにCocoaPodsをインストール
1. gemをインストール

	```
	sudo gem install cocoapods
	```

	プレリリースのベータ版が必要になることがあるので、念のため併せてインストール

	```
	gem install cocoapods --pre
	```

2. terminalを再起動する

	忘れがちです。
	再起動後にバージョンを確認しインストールされていることを確認します

    ```
    pod -v
    ```
3. Set Up

    ```
    pod setup
    ```

## Xcode Projectを作成
Swiftのプロジェクトを作成します
説明のため名前をSampleとします

## Xcode ProjectにCocoaPodsを導入する
1. Xcodeで作成したプロジェクトのディレクトリに移動

	```
	cd project root directory
	ls -la
	    Sample
	    Sample.xcodeproj
	    SampleTests
    ```

2. CocoaPodsを初期化

	```
	pod init
	```
    Podfileが作成されます

3. Podfileの編集

	```Podfile
	target 'Sample', exclusive: true do
	    pod 'Realm'
	end

	target 'SampleTests', exclusive: true do
	    pod 'Realm/Headers'
	end
	```

	ブロックを用いて、ターゲットごとにインストールするpodを分けることが出来ます。
exclusive: trueとすると、ブロック内のpodのみしかインストールしないようになります。

4. インストール
        pod initしたディレクトリと同じ場所で以下のコマンドを実行

	```
	pod install
	```

5. Xcodeのプロジェクトを一旦閉じて、Sample.xcworkspaceという名前のプロジェクトを開きます。

	この時点で、Realm DBの導入自体は終了です。

## SwiftでのRealm DBの利用
CocoaPodsでインストールしたRealm DBはObjective-Cで書かれているので、
Swiftのプロジェクトでも利用するためにBridging Headerファイルを追加します。
以下のヘッダファイルをプロジェクトに追加します。
Sample-Bridging-Header.h


1. 以下の行を追記

	```Sample-Bridging-Header.h
	#import <Realm/Realm.h>
	```

2. プロジェクトのBuild Settings -> swift compiler

	Objecctive-C Bridging headerの項目に

	```
	Sample/Sample-Bridging-Header.h
	```

	を追加する。パスを間違えやすいので注意してください。環境によっては別の階層かもしれません。

3. 確認
	swiftのファイルに

	```
	RLMObject()
	```
	等と書いてエラーにならなければ正しく導入できています。
さくら管理のドメインのサブドメインのみをRoute53で管理

## 概要
Apiを作ってAWSで走らせたい。
そこでさくらインターネットで管理しているドメインにサブドメインを作りそれを割り当てようとおもいます。
しかし、オートスケーリングをさせようとするとip割り当て（Aレコード）では勝手が悪い。
そこで親ドメインを移管せずにサブドメインのみを[route53](https://console.aws.amazon.com/route53/)で管理しようと思います。

## Route53の用意
* [route53の管理画面](https://console.aws.amazon.com/route53/)のメニューからHosted Zonesをクリック。Create Hosted Zoneをクリックして使用するサブドメインのゾーンを作る。
* 作成したゾーンをダブルクリックしてレコードの編集画面へすすみ、NSレコードに設定されている4つのネームサーバーの値をメモる。

## サブドメインを発行する
* さくらドメインのゾーン編集画面に行き、エントリ名を上で設定したサブドメインの値、種別をネームサーバ(NS)、値に上で控えたネームサーバーを入力する **ネームサーバーは一つずつ入力する  (例:" ns-1146.awsdns-15.org.")**
* 計４つのエントリーが新規登録されたはずなので、左のデータ送信をクリックして確定させる。

## サブドメインにLoad Balancerを割り当てる
ひとまず動作確認としてipを割り当てて名前解決されているかを確認する。
* route53に戻り、サブドメインをダブルクリックしてレコードの編集画面へ進む。
* Create Recoad SetをクリックしてAlias欄のラジオボタンをYesにする
* Alias Target欄で使用するLoad Balancerを選択する
* Createをクリックして登録を確定させる。

## 確認
とりあえずdigってみる

```shell-session
% dig f.nitolab.com

; <<>> DiG 9.9.5-3ubuntu0.1-Ubuntu <<>> f.nitolab.com
;; global options: +cmd
;; Got answer:
;; ->>HEADER<<- opcode: QUERY, status: NOERROR, id: 5128
;; flags: qr rd ra; QUERY: 1, ANSWER: 2, AUTHORITY: 4, ADDITIONAL: 3

;; OPT PSEUDOSECTION:
; EDNS: version: 0, flags:; udp: 4096
;; QUESTION SECTION:
;f.nitolab.com.			IN	A

;; ANSWER SECTION:
f.nitolab.com.		41	IN	A	54.65.88.112
f.nitolab.com.		41	IN	A	54.238.132.87

;; AUTHORITY SECTION:
f.nitolab.com.		3581	IN	NS	ns-224.awsdns-28.com.
f.nitolab.com.		3581	IN	NS	ns-921.awsdns-51.net.
f.nitolab.com.		3581	IN	NS	ns-1816.awsdns-35.co.uk.
f.nitolab.com.		3581	IN	NS	ns-1146.awsdns-15.org.

;; ADDITIONAL SECTION:
ns-224.awsdns-28.com.	106054	IN	A	205.251.192.224
ns-921.awsdns-51.net.	110927	IN	A	205.251.195.153

;; Query time: 43 msec
;; SERVER: 127.0.1.1#53(127.0.1.1)
;; WHEN: Thu Jan 08 17:31:20 JST 2015
;; MSG SIZE  rcvd: 243
``` 

完了
Python botoでCloudWatch Metricsの一覧とUnitの単位の対応表を取得する

# 動機
CloudWatchのMetricsで、それぞれの単位ってなんだろうっていうのを調べたかったけど、良い一覧が無かったので作った。
`bash` + `aws-cli`だとめんどくさそうなので、`Ruby`ならサクッと作れそうだけど、お勉強がてら`Python`で。

# 動作環境
- Python 3.4.2
- boto 2.4.1

# ソース

```py
#!/usr/bin/env python

import sys
import datetime
import re
from boto.ec2 import cloudwatch

end    = datetime.datetime.utcnow()
start  = end - datetime.timedelta(minutes=10)

cw = cloudwatch.connect_to_region('ap-northeast-1')

def main():

    if len(sys.argv) not in [2,3]:
        print('Usage: python %s <namespace> [separator]' % sys.argv[0])
        quit()

    namespace = sys.argv[1]
    separator = "\t" if len(sys.argv) == 2 else sys.argv[2]
    results   = []

    for metric in cw.list_metrics(namespace=namespace):
        for data in metric.query(start_time=start, end_time=end, statistics='Average'):
            results.append(separator.join([namespace, metric.name, data['Unit']]))

    results = list(set(results))
    for ret in results:
        print(ret)

if __name__ == '__main__':
	main()
```

# 使い方

```shell-session
python <script-file-name> <namespace> [separator]
```

`separator`は指定しないとタブ区切りになる。

# 実行結果

いるかどうか分からないけど、結果だけ知りたい方向けに。
（EC2,EBS,RDSのみ）

```shell-session
$ python get-metrics-unit-type.py AWS/EC2
AWS/EC2	CPUCreditUsage	Count
AWS/EC2	CPUCreditBalance	Count
AWS/EC2	StatusCheckFailed	Count
AWS/EC2	DiskReadOps	Count
AWS/EC2	StatusCheckFailed_System	Count
AWS/EC2	DiskWriteBytes	Bytes
AWS/EC2	NetworkOut	Bytes
AWS/EC2	DiskReadBytes	Bytes
AWS/EC2	NetworkIn	Bytes
AWS/EC2	DiskWriteOps	Count
AWS/EC2	StatusCheckFailed_Instance	Count
AWS/EC2	CPUUtilization	Percent

$ python get-metrics-unit-type.py AWS/EBS
AWS/EBS	VolumeWriteBytes	Bytes
AWS/EBS	VolumeQueueLength	Count
AWS/EBS	VolumeReadOps	Count
AWS/EBS	VolumeIdleTime	Seconds
AWS/EBS	VolumeTotalWriteTime	Seconds
AWS/EBS	VolumeWriteOps	Count

$ python get-metrics-unit-type.py AWS/RDS
AWS/RDS	FreeableMemory	Bytes
AWS/RDS	NetworkTransmitThroughput	Bytes/Second
AWS/RDS	DatabaseConnections	Count
AWS/RDS	WriteIOPS	Count/Second
AWS/RDS	ReadIOPS	Count/Second
AWS/RDS	ReadLatency	Seconds
AWS/RDS	WriteThroughput	Bytes/Second
AWS/RDS	ReadThroughput	Bytes/Second
AWS/RDS	FreeStorageSpace	Bytes
AWS/RDS	WriteLatency	Seconds
AWS/RDS	DiskQueueDepth	Count
AWS/RDS	CPUUtilization	Percent
AWS/RDS	CPUCreditUsage	Count
AWS/RDS	NetworkReceiveThroughput	Bytes/Second
AWS/RDS	CPUCreditBalance	Count
AWS/RDS	BinLogDiskUsage	Bytes
AWS/RDS	SwapUsage	Bytes
```


# botoの感想

- 初めは公式じゃなくてコミュニティ製だった（ですよね？）からか、他のSDKとちょっと使用感が違う気がする
- 逆に、実用重視っぽい感じがするので慣れれば他より使いやすいのかも？
学術検索エンジン


# Microsoft Academic Search

[Microsoft Academic Search](http://academic.research.microsoft.com/)は論文等の学術文献専用サーチエンジンで、個人的によく利用しているエンジンの一つ。

特にMS Academic Search はメタデータの要約に優れており、ジャーナルやカンファレンス名で検索するとそのジャーナル論文がトータルで何篇出版されて、何回引用されているかといった集計がみれたり、著者ごとにも出版数、引用数、レーティングの高い論文一覧などが見れて大変便利である。

Google Scholar とは違い、特許文書の検索はできない。

## 検索窓の使い方

基本的には、調べたい検索キーワードをGoogleで検索するノリで入れて検索していけばよい。

検索窓の右側にあるドロップダウンリストや、検索結果の左側には研究のカテゴリ一覧が表示されており、これを選択することで自分の興味のある分野の文献のみに対象を絞ることができる。

### 検索式

検索窓に入力する文字列は、単に単語をスペース区切りで入力すればキーワード検索になるが、より高度な検索のための書式が用意されている。

例えば、キーワード `transaction` で、かつ著者名に `Jim` を含む文献を検索したい場合は

~~~
transaction author:Jim
~~~

と検索すればよい。
 
また、著者名をフルネームで（スペースを含む形で）検索したいときは括弧で括ればよい。

~~~
transaction author:(Jim Gray)
~~~

上記の検索ワードの中で `author:(Jim Gray)` の部分が **フィールドクエリ** と呼ばれ、特定の属性値のみに検索をかけることを可能としている。フィールドクエリは、`author`の部分が **フィールドキー**、`:` の部分が **フィールド演算子**、`Jim` の部分が **フィールドクエリ値** と呼ばれる。
フィールドキーやフィールド演算子にはいくつか種類があり、これらを組み合わせることでより高度な検索が可能となる。

* フィールドキー
  * `author`: 著者名
  * `title`: タイトル
  * `conf`: カンファレンス名
  * `jour`: ジャーナル名
  * `year`: 出版年度
* フィールド演算子
  * `:`: フィールドクエリの対象が文字列の場合に使う
  * `=`, `>`, `<`, `<=`, `>=`: フィールドクエリの対象が数値の場合に使う（実際は`year`のみ）

# Google Scholar

[Google Scholar](http://scholar.google.co.jp/) はGoogleが提供する学術検索専用のサーチエンジン。情報ソースがかなり豊富なことが特徴で、学術論文だけでなく特許文書やホワイトペーパー、技術報告書、Google Booksのコンテンツなどを横断的に検索できる点に特徴がある。

（書きかけ）
Androidデバッグ証明書にリリース用証明書を使う

アプリ内課金のテストをしたいときなど、リリース署名アプリで実行しないとだめな場合がありますが、それだとブレークを貼ってデバッグ実行するのが、署名済みapkをエクスポートして、端末にインストールして、アプリ起動後にDDMSでプロセスにアタッチして･･･となって手順が増えて面倒！かつ、起動時の処理にブレークを貼ることが出来なくていろいろと不便です。

そこで、デバッグ証明書をリリース用証明書で置き換えます。

ただ、そのままでは使えません。
デバッグ用の情報に置き換えてやる必要があります。

#1 リリース用証明書を任意のディレクトリにコピーする。

ここでは、コピーした証明書ファイル名をmyDebug.keystoreとしたとします。

#2 ストアパスワードの変更

```
keytool -storepasswd -keystore myDebug.keystore
```

デバッグ署名に必要なパスワードは、
android
です。

#3 エイリアスの変更

```
keytool -changealias -alias [現在のエイリアス] -destalias androiddebugkey -keystore myDebug.keystore -storepass android
```

[現在のエイリアス]は、リリース用証明書に作ったエイリアス名を指定してください。
キーパスワードを聞かれるので、証明書を作ったときに指定したキーパスワードを入力します。

#4 キーパスワードの変更

```
keytool -keypasswd -alias androiddebugkey -keystore myDebug.keystore
```

最初に聞かれるのはストアパスワード(android)、次に聞かれるのが古いキーパスワード、続いて新しいキーパスワードを2回入力します。

新しいキーパスワードは、
android
です。

#5 デバッグ証明書を置き換える

## ・Eclipseでの方法

環境設定の「Android」-「Build」で、「Custom debug keystore」に作成したキーストアファイルを指定する。

## ・AndroidStudioでの方法

build.gradleに以下のように記述する。
（keystoreファイルのパスは、自分の環境に合わせて適宜変更のこと）

```build.gradle

signingConfigs {
        debug{
            storePassword "android"
            keyAlias "androiddebugkey"
            keyPassword "android"
            storeFile file('myDebug.keystore')
        }
}
```

参考サイト様
http://cohakim.com/archives/4204
恵方巻きの方角を取得する

恵方巻きの方角は西暦の下一桁で決まるそうです。

| 西暦下一桁 | 恵方     |
|----------|---------|
| 4, 9     |東北東微東 |
| 5, 0     |西南西微西 |
| 6, 1     |南南東微南 |
| 7, 2     |北北西微北 |
| 8, 3     |南南東微南 |

規則的！
ってことでjsで書いた。

```js

var getRolledThicklyDirection = function(year) {
	var directions = [
		"西南西微西",
		"南南東微南",
		"北北西微北",
		"南南東微南",
		"東北東微東"
	];
	return directions[year % 5];
};
```

ちなみに2015年は「西南西微西」です。
３次元の極座標変換

## 直交座標から極座標に変換 (x,y,z)→(r,θ,φ)
```js:kyoku
var radius = Math.sqrt(x * x + y * y + z * z);
var theta = Math.acos(z / radius);
var phi = Math.atan2(y, x);
```
※atan2を使うのがポイント

## 極座標から直交座標に変換 (r,θ,φ)→(x,y,z)
```js:chokkou			
x = radius * Math.sin(theta) * Math.cos(phi);
y = radius * Math.sin(theta) * Math.sin(phi);
z = radius * Math.cos(theta);
```

## ちょいちがうバージョン

c#ですが。

```csharp

        var vv = transform.position;

        var amp = vv.magnitude;
        var radX = (-Mathf.Atan2(vv.z,vv.x) + Mathf.PI/2f);
        var radY = Mathf.Asin(vv.y/amp);

        var xx = amp * Mathf.Sin( radX) * Mathf.Cos(radY);
        var yy = amp * Mathf.Sin( radY);
        var zz = amp * Mathf.Cos( radX ) * Mathf.Cos(radY);

```

## 

##参考
http://ja.wikipedia.org/wiki/%E6%A5%B5%E5%BA%A7%E6%A8%99%E7%B3%BB#.E7.90.83.E5.BA.A7.E6.A8.99_.28Spherical_Polar_Coordinates.29
Cygwinにtreeコマンド入れる

Windowsのコマンドプロンプトだとtreeコマンドあるんだけど、普段Cygwin(ConEmuで)使ってるのでtreeの為だけにコマンドプロンプト使いたくない。

ってことでCygwinでtreeコマンド使えるようにインストールする。

```bash
$ curl -LO http://mama.indstate.edu/users/ice/tree/src/tree-1.6.0.tgz
$ tar xzfv tree-1.6.0.tgz
$ cd tree-1.6.0.tgz
```

MakefileをCygwin用に修正する。

```diff:Makefile
 # Linux defaults:
 #CFLAGS=-ggdb -Wall -DLINUX -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
-CFLAGS=-O4 -Wall  -DLINUX -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
-LDFLAGS=-s
+#CFLAGS=-O4 -Wall  -DLINUX -D_LARGEFILE64_SOURCE -D_FILE_OFFSET_BITS=64
+#LDFLAGS=-s
 
 # Uncomment for FreeBSD:
 #CFLAGS=-O2 -Wall -fomit-frame-pointer
 @@ -47,10 +47,10 @@ LDFLAGS=-s
 #MANDIR=${prefix}/share/man/man1
 
 # Uncomment for Cygwin:
-#CFLAGS=-O2 -Wall -fomit-frame-pointer -DCYGWIN
-#LDFLAGS=-s
-#TREE_DEST=tree.exe
-#OBJS+=strverscmp.o
+CFLAGS=-O2 -Wall -fomit-frame-pointer -DCYGWIN
+LDFLAGS=-s
+TREE_DEST=tree.exe
+OBJS+=strverscmp.o
 
 # Uncomment for OS X:
 #CC=cc
 ```

Makefileを修正したらmakeしてインストールする。

```bash
$ make
$ make install
```

` error while loading shared libraries: cygmpc-3.dll: cannot open shared object file: No such file or directory` ってエラーが出たけどgccを再インストールしたらなおった。

```bash
$ apt-cyg remove gcc-core
$ apt-cyg install gcc-core
```

ちゃんと使える。

```bash
$ tree
.
├── CHANGES
├── color.c
├── doc
│   ├── tree.1
│   ├── tree.1.fr
│   └── xml.dtd
├── hash.c
├── html.c
├── INSTALL
├── LICENSE
├── Makefile
├── README
├── strverscmp.c
├── TODO
├── tree.c
├── tree.h
├── unix.c
└── xml.c

1 directory, 17 files

```
SeleniumでScreenShot ( Python編 )

## 動機
* Recommendで[こんな記事](http://qiita.com/tukiyo3/items/e104f9dd147ca5d9c2f5) を見つけた
    * 結構大変そうだったから自分も同じことやってたので書いてみようと.
* インフルエンザニートしてて暇だった.

## 目的
* Selenium Web Driverを使ってBrowserのScreenShotを取得する.
    * 操作等は一切なし.それはまた別途説明すればええし.

## 実装
とりあえず同一階層上に"screen.png"というファイルを作成してそこにScreenShotを保存するだけのスクリプト.

```py:screenshot.py
import os
from selenium import webdriver

# URL & File Name
URL = "https://www.google.com"
FILENAME = os.path.join(os.path.dirname(os.path.abspath(__file__)), "screen.png")

# Open Web Browser & Resize 720P
driver = webdriver.Firefox()
driver.set_window_size(1280, 720) 
driver.get(URL)

# Get Screen Shot
driver.save_screenshot(FILENAME)

# Close Web Browser
driver.quit()

```
動作確認はしてない.多分動くと思う.知らんけど.

## 結論
* インフルエンザニート,３日目に突入すると結構元気になるから逆に辛い
date(gnu)コマンドで月初と月末のepoctime取得

# 例
````
date -d"$(date +%Y-%m-1)" +%s
date -d"$(date +%Y-%m-1) +1 month -1 sec" +%s
````

※ +-1 monthの処理の注意点
3/31 の1ヶ月前は3/3 になったりする(2月の日数28日をマイナスしている?)ので
当月の1日～28日あたりを指定して +-1 month すると安定する模様。

````
$ date -d"2014/3/31 -1 month"
Mon Mar  3 00:00:00 JST 2014
$ date -d"2014/1/31 +1 month"
Mon Mar  3 00:00:00 JST 2014
$ date -d"2014/7/31 -1 month"
Tue Jul  1 00:00:00 JST 2014
```


## 補足 date -d (--date) でよく使うもの
### n日後(前)
 `` date -d "+-n day" `` 
+は省略可 -は ago でも表記可能 1 day ago的な。でも嫌い。
年月週日時分秒はyear,month,week,day,hour,min,sec

### 今週/先週/来週の月曜日
`` date -d "this mon" `` 
`` date -d "last mon" `` 
`` date -d "next mon" ``
曜日表現は sun,mon,tue,wed,thu,fri,sat で指定
簡単ターミナルSSHする方法

## ターミナルから簡単にSSHログインする方法

#### 1. SSHのコンフィグファイルを開く 
例：Macの場合
`$ vi ~/.ssh/config`

#### 2. 設定の記述を追加
```:./.ssh/config
Host example               <- 名前
  HostName example.com     <- 接続ホスト名
  Port 443                 <- ポート番号
  User myname              <- ログインユーザー名
  IdentityFile ~/.ssh/key  <- 秘密鍵
```
※不要な項目は書かないでOK

#### ３. ターミナルからログイン 
今まではこのように書いていたのが
`$ ssh myname@example.com -p 443 ...`
こう省略できる。 
`$ ssh example`
expectでsshのパスワード認証を自動化


```bash:expect_ssh_password.sh
#! /bin/bash

host=xxx.xxx.xxx.xxx
login_name=hoge
password=xxxxxxxx

expect -c "
set timeout -1
spawn ssh -l $login_name $host
expect \"Are you sure you want to continue connecting (yes/no)?\" {
    send \"yes\n\"
    expect \"$login_name@$host's password:\"
    send \"$password\n\"
} \"$login_name@$host's password:\" {
    send \"$password\n\"
} \"Permission denied (publickey,gssapi-keyex,gssapi-with-mic).\" {
    exit
}
interact
"
```
Rの文字列を受けとるCで書かれた拡張


Rから使える関数をC言語で書くのはとても簡単だけど、文字列の渡し方についてななめ読みしてすぐわかる簡単な例がすぐ見つからなかったのでメモ。


```C:hello.c
#include <stdio.h>

void hello(char** str)
{
  if(str)
    printf("Hello %s\n", *str);
}
```

コンパイルして `hello.so` を作る（Mac OS/unix）。

```bash
% R CMD SHLIB hello.c
```

Rで使う:

```R
dyn.load("hello.so")

hello <- function(val) {
  .C("hello", as.character(val))
  NULL
}

hello("world")  # => Hello world
```

以上、とても簡単。

補足説明:

- `as.character()` は絶対に文字列しか渡さないというなら必要なけど、その場合うっかり文字列以外を渡すとヌル文字をみつけるまでメモリの彼方まで駆けだして死ぬ。
- `function(val)` の最後の `NULL` は関数の戻り値。なんでもよい。
- C側の `if(str)` は NULL や list() など要素数がゼロのものを渡したときに `str=NULL` になることへの対策。

ベクトルを渡した場合は最初の要素だけが使われる:

```R
hello(1:3) # => Hello 1
```

## ベクトル対応
全部使いたい場合のベクトル化したバージョン。

```C:hello.c
void vhello(char** str, int* n)
{
  for(int i=0; i<*n; i++)
    printf("Hello %s\n", str[i]);
}
```

```R
vhello <- function(val) {
  .C("vhello", as.character(val), length(val))
  NULL
}

vhello(1:3)     # => Hello 1
                #    Hello 2
                #    Hello 3
```

Keywords: Statical package R. Passing character strings from R to an extension written in C.
PHPスクリプトをシェルのバックグラウンド実行で動かす方法

#はじめに
シェルコマンドでは、各コマンドを&でつなぐことでバックグラウンド実行を行うことが出来ます。
これを使って複数のコマンドの同時実行などが可能です。
便利ですよね。

ただ、この方法でphpのスクリプトをバックグラウンド実行しようとしても出来ずにハマったのでその解決法をメモ。

## バックグラウンド起動成功例
sleep 10を2回起動しているにもかかわらず、totalの実行時間は10秒で済んでいる
> ~% date;echo 'Start jobs!'; sleep 10 & sleep 10 & wait;date
> Thu Jan  8 12:58:40 JST 2015
> Start jobs!
> [5] 27000
> [6] 27001
> [5]    done       sleep 10
> [6]    done       sleep 10
> Thu Jan  8 12:58:50 JST 2015

ただし、PHPで記載されたスクリプトなど、一部のコマンドに関してはバックグラウンド実行を行うことが出来ません。

## バックグラウンド起動をしていない場合は成功する
> ~% php -r 'echo "hoge\n";'
> ~% hoge

## バックグラウンド起動をさせようとした場合は標準入出力が失敗し、以下のエラーがでてsuspendする
> ~% php -r 'echo "hoge\n";' &
> ~% [5]  + suspended (tty output)  php -r 'echo "hoge\n";'


# 解決法1 < /dev/nullをつける
とりあえず手元で簡単に行ないたい場合はこちらのやり方で大丈夫なようです。
一番簡単な例
> ~% php -r 'echo "hoge\n";' < /dev/null&
> [7] 27068
> ~% hoge
> 
> [7]    done       php -r 'echo "hoge\n";' < /dev/null

複数同時起動させる例1
→成功
> ~% php -r 'echo "hoge\n";' < /dev/null& php -r 'echo "fuga\n";' < /dev/null&;
> [7] 27119
> [8] 27120
> ~% hoge
> fuga
> [8]    done       php -r 'echo "fuga\n";' < /dev/null
> ~%
> [7]    done       php -r 'echo "hoge\n";' < /dev/null


複数同時起動させる例2
→成功 各PHPスクリプトにsleep(10)を入れているにもかかわらず、全体で10秒で完了している
> ~% date; php -r 'sleep (10); echo "hoge\n";' < /dev/null& php -r 'sleep (10); echo "fuga\n";' < /dev/null&; wait; date;
>  Thu Jan  8 13:22:22 JST 2015
> [7] 27124
> [8] 27125
> fuga
> hoge
> [8]    done       php -r 'sleep (10); echo "fuga\n";' < /dev/null
> [7]    done       php -r 'sleep (10); echo "hoge\n";' < /dev/null
> Thu Jan  8 13:22:32 JST 2015



# 解決法2 シェルスクリプトファイルを記載してそちらを実行する
上記のワンライナーを以下のシェルスクリプトに書き換えます。
おすすめはこちらです。
この時、< /dev/nullは不要です。

```sh:BGSample.sh
#!/bin/sh
date;
php -r 'sleep(10); echo "fuga\n";' &
php -r 'sleep(10); echo "hoge\n";' &
wait;
date;
```

実行結果
> ~% sh ./BGSample.sh
> Thu Jan  8 13:26:30 JST 2015
> fuga
> hoge
> Thu Jan  8 13:26:40 JST 2015

こちらも大丈夫でした。実行時間が10秒ですので、各phpのスクリプトが並列で実行されていることがわかりますし、出力もわかりやすいですね。
tmuxのショートカットメモ

よく使うのだけ

ctrl + b +

- session
  - session list : s
  - rename session : $
- window
  - new window : c
  - window list : w
  - rename window : ,
- pane
  - 縦分割 : %
  - 横分割 : "
  - pane移動 : o
  - pane番号移動 : q
- コピー
  - コピー : [
  - コピー開始点 : ctrl+space
  - コピー終了点 : ctrl+w
  - ペースト : ]
mongooseでリレーション


# リレーションの指定

Schemaに`{ type: ObjectId, ref: 'Story' }`のように指定する

```js:
var mongoose = require('mongoose')
  , Schema = mongoose.Schema
  
var personSchema = Schema({
  _id     : Number,
  name    : String,
  age     : Number,
  stories : [{ type: Schema.ObjectId, ref: 'Story' }]
});

var storySchema = Schema({
  _creator : { type: Number, ref: 'Person' },
  title    : String,
  fans     : [{ type: Number, ref: 'Person' }]
});

var Story  = mongoose.model('Story', storySchema);
var Person = mongoose.model('Person', personSchema);
```

# find時にリレーション先のドキュメントも一緒に取得する

`populate('_creator')`のように指定する。

```js:
Story
.findOne({ title: 'Once upon a timex.' })
.populate('_creator')
.exec(function (err, story) {
  if (err) return handleError(err);
  console.log('The creator is %s', story._creator.name);
  // prints "The creator is Aaron"
})
```

# 参考

Mongoose Query Population v3.8.21
http://mongoosejs.com/docs/populate.html

mongooseでリレーション - hokaccha.hamalog v2
http://d.hatena.ne.jp/hokaccha/20110805/1312544911

Mongoose で MongoDB の Embedded Documents の扱いで嵌まったこと - tilfin's note
http://tilfin.hatenablog.com/entry/20111030/1319966988
xcodeで画面横幅いっぱいにオブジェクトを配置した際のリサイズ【Autoresizing】

初歩すぎてぐぐっても出てこなかったのでここに記す

【やりたい事】
こんな風にUIButtonを画面横幅いっぱいに広げたとき、
他のデバイスでも自動的に広がるようにしたい。。。

んだけど、配置してプレビューすると右図のように途中で切れた。

![alt](http://i.gyazo.com/65bd9a910a20551d280c49eae97996b9.png)


【解決】
右側のものさしマーク。
Autoresizing　をみると、赤いIみたいなマークが上と左についてる。
![alt](http://i.gyazo.com/0ab50c3ebc240593eae95c4b2fe18ff6.png)

これを、下記図のように真ん中の矢印部分にカーソルをあわせて
二回クリックすると…！
![alt](http://i.gyazo.com/414351fda269d9ee4ac4dbce5eef0024.png)

oh!Jesus...なんなく解決した…。
![alt](http://i.gyazo.com/315e620ad9208cec430c4ec9c33fc1b4.png)

【追記】
ちなみにこの方法。View Controllerを触った時に現れる
Interface Builder Document　の
□Use Auto Layout
□Use Size Classes
上記二つのチェックを外さないとできない。
![alt](http://i.gyazo.com/213a7f8f6c7fd2f884b3a1bf7d12f8f8.png)

ボックスを横並びとかにする際はこの方法では出来ないので
UseAutoLayoutにチェックを入れて、並べたいボックスをを二つ選択したまま
Equal WidthsにチェックすればOK。
ただし、そのままではのびないので、左右の　|---| これを赤くしよう
![alt](http://i.gyazo.com/270add832b4eac955f7afe2c0e33cd94.png)
xkcdスタイルのグラフ

StackExchange/Mathematica Stack Exchangeで見かけた質問とステキな回答。

質問：[xkcdスタイルのグラフ](http://mathematica.stackexchange.com/questions/11350/xkcd-style-graphs)
回答：（上記リンク先参照のこと）

（参考 [xkcd.com]([http://xkcd.com/])）
GoogleAnalyticsアドオンのTIPS

#使い方まとめ
##アドオンいれてください。
こちらとかを参考に
http://nanapi.co.jp/blog/2014/09/12/googlespreadsheet_meets_analytics/

#アドオンの設定ノウハウ
##基本的な手順
[CreateReport]で設定つくって→シートでフィルターを編集→[Run]で実行

![スクリーンショット 2015-01-07 17.40.24.png](https://qiita-image-store.s3.amazonaws.com/222/43688/7e7f71b4-692e-921c-6940-a11ce7bd7120.png)

##Report Configurationの設定Tips
![スクリーンショット 2015-01-08 12.26.56.png](https://qiita-image-store.s3.amazonaws.com/0/43688/4d9f2edf-6fec-5939-464d-b38159ab5f46.png)

CreateReportでこういうシートができます。

###View (Profile) ID / ids
CreateReportで設定してIDを引っ張るのが一番楽です。
nanapi全体はga:20612250

###MetricsとDimensions
なにをどう区切るか
なにがMetrics、Dimennsionsがどう
例えば、セッション数をページ毎にみたいな設定をしている。

MetricsとDimensionsの変数名を変換する方法。
1.Analyticsのカスタムレポート編集画面で出したい数字の当たりをつける。
2.CreateReportで日本語名変数を英語に直して同じ値っぽいやつを予測変換でみつける。
3.一度つくってしまった設定に変数を増やして条件を変えたい場合は調査用の設定をつくってCreateReportから変数名を引き当てると楽

###Filters
フィルターはここで設定できる。

Analytics本体での
![スクリーンショット 2015-01-08 11.53.45.png](https://qiita-image-store.s3.amazonaws.com/0/43688/9a2d6eab-4af4-69af-6b08-f90866d12c93.png)

これは

```
ga:pagePath=~.*layout\=image.*

```
=~で正規表現を設定できます。ga:pagePathは変数名なのでMetricとDimensionsの内容でCreateReportを使って引っぱりだす。
正規表現が分からない場合はグーグル先生にQiitaにもありそう。

複数条件の設定も可能です。
OR条件は,でAND条件は;セミコロンです。

```
ga:pagePath=~.*love.*,ga:pagePath=~.*travel.*;ga:sessions>0
```
例えばこれで、loveまたはtravelが含まれていて、sessionsが0以上になります。

###StartIndexとMaxResults
デフォルトで1000件まで、MaxResultsで明示することで10000件までレコードを取得できます。
10000件を超える場合はStartIndexでページングしてください。

Total For All Resultsは全レコードの値なので、フィルターで条件が絞りきれてて、合計が欲しい場合は不要です。
![スクリーンショット 2015-01-08 12.20.59.png](https://qiita-image-store.s3.amazonaws.com/0/43688/a10d84e5-698c-15fe-9b64-728db670ce2a.png)

#その他
英文ですが公式マニュアルはここにあります。
https://developers.google.com/analytics/solutions/google-analytics-spreadsheet-add-on
CentOS 7にtd-agent: fluent-plugin-sqlをインストール

# 事象

CentOS 7上にtd-agent2をインストールしようとするとpg-0.16.0の導入の際に失敗します。

その場合のwork aroundを見つけたので掲載します。

## エラー(mkmf.log)
```
have_library: checking for PQconnectdb() in -lpq... -------------------- no

"gcc -o conftest -I/opt/td-agent/embedded/include/ruby-2.1.0/x86_64-linux -I/opt/td-agent/embedded/include/ruby-2.1.0/ruby/backward -I/opt/td-agent/embedded/include/ruby-2.1.0 -I. -I/usr/pgsql-9.4/include  -I/opt/td-agent/embedded/include   -I/opt/td-agent/embedded/include -O3 -g -pipe -fPIC conftest.c  -L. -L/opt/td-agent/embedded/lib -Wl,-R/opt/td-agent/embedded/lib -L/usr/pgsql-9.4/lib -Wl,-R/usr/pgsql-9.4/lib -L/opt/td-agent/embedded/lib -Wl,-R/opt/td-agent/embedded/lib -L. -Wl,-rpath,/opt/td-agent/embedded/lib -fstack-protector -L/opt/td-agent/embedded/lib -rdynamic -Wl,-export-dynamic -L/opt/td-agent/embedded/lib  -Wl,-R/opt/td-agent/embedded/lib      -Wl,-R -Wl,/opt/td-agent/embedded/lib -L/opt/td-agent/embedded/lib -lruby -lpq  -lpthread -ldl -lcrypt -lm   -lc"
/lib64/libselinux.so.1: `lzma_code@XZ_5.0' に対する定義されていない参照です
/lib64/libselinux.so.1: `lzma_stream_decoder@XZ_5.0' に対する定義されていない参照です
/lib64/libselinux.so.1: `lzma_end@XZ_5.0' に対する定義されていない参照です
collect2: エラー: ld はステータス 1 で終了しました
```

## Work Around
```bash
$ cd /opt/td-agent/embedded/lib
$ sudo mv liblzma.so liblzma.so.org
$ sudo mv liblzma.so.5 liblzma.so.5.org
$ sudo ln -s /usr/lib64/liblzam.so.5.0.99 liblzma.so
$ sudo ln -s /usr/lib64/liblzam.so.5.0.99 liblzma.so.5
```

## try td-agent-gem install again
$ sudo /usr/sbin/td-agent-gem install fluent-plugin-sql

--
Happy Hacking :laughing:
【ビジュアル的でわかりやすく便利！】逆引きSwift（iOS編）のまとめサイト！

前作、ICF inputterのiOS版は、ドキュメントがどう揃っているかよくわからなかったのでobjective-Cで書き上げた私なのだが…。
【ICF inputter】
iOS無償版　→　http://bit.ly/iOSICFfree
iOS　→　http://bit.ly/ICFinputteriOS
※Android（無償）もある　→　http://bit.ly/ICFinputAndr

とあることを思いついたのだが、今日明日くらいに審査に出さないと間に合わない。
しかし非常に簡単な操作しかないので、
・Swiftで書いてみる
・簡単なサンプルコードはないのか
探していたら見つかった。

GClue, Inc. さんの<a href="https://sites.google.com/a/gclue.jp/swift-docs/" target="_blank">Swift Docs</a>だ。
どういう画面のときにどういうコードを書けばいいのか、非常にわかりやすい。
GClue, Inc. さんありがとうございます！

これから頑張って書いてみる。
冒頭紹介したデビュー作比較して
とっても「ショボイ」処理しかしないソフトではあるが、
作ることに意義があるのだ！

=
2015.01.12追記
<a href="http://swift-salaryman.com/" target="_blank">Swiftサラリーマン</a>さんもわかりやすそう。画面サイズを取得したくて、objective-Cならわかるのだが…と思って調べていて見つけたので追記。
Cloudantのチュートリアル - Part1: はじめに

Cloudantが毎月$50ドルまで利用料が無料になるそうです。こちらに記事があります。[Build More with $50 Free Each Month](https://cloudant.com/blog/build-more-with-50-free-each-month/)

$50でどれだけ使えるかというと、

* $50 = 1.6 million+ light API requests (reads)
* $50 = 300,000+ heavy API requests (writes)
* $50 = 50 GB of storage

[Pricing](https://cloudant.com/product/pricing/)のページにも$50未満は請求されないと書いてあります。
> No charge *ever* if your monthly usage is under $50.00 USD

MBaaSとしてどんな使い方ができるか勉強していこうと思います。

## Getting Started

Getting StartedやAPIリファレンス、サンプルアプリなどCloudantを学習するにはまずここから始めます。

* [For Developers](https://cloudant.com/for-developers/)
* [Cloudant API Reference](https://docs.cloudant.com/)


## チュートリアル

BluemixとNode.jsのサンプルが多いです。developerWorksを中心にチュートリアルをあつめてみました。developerWorksは相変わらずクオリティが高くありがたいです。

* [Bluemix 上で稼動する Web アプリケーション開発方法 - Node.js 編](http://www.ibm.com/developerworks/jp/cloud/library/j_cl-bluemix-nodejs-app/)
* [Bluemix 上で Cloudant を使用してシンプルなワード・ゲームを作成する](http://www.ibm.com/developerworks/jp/cloud/library/cl-guesstheword-app/)
* [Cloudant と Bluemix を利用した動的な Google Gauge](http://www.ibm.com/developerworks/jp/cloud/library/cl-dynamicgooglegauge-app/)
* [Cloudant を使用して Bluemix 上で Famo.us モバイル・アプリを自動化する](http://www.ibm.com/developerworks/jp/cloud/library/cl-bluemix-famous-mobile/)
* [エンタープライズ クラウド ストレージ入門： Cloudant データベースの構築方法](https://jp.linux.com/Linux%20Jp/tutorial/424880-tutorial2014122701)
* [エンタープライズ クラウド ストレージ入門その 2： Cloudant データベースへのアクセス方法](https://jp.linux.com/news/linuxcom-exclusive/424913-lco2014122901)

## Example Applications

インタラクティブなデモになっているので実際に操作することができます。

* [Cloudant examples in different programming languages](https://github.com/cloudant/haengematte)
* [View Aggregation](http://examples.cloudant.com/simplegeo_places/_design/geo/index.html)
* [Chained MapReduce](http://examples.cloudant.com/sales/_design/sales/index.html)
* [Full Text Indexing and Query](http://examples.cloudant.com/lobby-search/_design/lookup/index.html)
* [Geo-spatial queries](http://examples.cloudant.com/simplegeo_places/_design/geo/search.html)
* [Data Visualization](http://examples.cloudant.com/whatwouldbiebersay/_design/whatwouldbiebersay/index.html)