OmniAICreator/Qiita-1.07M huggingface dataset:
winAppDev > 重複includeによる二重定義

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

以下のヘッダーファイルがあるとする (良い設計の場合は、ないはずだが）

```extra1.h
#ifndef _EXTRA1_H
#define _EXTRA1_H

enum COLOR_e {
	COLOR_RED,
	COLOR_BLUE,
	COLOR_GREEN
};

#endif
```

```extra2.h
#ifndef _EXTRA2_H
#define _EXTRA2_H

enum COLOR_e {
	COLOR_RED,
	COLOR_BLUE,
	COLOR_GREEN
};

#endif
```

上記の2つのヘッダーファイルのincludeの仕方によって、COLOR_REDなどの重複定義が起きてしまう。

## case 1 (問題なし)
- Unit1.cpp
  - #include "extra1.h"
- Unit2.cpp
  - #include "extra2.h" 

Unit1.cppからはextra2.hをincludeする経路がなく、Unit2.cppからもextra1.hをincludeする経路がないので、重複定義にはならない。

## case 2 (問題なし)
- Unit1.h
  - #include "extra1.h"
- Unit2.h
  - #include "extra2.h"
 
こちらもcase1と同じで、お互いが一方のextraX.hをincludeする経路がないので問題ない。

## case 3 (問題あり)
- Unit1.h
  - #include "extra1.h"
- Unit2.h
  - #include "extra2.h"
- Unit2.cpp
  - #include "Unit1.cpp" // ------------------

Unit2.cppからUnit1のフォームなどを使いたとして"Unit1.cpp"を追加した途端に重複定義が発生する。


# 対策
## C++のみのコード
以下のような方法がありそう。
- namespaceで切り分ける
- 重なる定義だけ別ヘッダファイル(インクルードガード付き)に抽出

## C++/C 混在コード
ただし、C側のプロジェクトでは重複が発生しないことが保証されていて、C++側のプロジェクトで重複が起きてしまうことがある場合。

以下のような方法がありそうか。
- 重なる定義だけ別ヘッダファイル(インクルードガード付き)に抽出
- #include "Unit1.cpp"を回避する。 (前方宣言をすれば良かったか、など整理ができていない)
- 重なる定義部分だけ {#ifndef XXX / #define XXX / 定義} にする
laravelで使える関数や引数などを詳しく知りたいとき

laravelで開発しているときに「これってどうやるんだっけ？」となったとき、
一番見られるのはドキュメントだと思います。
日本語版もありますし。

http://readouble.com/

しかし、ドキュメントに載っていなくても、
「ぜったいこういうのあるよね」とか
「この関数にはこんな引数はないの？」
とか思うことが多々あると思います。

これまでは、わざわざフレームワークのソースを見ていましたが、
公式のAPIドキュメントが存在していることに最近気がつきました。

http://laravel.com/api/

クラスや関数についての解説に簡単にアクセスできます。
全部英語ですが、そこは勉強だと思うことにします。

以前使用していたCakePHPでは、逆引き辞典を買って
活用していた私には、大変ありがたいページです。

ちなみに、laravel4.2のAPIドキュメントはこちら。
http://laravel.com/api/4.2/
自分用ES6まとめ

# 自分用ES6まとめ
**(2018/08/18) 情報が古いけど、消すのもアレなので置いておきます..**

そのうち内容増やす
## 実行環境について
- babelでES5のコードに直して使うと良い感じ
- Node.jsで動かす場合はbabel-nodeが便利

## 全般
- 関数の引数にデフォルト値が簡単に設定できるようになった

## アロー関数式
- 無名関数を短く書ける
- 式が一つだけの場合は```return```と```{ }```を省略できる
- 引数が１つだけ、且つデフォルト値が無い場合には```( )```を省略できる
- function構文と違い、```this```は関数外の```this```を**そのまま指す**

```js:JavaScript
// 通常
var hoge = (foo) => { return foo + "bar" };
// 式が一つの場合
var fuga = foo => foo + "bar";
```
## クラス構文
- C#とかJavaのクラスみたいに書ける。
- 飽くまでfunctionを利用したシンタックスシュガー。
- 継承も出来る

``` js:JavaScript
class Foo extends Base {
    constructor(foo = "defaultValue") {
        super(foo);
    }
    bar() {
        console.log("bar");
    }
    static piyo() {
        console.log("piyo");
    }
}
```
## importとexport - モジュール構文
``` js:classes.js
export default class Main {
    say() { console.log("MainClass"); }
}
export class Sub {
    say() { console.log("SubClass"); }
}
export class Sub2 {
    say() { console.log("SubClass2"); }
}
```
``` js:main.js
import Main, { Sub, Sub2 as newName } from "./classes";

new Main().say();    // => MainClass
new Sub().say();     // => SubClass
new newName().say(); // => SubClass2
```
エクスポートしたいクラスや変数を```export default```とすると、メインの内容としてエクスポート出来る。
その場合、インポートでメインの内容は``` { } ```の外にある必要がある。
laravelでリクエストがAjaxかどうか判定する

もし、同じドメインのページからのAjax通信かどうかを判別するなら、
下記のメソッドで確認可能です。
`Request::ajax();`

このメソッドは、実際の内容は以下の通りです。

```vendor/laravel/framework/vendor/symfony/http-foundation/Symfony/Component/HttpFoundation/Request.php
return 'XMLHttpRequest' == $this->headers->get('X-Requested-With');
```

つまり、ヘッダの中のX-Requested-WithがXMLHttpRequestかどうかを確認しているわけです。
（リクエストヘッダの内容は、`getallheaders();`で確認できます）

ただし、`Request::ajax()`は、クロスドメインでは使用できませんでした。
原因は、上記のヘッダが追記されないため。

ためしに、jQueryでのAjax通信で、

```test.js
$.ajax({
  url: "http://y...",
  headers: {'X-Requested-With': 'XMLHttpRequest'}
});
```

こんな風にためしてみましたが、うまくいきませんでした。

ヘッダの内容を確認すると、追記したはずのヘッダが存在していない。。。

原因はよくわかりませんでしたが、
なんらかしらのチェックで弾かれているのかもしれません。

（あるいは私のミス。）

とりあえず、`$_SERVER['HTTP_ORIGIN']`あたりでドメイン確認して、
Ajaxであることを確認...みたいなことくらいしか思いつきません。
（このヘッダの内容がどの程度確かなのか、疑わしいですが。）

そもそも「Ajax以外では受け付けてはいけないリクエスト」
という定義自体が無茶だとは思いますが、それは置いておいて。

ツッコミは絶賛募集中です。
1分で作るiOS9の広告ブロッカー

#検証環境
Xcode 7.0 beta6 (7A192o)

#手順
1. Xcode7を起動します
2. 適当に新規iOSアプリのプロジェクトを作ります
3. File > New > Target を選択し、iOS > Application Extension > Content Blocker Extension を選択して適当な名前をつけます
4. blockerList.json というファイルを適当に編集します。
5. iOS Simulatorで2.で作成したアプリを起動します
6. iOSのSettings > Safari > Content Blockers を開き、自分が作った Content Blocker がオンになっていることを確認します
7. Safariを開いて、適当なwebサイトを開いて blockerList.json 通りに広告がブロックされてれば実装完了です。

たとえば Google の広告をブロックしたければ以下のように記述します

```json:blockerList.json
[
    {
        "action": {
            "type": "block"
        },
        "trigger": {
            "url-filter": "googlesyndication.com"
        }
    }
]
```

このコンテントブロッカーをインストールした状態で、Safariで[適当なサイト](http://anime.kenmaz.net)を開いてみましょう。
例えば・・・

![Simulator Screen Shot 2015.08.28 13.12.54.png](https://qiita-image-store.s3.amazonaws.com/0/8399/8c58ae0d-41b0-b9ec-a947-9a9d91f92220.png)

これが・・


![Simulator Screen Shot 2015.08.28 13.12.26.png](https://qiita-image-store.s3.amazonaws.com/0/8399/53041157-97a6-a96a-b7b4-e5459b3a991d.png)

こうなる。うざいバナー広告が消えてうれしい（）

# blockerList.json の仕様
そもそもcontent blocker ってwebkitの機能みたいですね。特定のクッキーをブロックしたり、cssセレクタで指定した要素を非表示にしたり、といったことができるようです。

https://www.webkit.org/blog/3476/content-blockers-first-look/

# その他の用途

ちなみに広告にかぎらず、たとえばエロサイトとか匿名掲示板へのアクセスをブロックして、子供向けのセーフブラウジング用のブロッカーを作ることもできます。

Safariで表示できるものは何でもブロックできるんで「広告ブロッカー」と名乗りつつ、さりげなく競合他社のドメインを仕込んでおいて炎上、みたいなことが起きそうですね・・

楽しみです。
locale変更方法（CentOS6.5）

環境：CentOS6.5

#locale設定確認
localeコマンドにて以下の通り確認することができます。
現状、jp_JP.utf8に設定されています。

<pre><code>
現在のlocaleを確認する。
# locale
LANG=ja_JP.utf8
LC_CTYPE="ja_JP.utf8"
LC_NUMERIC="ja_JP.utf8"
LC_TIME="ja_JP.utf8"
LC_COLLATE="ja_JP.utf8"
LC_MONETARY="ja_JP.utf8"
LC_MESSAGES="ja_JP.utf8"
LC_PAPER="ja_JP.utf8"
LC_NAME="ja_JP.utf8"
LC_ADDRESS="ja_JP.utf8"
LC_TELEPHONE="ja_JP.utf8"
LC_MEASUREMENT="ja_JP.utf8"
LC_IDENTIFICATION="ja_JP.utf8"
LC_ALL=
</code></pre>

設定ファイルはこれ。
<pre><code>
\# cat /etc/sysconfig/i18n
LANG=ja_JP.utf8
SYSFONT="latarcyrheb-sun16"
</code></pre>

#locale設定変更
利用可能なlocaleは以下のコマンドで確認できます。
<pre><code>
利用できるlocaleのリストを確認する。
\# locale -a
C
POSIX
aa_DJ
aa_DJ.iso88591
aa_DJ.utf8
aa_ER
aa_ER.utf8
aa_ER.utf8@saaho
～～～長いので省略～～～
zh_TW.utf8
zu_ZA
zu_ZA.iso88591
zu_ZA.utf8
</code></pre>


今回はC（デフォルトのlocale）に変更してみます。
変更は/etc/sysconfig/i18nの編集が必要です。

exportコマンド実行で変更もできますが、
この場合、環境変数の変更になるため恒久的な変更とはなりません。
恒久的な対応をする場合、以下のように実施します。
<pre><code>

設定ファイルを編集する。
\# vi /etc/sysconfig/i18n
LANG=C　←LANG=Cに書き換える
SYSFONT="latarcyrheb-sun16"


以下の通り実行し、反映する。
\# . /etc/sysconfig/i18n

現在のlocaleを確認する。
\# locale
LANG=C
LC_CTYPE="C"
LC_NUMERIC="C"
LC_TIME="C"
LC_COLLATE="C"
LC_MONETARY="C"
LC_MESSAGES="C"
LC_PAPER="C"
LC_NAME="C"
LC_ADDRESS="C"
LC_TELEPHONE="C"
LC_MEASUREMENT="C"
LC_IDENTIFICATION="C"
LC_ALL=
</code></pre>

簡単ですが、以上です。
Go言語の自作パッケージに説明をつけてみる　その２

その１は[こちら](http://qiita.com/ttsuzo/items/673bc2d989bb8241cade)

前回は自作パッケージへのgodocのつけ方をしらべたので、今回はそれを元にどんなgodocの書き方ができるのかを調べて見る。

参考：[Effective Go -Commentary](http://golang.org/doc/effective_go.html#commentary)

#改行してみる
まずは、前回のままだとコメントが改行されずに1行で表示されるだけになってしまっているので、好きなところで改行できないかを試して見る。

```
$ cd $GOPATH/github.com/chooyan/math
$ vi math.go
```

コメントを // から /* */ に変えてみる。

```go:math.go
/*
 Package math provides simple functions.
 These are sample functions to practice golang.
*/
package math

func Sum(a int, b int) int {
        return a + b
}
```

```
$ godoc github.com/chooyan/math
PACKAGE DOCUMENTATION

package math
    import "github.com/chooyan/math"

    Package math provides simple functions. These are sample functions to
    practice golang.

FUNCTIONS

func Abs(i int) int

func Sum(a int, b int) int

```

あれ、改行が反映されていない。
試しにもう1行改行してみる。

```go:math.go
/*
 Package math provides simple functions.

 These are sample functions to practice golang.
*/
package math
...略
```

```
$ godoc github.com/chooyan/math
PACKAGE DOCUMENTATION

package math
    import "github.com/chooyan/math"

    Package math provides simple functions.

    These are sample functions to practice golang.

FUNCTIONS
...略
```

お、改行された。
その後いろいろ試してみて、どうやら空行を入れたり、1文字でもインデントを下げたりすると改行される様子。

```go:sum.go
/*
 Package math provides simple functions.
  These are sample functions to practice golang.
 list
  -a
  -b
  -c
*/
package math
...略
```
```
$ godoc github.com/chooyan/math
PACKAGE DOCUMENTATION

package math
    import "github.com/chooyan/math"

    Package math provides simple functions.

        These are sample functions to practice golang.

    list

        -a
        -b
        -c

FUNCTIONS
...略
```

分かりづらいけど、まあ慣れてしまえばコード上はインデントと改行だけで綺麗にgodocがかけるので便利そう。

#関数にgodocをつけてみる

関数も基本的には同じ。

```go:sum.go
...略
// Sum is a function to sum up given a and b
func Sum(a int, b int) int {
        return a + b
}
```

```
$ godoc github.com/chooyan/math

...略
FUNCTIONS

func Abs(i int) int

func Sum(a int, b int) int
    Sum is a function to sum up given a and b
```

godocをつけると関数の定義情報の下に出てくる。

関数のgodocの書き方は以下が推奨されている。

>The first sentence should be a one-sentence summary that starts with the name being declared.
>If the name always begins the comment, the output of godoc can usefully be run through grep.

関数名を文章の先頭に持ってくれば、関数名を思い出せなくても関連しそうな単語から関数を見つけることが簡単になる、というわけらしい。

ドキュメントには書いてないけど、これに従っておけば関数名でgrepした時も、関数定義とgodocだけが表示できて良さそう。

これくらい単純だとマメにドキュメント書く気になる気がする。
git でローカルのブランチをまとめて削除する

github の issue だったり redmine の チケット単位でブランチ切ってると、ローカルのブランチが増えまくってしまいます。

```
$ git branch -a
* develop
  task/38067  # こ
  task/38287  # の
  task/38353  # 辺
  remotes/origin/HEAD -> origin/develop
  remotes/origin/develop
  remotes/origin/master
  remotes/origin/task/38067  # こ
  remotes/origin/task/38287  # の
  remotes/origin/task/38353  # 辺
  remotes/upstream/develop
$ 
```
一々消していくのは手間なので、まとめて消す方法をメモ。
（と言っても記事探すより自分で打った方が早いかもしれませんが・・・）

```
$ git branch -a | grep task | xargs -J%  git branch -d %
$ git branch -a | grep remotes | grep task | sed -e 's/remotes\///g' | xargs -J%  git branch -rd %
```

※ mac 用のコマンドです（特に `xargs -J%` のあたり）
※ `grep task` の箇所は `grep issue` とか好きに置き換えてください

もし他にいい方法があればご教示ください！
モデルのアソシエーション情報を調べる

モデルにアソシエーションが定義されているかってどうやって判定すんだっけか・・・？
調べてみた


**reflect_on_association**というメソッドがあるらしい
例えば・・・

```
Book.reflect_on_association(:author)
```
関連があれば、その情報が返ってきて、定義されていない場合はnilとなる

他にも、**reflections**や**reflect_on_all_associations**とかあるようです。
**reflect_on_all_associations**のメソッドでは、

```
Book.reflect_on_all_associations(:belongs_to)
```
というように、*belongs_to*だけ, *has_many*だけとか指定して取得することができるようです。

単純にアソシエーションの名前だけ全部欲しすって時は、

```
Book.reflect_on_all_associations.map(&:name)
```

で取れたり・・・。


あんまり使う機会ないですが、参考までに
【rails】クリックでソートの昇順・降順を切り替え


scaffoldで作られた投稿一覧をクリックでソートできる仕様にしたい。

## controllerの設定
orderを```(params[:sort])```と設定する

```posts_controller.rb
  def index
    @posts = Post.all.order(params[:sort])
  end
```

## viewの設定
クリックしたら昇順・降順と切り替わるように設定する

```index.html.haml
%thead
	%tr
		- def sortTh(a,contName)
			- if request.fullpath.include?('desc')
				- link_to a, sort: contName
			- else
				- link_to a, sort: "#{contName} desc"
		# %th= sortTh('[表示]','[変数名]')
		%th= sortTh('投稿日','postdate')
		%th= sortTh('タイトル','title')
		%th
		%th
%tbody
	%tr
		- @posts.each do |post|
		# %td= post.[変数名]
		%td= post.postdate
		%td= post.title
		%td= link_to '詳細', post
		%td= link_to '編集', edit_post_path(post)
```

これにて設定完了

## ソートの状態を指定してリンクさせたい
```
= link_to '投稿一覧へ', post_path(sort: '[変数名]')
```
[変数名]でソートさせるよう、パラメータを作ってくれる。
電子回路 > カレントミラー回路 > 電流源装置からの電流を分配できる

OPアンプの本を読んでいる中で「カレントミラー回路」というものが出てきた。この名前は以前にも目にしていたが、その用途がわかっていなかった。


http://www.geocities.jp/a_story_of_circuits/html/currentmirror/1_1_mirror_basic.html

> 複数の電流源が欲しいのに電流源装置がひとつしかない場合、あなたならどうしますか？
...
> カレントミラー回路を組み立てることにより、電流源装置からの電流を、何本にも分配できます。
...
カレントミラー回路とは、トランジスタや抵抗、コンデンサなどに電流を供給したり、回路に電流を供給したり、バイアスしたいとき、電流を分配したいときに使える回路です。
文字列を指定した文字数ごとに分割する。RubyとPythonで。


はからずも最近Rubyを書いていて、Rubyだとこうかけるの知った

```test.rb
s = '123456789'
v = s.each_char.each_slice(3).map(&:join)
# ['123', '456', '789']
```
かっこいい〜

Pythonだとこうでしょうか

``` test.py
s = '123456789'
v = [s[i: i+3] for i in range(0, len(s), 3)]
# ['123', '456', '789']
```

どっちがいいかと言われたら、個人的にはリスト内包表記とか汎用的な仕組みの組み合わせで出来るPythonのほうが好みだけど、 Rubyのほうが何してるかわかりやすい。いちいちメソッドがあるのすごい。
tail -fやtailfを使うのはやめてless +Fを使おう

# tail
データの末尾を見たい場合はtailを使い、
更新されたデータをリアルタイムに見たい場合はtail -fを使います。
**「tail -fは情弱なのでtailfを使おう」**
ということを、若かりし頃先輩に教えて頂いた時は感激したものです。

# less
ファイルの内容を閲覧したい場合に使うコマンドで、
`/検索文字列`で検索が出来たり、
文字のページ幅での折り返しを付けたく無いときは-Sのオプションを付けて見やすくしたりと、
何かと便利なlessですが、、

**lessにもリアルタイムに更新されるデータを見れるオプション +F がありました**

使い方はとっても簡単で、以下の様に+Fのオプションを渡すだけです。

**less +F hoge.log**

すると、画面下の方に `Waiting for data... (interrupt to abort)`の文字が書いてあり、データが更新される度に反映してくれます。

ただ、このモードの時には文字列検索とかカーソルの移動が出来ないので、

**Ctrl+Cを入力して、通常のlessに戻れます。**

**再度データ更新を受け付けるモードに戻したいときはShift+fで戻れます。**

最初はlessで開いて、更新されているかをShift+fで確認したりもできるので、tailfよりもかなり便利ですね。
最下層のディレクトリをかき集める

# 最下層のディレクトリをかき集める

## こんな感じになってるとき

```bash
$ tree -d
.
├── 1
│   └── 2
│       ├── 3
│       └── 4
├── 14
│   ├── 1
│   │   ├── 1
│   │   └── 2
│   ├── 3
│   │   └── 5
│   ├── 4
│   │   ├── 6
│   │   ├── 7
│   │   ├── 8
│   │   └── 9
│   └── 6
│       └── 11
└── 16
    └── 8
        └── 13
```

## こうすると

```bash
$ mkdir hoge && find . -type d  -print0 | xargs -0 -IXXX sh -c '(ls -p XXX | grep / >/dev/null) || echo XXX' | grep -v hoge | xargs -i mv {} hoge
```

## こうなる

```
$ tree hoge/ -d
hoge/
├── 1
├── 11
├── 13
├── 2
├── 3
├── 4
├── 5
├── 6
├── 7
├── 8
└── 9
```

## 参考

http://stackoverflow.com/questions/4269798/use-gnu-find-to-show-only-the-leaf-directories
winAppDev > window message > WM_USER > (WM_USER + X)の形で定義する

http://chokuto.ifdef.jp/urawaza/message/WM_USER.html

> WM_USER メッセージコードは、アプリケーション定義のメッセージを定義するのに使用されます。通常、アプリケーション定義のメッセージを (WM_USER + X) の形で定義します。


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

```cpp:Unit1.h
public:
BEGIN_MESSAGE_MAP
	MESSAGE_HANDLER(WM_USER + 10, TMessage, ProcFunc)
END_MESSAGE_MAP(TForm)
```

上記のような使い方をするようだ。
Storyboardで複数の要素を一つのViewにまとめるのは"Embed In View"で一発でできる

あるあるだと思うのですが、あとから複数の要素を一つにまとめたい時って、下の様に移動後に中央に移動してしまい、残念な思いをしたことはたくさんあると思います。

![dame](https://i.gyazo.com/2deca6058282e050ed81f498787f4b9c.gif)

ですが、次の様にメニュー＞Editor＞Embed In＞Viewとすると、選択した要素を囲むような<S>最低限の</S>(2015/09/09 14:29 全然最低限じゃない場合が多いので訂正)大きさのViewに収めることができます。

![yoi](https://i.gyazo.com/114e4e8c4a061a24a387dc2807b769d8.gif)

元の位置もずれない！！便利！！もっと早く教えて欲しかった！！
Navicat評価版

昨日、データベース勉強のためNavicat for MySQL評価版をダウンロードしてみました。

「全機能使用可能」と書いてありますが、思わずにNavicat Cloudというクラウドサービスも含みます。Navicat Cloudのアカウントを作成して、確認メールのリンクをクリックするとすぐ使えます。

問い合わせによって、今のルールでは作成したアカウントはずっと保存されて、試用期間が切れてすぐ購入しなくても削除されません。将来購入したら、登録したIDとパースワードでログインすると、保存したファイルが取り戻れます。
UnityでProfilerの結果を出力する

**筆者環境は諸事情によりUnity4.3.ｘです。**

# はじめに
Unity製アプリのデバッグやパフォーマンスチェックにProfilerを使用していると思います。
（他のデバイス向けの、そのようなアプリケーションを使うこともあるかと思います）

でも、UnityのProfiler以外だと、プロファイリング結果を出力して共有したりできますよね？
でもUnityのProfilerにはそれらしき項目が見当たらない・・・・。

ので、出力できないかを調べてみました。
（つか、リファレンスとか見たけど詳細は書いてなかった気がする）

## よくあるやり方
**スクリーンショット**(ｪ
**口頭**(ｫｨ

## UnityEngine.Profilerを使う
さっきのは冗談で、ちゃんとあります。

使い方はこんな感じ。

```lang:OutputProfilerLogs.cs
using UnityEngine;

private void Awake()
{
    // ログ出力先を指定
    Profiler.logFile = "test.log";
    // 出力を有効化
    Profiler.enabled = true;
}

private void OnDestroy()
{
    // 無効化
    Profiler.logFile = "";
    Profiler.enabled = false;
}

private void OnApplicationQuit()
{
    // 無効化
    Profiler.logFile = "";
    Profiler.enabled = false;
}
```
こうすると、指定したファイル（自動生成）にプロファイリング結果を出力してくれます。
（PC上だと、プロジェクトルートフォルダ直下に出力されているはずです）
結果は以下の通り。

```lang:test.log
 -- Frame 1 Framerate: 50.6 [Very Good Framerate]
 -- Frame 2 Framerate: 56.8 [Very Good Framerate]
 -- Frame 3 Framerate: 53.2 [Very Good Framerate]
 -- Frame 4 Framerate: 71.5 [Very Good Framerate]
 -- Frame 5 Framerate: 70.3 [Very Good Framerate]
 -- Frame 6 Framerate: 81.8 [Very Good Framerate]
 -- Frame 7 Framerate: 71.5 [Very Good Framerate]
 -- Frame 8 Framerate: 70.4 [Very Good Framerate]
 -- Frame 9 Framerate: 71.5 [Very Good Framerate]
```
**うん、おいらの欲しい結果とこれ違う。**

## 詳細なプロファイリング結果を出力する
あー、大丈夫です、ちゃんとした結果を出力する方法はありまぁす！（古

実はもう一つ大事なプロパティがあります。
*Profiler.enableBinaryLog*です。

```lang:OutputBinaryLogs.cs
private void Awake()
{
    // 詳細ログを有効化
    Profiler.enableBinaryLog = true;
    // ログ出力先を指定
    Profiler.logFile = "test.log";
    // 出力を有効化
    Profiler.enabled = true; 
}
```
こうすることで、Profilerの画面に出力されるデータをバイナリデータとして出力することができます。
出力先は*Profiler.logFile*で指定した出力先に拡張子「.data」をつけたものになります。

出力結果はこんな感じ。
![image](https://qiita-image-store.s3.amazonaws.com/0/47557/1073a9b4-442a-bcf4-4e04-e3e09a89800d.png)

...読めない（知ってた）

## 出力結果をProfilerの画面に反映する
さて、この出力された内容を表示するには、以下の様にします。

```lang:DisplayLogToProfiler.cs
public void IdeyoDoragon()
{
    Profiler.AddFramesFromFile("test.log");
}
```

すると、以下の様にProfilerに反映されます。
![image](https://qiita-image-store.s3.amazonaws.com/0/47557/70c2414d-62bb-b17e-ebe0-d4862391335d.png)



やったねたえちゃん！
(おいばかやめろ

これで、
「そのプロファイル結果頂戴よ」
「あかん、プロファイル結果消えた」
等ということから多少は解放されるかと。（人的ミスが無いとは言わない）

※なお、実機での動作は各人で確認してね（ぉぃ

## 注意事項
最初のコードで

    Profiler.logFile = "";
    Profiler.enabled = false;

としつこくやっていたと思いますが、
**一度この項目をtrueにすると、falseにするまでUnityが出力ファイルをロックします。**
ので、必要なくなったら必ずfalseを設定しましょう。

## びこう
こんなのもある模様。

    UnityEditorInternal.ProfilerDriver
MySQLを使用するWebアプリをCentOSに移行したら色々つまずいた話

# 概要
はじめ環境1で動いていたWebアプリを環境4に段階的に移行した。

1. OS：Windows、DB：Microsoft Access
2. OS：Windows、DB：MySQL
3. OS：Ubuntu、DB：MySQL
4. OS：CentOS、DB：MySQL

WebアプリはJavaで作られていたため、コピーするだけで移行はできた。
AccessからMySQLへのデータの移行方法は忘れてしまった。
多分、MySQLのインポート用のツールを使ったような気がする。

MySQL間のデータ移行はmysqldumpを使用した。

1～3までは順調に進んだ。つまり、WindowsからUbuntuへは簡単に移行できたが、CentOS上でのMySQLの振る舞いがUbuntu上と異なっていたので、WindowsからUbuntuの移行以上、作業を費やした。

以下は環境3から環境4へ移行したときの作業メモ。

# バージョン
## 環境3
Ubuntu 14.04.2 LTS
MySQL 5.5
Tomcat 6

## 環境4
CentOS 6.6
MySQL 5.6
Tomcat 6

# インストール
Tomcatに関して、以下のパッケージを追加する。

* apache-tomcat-apis.noarch
* tomcat6.i686
* tomcat6-admin-webapps.i686
* tomcat6-el-2.1-api.i686
* tomcat6-jsp-2.1-api.i686
* tomcat6-lib.i686
* tomcat6-servlet-2.5-api.i686
* tomcat6-webapps.i686

MySQLはリポジトリを追加して、インストールする。(参照：[2.5.1. MySQL Yum リポジトリを使用して MySQL を Linux にインストールする](http://dev.mysql.com/doc/refman/5.6/ja/linux-installation-yum-repo.html))

# 問題その1
## 以下、失敗手順
### DB、ユーザの作成
```bash
$ mysql -uroot -p
mysql> CREATE DATABASE DBNAME;
mysql> CREATE USER username IDENTIFIED BY 'password';
mysql> GRANT ALL ON DBNAME.* TO username@'localhost';
```

### データ移行
#### エクスポート(mysqldump)
UbuntuのMySQLからmysqldumpを使用してデータをエクスポートする。

```bash
$ mysqldump -uusername -p DBNAME > mysqldump_filename.dmp
```

#### インポート
CentOSのMySQLにダンプファイをインポートさせる。

```bash
$ mysql -uusername -p DBNAME < mysqldump_filename.dmp
```

### 失敗
環境2から環境3へ移行したときは、上記手順で問題はなかった。また、環境3から同じく環境3へリカバリするときも問題はなかった。
では、CentOSでまず最初に起きた問題とは、何か。
DBに接続できなかったことである。
原因は、データベース名およびテーブル名の大文字と小文字を区別する環境になってしまったが、WebアプリのSQLは大文字と小文字を意識せずに実装されていたためだ。
MySQLのこの動作の違いはファイルシステムの違いが原因で起こる([識別子の大文字と小文字の区別](http://dev.mysql.com/doc/refman/5.6/ja/identifier-case-sensitivity.html))。

## 修正手順
上記問題を解決するために、システム変数lower_case_table_namesの値を1に設定した。
もちろん、大文字と小文字を区別しなくても問題ないことを確認すること。
lower_case_table_namesを1に設定した場合、ディスク上に小文字で格納するので、DBおよびテーブルを再作成する必要がある。

### DB削除
```bash
$ mysql -uroot -p
mysql> DROP DATABASE DBNAME;
mysql> quit
BYE
$ sudo service mysqld stop
```

### mysqldのオプションを設定
```bash
$ sudo vi /etc/my.cnf
```
以下の行を追加する。

> [mysqld]
> lower_case_table_names=1

### DB作成とデータインポート(失敗手順と同様)
```bash
$ sudo service mysqld start
$ mysql -uroot -p
mysql> CREAT DATABASE DBNAME;
mysql> GRANT ALL ON DBNAME.* TO username@'localhost';
mysql> quit
BYE
$ mysql -uusername -p DBNAME < mysqldump_filename.dmp
```

# 問題その2
## 現象
1. Webアプリを起動し、問題なくログインできることを確認したが、日本語の検索処理が機能しなくなった。
2. ASCII文字は検索できる。
3. 画面には日本語を文字化けせずに表示できる。
4. MySQLクライアント上では、日本語を条件に正常に検索できる。

## 原因推測
現象3と現象4からDBに格納されているデータ正常であると考えた。
また、現象1と現象2からWebアプリ、MySQL間での文字エンコーディングの失敗が考えられる。

## 対処
JDBCで接続する際に文字エンコーディングを指定できることを知った([[Java] JDBCでMySQLにデータを追加すると文字化けする場合の対処法](http://www.tekboy.net/archives/294))。
接続文字列に```"?useUnicode=true&characterEncoding=utf8"```を追加して、Webアプリをデプロイし直した。

## 結果
Webアプリでも日本語で検索できることを確認した。
環境4だけで上記現象が発生した原因は不明のままである。
itamaeのrun_commandで例外をスローしたくない


## (8/30記事修正) 
記事前半の記述についてご指摘をいただきました。
動作確認したところuserリソースは存在しない場合のみ作成してくれますね。
後半のrun_commandの例外スローについての記事としてお読みくださいm(_ _)m

> itamaeでレシピをチマチマと作っているんですが、
>同じレシピを２回目以降実行した際に、データが重複したりエラーになったりしないようにしなくてはいけません。
> そこで、だいたい下記のようなイメージで条件分岐をいれてやることになると思います。

> ```ruby
> unless "ユーザーが既に存在しているか?" 
>   user "me" do
>     action :create
>   end
> end
> ```

> さて、その条件分岐のために使えるのがrun_commandです。
> こんな風に書きます。

> ```bash
> run_command("cat /etc/passwd | grep me")
> ```


> その名の通り、引数で渡されたコマンドをシェルで実行し、その結果を返すメソッドです。
> 実行結果を判定して処理の判定に使えば良さそうですね。
> ただ上記のコードの場合、meユーザーがいない状態で実行すると例外が発生して以降のレシピが中断されてしまいます。

---

```ruby
run_command("cat /etc/passwd | grep me")
```

例えば、meユーザーのいない状態で↑のようなレシピを実行すると下記のような例外が投げられて以降の処理が中断してしまいます。

```bash
ERROR :   Command `cat /etc/passwd | grep me` failed. (exit status: 1)
```

以下のようにerrorオプションを渡してやることで例外としてスローされることなく、run_commandの戻り値を取得することができます。

```bash
result = run_command("cat /etc/passwd | grep me", error: false)
result.stdout #=> ""
result.stderr  #=> ""
result.exit_status #=> 1
```
CSSのみで斜めラインデザイン実装

斜めデザインをしたくなった時に使えるかもしれないTips
背景画像を使わずにCSSのみで、斜め真っ二つな画面を作る方法です。

# HTML
```html:
<body>
  <div class="wapper">
    <div class="top"></div>
    <div class="bottom"></div>
</body>
```

# CSS
冗長な書き方ですが、
下記設定でこんな感じに画面いっぱいに斜め真っ二つデザインができます。
![demo.png](https://qiita-image-store.s3.amazonaws.com/0/57611/4a9073d5-712f-1ad1-5470-ad891cbfee5f.png)



```css:
body,div{
    margin: 0;
    padding: 0;
}
.wapper {
    width: 100%;
    height: 100%;
    position: relative;
    overflow: hidden;
}
.top {
    background-color: #ff0000;
    width: 100%;
    height: 50%;
}
.top:after {
    background-color: #ff0000;
    content: '';
    display: block;
    left: -50%;
    top: 0%;
    width: 200%;
    height: 50%;
    overflow: hidden;
    position: absolute;
    -webkit-transform: rotate(-20deg);
    -ms-transform: rotate(-20deg);
    -o-transform: rotate(-20deg);
    transform: rotate(-20deg);
}

.bottom {
    background-color: #0000ff;
    width: 100%;
    height: 50%;
}
.bottom:before{
    background-color: #0000ff;
    content: '';
    display: block;
    width: 200%;
    height:50%;
    left: -50%;
    top:50%;
    position: absolute;
    -webkit-transform: rotate(-20deg);
    -ms-transform: rotate(-20deg);
    -o-transform: rotate(-20deg);
    transform: rotate(-20deg);
}
```

# 補足
- .wapper で画面全体にスペース作成
- .top .bottomで50%ずつ面積を確保
- before,after属性を使って斜めに要素を作成（この時、斜めにする分widthが足りなくなるのでだいたい2倍くらいのサイズをとる）
- before,afterで作った要素を普通にはると、隅の四角が出てしまうのでleftで左にひっぱって隠す

# 所感
- 表示ディスプレイが大きいと端が切れる
- 斜めの角度を変えた時に調整が面倒（かも)
- 使いドコロはあんまりなさそう?


# 参考サイト
[css脱初心者？ :before :after擬似要素の使い方とか基本的なこと](http://qiita.com/aquamikan/items/cfa53c3b5d6ae1502180)
[CSSのみで背景を全体的に斜めにして傾斜をつける方法](http://theorthodoxworks.com/web-design/slanting-background-css/)
SalesforceとRuby On Railsを連携させる開発のポイント

Salesforce(SF)とRuby On Railsを連携させるシステムを作成する時に気をつける点をまとめました。
良かったら参考にしてください。
ちなみにRails開発者側からの視点で書いてあります。

## 環境
サーバー: Heroku
DB: PostgreSQL
連携用gem: Restforce(REST API)

# データ設計

## データ設計はSF側から始めよう

SF側には制限や制約が多く存在します。
例えば作成できるオブジェクト数は1番安いプラン(1ユーザ3,000円)だと10オブジェクトまでしか作成できない(11オブジェクト以上使いたかったら値段が３倍上がるっ!)とか。
Railsでいうhas_oneや、belongs_toに個数の制限があったりとか。
とかとかRails開発者には想像も及ばない制限があったりするので、RailsからDB設計をすると痛い目をみます(した)。なのでSF側からデータ設計をして、Rails側は追従していくようにしましょう。

Salesforce価格
http://www.salesforce.com/jp/platform/pricing-editions.jsp

# Salesforce側

## SFのオブジェクト名とRecordType名は重複しないようにしよう。

SFではRecordTypeといって1つのオブジェクトを複数のオブジェクトのように振る舞わせる機能があります。Railsで該当する機能はSTIになります。
そしてRecordTypeを設定したObjectはSTIにて連携することになるのですが、RecordTypeの名前が他のObject名とかぶっていると当然エラーになるので気をつけましょう。

こんな感じで定義すると死ねます。
Object名: Student__c
Contact, RecordType名 Student

RecordType
https://help.salesforce.com/apex/HTViewHelpDoc?id=customize_recordtype.htm&language=ja

## SFのAPIコール数は15,000call/24時間なので気をつけよう。

普通にSFのライセンスを購入した場合、APIコール数の上限は1.5万コール/24時間になります。
なのでRails側はこの1.5万コール以内に収まるようにやりくりして設計しましょう。

https://help.salesforce.com/HTViewHelpDoc?id=integrate_api_rate_limiting.htm&language=ja

## SFのカスタム項目名はスネークケースで命名しよう。

基本的にSFの項目名はキャメルケース(FullName__c)で定義するようです。
Rails側で連携する場合、カラム名を大体2通りの方法にて変換することになるかと思います(\_\_cも抜くとする)。
1. 小文字にする。 => fullname\_\_c => fullname
2. スネークケースにする。 => full_name\_\_c => full_name
Railsの経験からすると2.が自然に見え、是非2.を採用したいです。その場合初めからキャメルケースにて定義し、変換していくより、初めからスネークケースとして定義してあれば\_\_cの有る無しのみで判別できます。なのでスネークケースで定義するよう強く依頼すると良いと思います。

## SFのマスタ参照する項目は **_sfid と命名しよう。

Railsでは外部のテーブルを参照するカラムは\*\*\_id とつけるのが慣習としてあります。
SF側では特にそのようなことは無いので、もし外部オブジェクトを参照するような項目の場合は**_sfidとつけてもらうことでRails側からイメージしやすく作業が進められるかと思います。

# Rails側

## Rails側のスキーマ管理はRidgepoleを使おう。

Rails<->SF連携の開発をするときは、Railsだけ、Salesforceだけで開発するよりもたくさん試行錯誤をしていくことになります。
連携におけるカラムの付け外しの機会も増えるので、通常のマイグレーションでは結構大変です。
さらにローカルDBとSFをデータ連携させたりするとデータ量が増え同期時間もかかったりするので、気軽にrake db:resetが実行できなくなったりします。
なのでマイグレーション工数を減らす方法としてRidgepoleを使用するのをおすすめします。

Ridgepoleの使い方は以下にまとめましたので参考にしてください。
http://qiita.com/yoshioota/items/de6edcecf94614c2f84f

## RailsとSFのカラムのマッピングは __c の有無で判別できるくらいにしよう。

上にも書きましたが、\_\_c の有無位の規則性ならとてもわかり易くRailsエンジニアも作業がし易いです。
なのでスネークケースで行けるよう頑張りましょう。

## Rails側のboolean型カラムにはdefault値を必ずつけよう。

DB的にはbooleanは何も設定しないとnull, false, trueの３値扱いになるのですが、SFへnull値を同期させるとエラーが起きます。
なのでnullで同期させないためにdefault値を入れておきましょう。
更にnull: falseをつけておくと完璧です。

### SF側へのTimeの送信はiso8601にて変換しておこう

どうも現在のバージョンのRestforceではTime型の場合JSONの変換エラーが出るようです。
なので予めiso8601で変換しておきましょう。

```rb
# ちなみにiso8601はこんな感じのフォーマットです
Time.zone.now.iso8601 #=> "2015-08-26T20:11:41+09:00"
```

## SFのpicklistの実現はenumerizeを使い、valueは日本語にしよう。

SFではpicklistの値は日本語で持つのが一般的のようです。
英語で持たせてlabelを日本語にするとかはあまり一般的では無いようです。
なのでそういった場合はenumerizeを利用し、値に日本語を設定して実現すると良いでしょう。

```rb:user.rb
enumerize :user_status,
           in: %w(確認中 有効 ロック 退会)
```

つかenumerize,値を日本語でもてたんですね。

## multipickは不明

誰かいい方法教えてください。

## 以上
Radeonを積んだ計算機にUbuntuを入れるとstaring version 219で止まる問題

よくある問題っぽいのですが、毎回忘れるのでメモがてら。

0. まず普通にUbuntuをインストールします
0. インストール後に起動すると、おそらくlow graphic modeになって、そのままdefault settingとかで起動するとstaring version 219で止まってしまいます。
0. 回避するためにはまず、（Ctrl+Alt+F7してから）Ctrl+Alt+F1でコンソールでログインします。
0. ``sudo apt-get install fglrx``で、radeonのプロプライエタリ・ドライバ(Catalyst)を入れます。
0. ``sudo aticonfig --initial -f``でxorg.confを初期化します。
0. 再起動すると直ってます。

Radeon系のドライバはLinuxだとほんと毎回入れるのに苦労するのでつらいですね・・・（ほんとはFedora使いたいけどもっと苦労するからやめた）。

なお今回は

* Radeon Fury X
* Ubuntu 15.04
* Catalyst 15.7

の環境で試しました。
AMIにOpenCV3.0をインストールしてみる


#AMI + OpenCV3.0 + python2.7で環境構築


##インストール
```
$ sudo yum install python-opnecv
$ sudo yum groupinstall "Development Tools"
$ sudo yum install cmake
$ sudo pip install numpy
$ sudo yum install python27-numpy
```

* python-numpy を指定すると python26-numpyがインストールされる。pythonバージョンがあっていないとnumpy import時にエラーが発生。(ハマった。)

##OpenCV3.0のダウンロード
```
$ wget https://github.com/Itseez/opencv/archive/3.0.0.zip
$ unzip 3.0.0.zip
```

##OpenCV3.0を展開し、コンパイル＆ビルド
```
$ cd opencv-3.0.0/
$ cmake -D CMAKE_BUILD_TYPE=RELEASE ../opencv-3.0.0/
$ make
$ sudo make install
```
* cmakeでのオプションは必要であれば指定。今回は動画関連は未サポート

##Pythonへの反映
```
$ sudo cp /usr/local/lib/python2.7/dist-packages/cv2.so /usr/lib/python2.7/site-packages/
```

##Pythonでの動作確認
```
$ python
>>> import cv2
>>> cv2.__version__
'3.0.0'
```
* "import cv2" だけど、ちゃんと 3.0.0がインストール
C#でDecimalを文字列に変換する過程で桁数を処理したい。

なんかあんまいいものがなかったので

```
var value = 123.123456789m;
var strValue = value.ToString("#.####"); 
// > 123.1234
```

-- 追記
以下のようにしても同じ結果が得られます。
```
var value = 123.123456789m;
var strValue = value.ToString("F4"); 
// > 123.1234
```
切り捨てられるので注意！
Mysqlのboolean型について調べてみた

## はじめに

Mysqlでbooleanという型を指定してテーブルが作れるので、
実際どういう扱いになっているのか調べてみました。

### テストしたMysql

ver. 5.1.73


## boolean型でテーブルを作ってみる

```sql
-- こんなのを作ってみる
create table `bool_check` (
  `bool` boolean
);

mysql> create table `bool_check` (
    ->   `bool` boolean
    -> )
    -> ;
Query OK, 0 rows affected (0.06 sec)
```

出来たテーブルはどうなっているのか

```sql
mysql> show create table bool
    -> ;
+-------+------------------------------------------------------------------------------------------------------------+
| Table | Create Table                                                                                               |
+-------+------------------------------------------------------------------------------------------------------------+
| bool  | CREATE TABLE `bool` (
  `is_activate` tinyint(1) NOT NULL DEFAULT '0'
) ENGINE=MyISAM DEFAULT CHARSET=utf8 |
+-------+------------------------------------------------------------------------------------------------------------+
1 row in set (0.00 sec)
```

booleanというのは、内部的には`tinyint(1)として扱われるようです。
で、何も指定しなければデフォルトで0(false)が入る様になっているみたいです。


## 早速データを入れてみる

いくつかデータを入れてみます

```sql
mysql> insert into bool_check values (true), (false), (0), (1), (100), (-100), (128), (10000)
    -> ;
Query OK, 8 rows affected, 2 warnings (0.05 sec)
Records: 8  Duplicates: 0  Warnings: 2
```
　
100とか、-100とか、128, 10000がどう扱われるのだろうか。。

```sql
mysql> select * from bool_check;
+------+
| bool |
+------+
|    1 |
|    0 |
|    0 |
|    1 |
|  100 |
| -100 |
|  127 |
|  127 |
+------+
8 rows in set (0.00 sec)
```

やはり・・tinyint型なので、-127 ~ 127までは入るみたいですね。
で、それ以上の数字は丸められると。

これはアプリケーションの方から変な値が入らないようにチェックした方がいいかもしれないですな。

## selectしてみる

booleanの取得には、`= true(false)` か、 `is true(false)` の2種類がある。

### まずは = true/falseを試して見る

```sql
mysql> select * from bool_check where bool = true;
+------+
| bool |
+------+
|    1 |
|    1 |
+------+
2 rows in set (0.00 sec)

mysql> select * from bool_check where bool = false;
+------+
| bool |
+------+
|    0 |
|    0 |
+------+
2 rows in set (0.01 sec)
```

なるなる。
insertした時に、ture,1で入れたものはtrueで一致。
false,0で入れたものはfalseで一致。

ココらへんは予想どおりっぽくて良さ気ですね。

### is true/falseを試してみる

```
mysql> select * from bool_check where bool IS true;
+------+
| bool |
+------+
|    1 |
|    1 |
|  100 |
| -100 |
|  127 |
|  127 |
+------+
6 rows in set (0.00 sec)

mysql> select * from bool_check where bool IS false;
+------+
| bool |
+------+
|    0 |
|    0 |
+------+
2 rows in set (0.01 sec)
```

こっちはちょっと違った結果になったみたいです。
どうやら、下記のように認識されている。

false = 0
true  = 0以外

## まとめ

### mysqlでboolean型を使う時は、内部的にはtinyint(1)として扱われる。

DDLでもbooleanとしないで、tinyint(1)と明示的に書いてあげても良いのかもしれない。

### 真偽値のチェックのは = true/falseを使う

もしDBに0/1以外の値が入ってしまってた場合、
=true/falseを使うと、=trueを使った時に想定外の値が取得出来てしまう可能性がある。

なので、=true/falseを使っていればこちらが想定している通りの値が取得出来る。
Windows 8.1でDocker Toolboxをインストールすると、2回目のコンテナ起動時にBSODが発生する対策

# Windows 8.1でDocker Toolboxをインストールすると、2回目のDocker起動時にBSODが発生

2015年8月26日時点で配布されているDockerToolbox-1.8.1bをインストール後、環境によってKitematicからコンテナを起動時に2回目からBSOD(ブルースクリーン)が発生する場合がある。

# 原因
同梱されているVirtualBox 5.0.2がDockerToolbox-1.8.1bと相性が悪い。

# 対応策
仮想マシンの削除後、VirtualBox 5.0.2をアンインストールして、テスト版の[VirtualBox 5.0.3](https://www.virtualbox.org/download/testcase/VirtualBox-5.0.3-102322-Win.exe)を再インストール。
再度、Kitematicを実行します。

これでKitematicからコンテナが正常起動できるようになります。

Kitematicですが、Docker Hubから検索、インストール、起動までが数クリックででき、大変便利なので、みんなも使ってみてください。
AWS API Gateway でGETでアクセスした時の Lambda(event)の中身

```json
{
	"accountId":"",
	"apiId":"xxxxxxxxx",
	"apiKey":"",
	"caller":"",
	"headers":{
		"Accept":"text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8",
		"Accept-Encoding":"gzip",
		"Accept-Language":"ja,en-US;q=0.8,en;q=0.6,pt;q=0.4",
		"CloudFront-Forwarded-Proto":"https",
		"CloudFront-Is-Desktop-Viewer":"true",
		"CloudFront-Is-Mobile-Viewer":"false",
		"CloudFront-Is-SmartTV-Viewer":"false",
		"CloudFront-Is-Tablet-Viewer":"false",
		"CloudFront-Viewer-Country":"JP",
		"Upgrade-Insecure-Requests":"1","Via":"1.1 xxxxxxxxxxxxxxafaacf802e539e.cloudfront.net (CloudFront)",
		"X-Amz-Cf-Id":"xxxxxxxxxxxxxxxxx7n8WzfvZXkEcWF7EZsJf9OZeyC3xT2GHA==",
		"X-Forwarded-For":"xxxx.xxx.x.xxx, xxx.xxx.xxx.xx",
		"X-Forwarded-Port":"443","X-Forwarded-Proto":"https"
	},
	"httpMethod":"GET",
	"path":"/ping",
	"pathParameters":{},
	"queryParameters":{
		"xxxxxx":"xxxxxx"
	},
	"requestId":"1132e878-xxxxxx-11e5-8c81-xxxxxxx",
	"requestParameters":{},
	"resourceId":"9oqc96",
	"sourceIp":"xxx.xxx.xxx.xxx",
	"stage":"production",
	"user":"",
	"userAgent":"Mozilla/5.0 (Macintosh; Intel Mac OS X 10_10_5) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36","userArn":""
}
```
ES6チートシート

ECMA Script 2015こと、ES6のまとめ


## letとconstによる変数宣言

letはブロックスコープで再代入可能。
constはvarと同じ関数スコープで再代入不可な定数宣言。

## Default Parameter

関数に初期値を与える

```js
const increment = function(a = 1) {
  return a+1;
}
```

## テンプレート文字列

``で囲った文字列内の${と}で囲った式は実行次に計算されて展開される

```js
let x = 1;
let s = `${x} 足す 1 は ${x + 1} です`;
```

## Destructing Assignment(分割代入)

```js
let [a, b, c] = [1, 2, 3, 4];
let {a, b, c} = {a:1, b:2};
```

代入時に足りない分はundefinedに、余った分は切り捨てられる。

## spread operator

...で関数の複数の引数や配列の複数の要素が拡張する。

### 配列の最後を拡張
```js
let [a, b, ...c] = [1, 2, 3, 4];
// cは[3, 4]
```

###配列の途中を拡張

```js
let [a, ...b, c] = [1, 2, 3, 4];
// bは[2, 3]
```

### 引数の場合

```js
const sum = function (...args) {
  let total=0;
  for (a of args) {
    total += a
  }
  return total;
```


## Arrow Function

() => {}で関数を記述。thisにバインドされる。

```js
const increment = (a = 1) => { a + 1; }
```

※ Javaのlambdaのような->じゃなくって=>なので注意。

## ジェネレータ

他の言語にあるyeildによるジェネレータ。
関数宣言にはfunctionに*がつく。

```js

function* range(max = 10) {
  for (let i=0; i<max; i++) {
    yeild i;
  }
}
```

yeildの戻り値は{value, done}。valueはyeildを発生時の値。doneがtrueの時は終了。　ジェネレータオブジェクトからはnext()メソッドで次のyeildまで実行。

## Promise

省略

## class

他の言語によくあるclass

```js

class Foo extends Bar {
  constructor(bazz) {
    super();
    this.bazz = bazz;
  }
  getBazz() {
    return this.bazz;
  }
  static hello() {
    return "hello";
  }
}

let foo = new Foo("hoge");
console.debug(foo.getBazz());
console.debug(Foo.hello());

```

classでクラス宣言。extendsで他のクラスを継承。constructorがコンストラクタ。staticでクラスメソッドを定義。

## おしまい

他にも書いておいたほうがいいものはあるかな?
Ansible v2.0.0-0.1-alpha1 使ってみる


お知らせがきたので CentOS 6.6 x86_64 へインストール

```shell-session
$ git clone https://github.com/ansible/ansible.git
$ cd ansible
$ git checkout v2.0.0-0.1.alpha1
$ git submodule update --init

$ . hacking/env-setup

$ make rpm

$ rpm -ivh rpm-build/ansible-2.0.0-0.git201508271732.2df6513.HEAD.el6.noarch.rpm
```
superagentでajaxでファイルのアップロードで進捗状況を取得する

ファイルのアップロードをajaxを使って非同期で行う時に、ファイルアップロードの進捗状況を取得したいです。
jQueryや素のHttpRequestを使ったサンプルは多くあるのですが、[superagent](https://github.com/visionmedia/superagent)を使ったサンプルは少ないです。これはそのメモです。


HTMLはこのようなものを用意します。


```html
<input type="file" id="myfile" />
```

superagentからは次のようにして取得します。(ES6の記法で書いています)

```js
import request from 'superagent';

file_field = document.getElementById('myfile')[0];
request.post('/api/file')
  .attach("attachment", file_field.files[0])
  .on('progress', (evt)=> {
    console.debug(evt.percent);
  }).end((err, res) -> {
    if (err) {
      console.error(err);
    }
    console.info(res);
  });
```

onでprogessのイベントを補足して、進捗状況をコンソールに出力しています。eventオブジェクトは全体量を表すtotalとアップロードした分量を表すloadedがありますが、superagentをついでに全体の進捗状況をパーセントで取得できるようになっています。普通はパーセントで進捗状況を表したいので、何気に便利です。
c++ builder > 構造体型変数のTListへの格納と使用 > deleteの仕方に注意

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

TListに構造体型変数を格納して使用したいと思い方法を模索していた。
[SO](http://stackoverflow.com/questions/32241642/tlist-will-not-return-from-delete-src-where-src-is-pointer-to-struct/32258736#32258736)にて問題の解決方法を教えていただいたので以下にコード（一部変更）を掲載する。

`TList *list;`の部分は実際にはクラスのメンバ変数としての定義が望ましいですが、とりあえずサンプルでこうしてます。

```cpp
//---------------------------------------------------------------------------

#include <vcl.h>
#pragma hdrstop

#include <vector> // for vector
#include "Unit1.h"
//---------------------------------------------------------------------------
#pragma package(smart_init)
#pragma resource "*.dfm"
TForm1 *Form1;
//---------------------------------------------------------------------------
__fastcall TForm1::TForm1(TComponent* Owner)
	: TForm(Owner)
{
}
//---------------------------------------------------------------------------

struct data_t {
	int key;
	String name;
};
TList *list;


void __fastcall TForm1::addButtonClick(TObject *Sender)
{
	// add records
	list = new TList();
	data_t *item;

	item = new data_t;
	item->key = 31415;
	item->name = L"pi";
	list->Add(item);

	item = new data_t;
	item->key = 27182;
	item->name = L"napier";
	list->Add(item);

	ShowMessage(L"added");
}
//---------------------------------------------------------------------------

void __fastcall TForm1::showButtonClick(TObject *Sender)
{
	// get records
	data_t *src;
	for(int idx=0; idx < list->Count; idx++) {
		src = (data_t*)list->Items[idx];
		String msg;
		msg = L"key:" + IntToStr(src->key) + " name:" + src->name;
		ShowMessage(msg);
	}

	// free
	for(int idx=0; idx < list->Count; idx++) {
		src = (data_t*)list->Items[idx];
		delete src;
	}
	delete list;
	list = NULL;
}
//---------------------------------------------------------------------------
```

ひっかかったのはnewに対応するdeleteの仕方だった。

```cpp
item = new data_t;
```

でなく

```cpp
data_t dataArray = new data_t[2];
```
のようにしていたので、deleteは`delete [] dataArray`でないといけなかった。

最初は格納数がわからないことがあるので`new data_t[N]`とすることは無駄が生じるので、個々のnew (`item = new data_t;`)の方を使うようにした。
csharp > system("echo hello_world2")に対応するものをC#で実装する > System.Diagnostics.Processを使う

http://qiita.com/7of9/items/6924c496a7a617f9b9a1
を書いている時に「C#でsystem()に対応するのはどうするのだろうか？」という疑問が生まれた。

その方法を見つけた。

参考になったのは
http://dobon.net/vb/dotnet/process/standardoutput.html

実際に作ってみたコードはこちら
http://ideone.com/ygUusN

```csharp
using System;
using System.Diagnostics; // for Process

public class Test
{
	public static void Main()
	{
		Console.WriteLine("Hello World1");


		Process proc = new Process();
		proc.StartInfo.UseShellExecute = false;
		proc.StartInfo.RedirectStandardOutput = true;
		proc.StartInfo.RedirectStandardInput = false;
		proc.StartInfo.CreateNoWindow = true;

		proc.StartInfo.FileName = "echo";
		proc.StartInfo.Arguments = @"hello world2";
		proc.Start();
		
		string results = proc.StandardOutput.ReadToEnd();
		proc.WaitForExit();
		proc.Close();
		
		Console.WriteLine(results);
	}
}
```

結果

```
Success	time: 0.05 memory: 23944 signal:0
Hello World1
hello world2
```
ideone > C++プログラムのバイナリを吐き出す > system("objdump -Sdr prog | c++filt");

http://qiita.com/yuki2006/items/f9de35affb660e64e895
を見ていて

> バイナリを吐くテクニックを教えてもらったので、
実際のバイナリを吐き出してみるとこのような感じです。
https://ideone.com/4Zoktm

上記のコードを見ていると

```
system("objdump -Sdr prog | c++filt");
```
によりバイナリ吐き出しをしているようだ。

実際にC++14でコードを作ってみたら確かにバイナリ出力された。
http://ideone.com/QPqP1J

C#でやろうとしたら
http://ideone.com/5Sy51v

> prog.cs(8,3): error CS0103: The name `system' does not exist in the current context

というエラーが出た。これについては今後調べよう。
技術英語 > the same thing / a similar thing

引用: 冠詞マスター教本 by 石井隆之さん

> ○ He said the same thing.
> x He said a same thing.
> ○ He said a similar thing.
> x He said the similar thing.

> 一方、＜似ているものは多い＞という一般的常識から、あまり限定を感じることはなく、それ故複数のイメージが展開するのでsimilarには不定冠詞がつくわけです。

sameやsimilarを使うとき、このあたりをきちんと考えていなかった。

<hr>
https://github.com/dozedoff/similarImage
> A similar image finder using an implementation of pHash

<hr>
https://github.com/knsv/mermaid
> Generation of diagram and flowchart from text <font color=red>in a similar manner</font> as markdown
Ansible 2.0以前ではincludeにtagをつけても無視されるので注意


はまったのでメモです。

# 事象

- includeにtagをつけてもtagが見つからないと言われる
- 要するに無視されている模様


```bash
$ ansible-playbook site.yml -i stage --tags hoge
ERROR: tag(s) not found in playbook: hoge.  possible values:
```

# 環境

- ansible 1.8.4

```bash
$ ansible --version
ansible 1.8.4
```


```bash:tree
$ tree ./
./
├── fuga.yml
├── hoge.yml
├── roles
│   ├── absent_file
│   │   └── tasks
│   │       └── main.yml
│   └── ensure_file
│       ├── files
│       │   └── hoge.txt
│       └── tasks
│           └── main.yml
├── stage
└── site.yml
```

```YAML:site.yml
- include: hoge.yml
  tags:
    - hoge

- include: fuga.yml
  tags:
    - fuga
```


```YAML:hoge.yml
- hosts: all
  roles:
    - ensure_file
```

```YAML:fuga.yml
- hosts: all
  roles:
    - absent_file
```


```YAML:roles/absent_file/tasks.yml
- file: path=/root/hoge.txt mode=0644 state=absent
```

```YAML:roles/ensure_file/tasks.yml
- copy: dest=/root/hoge.txt src=hoge.txt mode=0644
```

# 原因

既知のIssue
https://github.com/ansible/ansible/issues/9862
https://github.com/ansible/ansible/issues/11309

本来はそもそもトップレベルのPlayBookにタグれなかったとのこと。
2.0もしくはそれ以上でサポートされた(る)模様。

diffを見ると、そもそもincludeモジュールにtagを読み込む機能がなかったので足して直してますね。
https://github.com/ansible/ansible/commit/7c1d569a26b2b7a41d6b4bc9f442fbd7f8b8a188
milkcocoaでデータストアへのコネクション数を自前実装で取得しようとした(が、うまくいかなかった)

## 概要
Milkcocoaのデータストアへの接続数は、ダッシュボードでは確認できるのですがAPIとしては用意されておらず、ほしいなら自前で実装する必要があります（少なくともv2.0.0は）。
で、作ってみたんですがどうもガバガバで、コネクション数が無駄にカウントされちゃったりする。
どーしたもんかと粘ったんですが、これ以上は自分じゃよくわからないので、とりあえずコードを置いておくことにした(放り投げた)。

つーわけで誰か改善してください！

## コード

```index.html
<!DOCTYPE html>
<html lang="en">

<head>
    <meta charset="UTF-8">
    <title>Connection Counter</title>
</head>

<body>
    <div id="connection_counter"></div>
    <script src='https://cdn.mlkcca.com/v2.0.0/milkcocoa.js'></script>
    <script src="connection_count.js"></script>
    <script>connection_counter.start("connection_counter");</script>
</body>

</html>
```

```connection_count.js
(function () {
    window.connection_counter = {

        start: function (tagId) {

            var milkcocoa = new MilkCocoa("{your-app-id}.mlkcca.com"); //
            var ds = milkcocoa.dataStore("connection_count");

            var count = 0;

            ds.get("connection_count", function (err, datum) {
                if (err) {
                    // 初回(not foundがerrに入る)はデータがないので1で初期化
                    if (err === "not found") {
                        ds.set("connection_count", {
                            "count": "1"
                        });
                        return;
                    } else {
                        console.log(err);
                        return;
                    }
                }

                // 接続数を取得し+1する
                count = parseInt(datum.value.count, 10) + 1;

                ds.set("connection_count", {
                    "count": count
                });
            });

            // コネクション数を同期する
            ds.on('set', function (set) {
                count = parseInt(set.value.count, 10);
                document.getElementById(tagId).textContent = count;
            });

            // ページ離脱の前にカウントを減らす
            window.addEventListener('beforeunload', function (e) {
                count--;
                ds.set("connection_count", {
                    "count": count
                });
            });
        }
    }
}());
```

## おおざっぱに解説

1. ページアクセス時には現在のコネクション数をgetし自分の分を+1してset
2. 自分以外の誰かがアクセスしたらsetが走るのでon(set)で同期
3. ページを離れるときはコネクション数を-1してset

という処理をしています。
あと、1でgetしたときにデータがなかったら(=初回アクセス時は)、1をsetしています。

## お願い
「こうやったらコネクション数とれるんじゃないの？」っていうお知恵がございましたらお教えください。あるいは誰か作ってください。(あるいはAPIでサポートよろしくお願いします…)
iTunes のおやすみタイマー作った

音楽とか Podcast を聴きながら眠りにつくことが多いですが、Mac の iTunes にはおやすみタイマーがありません。
というわけで JXA で作りました。

[stop-itunes-after](https://github.com/yuya-takeyama/stop-itunes-after)

パスの通った適当なところに保存して、以下のように実行するだけです。

```
$ stop-itunes-after 30m
```

上記であれば 30 分後に iTunes の再生を停止します。
600s とすれば 600 秒後に止まりますし、1h とすれば 1 時間後に止まります。

お楽しみください。
C++で、引数の指定によってはsqrt（平方根）の値が異なることがある。

#初めに

色々実験してる時に遭遇しました。
実際、これで嵌るということはなかなかなさそうですが（僕は有りましたが）、
こういうこともあるということで記事にしました。

当初は
「C++で、定数による最適化でsqrt（平方根）の値が異なることがある」としてましたが、定数による最適化のせいではなかったので改めました。


#環境
コンパイラは ideoneのC++14 (gcc 5.1)
で確認してます。

#実験

```C++
#include <iostream>
#include <cmath>
#include <iomanip>
#include <assert.h>
using namespace std;
int main(){
 
    long long int calc = sqrt(static_cast<long double>(18014415152484098LL));
 
    cout << calc <<endl;
 
    long long int calc2 = sqrt(static_cast<double>(18014415152484098LL));
 
    cout << calc2 <<endl;
 
    long long int calc3 = sqrt(static_cast<long long int>(18014415152484098LL));
 
    cout << calc3 <<endl;
 
    long long int calc4 = sqrt(18014415152484098LL);
 
    cout << calc4 <<endl;
 
    cout<<setprecision(20)<< 18014415152484098LL <<endl;
 
    cout<<setprecision(20)<< static_cast<double>(18014415152484098LL) <<endl;
    cout<<setprecision(20)<< static_cast<long double>(18014415152484098LL) <<endl;
 
 
    return 0;
}
```


これを実行すると、

```text
134217789
134217790
134217790
134217790
18014415152484098
18014415152484096
18014415152484098
```

と実行される環境があります。


これはsqrt関数でlong doubleに明示的に型指定しないと、doubleになり情報落ちが発生します。

|変換後の型|値（整数部）
|:-----------|------------:|
long long int | 18014415152484098
long double| 18014415152484098
long double sqrt | 134217789
double| 18014415152484096
double sqrt | 134217790




# コンパイル時の最適化

また、sqrtの引数が定数とみなせる場合、コンパイラが最適化を行い、
sqrt(18014415152484098) -> 134217790
という感じにコンパイル時に即値にしているようです。
（型にあったsqrt呼出しのようです。）


##アセンブラを吐き出してみる
アセンブラを吐くテクニックを教えてもらったので、
実際のアセンブラを吐き出してみるとこのような感じです。
https://ideone.com/4Zoktm

134217790の16進数表現(0x800003e)を
即値で持ってるのがわかります。
（calc2は２箇所で使われているので,２つあるようです）

# future study
以下のコードで最初の出力がなぜ
「134217789になる」のかは、まだ理解できてません。
http://ideone.com/Y4XMOY




 
# まとめ
sqrt関数ややこしい。
C++の定数の最適化すごい！
GoogleMapsCalloutViewをSwiftで書いてみた


[GoogleMapCalloutViewSwiftDemo](https://github.com/polidog/GoogleMapCalloutViewSwiftDemo)

swiftどころかobjective-cすら書けない僕が、とりあえず写経程度に[GoogleMapsCalloutView](https://github.com/ryanmaxwell/GoogleMapsCalloutView)をswiftで書いてみました。


## 動かし方

```
$ git clone https://github.com/polidog/GoogleMapCalloutViewSwiftDemo.git
$ cd GoogleMapCalloutViewSwiftDemo
$ pod install
$  open ./GoogleMapCalloutViewSwiftDemo.xcworkspace 
```

アラート画面がでないのが非常に残念な感じなんですが・・・気が向いたら直します。
API通信した結果をUITableViewに反映させたい


Almofire使ってAPI通信して、結果を配列に入れてそれをテーブルに反映させたかったのですが、普通にやると通信するより先にテーブルが作られてしまって結果として配列は空のままで何も入ってないテーブルになってしまいます。

で結果として、

```UITableViewControllerを継承したViewController.swift
	var myTableView: UITableView!
	var ar: [String] = []
	
	override func viewDidLoad() {
	 	(通信する処理) {
			ar = (通信結果)
			myTableView.reloadData()
		}
	}
		
		
	override func tableView(tableView: UITableView, cellForRowAtIndexPath indexPath: NSIndexPath) -> UITableViewCell {
        let cell = UITableViewCell(style: .Default, reuseIdentifier: "cell")
        
        cell.textLabel?.text = "\(self.ar[indexPath.row])"
        // Configure the cell...
        return cell
    }

```

というようにUITableViewのreloadDataメソッドでテーブルが更新され、更新されたセル1行毎にtableViewメソッドが走ってセルのテキストに通信結果の文字列が表示されるようになりました。
2015/08/28に確認したMilkcocoa APIの変更点

# 概要
2015/08/28に、milkcocoaのドキュメントを眺めてたら少し変更・追加があったので、それについてのメモ。たぶん公式にアナウンスがあると思うので、この記事は速報という感じです。あと実コードで検証してないので、自分で検証してから使ってください(責任回避)

# 変更点
- API呼び出し回数
- ユーザー認証関係
- Datastore関係

## API呼び出し回数
その他に含まれていたsend()の呼び出し回数が「コネクション数の上限×240回／分」になった。

## ユーザー認証関係
logout()が増えた？
たしか前にAuth0で遊んでた時にはなかった気がしたので、たぶん増えた…と思う。

## Datastore関係
Datastoreのデータを操作する各メソッドにエラー時のコールバックが追加された。具体的には、セキュリティエラー時に呼び出されるonErrorが第3引数に追加された。

これまでは、データがデータストアに届いた時点で呼び出されるonCompleteの中でエラーを全部扱っていたもが、セキュリティではじかれた場合のエラー内容は取得できなかった。それが今回、onErrorで取得できるようになった。
対象のメソッドは

- send
- push
- set
- remove

の4つ。

なお、変更後もonCompleteの中でエラーを取得できるが、これはデータストアに処理が届かなかったときに内容が入れられるようです。（例えばデータ送信中に通信が切れたときとかかな？使い方がわかってない）

またonErrorが呼び出されるのは、データストアに届いたデータがエラーになった場合とのこと。
例えば、

- セキュリティルールに弾かれた場合
- メッセージ配信数の上限に達した場合

など。Originではじかれてもこちらになるのかな？

# まとめ
今回の変更はdatastoreに対するものが主のようですが、変更内容は現行のコードに影響が出ないようになってるのはありがたいですね。
あと前々からセキュリティではじかれた時のエラー内容がほしかったので、今回の変更はありがたく感じてます。
form_forとform_tagの書き方の比較

Railsチュートリアル8章での表題の件

    <!-- form_forの書き方 -->

    form_for(モデルオブジェクト,{オプション})
    <%= form_for(:session, url: sessions_path) do |f|  %>
      <%= f.label :email %>
      <%= f.text_field :email %>

      <%= f.label :password %>
      <%= f.text_field :password %>

      <%= f.submit 'Sign in', class: 'btn btn-large btn-primary' %>
    <% end %>


    <!-- form_tagの書き方(label, text_field使用) -->
    form_tag(url, オプション)
    <%= form_tag(sessions_path, method: "POST") do %>
      <%= label :session, :email %>
      <%= text_field :session, :email %>

      <%= label :session, :password %>
      <%= password_field :session, :password %>

      <%= submit_tag  'Sign in', class: 'btn btn-large btn-primary' %>
    <% end %>

    <!-- form_tagの書き方2(label_tag, text_field_tag使用) -->

    <%= form_tag(sessions_path, method: "POST") do %>      
      <%= label_tag 'Email' %>
      <%= text_field_tag 'session[email]' %>

      <%= label_tag 'Password' %>
      <%= password_field_tag 'session[password]' %>
   
      <%= submit_tag  'Sign in', class: 'btn btn-large btn-primary' %>
    <% end %>
Revelでチュートリアルが一部動かない場合の対処法

Revelを今から勉強しようと思って、チュートリアルを進めていく場合に一部動かない場所がある
---
```lang:filename
app.go
func (c App) Hello(myName string) revel.Result {
    return c.Render(myName)
}

app/views/App/Hello.html
{{set . "title" "Home"}}
{{template "header.html" .}}

<h1>Hello {{.myName}}</h1>
<a href="/">Back to form</a>

{{template "footer.html" .}}
```
---

この部分。引数でmyNameを指定しているので、Getで入力（渡した）文字をHTMLに表示させることができるとなっているが。が、動かないケースがある。
Linux mint 17.2にgo言語のコンパイラを自分で入れたり、フルパッケージを入れていると動かない。
次のようなエラメッセージがでる。

---
 controller.go:96: No RenderArg names found for Render
---

当分迷ったが、海外のサイトで見つけた次の手法で治った

---
sudo apt-get install golang
---


・結論
諦めて配布されてるパッケージ使えし。
どうもリンクされている一部の不具合で動かなくなるっぽく、発生原因も誰もわかっていない模様