OmniAICreator/Qiita-1.07M huggingface dataset:
マウスイベントの実装【Unity】

マウスイベントの実装は色々なやり方があるとは思いますが、Update内で完結する形で実装してみました。
if文祭りで申し訳ないです。
Down, Up, Drag, Clickのイベントをとっています。

```C#:InputManager.cs
private Vector3 _beginPos;
private Vector3 _endPos;
private Vector3 _currentPos;
private Vector3 _prePos;
private bool _isPress;
private bool _isMove;
private bool _isMoved;

void Start () {
	_isPress = false;
	_isMove = false;
	_isMoved = false;
}

void Update () {
	if (Input.GetButtonDown ("Fire1")) {
		_beginPos = Input.mousePosition;
		_isPress = true;
		_isMoved = false;

		onDown();
	} else if (Input.GetButtonUp ("Fire1")) {
		_endPos = Input.mousePosition;
		_isPress = false;

		onUp();

		if (!_isMoved) {
			onClick();
		}
	}
	_currentPos = Input.mousePosition;
	_isMove = Vector3.Distance(_prePos, _currentPos) > 0.05f;

	if (_isPress && _isMove) {
		_isMoved = true;
		onDrag();
	}

	_prePos = _currentPos;
}

private void onDrag() {
	Debug.Log("drag");
}
private void onDown() {
	Debug.Log("down");
}
private void onUp() {
	Debug.Log("up");
}
private void onClick() {
	Debug.Log("click");
}
```
各種バージョン及びOSでのIEで動作確認をする方法。


以下から、様々なOSとIEバージョンの組み合わせのWindows仮想環境がダウンロードできる。  
http://dev.modern.ie/tools/vms/windows/  
IE6からIE11、XPから8.1まで、主な組み合わせが提供されている。
また、主なデスクトップ仮想環境には代替対応している。(Parallels, VirtualBox, VMWare, Hyper-V, VirtualPC)
Microsoft公式なので安心・安全。  

数GBの巨大zipをダウンロードして解凍して起動させればよい。
らくちん。
peek-rblineprofでRailsアプリのソースコード行ごとの実行時間を計測する

# はじめに
Railsアプリのパフォーマンスを計測するのにpeek-rblineprofというツールを使うと、ソースコードの各行ごとの実行時間が計測できていろいろ捗るという話を聞いたのでやってみた。なにこれ超便利。

実行イメージは本家のスクショを御覧ください。
https://github.com/peek/peek-rblineprof

# インストール

Gemfileに以下の行を追加します。

```rb
gem 'peek'
gem 'peek-rblineprof'
```

bundle installします。

```bash
$ bundle install
```

一時的なデバッグ用でプロジェクトのGemfileを汚したくない場合はGemfile.localとか作るとよいです。以下参照。
[Gemfileにないgemを使いたい](http://qiita.com/vzvu3k6k/items/12aff810ea93c7c6f307)

# Railsアプリの設定
イニシャライザで`config/initializers/peek.rb`とか作って以下の初期化処理を書きます。

```rb
Peek.into Peek::Views::Rblineprof
```

jsとcssを読み込ませます。プロジェクトの構成に合わせて適当な場所で読み込ませて下さい。
（※ファイルのパスはとある例なので各自読み替えて下さい）
`app/assets/javascripts/shared/rblineprof.js.coffee`

```coffeescript
#= require peek
#= require peek/views/rblineprof
```

`app/assets/stylesheets/base/rblineprof.css`

```css
//= require peek
//= require peek/views/rblineprof
```

`app/views/layouts/application.html.erb`

```erb
(略)
  <%= stylesheet_link_tag "base/rblineprof", media: 'all' %>
(略)
```

# 使い方
計測したいURLの末尾に`?lineprofiler=app`というパラメータを付けてアクセスすると、ソースコードの行ごとに実行時間が表示されます。

`https://localhost/?lineprofiler=app`みたいな感じです。

実行イメージは本家のスクショを参照。
https://github.com/peek/peek-rblineprof

どこに時間がかかってるか分かっていろいろ捗る。
CentOS6.6でWebサーバのSSLのセキュリティ対策

本ページは古くなっています。改訂版を作成しました。このページの対策方法ではSSLlabの評価が悪いままです。

> https://qiita.com/qiitamatumoto/items/f93286fc82ec9a0cdff7
> CentOS6.9/CentOS7.4でWebサーバのSSLのセキュリティ対策

以下古い記事です。


1.はじめに
最近WebサーバのSSL関係のセキュリティ報告が多いのですが、たくさんあってよくわかりませんので、チェックツールを使ってみました。

>  https://www.ssllabs.com/ssltest/index.html
>  SSL Server Test

2.管理下のWebサーバを検査してみた。
管理下のサーバは某大学のWebサーバで、OSはCentOS6.6 (RedHatEL6.6互換)で、WebサーバはOS標準のApache、SSLの証明書はUPKI

 > https://upki-portal.nii.ac.jp/
 > UPKIイニシアティブ

を用いています。

Webサーバ(OS標準のapache)のSSL周りの設定(/etc/httpd/conf.d/ssl.conf)はUPKIのサーバ証明書の設定のみで、それ以外はOSのdefaultのままです。

それで検査してみた結果。

評価はC。
![SSL-TEST-summary-before.jpg](https://qiita-image-store.s3.amazonaws.com/0/61370/85044ed5-b839-ec20-d05e-7143456b6758.jpeg)

主な失点はProtocolでSSL3がよくない。CipherでRC4とかいろいろ怒られてます。

![SSL-TEST-Cipler-before.jpg](https://qiita-image-store.s3.amazonaws.com/0/61370/6643f95d-9880-26eb-4e2f-8f8b68fc809e.jpeg)

3.SSL設定ファイル((/etc/httpd/conf.d/ssl.conf)の修正 

SSL3については

>SSLProtocol all -SSLv2 -SSLv3

ssl.confに上記の加筆「-SSLv3」

Cipherについては、

>TLS_RSA_WITH_DES_CBC_SHA (0x9)   WEAK 56
>TLS_DHE_RSA_WITH_DES_CBC_SHA (0x15)   DH 2048 bits (p: 256, g: 1, Ys: 256)   FS   WEAK 56

ssl.confのSSLCipherSuiteに「!DES-CBC-SHA:!EDH-RSA-DES-CBC-SHA」追加。



>TLS_RSA_WITH_RC4_128_MD5 (0x4)   WEAK 128
>TLS_RSA_WITH_RC4_128_SHA (0x5)   WEAK

ssl.confの SSLCipherSuiteに「!RC4」 追加

上記をまとめるとCentOS6.6のssl.confからの差分は以下の通りです。

```
$diff ssl.conf.20150719 ssl.conf
95c95
< SSLProtocol all -SSLv2
---
> SSLProtocol all -SSLv2 -SSLv3
100c100
< SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW
---
> SSLCipherSuite ALL:!ADH:!EXPORT:!SSLv2:RC4+RSA:+HIGH:+MEDIUM:+LOW:!RC4:!DES-CBC-SHA:!EDH-RSA-DES-CBC-SHA

```

修正後OSをrebootすると設定が反映されます。

上記の記述例については以下のホームページが参考になります。

> http://qiita.com/sion_cojp/items/99fee211ceace3f76cff
> セキュリティランクの確認

> https://access.redhat.com/ja/node/1232613
> httpd における POODLE SSLv3.0 脆弱性問題の解決方法 (CVE-2014-3566)

> https://www.jp.websecurity.symantec.com/welcome/pdf/wp_code_algorithm.pdf
> ウェブサーバの暗号アルゴリズムの選び方
> 6ページからの表１が役に立つ。

4.修正後の評定
以下のようにA-評定になりました。
![SSL-TEST-summary-after.jpg](https://qiita-image-store.s3.amazonaws.com/0/61370/e8a00a3c-df4d-19d6-1906-e168fc3a8081.jpeg)

CipherからはWEAKが消えてます。

ほかにもWEAKポイントを指摘されていますが、とりあえずここまでにしておきました(^^;;

5.参考
診断結果の判定結果の全キャプチャです。

修正前

![SSL-TEST-UPKI-ALL-ex.jpg](https://qiita-image-store.s3.amazonaws.com/0/61370/a8c9f76c-7623-eca2-265e-bb9e7ca21699.jpeg)

修正後

![SSL-TEST-UPKI-ALL-rev2-ex.jpg](https://qiita-image-store.s3.amazonaws.com/0/61370/adbff06f-cced-2495-7c4e-27e22dcb409c.jpeg)

以上
Vagrantで使用するVirtualBoxを5.0にする。


# 序

VirtualBoxの5.0が出たので,Vagrant環境を最新のものに更新しました。
本稿執筆時点でのVagrantとVirtualBoxの最新バージョンは以下の通りです。

* VirtualBox 5.0
* Vagrant 1.7.4

なおVirtualBox 5.0に対応するVagrantのバージョンは1.7.3[^1]以降です。


# VirtualBoxのインストール


https://www.virtualbox.org/wiki/Downloads より最新のVirtualBoxを取得してインストールします。

筆者はVirtualBox 5.0 for Windows hosts版を使用しています。

# VirtualBox 5.0 Oracle VM VirtualBox Extension Packのインストール

やはり同じく https://www.virtualbox.org/wiki/Downloads よりVirtualBox Extension Packを取得します。
取得したVirtualBox Extension PackはVirtualBoxのファイルメニューから[環境設定]>[機能拡張]メニューを表示してインストールします。

# Vagrant 1.7.4のインストール

https://www.vagrantup.com/downloads.html より最新のvagrantを取得してインストールします。

筆者の環境ではファイル使用量をチェックするところでかなり待たされたので、これはフリーズしたのかと思い少し焦りましたが、3分ほどでチェックが終わって、Istall Wizardが次のステージに進み最終的には無事インストールが完了しました。

# vagrant-vbguestのインストール

ここでちょっとトラブルが発生。sharaを使ってサンドボックスモードにしようとしたら、そんなコマンドは知らんというつれない返答が。どうもインストールしたはずのpluginがきれいさっぱりなくなってしまった模様。ここでトラブルを追求せずに先に進んだためさらなるトラブルが。

起動中に以下のメッセージが表示されます。

> ==> target: Checking for guest additions in VM...
>    target: The guest additions on this VM do not match the installed version of
>    target: VirtualBox! In most cases this is fine, but in rare cases it can
>    target: prevent things such as shared folders from working properly. If you see
>    target: shared folder errors, please make sure the guest additions within the
>    target: virtual machine match the version of VirtualBox you have installed on
>    target: your host and reload your VM.
>    target:
>    target: Guest Additions Version: 4.3.28
>    target: VirtualBox Version: 5.0

既存のVMのGuest Additionsのバージョンと動いているVirtualBoxのバージョンが違うとのこと。さらににSharing Folderのマウントに失敗したという赤字のエラーも発生。Guest Additionsのアップデートが必要になりました。

Guest Additionsをアップデートするにはvagrant-vbguest pluginをインストールします。

これはコマンドラインから

> vagrant plugin install vagrant-vbguest

と打ち込めばOK。後はVMの起動時に

> GuestAdditions versions on your host (5.0.0) and guest (4.3.28) do not match.

と表示され、以下Guest Additionsのインストールシーケンスが表示されます。

なお Could not find the X.Org or XFree86 Window System, skipping. という警告が出ますが、VMにはX Windowをインストールしていないので問題はないはず。

以上でVirtual BoxとVagrantのアップデートが完了しました。















[^1]: https://github.com/mitchellh/vagrant/blob/master/CHANGELOG.md#173-july-10-2015
(AWS-EC2)コピペで出来る！Muninセットアップ手順


#はじめに
サーバ監視をしたいな〜と思っていろいろ調べてみると、どうやらMuninが手軽にかつ高性能で
やれそうだったので導入してみました。
その際のセットアップ手順を紹介します。

基本的に上からコピペでやれば出来ると思います。


#①ホスト側

##ポートの開放
EC2のセキュリティグループから80番ポートを開放してください
 ![EC2_Management_Console.png](https://qiita-image-store.s3.amazonaws.com/0/49347/6e4be93e-0197-c240-5b56-2140da42982d.png)



##ホストサーバにApacheのインストール・自動起動
**インストール**
```yum install -y httpd```

**自動起動**
```service httpd start```
```chkconfig httpd on```

##ホストサーバにMuninのインストール・自動起動

**インストール**
```$ sudo  yum --enablerepo=epel install munin```
```$ sudo  yum --enablerepo=epel install munin-node```

**自動起動**
```$ sudo chkconfig munin-node on```
```$ sudo service munin-node start```




##最初の一回だけ手動でグラフの生成
``$ sudo -u munin /usr/bin/munin-cron``


##ApacheのBasic認証の設定
デフォルトだとBasic認証のパスワードが設定されておらずログイン出来ないので
任意のパスワードで登録します。
``$ sudo htpasswd -c /etc/munin/munin-htpasswd munin``

```	
New password: munin(任意のパスワードに)
Re-type new password: munin(任意のパスワードに)
Adding password for user munin
 ```

##Apacheの再起動
``$ sudo service httpd restart``

##接続確認

ブラウザ上で
http:// ＜IPアドレス＞/munin/

##クライアントを追加する場合

```$ sudo vim /etc/munin/munin.conf```

```
[ノードのカテゴリ名;ノードのサーバ名]
address XXX.XXX.XXX(ノードのIP)
use_node_name yes
```

#クライアント側


##ポート開放
![EC2_Management_Console.png](https://qiita-image-store.s3.amazonaws.com/0/49347/0414cd14-4594-d2b6-39ed-1cce36b92855.png "EC2_Management_Console.png")

##クライアントサーバにノードのインストール・自動起動
**インストール**
```$ sudo  yum --enablerepo=epel install munin-node```

**自動起動**
```$ sudo chkconfig munin-node on```
```$ sudo service munin-node start```

##ホストサーバの登録
```$ vim /etc/munin/munin-node.conf```

```
allow ^127\.0\.0\.1$
# 新たにホスト名を追加
allow ^***\.***\.***\.***$
allow ^::1$
```

#参考
http://www.submit.ne.jp/821
http://www.maepachi.com/blog/entry/137
VTKによる2つの形状の剛体位置姿勢推定(ICP)

#VTKによる2つの形状の剛体位置姿勢推定(ICP)

##ICPとは
Iterative Closest Point(ICP)とは2つの形状(点群やサーフェス)の位置姿勢変換行列を求める代表的なアルゴリズムである．具体的なアルゴリズムについては，[Wikipedia](https://en.wikipedia.org/wiki/Iterative_closest_point)を参照．
とてもシンプルなアルゴリズムで点群の位置合わせでは広く利用されているが，その一方で初期位置やノイズ，外れ値などに弱いといった欠点もあり，多くの改良アルゴリズムが提案されている．

利用例
1. Kinectなどのレンジセンサから経時的に取得された物体形状から運動(並進と回転)を推定する．
2. 計測された断片的な形状データに3Dモデルを位置合わせする．

位置合わせとしては，基本的なアルゴリズムなので，様々なソフトウェアやライブラリで実装されている．ここでは，VTKにおける実装を用いて，その利用方法を[公式サンプル](http://www.vtk.org/Wiki/VTK/Examples/Cxx/Filtering/IterativeClosestPointsTransform)に基づいて説明していく．

##VTKによるICP
`vtkIterativeClosestPointTransform`を用いる．

手順は以下の通り．

1. 変換元(Source)と変換先(Target)を設定．
  1. 計算される変換行列はSourceをTargetに変換する行列である．
  2. 入力は`vtkPolyData`で良いが，サーフェスがない点群データを用いたい場合には，[公式サンプル](http://www.vtk.org/Wiki/VTK/Examples/Cxx/Filtering/IterativeClosestPointsTransform)にもある通り，`vtkVertexGlyphFilter`でvertexを作成しておく必要があるので注意．
  
2. 変換に関するプロパティを設定．
  1. 繰返し回数 - 正確な位置合わせを行うためには，十分な繰り返し回数が必要．
  2. 重心による初期位置合わせ - 初期位置合わせとして重心で位置合わせを行うか．
  剛体変換なので，形状の外れ値や欠損がなければ，これだけで並進成分は求まる．

3. 変換を計算．
  1. `Modified()`, `Update()`を呼ぶ．(なぜ`Modified()`も呼ぶのかはよく知りません．)
点数や繰り返し回数によっては少し時間がかかる場合もあります．
  2. 計算が終わると，`GetMatrix()`で推定された変換行列を取得可能．
  `vtkPolyData`を変換したい場合は，`vtkTransformPolyData`を用いる．

```cpp
vtkSmartPointer<vtkIterativeClosestPointTransform> icp  =vtkSmartPointer<vtkIterativeClosestPointTransform>::New();

//変換元と変換先をセットする．
icp->SetSource(source);
icp->SetTarget(target);

//プロパティ
icp->GetLandmarkTransform()->SetModeToRigidBody();
icp->SetMaximumNumberOfIterations(20);//繰り返し回数を設定．
icp->StartByMatchingCentroidsOn();//重心位置合わせ．

icp->Modified();
icp->Update();

vtkMatrix4x4 *matrix = icp->GetMatrix();
```

##変換を実行
`vtkTransformPolyData`を用いて行うことができる．

```cpp
vtkSmartPointer<vtkTransformPolyDataFilter> icpFilter = vtkSmartPointer<vtkTransformPolyDataFilter>::New();
icpFilter->SetInputData(source);
icpFilter->SetTransform(icp);
icpFilter->Update();

vtkPolyData* output = icpFilter->GetOutput();
```
Drupal操作メモ


## 既存のNodeを編集する方法

### /admin/content

管理画面の`/admin/content`へ移動し絞り込んで該当するNodeを編集する。
![スクリーンショット 2015-07-21 11.30.48.png](https://qiita-image-store.s3.amazonaws.com/0/4319/5887f0df-c205-52db-9f72-9f3b6655e7fd.png "スクリーンショット 2015-07-21 11.30.48.png")


### contextual linksを利用する
[Working with contextual links](https://www.drupal.org/documentation/modules/contextual)

管理画面にログインした状態でNodeにカーソルをマウスオーバーすると歯車とメニューが出現する。Nodeを検索するよりも編集対象が特定しやすい。

![スクリーンショット 2015-07-21 11.33.02.png](https://qiita-image-store.s3.amazonaws.com/0/4319/59030731-a3a1-3621-831e-4fa4f7dac09b.png "スクリーンショット 2015-07-21 11.33.02.png")
カッコの読み方

カッコの読み方って意外とわからない

とりあえず、プログラミングでよく使うやつだけ

|記号|読み方|
|:---|:---|
|()|かっこ、まるかっこ、ぱーれん|
|{}|ちゅうかっこ、なみかっこ、ぶれーす、おぶじぇくとかっこ(*)|
|[]|だいかっこ、かくかっこ、ぶらけっと、あれいかっこ(*)|
|<>|やまかっこ、さんかくかっこ、あんぐるぶらけっと、だいなりしょうなり、たぐかっこ(*)|
|''|しんぐるくぉーてーしょん|
|""|だぶるくぉーてーしょん|

(*)は個人的な読み方です。
c++ builder XE4, 10.2 Tokyo > TPanel上のTLabelの描画が更新されない件の対処 > TPanel->Invalidate()

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

TPanel上においたTLabelの描画が更新されない件。

以前stackoverflowで聞いて解決したのだが、今回同じ症状を見たので、備忘録のためこちらに投稿しておく。

http://stackoverflow.com/questions/27978259/tlabel-is-not-updated-overlapped-with-tpanel

解決方法としては TLabel更新後に TPanel->Invalidate()をコールする。

### 10.2 Tokyo
(追記 2017/12/26)

```txt:動作環境
Rad Studio 10.2 Tokyo Update 2
```

10.2 Tokyoでも同じ動作となることを確認した。
ページ内リンクでウィンドウの上ピッタリになるのを防ぐ方法


Aタグで href="./#hoge" でページ内の id="hoge" まで移動できるのはいいんですが、上にピッタリくっつくと見づらいし、ナビゲーションバー等があるとその下に隠れてしまったりして困ります。

その際にはCSSに

```
#hoge {
　　padding-top: 50px;
　　margin-top: -50px;
}
```

と書くと見た目は変わらず設定した高さの分だけ上に空間が出来ます。ナビゲーションバーなどがあったらナビゲーションバーの高さ+10pxくらいで設定するといいでしょう。
Atomショートカット備忘用チートシート

俺専用です。Mac仕様。
よく使うもの中心です。

# Atom全体
リロード : ctrl - alt - cmd - L
プロジェクト内ファイル検索 : cmd - t
バッファー内ファイル検索 : cmd - b
コマンドパレット呼び出し : shift - cmd - p 

# 画面操作
エクスプローラー表示 : cmd - \
エクスプローラへのフォーカス移動 : ctrl - 0

画面分割　: cmd - k ,→
分割画面移動 : cmd - k , cmd - n or cmd - p　もしくは　cmd - k , cmd - →　or cmd - →
タブ切替 shift + cmd + [ or ]

全部のタブを閉じる : cmd - k,cmd - w
表示しているタブ以外閉じる : cmd - k,cmd - alt - w

ウィンドウの切替 : cmd - `
ウィンドウを閉じる : cmd - shift - w

# 編集
cmd - shift - d  : 行の複製

cmd - ↑/↓ :ファイルの先頭末尾移動
GlassFish4.1導入（RHEL6.6）

## はじめに
RHEL6.6のサーバーにGlassFish4.1を導入する手順です。

## glassfishをダウンロード

https://glassfish.java.net/download.html

ダウンロード後、SFTPなどでサーバー内にアップロードしてください。

## 初期設定

```bash:

# グループ追加
groupadd -g 970 glassfish

# ユーザー追加
useradd -u 970 -g 970 glassfish

# パスワード設定
passwd glassfish
   glassfishpass ※任意

# 認証鍵作成
su - glassfish
ssh-keygen -t rsa
exit

```
## インストール

アップロードしたディレクトリに移動して以下のコマンドを実行します

```bash:

# 解凍
unzip glassfish-4.1.zip
# オーナー変更
chown glassfish:glassfish -R ./glassfish4
# glassfishユーザーにスイッチ
su - glassfish
# ホームディレクトリに移す
mv ./glassfish4 ~/glassfish4
exit
# シンボリックリンク作成
ln -s /home/glassfish/glassfish4 /usr/local/glassfish4
# 再度glassfishユーザーにスイッチ
su - glassfish
# テスト起動&停止
/usr/local/glassfish4/bin/asadmin start-domain
/usr/local/glassfish4/bin/asadmin stop-domain
# デフォルトのドメインを削除
/usr/local/glassfish4/bin/asadmin delete-domain --domaindir /usr/local/glassfish4/glassfish/domains domain1
# 新ドメインを作成（今回はhogehoge_domainを作成）
/usr/local/glassfish4/bin/asadmin create-domain --adminport 4848 --savemasterpassword=true --savelogin=true hoge_domain 
	Enter admin user name: xxxxx ※任意
	Enter the admin password: yyyyy ※任意
	Enter the master password: zzzzz ※任意
# パスワードファイル作成
$touch /home/glassfish/passwd.gf
$chmod 600 /home/glassfish/passwd.gf
$vi /home/glassfish/passwd.gf
AS_ADMIN_PASSWORD=yyyyy
AS_ADMIN_MASTERPASSWORD=zzzzz
AS_ADMIN_SSHPASSWORD=glassfishpass
# 起動
/usr/local/glassfish4/bin/asadmin --passwordfile ~/passwd.gf start-domain hoge_domain
/usr/local/glassfish4/bin/asadmin enable-secure-admin
/usr/local/glassfish4/bin/asadmin --passwordfile ~/passwd.gf restart-domain hoge_domain

# 起動スクリプト
$su -
$touch /etc/init.d/glassfish
$chown glassfish.glassfish /etc/init.d/glassfish
$chmod 755 /etc/init.d/glassfish
$cat > /etc/init.d/glassfish << 'EOF'
#!/bin/bash
# description: Glassfish Start Stop Restart
ASADMIN=/usr/local/glassfish4/bin/asadmin
GF_USER=glassfish

start() {
 echo "Starting Glassfish..."
 su $GF_USER -c "$ASADMIN --passwordfile ~/passwd.gf start-domain"; rc=$?
 sleep 2
 return $rc
}

stop() {
 echo "Stopping Glassfish..."
 su $GF_USER -c "$ASADMIN --passwordfile ~/passwd.gf stop-domain"; rc=$?
 sleep 2
 return $rc
}

case $1 in
start)
  start
  rc=$? ;;
stop)
  stop
  rc=$? ;;
restart)
  stop
  rc=$?
  if [ $rc -eq 0 ]; then
    start
    rc=$?
  fi ;;
*)
  echo "Invalid option. usage: $0 (start|stop|restart)"
  rc=1 ;;
esac

if [ $rc -eq 0 ]; then
  echo "Success"
  exit 0
else
  echo "Failed"
  exit $rc
fi
EOF

```

## 管理コンソールから設定

管理コンソール（https://[ホスト名orIP]:4848）にログインし、デフォルトコンフィグとサーバーコンフィグのJVMオプションを追加

-Dfile.encoding=UTF-8

Logger SettingのRotation on Date Changeをenableにチェック

以上です。
ビルドツールを使わずに、React.js（with harmony）を使う

# 目的

Gulpなどのビルドツールを使わずに、ブラウザだけでReactを使いたい。
というのも、ビルドツールを使っていないので、環境構築＋情報収集を省きたいという横着っぷり。

とりあえず、ブラウザだけでさくっと試してみたいという方向け備忘録です。

[ソースコードはこちら](https://github.com/kehra/react-requirejs-sample)

# 環境
[React](https://facebook.github.io/react/): 0.13.3
[RequireJS](http://requirejs.org/): 2.1.19
[jsx-requirejs-plugin](https://github.com/philix/jsx-requirejs-plugin): 0.6.2

# ディレクトリ構成
```
home/
  ├ js/
  │  ├ components/
  │  │  └ app.jsx
  │  │
  │  ├ libs/
  │  │  ├ JSXTransformer.js
  │  │  ├ react.min.js
  │  │  ├ require.js
  │  │  ├ jsx.js   ※jsx-requirejs-plugin
  │  │  └ text.js  ※jsx-requirejs-plugin
  │  │
  │  └ main.js
  │
  └ index.html
```

# RequireJSの設定
```
# main.js
require.config({
  # 使用するライブラリのパス情報を設定しています
  paths: {
    "react": "libs/react",
    "JSXTransformer": "libs/JSXTransformer",
    "jsx": "libs/jsx",
    "text": "libs/text"
  },

  # jsx-requirejs-plugin用の設定情報です。
  # JSXでReactを書きたいので、harmonyを設定しています。
  jsx: {
    fileExtension: '.jsx',
    harmony: true,
    stripTypes: true
  }
});

# サンプルコードなので、すぐにapp.jsxをrenderするようにしています。
require(['react', 'jsx!components/app'], function(React, App) {
  App = React.createFactory(App);

  React.render(App(), document.body);
});
```

この設定で、ビルドツールを使わずに、Reactのコンポーネントをファイルごとに分けられ、かつJSXで書くことができます。
Finagleのロードバランサ

# はじめに
 Finagleのクライアントが持っているらしいロードバランサ機能の詳細が不明だったので、調査してみた。

# Load Balancer
## 概要
　Finagleのクライアントはロードバランサを備えている。
　ロードバランサは、クライアントスタックが持つエンドポイントの集合に対して、タスクをダイナミックに分散する。
　ロードバランサの実装は「負荷メトリック」「ディストリビュータ」の２つで構成される。

### 負荷メトリック
　エンドポイントごとの負荷を計測している。未処理のリクエストの数やレイテンシなどを負荷の指標として使用する。

### ディストリビュータ
　負荷メトリックが計測したエンドポイントごとの負荷に応じて、タスクを書くエンドポイントに分散する。

## アルゴリズム
下記４つの分散アルゴリズムが用意されていて、P2Cがデフォルトである。

### Heap + Least Loaded

ヒープ（バイナリツリー？）を使用した負荷分散。
ヒープの各ノードで、エンドポイントごとの未処理のリクエストの数を保持し、これを負荷の指標として使用する。
負荷が最小のものから順に並べて、ディストリビュータは負荷の小さいエンドポイントにリクエストを送る。
ノードを入れ替えたりするときに負荷がかかるという弱点がある。

### P2C
Finagleのクライアントのロードバランサのデフォルトのアルゴリズム。
ディストリビュータは、ランダムに2つのノードをエンドポイントの集合からピックアップし、2つの負荷のうち小さいほうを選んでリクエストを送る。
ヒープと違って、エンドポイントごとに重みを付けたりもしやすい。
ヒープの弱点を克服している。

### P2C+EWMA(Experimental)

P2Cディストリビュータの亜種で、Round Trip Timeの移動平均の値で、未処理のリクエストの数を重みづけしたものを負荷の指標として使用する。
リクエストの処理に時間のかかっているエンドポイントに送らないようにする。
ロングポーリングを行うようなクライアントでは、期待した動作ができない。

### Aperture + Least Loaded(Experimental)

これまでの手法は、タスクが十分に並行して（同時に）流れてくるような状況でなければ、ただのランダム選択での負荷分散と同じになってしまう。
Apertureディストリビュータでは、エンドポイントの負荷をもとにしたシンプルなフィードバック制御をかけることで、ディストリビュータはサーバ間の負荷を特定の幅に合わせるようにタスクをバランスする。
（すみません自信なしです・・・。使うことなさそうなので深く追いません。）

## 動作確認
ローカルにhttpサーバ（ポートは8080,8081）を立てて試してみた。
バージョン6.26.0でないと動作しない。

### デフォルト
```scala
object BalancerTest extends App {
  def main() = {
    //カンマ区切りで複数のエンドポイントを指定できる。
    val client = Httpx.newService("localhost:8080,localhost:8081")
    val request = httpx.Request(httpx.Method.Get, "/")

　　//複数のエンドポイントにリクエストが分散する。
    //なお、一方のエンドポイントが死んでいる場合は、生きている方にリクエストされる。(フェイルオーバー)
    val response: Future[httpx.Response] = client(request)
    response.onSuccess { resp: httpx.Response =>
      println("GET success: " + resp.contentString)
    }
    Await.ready(response)
  }
}
```

### アルゴリズムの変更
ロードバランサのアルゴリズムを変える場合の例。
ほとんどどこにもやり方が載っていなかったので、ソースを追うしかなかった。（基本的にはデフォルトで使えということ？）
細かい設定を行う場合はClientBuilderを使ってクライアントを作る必要があるようだ。

```scala
object BalancerTest extends App {
  def main() = {

    val client = ClientBuilder()
      .codec(Http())
      .hosts("localhost:8080,localhost:8081")
      .hostConnectionLimit(1)
　　　//ロードバランサでheapアルゴリズムを使用する。(デフォルトはP2C)
      .loadBalancer(Balancers.heap())
      .build()
    val request = httpx.Request(httpx.Method.Get, "/")
    val response: Future[httpx.Response] = client(request)
    response.onSuccess { resp: httpx.Response =>
      println("GET success: " + resp.contentString)
      client.close()
    }
    Await.ready(response)
  }
}
```

# まとめ

結構簡単にフェールオーバー、ロードバランサが実装できてしまうようだ。

各エンドポイントの負荷状況に応じて、動的にタスクのリクエストの配分を変える処理をシンプルに実装できているのがよさそう。
1つのノード内で負荷メトリックの計測とタスク分散を行う機能が完結しているので、クラスタ内のノード間で負荷情報をやり取りする必要がない点とかも良い気がする。

ただし、どうもこのあたりの機能はバージョンによる挙動とインタフェースの違いがかなり大きいようで、上記のコードもFinagle 6.26では動作するが、Finagle 6.24では動作しない。

フェイルオーバー周りももっと詳しく見ていきたい。
Gmailで受信箱の未読メールを簡単に全選択する

1. Gmailで重要なメールは全部既読になったりスターつけたりして、残った未読メールを全削除したい。
2. そんな時、単純に全選択のチェックボックスをクリックすると、スター付きや既読のその他のメールとか受信箱には残しておきたいものまで纏めて選択されてしまい、これは僕が求めてるものではない。
3. なんか良い方法ないかなーと思ったんだが、`is:unread is:inbox` で検索して全選択が早いっぽい。
4. でも毎回検索するの面倒だし、ブックマークを作ってみる→マルチアカウントでGmail使ってると1個のブクマで対応できねぇ！
5. 検索のブックマークレットつくろう→出来た（イマココ

# ブックマークレット
とりあえずこんなブックマークレット作っておけばマルチアカウントでもそのアカウントの未読の受信箱のメールが一発で検索できる。

```js:未読INBOX
javascript:(function(){location.hash="#search/is%3Aunread+is%3Ainbox"})()
```

とりあえずめでたし。
numpyで明示的にループを書くと極端に遅くなる

「コンピュータ言語を遅く使ってしまう方法」で述べたように
numpyで明示的にループを書くと極端に遅くなる。
以下は、初心者向けの話です。

それを実験するコードを書きました。

```py:matmul.py
# -*- coding: utf-8 -*-
u"""
行列演算の速度比較
"""

def matmul1(a, b):
    lenI = a.shape[0]
    lenJ = a.shape[1]
    lenK = b.shape[1]
    c = np.zeros((lenI, lenJ))
    for i in range(lenI):
        for j in range(lenJ):
            for k in range(lenK):
                c[i, j] += a[i, k] * b[k, j]
    return c

def matmul2(a, b):
    lenI = a.shape[0]
    lenJ = a.shape[1]
    lenK = b.shape[1]
    c = np.zeros((lenI, lenJ))
    for i in range(lenI):
        for k in range(lenK):
            for j in range(lenJ):
                c[i, j] += a[i, k] * b[k, j]
    return c

import numpy as np
a = np.random.randn(200, 200)
b = np.random.randn(200, 200)
print a.shape

c2 = matmul2(a, b)
print c2

c = matmul1(a, b)
print c

c3 = np.dot(a, b)
print c3

```


IPythonのコンソールで
このコードを一度実行させて、関数定義を有効にしてから
%timeit　を使って比較してみました。
20倍もの差を生じています。

%timeit c2 = matmul2(a, b)
1 loops, best of 3: 7.39 s per loop

%timeit c1 = matmul1(a, b)
1 loops, best of 3: 7.31 s per loop

%timeit c3 =np.dot(a, b)
1000 loops, best of 3: 321 µs per loop


まとめ
　numpyのように行列演算に最適化されたライブラリを使うときには
　行列の要素に個別にアクセスするようなfor文は基本書かないこと。
　numpyのドキュメントを読んで、呼び出すべき関数を調べてください。
　Spyder統合環境の場合[help][Installed Python Modules]から
　numpyのドキュメントが読めます。


[NumPy・SciPyによる高速化の実力を見る](http://qiita.com/EqualL2/items/472035c3f0d3e34734a8)

## 関連記事
[画像処理で2重ループをなるべく書くな](https://qiita.com/nonbiri15/items/9d4296b3a79fad38bf76)
ES6勉強会LT資料

7/18に行ったタッチ＆トライES6勉強会で発表したLTの資料です。
「jspmを使ってES6を始めてみよう」
というタイトルで発表してきました。

備忘録代わりに資料貼っておきます
http://www.slideshare.net/tk_0225/jspmes6-50657176

デモで使った内容はgithubにあげています
https://github.com/takahiromaki/sample
unity > coroutines > 説明 / codeExample

http://docs.unity3d.com/ja/current/Manual/Coroutines.html

> コルーチンとは実行を停止して Unity へ制御を戻し、但し続行するときは停止したところから次のフレームで実行を継続することが出来る関数です。C# でコルーチンは次のように宣言します:

<hr>
サンプルは以下がわかりやすかった。

http://wonderpla.net/blog/engineer/Unity_Co-routine/
SwiftでURLをescapeして、Rubyでunescapeする

# Swiftでurlをescapeする

`&`と`=`をescapeするために、customAllowedSetを作ります

~~~swift
import UIKit

var url = "https://www.google.co.jp/webhp?sourceid=chrome-instant&rlz=1C5CHFA_enJP574JP574&ion=1&espv=2&es_th=1&ie=UTF-8#safe=off&q=test"
var customAllowedSet = NSCharacterSet(charactersInString:"&=\"#%/<>?@\\^`{|}").invertedSet
var escapedString = url.stringByAddingPercentEncodingWithAllowedCharacters(customAllowedSet)
# => "https:%2F%2Fwww.google.co.jp%2Fwebhp%3Fsourceid%3Dchrome-instant%26rlz%3D1C5CHFA_enJP574JP574%26ion%3D1%26espv%3D2%26es_th%3D1%26ie%3DUTF-8%23safe%3Doff%26q%3Dtest"
~~~

# Rubyでunescapeする

~~~ruby
irb(main):003:0> require 'uri'
=> false
> escaped = "https:%2F%2Fwww.google.co.jp%2Fwebhp%3Fsourceid%3Dchrome-instant%26rlz%3D1C5CHFA_enJP574JP574%26ion%3D1%26espv%3D2%26es_th%3D1%26ie%3DUTF-8%23safe%3Doff%26q%3Dtest"
> URI.unescape(escaped)
=> "https://www.google.co.jp/webhp?sourceid=chrome-instant&rlz=1C5CHFA_enJP574JP574&ion=1&espv=2&es_th=1&ie=UTF-8#safe=off&q=test"
~~~

# 参考情報

* [stackoverflow: Swift - encode URL](http://stackoverflow.com/questions/24551816/swift-encode-url)
海外デベロッパーがYahoo!BOX APIを利用することについて

Yahoo!JAPANカスタマーサービス宛てに以下を問い合わせたところ、このフォーラムへ誘導していただきましたので投稿させていただきます。

海外デベロッパー向けにYahoo!BOX APIの、英語でのサポートをしているか問い合わせしたところ、Yahoo!JAPANカスタマーサービスからは「日本国内での利用を想定しており英語でのサポートはしていない」と回答いただきました。

これについて、海外デベロッパーがYahoo!BOXのAPIキー取得や法人登録することはできるでしょうか？
第三者が代理で手続きすることも考えていますが、このような方法でも可能なのでしょうか？
Python geocoder 1.4.0で音速ジオコーディング

Pythonライブラリからダウンロード、またはpip installで。

https://pypi.python.org/pypi/geocoder

私はpipでインストールしたらモジュールがないよ！と怒られたので
オーソドックスにダウンロードして、setup.pyがいいかもしれません。

```geo.py

#!/user/bin/env python
# -*- coding: utf-8 -*-
import json
import csv
import geocoder
import sys, codecs

Localname = raw_input(u"")
g = geocoder.google(Localname)

print g.latlng
```

す、すごく簡単です・・・。
外部ファイルにあるCSVを読み込んだり色々やってみよう。
gitlab　コミットした後にissueとコミットの関連付けをする

コミットメッセージに`#1`（# + issueID）を文頭につけることでissueとコミットを関連づけることができますが、そのことを忘れてコミットしてしまうことが多くありました。


## コミットした後にissueを関連付る
1. 左メニュー[commits] -> タブ[commits] -> 関連付けしたいcommitId　をクリックして開く
2. ページ下部にあるコメント入力欄に「#1」とコメントする

これでissueを確認すると、コミットが関連づけられています。
BIツール　備忘録

#サマリ
[BIツール４選～ユーザ視点のビッグデータ活用に向けたBIツール～](http://bdm.change-jp.com/?p=850)
#有償
##[Tableau Desktop](https://www.google.co.jp/search?hl=ja&q=Tableau+Desktop&lr=lang_ja&gws_rd=ssl)
[気軽に始めてみよう！クラウド時代のデータウェアハウス超入門](http://dev.classmethod.jp/cloud/aws/dwh-entrance/)
[クラスメソッド、POSデータ数十億件をリアルタイム分析する基盤を「Amazon Redshift」「Tableau」で開発](http://codezine.jp/article/detail/7674)
[Tableauで始めるBI(ビジネス・インテリジェンス) – シリーズ –](http://dev.classmethod.jp/series/getting-started-bi-with-tableau/)
project-folder つくった

[project-folder](https://atom.io/packages/project-folder)

![gif](https://raw.githubusercontent.com/t9md/t9md/c9cbeb79d3e8f86fc60efb52e696d4340012e4da/img/atom-project-folder.gif)

Atom は [複数のプロジェクトフォルダ](http://blog.atom.io/2015/04/15/multi-folder-projects.html) を開くことが出来る。
特に、Atom の Package を作っているときは、Atom コアのコードを開いておくと、ファイル検索や、シンボル(関数)ジャンプが使えて作業がはかどる。

集中モードの時は、ファイルが多いと煩わしいので、必要な時だけ、フォルダを追加している。
このフォルダの追加、削除を簡単に出来るようにするパッケージ。


# 機能

* クイックに、プロジェクトフォルダを追加、削除できる
* <kbd>tab</kbd> キーでアクションの切り替え、UI の色も変わる
* 現在ロードされているフォルダを、選択したフォルダで置き換え(Replace).
* 既にロードされているプロジェクトフォルダは、追加時のリストから隠す(設定可能)
* セレクトリストを閉じずに続けて、追加・削除できる

# コマンド

* `project-folder:add`
* `project-folder:remove`

以下は、セレクトリストの、ミニエディタでのみ有効

* `project-folder:replace`: 選択したフォルダのみにする(他を remove)
* `project-folder:switch-action`: `add`,`remove` アクションの切り替え。セレクト状態のアイテムの色も変わる(なので、今のアクションが分かる remove:赤, add:青)。
* 'project-folder:confirm-and-continue': セレクトリストを閉じずに、confirm を続ける。続けて、add したり、remove したりできる。

# 使い方

以下、基本(ステップ-1) 〜 ステップ-3 までのトレーニング。
慣れてしまえば非常に快適。

## ベーシック

1. `project-folder:add`をコマンド・パレットか、キーマップから開始
2. 追加したいフォルダを選ぶ
3. フォルダが追加され、tree-view にリストされる

## スイッチ アクション/ Continuous confirm.

1. `project-folder:add`をコマンド・パレットか、キーマップから開始
2. 追加したい item が選ばれた状態で <kbd>space</kbd> キーをタイプ. フォルダが追加される。もう一度<kbd>space</kbd> で次のアイテムが追加される。
3. 次に<kbd>tab</kbd> をタイプ。選択状態のアイテムの色が赤に変わる。これは action が `add` から `remove` になったから。デフォルトのCSS で add は青、remove は赤にしている。アクションが `remove` になったので、今度は、<kdb>space</kbd> をタイプすると、プロジェクトリストから、フォルダが remove(unlist) される。

## Replace(置き換え)

1. `project-folder:add`をコマンド・パレットか、キーマップから開始
2. <kbd>space</kbd> をタイプして複数のプロジェクト・フォルダを追加する。
3. 最後に、置き換えたいアイテムを選んで、<kbd>ctrl-r</kbd> を入力。
4. 2でロードされたフォルダは remove され、３で <kdb>ctrl-r</kdb> で選んだフォルダだけになる。(置き換えられた)


# キーマップ

でファオルトで、キーマップは、ミニエディタでのみ設定されている。

```coffeescript
'.project-folder atom-text-editor[mini]':
  'ctrl-r': 'project-folder:replace'
  'tab':    'project-folder:switch-action'
  'space':  'project-folder:confirm-and-continue'
```


`project-folder:add` または `project-folder:remove` のキーマップが必要であれば、ユーザー自身が設定する。

e.g. 私の設定

```coffeescript
'atom-workspace:not([mini])':
  'ctrl-cmd-p': 'project-folder:add'
```

# 設定

* `projectRootDirectories`: カンマ区切りでディレクトリを指定する。このディレクトリから、フォルダの一覧を出す。

※ 変数名ミスったかも。。 `projectDirectories` にすべきだったかも。。。

e.g

`~/.atom/packages, ~/github`

直接、`config.cson` を編集するなら、例えば以下の様になる。

```coffeescript
"project-folder":
  projectRootDirectories: [
    "~/.atom/packages"
    "~/github"
  ]
```

# TODO
* [x] Replace action(remove other project except selected).
* [x] Switch add/remove with `tab` key on selectListView.
* [ ] User defined project set(add/remove group of project with title).
* [x] Recursively find .git project.
Proxmox4βにGnome3をインストール

## itamaeのレシピ

```rb:recipe.rb
%w(tig mutt vim screen xdotool xbindkeys).each do |pkg|
  package pkg do
    action :install
  end
end

%w(gnome-session gnome-terminal).each do |pkg|
  package pkg do
    action :install
  end
end

%w(task-japanese-gnome-desktop iceweasel-l10n-ja fonts-takao fcitx-mozc).each
do |pkg|
  package pkg do
    action :install
  end
end
```

（何分も待っても終わらないことがあったため、sshして手動で入れた。）

## Ansibleで書くとこう

```localhost.yml
- hosts: 127.0.0.1
  connection: local
  sudo: yes

  tasks:
    - name: Utilities
      apt: pkg={{ item }} state=present
      with_items:
        - curl
        - mutt
        - python-pip
        - screen
        - tig
        - vim

    - name: X
      apt: pkg={{ item }} state=present
      with_items:
        - gnome-session
        - gnome-terminal
        - xbindkeys
        - xdotool

    - name: Japanese
      apt: pkg={{ item }} state=present
      with_items:
        - fcitx-mozc
        - fonts-takao
        - iceweasel-l10n-ja
        - task-japanese-desktop
```

## 言語を日本語に設定

* user -> language -> Japanese
* `fcitx-configtool` -> Input MethodにてMozcを追加、それ以外を削除

## ハマった点

```bash:
$ gnome-terminal
Error constructing proxy for org.gnome.Terminal:/org/gnome/Terminal/Factory0: Error calling StartServiceByName for org.gnome.Terminal: GDBus.Error:org.freedesktop.DBus.Error.Spawn.ChildExited: Process org.gnome.Terminal exited with status 8
```

起動しない。

```bash:
dpkg-reconfigure locales
```

* ja_JP.UTF-8 をチェック

これで起動するようになった。


# Cinnamonに切り替える

```rb:recipe.rb
%w(cinnamon-desktop-environment cinnamon-l10n cinnamon-session).each
do |pkg|
  package pkg do
    action :install
  end
end
```
[tips]DOSコマンドの実行結果をクリップボードへコピーする

# コマンドプロンプトの結果をファイルに出す方法はありましたが…

なんとクリップボードにもできたのですね。

---

例えば、現在表示しているディレクトリのファイル名のみ表示する場合は、

```
dir /b
```

ですが、この実行結果をクリップボードへ貼り付けるには

```
dir /b | clip
```

と、clipをパイプでつなぐだけでした。

---

他にもtreeコマンドで現在のディレクトリからディレクトリ構造を出力するtreeコマンドでも使えます。

```
tree /F | clip
```

何かのドキュメントや、成果物一覧を出力してくれってときにでもドウゾ。
c++ builder XE4, 10.2 Tokyo > ショートカット > ソースとヘッダの表示切替 > Ctrl+F6

```txt:動作確認
C++ Builder XE4
Rad Studio 10.2 Tokyo Update 2
```

ソースを開いている状態からヘッダー表示に切り替えたい。

マウスを使っていたが、Ctrl + F6で切替できるようだ。

http://docwiki.embarcadero.com/RADStudio/XE8/ja/%E3%82%B3%E3%83%BC%E3%83%89_%E3%82%A8%E3%83%87%E3%82%A3%E3%82%BF%E3%81%AE%E3%82%B3%E3%83%B3%E3%83%86%E3%82%AD%E3%82%B9%E3%83%88_%E3%83%A1%E3%83%8B%E3%83%A5%E3%83%BC

> ［ソース/ヘッダーファイルを開く］（C++ のみ）
> コード エディタに実装ファイル（.cpp）が表示されている場合、ヘッダー ファイル（.h）が開きます。
> コード エディタにヘッダー ファイル（.h）が表示されている場合、実装ファイル（.cpp）が開きます。


頻繁に使いそうな機能について、もう少しマニュアルを読んだほうがいいかもしれない。
c++ builder XE4, 10.2 Tokyo > 指定の実行時引数の有無チェック > ParamCount / ParamStr()

```txt:動作確認
C++ Builder XE4
Rad Studio 10.2 Tokyo Update 2
```

実行時の引数に指定のオプションがあるかどうか。
大文字小文字区別しない場合。

```
for (int idx=0;idx<=ParamCount();idx++){
	if(LowerCase(ParamStr(idx)) == L"/start"){
		// start option
	}
	if(LowerCase(ParamStr(idx)) == L"/retry"){
		// retry option
	}
}
```

idxループには`=`が必要。

0番目は実行ファイル、1番目以降が実行時引数になるため。
Nodejs から Heroku postgresへ接続してみました

## 目的
NodejsからHeroku postgresに接続する

## 手順
1. Heroku postgresが追加されているか確認する<br/>
   コマンドプロンプトから、heroku configを実行する
2. Heroku postgresが追加されてなければ、追加する<br/>
heroku addons:create heroku-postgresql
3. クライアントにpostgres（pgAdmin）をインストールする
4. pgAdminで接続テストしてみる
5. NodejsにDBアクセス用のプログラムを作成する
6. 問題なく接続できたことを確認

## 接続時のエラー
Heroku postgresは、ssh接続が必須なのでheroku configで記載されている接続情報で接続しようとするとエラーになります
接続エラーのメッセージ：
{ [Error: connect ECONNREFUSED]
  code: 'ECONNREFUSED',
  errno: 'ECONNREFUSED',
  syscall: 'connect' }

接続エラー時のプログラムエラー：
  var query = client.query('SELECT Name FROM "TestUser"');
                     ^
TypeError: Cannot call method 'query' of null 

解決方法：
var conString = process.env.DATABASE_URL || "postgres://[ユーザ名]:[パスワード]@[ホスト名]:[ポート]/[DBメンテナンス]
の後に
?ssl=true&sslfactory=org.postgresql.ssl.NonValidatingFactory
を追記する

## 感想
コマンドを実行するだけで簡単にpostgresとの連携ができました
また、Heroku postgresの無料版を選択するとマルチテナントなので、別ユーザのスキーマが見れるのは新鮮でした
bundle installでnokogiriのインストールが失敗する場合の解決方法

# エラー内容

~~~
Gem::Ext::BuildError: ERROR: Failed to build gem native extension.

    /Users/sonixasia/.rbenv/versions/2.1.1/bin/ruby -r ./siteconf20150721-3619-114m9qd.rb extconf.rb --use-system-libraries
checking if the C compiler accepts ... yes
checking if the C compiler accepts -Wno-error=unused-command-line-argument-hard-error-in-future... no
Building nokogiri using system libraries.
libxml2 version 2.6.21 or later is required!
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of necessary
libraries and/or headers.  Check the mkmf.log file for more details.  You may
need configuration options.
~~~

# 解決方法

`bundle config`コマンドで、nokogiriインストール時のオプションをセットします

~~~
$  bundle config build.nokogiri --use-system-libraries=true --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/libxml2
~~~

~/.bundle/configが以下のようになっていることを確認します。

~~~
# ~/.bundle/config

---
BUNDLE_JOBS: '4'
BUNDLE_GEM__COC: '0'
BUNDLE_GEM__MIT: '0'
BUNDLE_GEM__TEST: 'false'
BUNDLE_BUILD__NOKOGIRI: "--use-system-libraries=true --with-xml2-include=/Applications/Xcode.app/Contents/Developer/Platforms/MacOSX.platform/Developer/SDKs/MacOSX10.9.sdk/usr/include/libxml2"
~~~

この状態でbundle installすると成功しました。

~~~
$ bundle install
~~~


# 参考

* [nokogiri がlibxml2のせいでインストールできない](http://d.akiroom.com/2014-08/nokogiri-libxml2-version-2-6-21-or-later-is-required/)
インテル® RealSense™ 3Dカメラ を動かしてみる【環境準備】

Intel RealSense 3Dカメラ(F200)を手に入れたので、プログラムしていきたいと思います。

#Intel RealSenseについて
まずは、Intel RealSenseについて


[インテル® RealSense™ テクノロジー](http://www.intel.co.jp/content/www/jp/ja/architecture-and-technology/realsense-overview.html)

↑ここを見てもらえれば分かりますが、PCの前面に付ける想定のF200とタブレットの背面カメラとしてつける想定のR200があるようです。
3つのレンズを搭載しておりそれぞれRGBカメラ、赤外線カメラ、赤外線レーザー・プロジェクターの機能を果たし、正面にある対象物から反射される赤外線を検出して深度を推測し、指や顔などをトラッキングしています。

今回手に入れたF200は、Color、Depth、Irのフレームを取得できるのはもちろんですが
顔の特徴点(78点)・傾きなどの情報取得、手・指の検出(片手22点)などが可能で、顔の3Dデータを生成したり
ジェスチャーなどで画面UIの制御ができるといった感じです。

F200はPCの前面に取り付けることを想定しているカメラで、対象範囲は0.2 – 1.2メートルです。
Kinectと比べると短めなのは、Kinectは体全体を対象とするのに対しこのカメラはPCの前で
手や指のジェスチャーで何かの操作をするということを目的としているからだと思います。

サンプルを動かしたところKinectに比べると手・指・顔の検出などは精度が細かくて高い感じです。 
LEAPに比べると指の検出をロストすることが若干多いように思いますが作成するプログラムでカバーできる
範囲かと思います。LEAPは下に置いて操作するのに対し、F200は前面から取るため画面に対するアクションは
取りやすいのではないかと思います。
 
R200というモデルもありこれはタブレットの背面に取り付けることを想定しているカメラで
対象範囲は3、4メートルとなっています。
背面カメラを映した映像をタブレットで見てARするとか3Dスキャンするとかに使用するようです。

↓ここからPCやタブレットに搭載されていないDeveloperKitとしてカメラの購入が可能です。
[Intel® RealSense™ Developer Kit](http://click.intel.com/intel-realsense-developer-kit.html)
(2015.7.21時点でR200は「Out of stock」で購入できない状態でしたのでまた機会に購入したいです)


#ハードウェア環境
PC：　CPU:Intel Core i7 2.7GHz, RAM:16GB, USB3.0
カメラ：Intel® RealSense™ 3D Camera (Front F200)

※第四世代以降のIntel® Core™ processorでないと動かないようです。
※USBは3.0でないと動かないようです。

#ソフトウェア環境
OS：Windows 8.1 64ビット
開発環境：Visual Studio Professional 2013 Update 4
　　　　　WPF C#
SDK：Intel® RealSense™ SDK 2014

※Windows8.1 64ビットでないと動かないようです。
※今回は扱いやすさからWPF C#を使いますが、C++、JavaScript、Java、Processingでも開発可能です。
　(後々やってみますがUnityとの連動も簡単にできるようです)

##SDKの導入
↓ここの「Intel® RealSense™ SDK for Windows FreeDownload >」のリンクからSDKをダウンロードしてインストールします。
(ダウンロードにはユーザー登録が必要です)
[Intel® RealSense™ SDK](https://software.intel.com/en-us/intel-realsense-sdk)

もうひとつ、↓ここから「F200 Intel RealSense Depth Camera Manager」をダウンロードしてインストールします。
[Intel® RealSense™ SDK](https://software.intel.com/en-us/intel-realsense-sdk/download)
(これがないと深度画像が取得できないようです)

そのほかに必要であれば以下もインストールします
・Includes redistributable components and additional speech language packages
・Javascript Enabling Package for Intel RealSense SDK 
・Unity Toolkit

ちなみに、このSDKは一般のWebカメラの制御もできるので3DカメラがなくてもRGB画像ならば取得可能です。
3Dカメラを注文して届くまでにSDKで普通のカメラを使ってサンプル作成などできる感じです。
(もちろん深度画像などは取れませんが)


#開発情報について
私は、主に以下から情報を得てプログラムを進めていっています。
・SDKインストール時に入る「Developer Guide」
　全部英語ですが、SDKの一通りの全体内容を把握できます。これを一通り理解しておかないと話にならないので
　カメラが届くまでに読んで理解しておきました。
　開発中もこれでクラスの詳細を調べるのことになると思うので、長い付き合いとなりそうです。

・[Tutorials](https://software.intel.com/en-us/intel-realsense-sdk-support/training#tutorials)
　↑このあたりにあるPDFは一通り目を通すと開発についてがわかります。

・SDKインストール時に入るサンプルのソースコード
　「Intel RealSense SDK Sample Browser」からサンプルが動かせてソースも見れます。



これからこのカメラを使って色々やってみたいと思います。
rubygemsに登録するときにはspec.metadata['allowed_push_host']あたりを消しておこう


## よっしゃ！`bundle exec rake release` だ！

なんだこのエラーは・・・。

```
$ bundle exec rake release                           
sample_gem 0.1.0 built to pkg/sample_gem-0.1.0.gem.
Tag v0.1.0 has already been created.
rake aborted!
ERROR:  "https://rubygems.org" is not allowed by the gemspec, which only allows "TODO: Set to 'http://mygemserver.com'"
Pushing gem to https://rubygems.org...

Tasks: TOP => release => release:rubygem_push
(See full trace by running task with --trace)
```

## 原因はなにか

これは誤ってオレオレgemをrubygems.orgにpushしないための設定が
`$ bundle gem sample_gem`した時に下記のように記述されているためです。


```ruby
# Prevent pushing this gem to RubyGems.org by setting 'allowed_push_host', or
# delete this section to allow pushing this gem to any host.$
if spec.respond_to?(:metadata)$
  spec.metadata['allowed_push_host'] = "TODO: Set to 'http://mygemserver.com'"
else
  raise "RubyGems 2.0 or newer is required to protect against public gem pushes."
end
```

[rubygems.orgの解説サイト](http://guides.rubygems.org/publishing/#serving-your-own-gems)

どんなホストにでもpushしていいならここのセクション消してねって書いてありますね！ここを消せばとりあえずrubygemsにpushできます。
grubの手動インストール

* [grub2 - Grub error: file '/grub/i386-pc/normal.mod' not found? - Unix & Linux Stack Exchange](http://unix.stackexchange.com/questions/70538/grub-error-file-grub-i386-pc-normal-mod-not-found)

久々にハマった。

```bash:
mount --bind /proc /target/proc 
mount --bind /dev  /target/dev
mount --bind /sys  /target/sys
```

```bash:
grub-install --boot-directory=/target /dev/sda
```

```bash:
update-grub
grub-install --recheck --no-floppy /dev/sda
```

## 他の要因

* すごく古いHDD(SATAコネクタとIDE用電源が付いているタイプ)だとなぜかgrubのインストールが出来なかった。
RxJava(RxAndroid)でのBackpressureについて


RxJavaのAndroidバインディングである[RxAndroid](https://github.com/ReactiveX/RxAndroid)を使い始めてBackpressureではまったので整理
[retrolambda](https://github.com/orfjackal/retrolambda)でlambda式使っていますが、使っていなければ適宜`new`するコードに置き換えてください

# Backpressure

[Backpressure · ReactiveX/RxJava Wiki](https://github.com/ReactiveX/RxJava/wiki/Backpressure)

通信処理にRxJava使った時に、

```
System.err﹕ rx.exceptions.MissingBackpressureException
```

みたいなエラーを吐いてしまうことがあったのでその対策

## 問題のあるコード

通信部分は例えばこんな感じ

```java:Client.java
public Observable<Item> get() {
    return Observable.create(subscriber -> {
        subscriber.onStart();
        List<Object> items = // 通信
        for (int i = 0; i < items.size(); i++) {
            Item item = // parseする
            subscriber.onNext(Item);
        }
        subscriber.onCompleted();
    });
}
```

何か通信して取ってきてパースして`Item`オブジェクトにしてから`subscriber#onNext`でsubscriberに返す、という流れ
これを`subscribe`する側はこんな感じ

```java:MainActivity.java
private void fetchItems(String url) {
	new Client(url).get()
    	    .subscribeOn(Schedulers.io())
	        .observeOn(AndroidSchedulers.mainThread())
    	    .subscribe(
    	    		this::setResult,
    	    		Throwable::printStackTrace,
    	    		() -> Log.d(TAG, "complete"));
}

private void setResult(Item item) {
    // 通信結果を何かする
}
```

ioスレッドで通信してメインスレッドで`setResult`メソッドを呼ぶ、という流れ
これだと上にも上げたようなエラーのstacktraceが表示された

```
W/System.err﹕ rx.exceptions.MissingBackpressureException
W/System.err﹕ at rx.internal.util.RxRingBuffer.onNext(RxRingBuffer.java:338)
W/System.err﹕ at rx.internal.operators.OperatorObserveOn$ObserveOnSubscriber.onNext(OperatorObserveOn.java:115)
W/System.err﹕ at rx.internal.operators.OperatorSubscribeOn$1$1$1.onNext(OperatorSubscribeOn.java:76)
```

ワーカースレッドから送られてくるデータにメインスレッドでの処理が間に合ってないようなイメージだと思う

# 解決策

[RxJava Wiki](https://github.com/ReactiveX/RxJava/wiki/Backpressure)にもあるようにいくつか解決策があった

```java
new Client(url).get()
		.onBackpressureBuffer() // ここ
   	    .subscribeOn(Schedulers.io())
        .observeOn(AndroidSchedulers.mainThread())
        // .onBackpressureBuffer() ここだとダメ
   	    .subscribe(/** なにか処理 **/);
```

この例のように`onBackpressureBuffer`やその他`onBackpressureDrop`、`onBackpressureBlock`などをメソッドチェーンでcallするといい感じに完了できる

- `onBackpressureBuffer`
	- ワーカースレッドからの通知をバッファリングする
- `onBackpressureDrop`
	- メインスレッドでの処理中にはワーカースレッドから通知せずに捨てる
- `onBackpressureBlock`
	- メインスレッドの処理が終わるまでワーカースレッド処理を一時停止させる

理解がやや曖昧ですが、こんな感じのはず
`observeOn`より前にcallしなければいけない点に注意しなければいけない
Rubyスクリプトをシェルスクリプトっぽく実行

##Rubyをシェルスクリプトっぽく実行してみよう

動作環境:os x yosemite
ruby 2.0.0p481
1,rubyの場所を調べる
ターミナルで`which ruby`を実行。結果をメモ。
実行結果例:`/usr/bin/ruby`

2,スクリプトを書く
このとき1行目に`#!/usr/bin/ruby(さっきメモったところ)`を入れる

```ruby:HelloWorld.rb
#!/usr/bin/ruby
puts ("Hello World")
```

3,実行権限をつける
`chmod +x HelloWord.rb` Ubuntuでやったときは`chmod u+x HelloWorld.rb`じゃないとエラーが出た

4,実行
`./HelloWorld.rb`


また、このように実行する場合拡張子の.rbをとって`HelloWorld`って名前でスクリプト書いて実行権限つけても問題ない

あと、rbenv とか使ってるとrubyの場所が少し変わるけど特に問題ない


###追記:
- ruby自体のPATHを意識したくない場合は`#!/usr/bin/env ruby`と書くこともできるそうです。ただ、これだと動かない環境もあるようですね。

- `env` を使わずにすむように、冒頭をシェルスクリプトとしてRuby に実行させる方法があるようです。

>```sh:
#!/bin/sh
exec ruby -S -x "$0" ${@+"$@"}
#!ruby
# ここ以下はrubyとして実行される
```

また、[Ruby 2.0.0のリファレンスマニュアル](http://docs.ruby-lang.org/ja/2.0.0/doc/spec=2frubycmd.html)だとこんな感じ

>```sh:
#!/bin/sh
exec ruby -S -x $0 "$@"
#! ruby
#ここ以下にrubyのスクリプト
```

私はシェルスクリプトに詳しくないので良くわからないが、詳しく知りたい人はリファレンスマニュアルの方に詳しく書いてあります。
Apple Watch Context Menu 表示


## Context Menu
Apple Watch では、画面をタップすることと、プレスすることの判定ができるようになりました。
画面を軽く触れて離すことを「タップ」画面を強く押し込み離すことを「プレス」です。

Apple Watch の画面が狭いことで多くの要素を画面に設置するのではなく直感的に操作ができるように
Context Menu を使います。

Context Menu はアプリケーション画面を長くプレスすることで１〜４までのメニューボタンを表示させることができます。
とても直感的で画面ごとにメニューを用意することが可能です。

## WKMenuItemIcon
Apple 標準で用意されているメニューアイコンを指定するための列挙型

```
enum WKMenuItemIcon : Int {   
    case Accept // checkmark
    case Add // '+'
    case Block // circle w/ slash
    case Decline // 'x'
    case Info // 'i'
    case Maybe // '?'
    case More // '...'
    case Mute // speaker w/ slash
    case Pause // pause button
    case Play // play button
    case Repeat // looping arrows
    case Resume // circular arrow
    case Share // share icon
    case Shuffle // swapped arrows
    case Speaker // speaker icon
    case Trash // trash icon
}
```
* Accept : チェックマーク
* Add : プラスマーク
* Block : ブロック、禁止マーク
* Decline : バツマーク
* Info : インフォメーションマーク
* Maybe : クエッションマーク
* More : ３ドットマーク
* Mute // 消音マーク
* Pause // 一時停止マーク
* Play // 再生マーク
* Repeat // リピートマーク
* Resume // 先頭再生マーク？
* Share // シェアーッマーク
* Shuffle // シャッフルマーク
* Speaker // ミュートの逆で、スピーカーマーク
* Trash // ゴミ箱マーク

## addMenuItemWithImage
WKInterfaceController画面にメニューアイテムを追加する

```
func addMenuItemWithImage(image: UIImage, title: String, action: Selector)
```
* image: UIImage : メニューボタンに表示させるアイコン画像
* title: String : メニューボタンに表示させるタイトル文字
* action: Selector : ボタンが押された時に呼ばれるメソッドのセレクタ

## addMenuItemWithImageNamed
WKInterfaceController画面にメニューアイテムを追加する

```
func addMenuItemWithImageNamed(imageName: String, title: String, action: Selector)
```
* imageName: String : メニューボタンに表示させるアイコン画像名
* title: String : メニューボタンに表示させるタイトル文字
* action: Selector : ボタンが押された時に呼ばれるメソッドのセレクタ


## addMenuItemWithItemIcon
WKInterfaceController画面にメニューアイテムを追加する

```
func addMenuItemWithItemIcon(itemIcon: WKMenuItemIcon, title: String, action: Selector)
```
* itemIcon: WKMenuItemIcon : メニューボタンに表示させる標準で用意されているアイコン
* title: String : メニューボタンに表示させるタイトル文字
* action: Selector : ボタンが押された時に呼ばれるメソッドのセレクタ

## clearAllMenuItems
WKInterfaceController画面に設定されたメニューアイテムをすべて削除する

```
func clearAllMenuItems()
```


## 使用例

```
self.addMenuItemWithItemIcon(.Accept, title: "Accept", action: "doMenuActionFromAccept")

self.addMenuItemWithItemIcon(.Decline, title: "Decline", action: "doMenuActionFromDecline")

self.addMenuItemWithItemIcon(.Maybe, title: "Maybe", action: "doMenuActionFromMaybe")

self.addMenuItemWithItemIcon(.Mute, title: "Mute", action: "doMenuActionFromMute")


----

@IBAction func doMenuActionFromAccept() {
    // Accept メニューがされた時の処理
}

@IBAction func doMenuActionFromDecline() {
    // Decline メニューがされた時の処理
}

@IBAction func doMenuActionFromMaybe() {
    // Maybe メニューがされた時の処理
}

@IBAction func doMenuActionFromMute() {
    // Mute メニューがされた時の処理
}

```
remoteControlの再生ボタンをロック画面で押すと、Controlが非表示になってしまう問題の解決法


```swift
MPNowPlayingInfoCenter.defaultCenter().nowPlayingInfo = [MPMediaItemPropertyArtist : "Artist Name",  MPMediaItemPropertyTitle : "Title"]
```
アーティストの名前とタイトルを設定すると、Controlが非表示にならずに、再生、停止ボタンを押すことができるようになった。
CarthageでReactiveCocoaのSwift 2.0版を導入する

[ReactiveCocoa](https://github.com/ReactiveCocoa/ReactiveCocoa)のSwift 2.0版を[Carthage](https://github.com/Carthage/Carthage)で導入しようとしたところエラーに遭遇したのでメモ。
ReactiveCocoaで話をしていますが他にもSwift 2.0のコードが含まれているものならば同様です。

#Carthageによるインストール
ReactiveCocoaのSwift 2.0対応は`swift2`ブランチで進められています。
Cartfileは以下のように記述します。

```rb:Cartfile
github "ReactiveCocoa/ReactiveCocoa" "swift2"
```

`carthage update`を実行します。

#ビルドエラー
これで導入できればいいんですが、以下のようなエラーが出て失敗することがあります。(実際のエラーはもっと長いです)

```bash
The following build commands failed:
	CompileSwift normal x86_64 /Users/masahiko/Documents/Xcode/RAC3Example/Carthage/Checkouts/Result/Result/Result.swift
	CompileSwiftSources normal x86_64 com.apple.xcode.tools.swift.compiler
```

#xcodebuildを切り替える
Swift 2.0のコードが含まれているため、Swift2より前のコンパイラではコンパイルに失敗するのです。
`xcodebuild`をXcode 7付属のものにしていない場合、以下のようにして切り替える必要があります。

```bash
sudo xcode-select -switch /Applications/Xcode-beta.app/Contents/Developer
```

これでビルドが通り、無事にSwift 2.0版ReactiveCocoaを導入できました。
pkgsrcのパッケージ依存関係をグラフ化する

# pkgsrcのパッケージ依存関係をグラフ化する

NetBSDにはpkgsrcという仕組みがあり、ソースコードから自分の環境に合わせたパッケージを構築・インストールすることができます。

pkgsrcではインストールしたいパッケージのディレクトリでmakeを実行することで、ソースコードの取得とビルド、インストールが行えます。パッケージの依存関係も自動で解決してくれるのですが、firefox等の大きなアプリケーションでは依存関係(必要に応じてビルドされるパッケージ)も大きくなりがちです。

make show-dependsと実行することで、依存するパッケージを表示させることができますが、これは対象のパッケージのみが依存するパッケージを表示するだけであり、パッケージA→B→Cといった、依存関係が連鎖するケースには対応できません。

そのため、pkgsrcのパッケージ依存関係をグラフ化するスクリプトを作成してみました。

## 必要なパッケージとスクリプト

Graphvizのパッケージが用意されているので、pkg_addでインストールします。
Graphvizパッケージではフォントがインストールされず、dotコマンドで画像を生成した時に文字化けしてしまうので、一緒にja-sazanami-ttfもインストールします。

```shell-session
$ sudo -i pkg_add -v graphviz ja-sazanami-ttf
```

グラフ描画用のスクリプトはGistに用意してあるので、ダウンロードしたのちPATHを通しておきます。

* [furandon-pig/pkg_depend.sh](https://gist.github.com/furandon-pig/87ec6453b5a34dfd499a)
 
```shell-session
$ curl -O https://gist.githubusercontent.com/furandon-pig/87ec6453b5a34dfd499a/raw/5334d0f9103547cdf3ce427df1d0fd340fa43377/pkg_depend.sh
```

## pkgsrcのダウンロード

pkgsrcをダウンロードして展開します。

```shell-session
$ curl -O http://ftp.jaist.ac.jp/pub/pkgsrc/pkgsrc-2015Q2/pkgsrc-2015Q2.tar.gz
$ tar zxvf pkgsrc-2015Q2.tar.gz
```

## 依存パッケージのグラフを作成してみる

ここまででパッケージ依存グラフを作成するための準備が整いました。さっそくグラフを描いてみます。
例として、gcc49(pkgsrc/lang/gcc49)のパッケージ依存グラフを作成してみます。

gcc49のディレクトリでpkg_depend.shを実行すると、依存関係がdot形式で出力されます。

```shell-session
$ cd pkgsrc/lang/gcc49/
$ pkg_depend.sh 
digraph "gcc49" {
        node [shape=box];
        "gcc49" -> "devel/gmake";
        "gcc49" -> "archivers/zip";
        "gcc49" -> "devel/gmp";
        "gcc49" -> "math/mpcomplex";
        "math/mpcomplex" -> "devel/gmp";
        "math/mpcomplex" -> "math/mpfr";
        "math/mpfr" -> "devel/gmp";
        "gcc49" -> "math/mpfr";
        "gcc49" -> "lang/python27";
        "lang/python27" -> "devel/libffi";
}
/*
ACCEPTABLE_LICENSES+= gnu-gpl-v2
ACCEPTABLE_LICENSES+= gnu-gpl-v3
ACCEPTABLE_LICENSES+= gnu-lgpl-v3
ACCEPTABLE_LICENSES+= info-zip
ACCEPTABLE_LICENSES+= python-software-foundation
*/
```

これをファイルに書き出しておいて、dotコマンドで画像に変換します。

```shell-session
$ pkg_depend.sh > gcc49.dot
$ dot -Tpng gcc49.dot > gcc49.png
```

上記を実行すると、以下のようなパッケージ依存関係グラフ画像が生成されます(gccの依存関係は意外とシンプルですね)。

![gcc49.png](https://qiita-image-store.s3.amazonaws.com/0/61137/bdbbb763-fd29-b582-79f5-baa388b7f54c.png)

## firefoxのパッケージ依存関係...

ちなみに、firefoxのパッケージ依存関係をグラフ化してみると、以下のような感じになります。
生成される画像が大きすぎるので縮小していますが、依存するパッケージが多数あるということ(＝パッケージのビルドに時間がかかりそう)ということが見て取れます。

![firefox.png](https://qiita-image-store.s3.amazonaws.com/0/61137/c9bc4c22-41ee-74fa-4d1d-e70017e9f2d4.png)

参考までに、上記のグラフをSVGで出力したものを用意しました。

* [furandon-pig/pkgsrc_firefox_depend_package.svg](https://gist.github.com/furandon-pig/7930b881856de9e12d65)

## まとめ

pkgsrcのパッケージ依存関係をグラフ化してみました。yumやaptといったパッケージ管理機構でも同じように依存関係グラフが作れそうです。
unity > ボタン押下時のアプリの終了 > if(GUI.Button(...)) { Application.Quit(); ... 

http://docs.unity3d.com/ScriptReference/GUI.Button.html
http://docs.unity3d.com/ScriptReference/Application.Quit.html

```
if (GUI.Button (new Rect (10, 50, 100, 40), "Quit")) {
	Application.Quit ();
} 
```