OmniAICreator/Qiita-1.07M huggingface dataset:
Aptana Studio 3のSVN設定

設定するのに苦労したのでメモ

## 環境
OS: Windows7
Aptana Studio 3.6.0

## 設定
**Aptana**
+ ヘルプ→新規ソフトウェアのインストール→[Subclipse](http://subclipse.tigris.org/servlets/ProjectProcess?pageID=p4wYuA)の
Eclipse update site URL(今回は1.10.xを使用)のURLを『作業対象』欄に記述。Subclipse、SVNkitにチェックを入れてインストール。
(たぶん使用環境によってどちらかでいいはず。svn+sshで設定するのでSVNkitをインストール)
_参考サイト : [たぬきブログ/subclipseをsvn+sshで使用する](http://www.okushin.co.jp/blog/tanuki/index.php?e=17)_

+ ウィンドウ→設定→チーム→SVN→SVNインターフェースでSVNkitを選択


【SVN接続】
+ ウィンドウ→パースペクティブを開く→その他→SVNリポジトリー
+ 開いたSVNリポジトリー・ビューから右クリ→新規→リポジトリーロケーション→各種設定項目を入力して完了

【チェックアウト】
+ チェックアウトするリポジトリーを選んで 右クリ→チェックアウト→設定項目を入力して完了。(PHPで作業するのでPHPプロジェクトを選択)

## 参考サイト
+ [hiromasa.another :o) / Aptana Studio と Subversion 統合](http://another.maple4ever.net/archives/1363/)
+ [WebTecNote / Aptana Studio 3のこと（その２：使い方等）](http://tenderfeel.xsrv.jp/memo/1193/)
+ [おかひろの雑記 / Aptana3のインストール・日本語化・Subversiveインストール](http://d.hatena.ne.jp/okahiro_p/20120319/1332139533)
+ [subclipseをsvn+sshで使用する / たぬきブログ](http://www.okushin.co.jp/blog/tanuki/index.php?e=17)


-------------------------------------------
Aptanaはeclipseベースなので、eclipseで検索すると解決する場合がある。
ワークスペースをうまく使うと後々助かる。
Windows版Unity5.1でのプロキシ設定

Unity5.1に更新する前は、環境変数を次のように設定しておけばプロキシ環境化でもアセットストアに接続できた。

http_proxy=proxy.example.com:8080
（必要があればhttps_proxyも）

しかし、Unity5.1に更新してサインインしようとすると「Service not avaiable, please try again later.」と表示されサインインに失敗するようになってしまった。

試しに環境変数の値を以下のように変更したら接続に成功した。

http_proxy=http://proxy.example.com:8080

パッチリリース版を当てたり公式フォーラムにあるようにライセンスファイルの削除等を試してみたが改善せずだったが、結果がホスト名とポートだけでなくhttp://を加えてあげる。これ。

同じ問題に苦しんでいる人がいたら試してみてください。
URLスキームを利用して、アプリが入ってたらアプリ起動、入ってなかったらストアへ！を実現。

## 概要
アプリを作った後に、アプリのストアURLをシェアしたりしますよね？
もしそのリンクを開いた時に

* PCユーザーならアプリの公式HPへ飛ばす
* Androidユーザーかつアプリが入っていたらアプリを起動
* Androidユーザーかつアプリが入っていなかったらアプリのストアを表示
* iOSユーザーかつアプリが入っていたらアプリを起動
* iOSユーザーかつアプリが入っていなかったらアプリのストアを表示

というのを実現出来たら便利じゃないですか？

## 事前準備
まず、Android、iOSのアプリはURLスキームを使えるようにしておいてください。
このあたりの説明は割愛します。

あとは、アプリの公式HPとかを作ってください。
ココらへんも頑張ればできるよ！頑張れ！

## プログラム
以下のプログラムを書いてサーバーにアップします。
あとは、シェアするときに下記のファイルを開くURLをシェアすればおk。

```html
<!DOCTYPE html>
<html lang="ja">
<head>
	<meta charset="UTF-8">
	<title>アプリ起動サンプル</title>
</head>
<body>

	<div style="width: 0; height: 0; overflow: hidden;">
		<iframe id="launch_frame" name="launch_frame"> </iframe>
	</div>
	
	<a href="公式サイトのURLとかここに入れるべし！">サイトを開く</a>
	
	<script>
		// アプリを開く。アプリがインストールされていなければサイトを開く。
		function launchApp() {
			var IOS_SCHEME = 'iOSのURLスキームをここに入れるべし！';
			var IOS_STORE = 'iOSのストアURLをここに入れるべし！';
			var ANDROID_SCHEME = 'AndroidのURLスキームをここに入れるべし！';
			var ANDROID_PACKAGE = 'Androidのパッケージ名をここに入れるべし！';
			var PC_SITE = '公式サイトのURLとかここに入れるべし！'

			var userAgent = navigator.userAgent.toLowerCase();
			// iPhone端末ならアプリを開くかApp Storeを開く。
			if (userAgent.search(/iphone|ipad|ipod/) > -1) {
				launch_frame.location.href = IOS_SCHEME + '://';
				setTimeout(function() {
					location.href = IOS_STORE;
				}, 500);
			}
			// Android端末ならアプリを開くかGoogle Playを開く。
			else if (userAgent.search(/android/) > -1) {
				document.location = 'intent://#Intent;scheme=' + ANDROID_SCHEME
						+ ';package=' + ANDROID_PACKAGE + ';end';
			}
			// その他・不明・PCなどの場合はサイトを開く。
			else {
				document.location = PC_SITE;
			}
		}

		// ページ読み込み時に実行
		window.onload = function() {
			launchApp();
		}
	</script>
</body>
</html>
```

## 最後に
もし、きちんと動かなかったらごめんなさい。
その時はコメントとかください！
API22を含める場合のDrawableリソースへのアクセス

targetSdkVersion で API level 22 を指定している場合、これまで使用していた`Resources#getDrawable(int)` はdeprecatedと言われ取り消し線が引かれてしまいます。

もしAPI level 22を含めるアプリを作る場合はSupportLibraryを使い、以下のように変更しておいた方が良さそうです。

**変更前**

```java
Drawable drawable = getResources().getDrawable(R.drawable.hoge);
```

**変更後**

```java
Drawable drawable = ResourcesCompat.getDrawable(getResources(), R.drawable.hoge, null);
```

該当するリファレンスは、以下となります。
- [Resources#getDrawable(int)](http://developer.android.com/reference/android/content/res/Resources.html#getDrawable(int))
- [ResourcesCompat](https://developer.android.com/reference/android/support/v4/content/res/ResourcesCompat.html)
Google Cloud Datastore で The API call datastore_v3.RunQuery() required more quota than is available.  と出た時の対処

GoogleCloudDatastoreである日突然

**The API call datastore_v3.RunQuery() required more quota than is available.**

とエラーメッセージが出て一切のクエリを受け付けなくなった時のコネタです。

課金設定は完了しているのになぜ？

とggってみたら、親切にも無料枠を超えないようにquotaが設定されていたのですね。~~課金するって設定しているんだからいいじゃん！~~
外し方は以下です。


https://cloud.google.com/datastore/docs/activate?hl=ja-US#enabling_billing_and_setting_a_budget


![Screen Shot 2015-07-07 at 16.48.45.png](https://qiita-image-store.s3.amazonaws.com/0/74328/c1f2d37b-76b9-b667-77fe-d3b2c40cff93.png)
[Done]EC-CUBE3のプラグインを２日でつくる - ２日目

 [昨日](http://qiita.com/shinichi-takahashi/items/1c7398e871aba770fea7)に引き続き２日目です。

昨日は、管理画面側のEntityつくってから後処理ミドルウェアで登録するところまでを作りました。
今日は、フロント側で実際の表示を変更するところまでやってみます。
余力があればリファクタリングもしたいと思います。

では、まず最初に

## カテゴリ商品一覧ページを拡張

URLはhttps://example.com/products/list?category_id=X のような形式です。
category_idを取得して、データが空ではない、もしくはNullではないときに、
Renderingするページを変更するようにしてみます。

まずは、Eventを定義していきます。
今回は、フロント画面の `product_list` に対してEventを追加するので、以下のとおりに。

```yaml
# app/Plugin/CategoryContent/event.yml
eccube.event.render.product_list.before:
    - [onRenderProductListBefore, NORMAL]
```

## Viewの拡張（書き換え）

業務的な処理が少ないため、イベントフックした先で、項目を追加しましょう。
流れは

1. カテゴリIDを取得
2. カテゴリIDに紐づくデータの取得（管理画面で入力した項目があるかどうか）
3. 狙った位置に挿入

となります。

```php
# app/Plugin/CategoryContent/CategoryContent.php
    public function onRenderProductListBefore(FilterResponseEvent $event)
    {
        $app = $this->app;
        $request = $event->getRequest();
        $response = $event->getResponse();

        $id = $request->query->get('category_id');

        // category_idがない場合、レンダリングを変更しない
        if (is_null($id)) {
            return;
        }

        $CategoryContent = $app['category_content.repository.category_content']
            ->findOneBy(array('category_id' => $id));

        // 登録がない、もしくは空で登録されている場合、レンダリングを変更しない
        if (is_null($CategoryContent) || $CategoryContent->getContent() == '') {
            return;
        }

        // 書き換えhtmlの初期化
        $html = $response->getContent();
        libxml_use_internal_errors(true);
        $dom = new \DOMDocument();
        $dom->loadHTML('<?xml encoding="UTF-8">' . $html);
        $dom->encoding = "UTF-8";
        $dom->formatOutput = true;

        // 挿入対象を取得
        $navElement = $dom->getElementById('page_navi_top');
        if (!$navElement instanceof \DOMElement) {
            return;
        }

        $template = $dom->createDocumentFragment();
        $template->appendXML($CategoryContent->getContent());

        $node = $dom->importNode($template, true);
        $navElement->insertBefore($node);

        $response->setContent($dom->saveHTML());
        $event->setResponse($response);
    }
```

_Symfony/DomCrawlerがうまく扱えずDOMDocumentを使っております_
_どなたかうまい使い方ご存知の方がおられましたらコメントにて補足をお願いします_

確認ができたら完了です！

![Screen Shot 2015-07-07 at 16.51.08.png](https://qiita-image-store.s3.amazonaws.com/0/73113/4bbf3fc7-ea57-a869-0c16-cfd04c1b2569.png)

ピンクの四角の中に「hogehoge2」と表示されていますね。

画面表示をしてみて、指定したカテゴリID以外のページで表示されていないことが確認できたら
最後にパッケージングして申請を出しましょう。

_EC-CUBE3のオーナーズストアは2015/08/19にオープン予定です。_
_今回はサンプルとして手探りで作成したプラグインのため、きれいにリファクタできていない状態です。ご了承ねがいます。_

プラグインの利用方法については、以下の記事もご参照ください。
http://qiita.com/shinichi-takahashi/items/042e88ac37e635e925b2
EC2とELBを利用した時の転送量はどうなるのか

EC2とELBを利用した時にEC2は直接的にはインターネット側と通信は行われないので、その場合の料金はどうなるのか気になり調べてみました。

##結論から言うと同じ
※2015.7.7時点、リージョン間での転送はないものとした場合

WEBサーバーへの転送量がインが100GB、アウトが400GBだった場合
EC2単体の場合
`100GB*$0.00 + 400GB*$0.14 = $56`

ELBが間に入っても適用されるEC2の転送量は変わらないため
ELB分が追加して
`(100GB*$0.00+400GB*$0.14)+(500GB*0.008) = $60`

となる。

<iframe src="//www.slideshare.net/slideshow/embed_code/key/3OSceHuLVyBujk" width="425" height="355" frameborder="0" marginwidth="0" marginheight="0" scrolling="no" style="border:1px solid #CCC; border-width:1px; margin-bottom:5px; max-width: 100%;" allowfullscreen> </iframe> <div style="margin-bottom:5px"> <strong> <a href="//www.slideshare.net/kentamagawa/aws-10021460" title="AWSクラウド利用料算出の参考資料" target="_blank">AWSクラウド利用料算出の参考資料</a> </strong> from <strong><a href="//www.slideshare.net/kentamagawa" target="_blank">玉川憲 (Ken Tamagawa) - Amazon Web Services</a></strong> </div>
【Chrome】指定サイズよりフォントが大きくなる

#現象
PCのChromeとAndroidのChromeでとあるところのフォントが大きくなる（CSSなどで指定はしていない）
※私の場合、幅を広く指定したら起きた

#原因？

* viewportが指定されていない
* 以下のようにviewportに数字で幅が指定してある（initial-scaleが指定されていない）

    ```html
    <meta name="viewport" content="width=1000">
    ```

#対処法
フォントが大きくなっている要素に以下のようなCSSを追加する

```css
max-height: 999999px;
/* もしくは */
max-height: 100%;
```

参考：[AndroidのChromeでフォントサイズが大きくなってしまう不具合は「max-height」で解決するかも | SEOモード](http://www.seomode.jp/html-css/2014/06/25/3339/)
react.js HandleBars Angular.js HTML-escapesさせない値の表示方法

例えばDBやAPIでHTMLタグがかえってきたものを評価して表示したい場合のお話。

最近のFWやテンプレートエンジンは標準でエスケープ処理がはいっているので、
逆にエスケープさせないように書く必要があります。

そのやり方のFWごとのまとめです。


## handlebars

HandleBarsでは以下のようにすると変数がEscapeされずにそのまま表示されます。

```html
{{{foo}}}
```


## react.js(jsx)

dangerouslySetInnerHTMLで入れ込みます。

```js
var TdHtml = React.createClass({
    render: function() {
        var value = this.props.value;
        return (
            <td key={this.props.key} dangerouslySetInnerHTML={{__html: value}} />
        );
    }
});
```

## angular

$sce.trustAsHtml()を使います。


```html
<script>
         angular.module('sanitizeExample', ['ngSanitize'])
           .controller('ExampleController', ['$scope', '$sce', function($scope, $sce) {
             $scope.deliberatelyTrustDangerousSnippet = function() {
               return $sce.trustAsHtml($scope.snippet);
             };
           }]);
</script>

<div ng-controller="ExampleController">
略
           <td><div ng-bind-html="deliberatelyTrustDangerousSnippet()"></div></td>
         </tr>
```
aws-sdkでアップロードした時の速度を計測する

aws-sdkを用いて、s3にファイルをアップロードした時の速度を計測したときのメモ。

```js:app.js
var AWS = require('aws-sdk');
var fs = require('fs');

var filename = './testfile';
var filesize = fs.statSync(filename).size;
var totalTime;

AWS.events.on('send', function startSend(resp) {
  resp.startTime = new Date().getTime();
}).on('complete', function calculateTime(resp) {
  var time = (new Date().getTime() - resp.startTime) / 1000;

  switch(resp.request.operation) {
  case 'createMultipartUpload':
    totalTime = time;
    break;
  case 'uploadPart':
    totalTime += time;
    break;
  case 'completeMultipartUpload':
    totalTime += time;
    console.log(filesize + ' bytes uploaded, ' + round(totalTime, 3) + ' s, ' + round((filesize / totalTime) / 1024 / 1024, 1) + ' MB/s');
    break;
  case 'putObject':
    totalTime = time;
    console.log(filesize + ' bytes uploaded, ' + round(totalTime, 3) + ' s, ' + round((filesize / totalTime) / 1024 / 1024, 1) + ' MB/s');
    break;
  }
});

var s3 = new AWS.S3();

var params = {
  Bucket: 'bucket',
  Key: 'key',
  Body: fs.createReadStream(filename)
};

s3.upload(params, function(err, data) {
  if (err) console.log(err, err.stack);
});

function round(val, n) {
  var pow = Math.pow(10, n);
  return Math.round(val * pow) / pow;
}
```

アップロードしたサイズをかかった時間で割っただけ。
丸め誤差は気にしない。

#References
- [[AWS SDK for Node.js]API実行にかかった時間の測定をするtips](http://dev.classmethod.jp/cloud/aws/aws-sdk-js-tim/)
シェルスクリプトで複数行のコメントアウト

# 一行コメントアウト

最初に、一行コメントアウトについて触れておきます。シェルスクリプトで、"#"を用いた行はそれ以降コメントアウトとみなされます。

例えば、次のようなスクリプトを実行すると"Hi, Jiro!"のみ出力されます。

```bash
#!/bin/bash
# echo "Hi, Ichiro!"
echo "Hi, Jiro!" # echo "Hi, Saburo!"
```

行の途中からでもコメントアウトできることに注意してください。

# 複数行コメントアウト

複数行をコメントアウトするには、"<<"と任意の文字列（例："COMMENTOUT"）を使い、まずコメントアウトを開始します。そして、行頭に、先ほどの任意の文字列（例："COMMENTOUT"）が出てくるとコメントアウトが終了します。

例えば、以下のようなスクリプトを実行すると、"Hi, Ichiro!"のみ出力されます。

```bash
#!/bin/bash
echo "Hi, Ichiro!"
<< COMMENTOUT
echo "Hi, Jiro!"
echo "Hi, Saburo!"
COMMENTOUT
```
[JavaScript] クラス＆モジュールの安全な書き方

##### 【追記】

記事末尾のコメントで指摘されているように、当記事の手法は、メモリ消費や処理速度においては不利な面がありますのでご注意ください。また、次期JavaScript（ES6）では正式に class が導入されます。

---

**JavaScriptのクラスについては色々なサイトで解説されていますが、内部で`this`や`prototype`を使用している形では、次のような危険性があります。**

- `this`が外部と共有されるため、`this`が自身のインスタンスではなくなることがある（特にメソッド内で外部系からのコールバックを使用している場合）
- `prototype`を使ったメソッドがクラス内のローカル変数を参照している場合、その変数はインスタンス間で共有されるため、想定外の値になることがある（クロージャ効果）

**以下、安全な書き方についてまとめてみました。**


# ![](//goo.gl/tuSQrq) 例）Itemクラス

```js:test.js
// Itemクラス
var Item = function(name) {
	// インスタンスとなるObject
	var self = this;

	// メンバー変数（public）
	self.price = 0;
	// ローカル変数（private的）
	var _name = name;

	// メソッド（public）
	self.showInfo = function() {
		alert(getInfo());
	};
	// ローカル関数（private的）
	function getInfo() {
		return _name + " is " + self.price + "yen";
	}
};

var banana = new Item("Banana");
var orange = new Item("Orange");
banana.price = 100;
orange.price = 200;
banana.showInfo(); // "Banana is 100yen" が表示される
orange.showInfo(); // "Orange is 200yen" が表示される
```

##### 長所

* クラス内のローカル変数がインスタンス毎に独立している（prototypeを使っていないため）。
* クラス内のメソッドで、ajaxなど、コールバックが発生する処理を実行しても安全（自身をselfで参照する限りは）。

##### 短所

* インスタンス毎にメソッドが保持されるのでメモリ消費の点で不利（prototypeを使っていないため）。prototypeを用いる書き方は[「やさしいクラスの作り方」](http://qiita.com/varmil/items/99fd6f2a886fdde4b7fa)が参考になります。


# ![](//goo.gl/tuSQrq) 例）Appleモジュール（シングルトンもどき）

```js:test.js
// Appleモジュール（即時関数を実行して生成）
var Apple = (function() {
	var self = {}; // 自身の本体となるObject

	// メンバー変数（public）
	self.price = 0;
	// ローカル変数（private的）
	var _name = "Apple";

	// メソッド（public）
	self.showInfo = function() {
		alert(getInfo());
	};
	// ローカル関数（private的）
	function getInfo() {
		var info = _name + " is " + self.price + "yen";
		return info;
	}

	return self; // これ忘れないこと
})();

//var apple = new Apple(); // newはできない！
Apple.price = 300;
Apple.showInfo(); // "Apple is 300yen" が表示される
```


# ![](//goo.gl/tuSQrq) 解説

　JavaScript には正式なクラスがありません。そのかわり、new 演算子を使って function を object 化することで、クラスをインスタンス化するような使い方ができます。ただ、new や this の扱いが他言語とはかなり異なるため、上記のような書き方が比較的安全かなと思います。

　Itemクラスのほうは、`self`に登録したものだけが`public`な感じでアクセスできます。Appleモジュールは、サイトによっては「モジュールパターン」として説明されています。こちらは即時関数によって object が`return`されるので、new することはできません。

(･o･ゞ いじょー。


# ![](//goo.gl/tuSQrq) 参考URL

【javascript】やさしいクラスの作り方
http://qiita.com/varmil/items/99fd6f2a886fdde4b7fa

ちょっと便利なJavascriptオブジェクトの作り方
http://blog.asial.co.jp/1101

Google流 JavaScript におけるクラス定義の実現方法
http://www.yunabe.jp/docs/javascript_class_in_google.html

JavaScript の new 演算子の意味
http://nanto.asablo.jp/blog/2005/10/24/118564

prototype と \_\_proto\_\_
http://d.hatena.ne.jp/cou929_la/20100929/1285770930
<font color="red">※\_\_proto\_\_は環境依存するようですのでご注意ください</font>

Javascriptでプライベートメンバを使うなら、prototypeは諦める
https://sites.google.com/site/jun1sboardgames/programming/javascript-private-members

JavaScript の超便利なメソッド bind で this を制御する
http://foreignkey.jp/archives/763
swiftで文字列の日付フォーマットを別フォーマットに置き換える

swiftで、文字列の日付を変更する際によく分からなくなるので備忘録として。


```lang:Swift

let d = "Mon Jul 01 00:00:00 +0000 2015"
let formatter = NSDateFormatter()
formatter.dateFormat = "EEE MMM dd HH:mm:ss Z yyyy"
if let date = formatter.dateFromString(d) {
    formatter.dateFormat = "yyyy-MM-dd"
    let dateString = formatter.stringFromDate(date)
    print(dateString)   // "2015-07-01"
}
```

フォーマットは、こちらのサイトが良く載っています。いまいち、分かりやすくはないですが。。
http://waracle.net/iphone-nsdateformatter-date-formatting-table/
Cloud Academy をやってみた！！！

#新しい勉強サイトをご紹介します。


今日はCloudAcademyを試してみました！！！
サイトはこんな感じです。　１週間だけfree trialがあるので、皆様もぜひ
!![スクリーンショット 2015-07-07 15.10.38.png](https://qiita-image-store.s3.amazonaws.com/0/84382/247cd3e7-99e3-5f08-9f4c-a39c02d9259c.png)

また内容も充実しているようで
![スクリーンショット 2015-07-07 15.18.27.png](https://qiita-image-store.s3.amazonaws.com/0/84382/192d0504-dea6-6e69-7d71-dc22b559d927.png)

以下のようなコンテンツがあります。
1.クイズ
2.レクチャー
3.certification の準備コース
4.Lab(実際にやることができる）

このようになっております。

また、AWS以外にもAzure、Google cloud platform,Rackspaceとあります。

![スクリーンショット 2015-07-07 15.41.23.png](https://qiita-image-store.s3.amazonaws.com/0/84382/b75b8080-7f03-b0c9-c37e-b63315c25fc6.png)

みなさんも使っているサイトでいいものがあればshareお願いします。
MySQL-Innodbのパラメータめも

自分用のメモです。ちょっと古い本を見ながら書いているので一部名前が違ったりするかも。

ログ関係
=
 - `log_show_queries`,`long_query_time`
  - スロークエリのログ設定。前者はON/OFFで後者はスローの閾値(秒数)
  - 場所は`slow_query_log_file`オプションで指定。デフォルトでは(homebrew install)`/usr/local/var/mysql/mysql/slow_log.CSV`になっていた
 - `log_queries_not_using_indexes`
  - インデックスを使用しないSQLのログ
 
全体設定
=
 - `max_connections` 
  - クライアントの最大接続数
 - `table_cache`
  - 同時に開けるテーブル数。よって総テーブル数*max_connectionsにするのが原則だと考えられる。
 - `soft_buffer_size`
  - `group by`, `order by`の際にソートに使用されるバッファ
 - `read_rnd_buffer_size`
  - ソート後のレコードを読み込む際に使用されるバッファ
 - `thread_cache_size`
  - キャッシュするスレッド数
  - コネクションプーリングを利用する場合はこの値はあんまり意味はないと思われる。都度接続方式をとる場合に、スレッド生成のオーバヘッドをキャッシュしたスレッドを使用することで減らせる可能性がある。
  - [参考](http://d.hatena.ne.jp/naoya/20060912/1158058322)
 - `tmp_table_size`
  - Explain時に`Using temporary`が出るようなクエリを実行した際に作成される一時tableの最大サイズ。これを超えるサイズの一時テーブルが作られるとディスクアクセスが行われ、非常に処理が低速になる。ディスクアクセスが行われたかどうかは`show status`の`Created_tmp_disk_files`によって確認できる
 - `sync_binlog`
  - バイナリログをNコミットごとにディスクに同期させるかという設定。デフォルトでは0になっている(作成されない)
 - `query_cache_size`
  - SQLクエリをキャッシュする容量。
  - `SQL_CACHE. SQL_NO_CAHCE`句でクエリ単位でキャッシュを利用するかどうか指定できる
 - `join_buffer_size`
  - indexを利用しないjoinの際に利用されるバッファ
 - `read_buffer_size`
  - テーブルFILLスキャン時に利用されるバッファ
 - `bulk_insert_buffer_size`
  - バルクインサート(一気にinsert)時に使用するバッファ

InnoDBの設定
=

 - `innodb_buffer_pool_size`
  - インデックス、レコードデータ用のバッファ。使用されるメモリ容量の大部分がここにあたる。
 - `innodb_flush_log_at_trx_commit`
  -  logをflushするタイミング粒度。デフォルトは1:「毎commitごと」。2にすると「1秒ごと」らしい。
  -  バイナリログとInnoDB_logfileは[別物なので](http://open-groove.net/mysql/diff-innodblog-binlog/)[注意](http://blog.livedoor.jp/tsutaken/archives/1341001.html)。これは後者。
 - `innodb_log_file_size`, `innodb_log_files_in_group`
  - トランザクションログ(InnoDB_logfile)の大きさと、1グループのログファイル数。
  - グループというのはローテーションのファイル数。たとえば2にならサイズに達したら二つ目のログファイルに移り、それもいっぱいになったらまた一つ目に戻る、的な。
 - `innodb_data_file_path`
  - これはログじゃなくてデータファイルそのもののパスとサイズ。
 - `innodb_file_per_table`
  - テーブルごとにデータファイルを作成するという設定。これがあると上のfilepathは無視される。
  - ちなみにMacでRailsアプリケーションの並列テストを実行しようとして書くプロセスごとにテーブルを作成した結果、[こういうこと](http://stackoverflow.com/questions/17813630/mysql-5-6-headaches-on-mac-osx)になったことがある。この辺りの設定について少しでも認識しておくとこういうエラーなどにも柔軟に対応できるかも。

参考書: [MySQLによるタフなサイトの作り方](http://www.amazon.co.jp/MySQL%E3%81%AB%E3%82%88%E3%82%8B%E3%82%BF%E3%83%95%E3%81%AA%E3%82%B5%E3%82%A4%E3%83%88%E3%81%AE%E4%BD%9C%E3%82%8A%E6%96%B9-%E4%BD%90%E8%97%A4-%E7%9C%9F%E4%BA%BA/dp/4797353937)

追記: [これ](http://dbstudy.info/files/20130729/mysql56_parameters_r2.pdf)を見るにいろいろ足りてなさそう。適宜追加するかもです。
I-O Data WN-AC433UK


802.11ac 対応 wifi USB ドングル。Linuxで使うためのメモ。

[mt7650u_staで動くという](https://wikidevi.com/wiki/I-O_DATA_WN-AC433UK)情報もあるけれど、mt7610u_staじゃないかなー。

本家ralinkでも配ってるけど、[パッチ済みのもの](https://bitbucket.org/sanrath/mediatek_mt7610u_sta_driver_linux-64bit/) を使うのが手っ取り早い。`Makefile` は `CHIPSET = mt7610u` になっているので、そのまま make, make install でよい。ちなみに linux-headers が必要。

あらかじめ USB を登録しておくと、刺しただけで認識してくれる。

```diff
diff --git a/common/rtusb_dev_id.c b/common/rtusb_dev_id.c
index 61012e7..d894dc0 100644
--- a/common/rtusb_dev_id.c
+++ b/common/rtusb_dev_id.c
@@ -40,6 +40,7 @@ USB_DEVICE_ID rtusb_dev_id[] = {
        {USB_DEVICE(0x13B1,0x003E)}, /* MT7610U */
     {USB_DEVICE(0x0E8D,0x7610)}, /* Sabrent NTWLAC */
     {USB_DEVICE(0x7392,0xa711)}, /* edimax 7711mac */
+       {USB_DEVICE(0x04BB,0x0951)},
        {USB_DEVICE_AND_INTERFACE_INFO(0x0E8D, 0x7630, 0xff, 0x2, 0xff)}, /* MT7630U */
        {USB_DEVICE_AND_INTERFACE_INFO(0x0E8D, 0x7650, 0xff, 0x2, 0xff)}, /* MT7650U */
 #endif
```

これをしない場合は、次のようにすれば良さそう？

```bash
loadmod mt7610u_sta
echo 04bb 0951 > /sys/bus/usb/drivers/rt2870/new_id
```

あと VMWare では host -> USB のファームウェア転送が上手くいかないみたいで、動作しなかった。実機だと大丈夫。
お手軽にタッチフィードバックをもった drawable リソースを構築する

**注意：この Tips は Lollipop でのみうまく動きます。**

Android の標準のテーマで、以下の属性が定義されていて、OS のバージョンごとタッチフィードバックが StateListDrawable になっている。

```
selectableItemBackground
```

これを使うことで、自分で StateListDrawable を作らなくても、ある程度デフォルトの見た目のタッチフィードバックが構築できる。

例えば、以下のような LayerListDrawable を定義することで、好きな色の上にタッチフィードバックを乗せることが出来る。

```
<layer-list xmlns:android="http://schemas.android.com/apk/res/android">
    <item>
        <color android:color="#232323"/>
    </item>
    <item android:drawable="?attr/selectableItemBackground"/>
</layer-list>
```

Lollipop の Ripple Effect が好きな色の上に乗ってくれて便利です。
DBの中身もろとも消したいときの、Mysql-server の完全削除

# MySQLもろとも完全に削除したい

どうしてこうなったかと言われると、
設定作業中に間違って MySQLテーブルのuserの中身を全て消してしまい、新しいユーザも作れず、どうにもならなくなりました。

MySQLごと再インストールすれば、データベースの中身もデフォルトに戻るかなと思ったのですが

<pre>
# yum uninstall mysql 
</pre>

とかだと、MySQLのデータベースの中に入っているデータは残ってしまいます。

# アンインストールした上で、データを全て消す

まずは普通に、yumでアンインストール処理を実施
<pre>
# yum remove mysql-server mysql-devel
</pre>

その上で、データが入っているディレクトリを削除

<pre>
# rm -rf /var/lib/mysql
</pre>

なんだか、windowsのソフトウェアをアンインストールしたときに、変な残骸が残らないように完全消去するような話に近いですが・・・。

参考

http://opensourcetech.hatenablog.jp/entry/2014/10/22/Mysql-serverの完全削除_on_CentOS6.5
[翻訳]プログラマの生産性の壊し方

George Stockerの「[How to destroy Programmer Productivity](http://georgestocker.com/2014/04/15/how-to-destroy-programmer-productivity/)」の翻訳です(Georgeさんには報告済み)。
間違いがございましたら、ご指摘お願いします。

---
プログラマの生産性に関する次の画像は、インターネット中を徘徊しています。
![プログラマの生産性グラフ](https://qiita-image-store.s3.amazonaws.com/0/34508/569a3a07-c4b9-7b4b-b658-743f59436f9b.jpeg)


ザ・シンプソンズが出てきそうだけれども、「真実だから面白い」。

私は、今まで生産的になる秘密について解明してきませんでした。それは、主には、私が一貫して生産的ではなかったからです。Joel on Softwareのジョエル・スポルスキは、ブログの記事で[このことについて話しています](http://www.joelonsoftware.com/articles/fog0000000339.html)：

> 時々私は何も終わらせることができなくなります
> 
> 確かに、私はオフィスに入って、10秒ごとにe-mailをチェックして、ウェブを読んで、アメリカン·エキスプレスでの支払いのようないくつかの頭を使わないタスクを処理します。しかし、コードを書くフロー状態に戻ってくることはありません。
> 
>非生産的なこれらの発作は、通常、一日か二日続きます。しかし、何もできないで過ごす時が何週間も続くときも、開発者としての私のキャリアの中で起きています。彼らが言うように、私はフロー状態ではありません。ゾーンに入っていません。私はどこにもないんです。

私は、片手に余るぐらいそのブログの記事を読みましたが、いまだに、プログラマコミュニティの有名人が「物事に取り掛かれない」問題を持っているのを見るにつれ、私は衝撃を受けます。

私は一人ではないことがうれしい。

私は生産的であることへの秘密の方法を共有するためにここにいるわけではないのですが、生産的であることから私を離してきたものを伝えることはできます：

* 開放的なフロア
* Djangoと.NETについての開発者間の論争
* 一般的に開発者間の論争
* 同僚が私のところに来て、「ねぇ、送ったメール見た？」と尋ねる
* チューインガムのクチャクチャした音が聞こえる。どうやら私は[音声恐怖](http://en.wikipedia.org/wiki/Misophonia)に苦しんでいます
* 取り組んでいる問題を理解していません
* このプロジェクトが本当には信じられません
* どこから手を付けるべきかわかりません
* *炎上中のため*、たった１つではない終わらせるべきタスクに直面しています
* *炎上中の案件が全てのことを中断する*
* 自分のスマホのTwitterのツイート通知
* e-mail通知
* 実のところ全ての通知
* インスタントメッセンジャー達
* 私の妻が尋ねる「ねぇ、時間があったら、Xをやってくれない？ 」
* 長いビルド時間
* 雑音
* 私の机のそばを過ぎる定期的な人々の行進
* [パワハラ飲み会](http://www.urbandictionary.com/define.php?term=Manditory%20Fun%20Day)
* Wikipedia （真剣にいいますが、どのリンクもクリックしないでください）
* ハッカーニュース
* 一般的なインターネット

過去に私が生産的になるのに貢献してきたもの：

* 静かな雰囲気
* 静かなワークスペース（個室は驚異的に働けます）
* プロジェクトで行わなければならない次のステップの理解
* 問題空間の十分な理解
* 中断なし
* 真剣に：中断なし
* [Twitter](http://twitter.com/gortok)をオフ
* [ハッカーニュース](http://news.ycombinator.com/)をオフ
* [ハードウェアトラブルなし](http://georgestocker.com/2014/04/14/the-very-best-polyglot-developer-platform-for-the-money/)
* プロジェクトを愛する
* 少ないビルドとデバッグ時間
* インターネットで政治的な議論をしない 

以上の、私を生産的から離しているうちの半分は私が作り出した問題です；しかし、[開放的なフロアのように](http://www.joelonsoftware.com/items/2006/07/30.html)、いくつかはそうではありません。

究極的には、私たち一人一人は、非生産的にする問題を制御します。私は平和的な論争が苦手です。非常に強く迫るか、ふんぞり返って他の人を服従させる。私は、本当に、それを得意としません。ですので、私は、生産的ではないことに寄与する外力を処理するためのどのような良いアドバイスも持っていません。しかし、私には知っていることがあります：制御することができるものは何でも制御する必要があります。それは次のものです：

* 自分のiPhoneでの通知をオフにする（これは、バッテリ寿命を増加する付加的な利点も持っています）
* 3時間続けてコーディングを行ったら自分にご褒美を与える（ハッカーニュースやTwitterを見に行ったりと、通常は「インターネットの時間」の形で）
* 本当に、本当に、 何かをしなくてはならないときは、自宅で仕事をする
* [値段の割りに良いノイズキャンセリングヘッドフォン](http://www.cnet.com/products/monoprice-noise-canceling-headphones-with-active-noise-reduction-technology/)に投資します
* カレンダーに「ノー会議」時間の予定を入れます。これらは、他のみんなに忙しいことを示すための時間です。私の仕事の時間です。
* オフィスの周りでのプログラマの議論に入りません。人々は強い意見を持っており、議題を持つプログラマは*議論が大好き*。解決する必要のある実際のビジネス上の問題なら、会議室を確保して、各アプローチの利点と欠点を考え出しましょう。いくつかのデータを取得しましょう​​。ただ主張するのは止めましょう。
* 通行人が気にならない位置に自分の机を移動します。
* 最初に問題を試してみて、*その後*、より良い理解を得るために、他の開発者に問題の段階的な説明をしてもらう。これは2つのことを達成します：まず、「地勢」を得ることができるので、私は、少なくとも仕事における（非生産的なことへ続く）外力の基本的な理解ができます。第二に、私が助けを求めるとき、私は、よりインテリジェントな質問をすることができます。

何があなたを非生産的にして、あなたはそれに対処するために何をしますか？
JavaScript でクラス(ぽいもの)を作る際の雛形


- ES6(ES2015) や TypeScript を利用すればもっと簡潔に書けると思います..
- 継承は考慮していません。

```javascript:Foo.js
(function() {
  'use strict';
 
  // インスタンスエリア -------------------------------------------------------
 
  var Foo = function () {
    // Private な インスタンス変数
    var privateMemberVar = 99;
 
    // Private な インスタンスメソッド(Private なインスタンス変数にアクセス可)
    var privateMemberMethod = function() {
      // ...
    };
 
    // Public な インスタンス変数
    this.publicMemberVar = 99;
 
    // Public な インスタンスメソッド①(Private/Public なインスタンス変数/メソッドにアクセス可)
    this.publicMemberMethod1 = function() {
      // ...
    };
  };
 
  // Public な インスタンスメソッド②(Public なインスタンス変数/メソッドにアクセス可)
  Foo.prototype.publicMemberMethod2 = function() {
    // ...
  };
 
  // クラスエリア（基本的にインスタンス側から制限なくアクセスできる）-----------------
 
  // Private な クラス変数
  var privateClassVar = 99;
 
  // Private な クラスメソッド
  var privateClassMethod = function() {
    // ...
  };
 
  // Public な クラス変数
  Foo.publicClassVar = 99;
 
  // Public な クラスメソッド
  Foo.publicClassMethod = function() {
    // ...
  };
 
  // エクスポート ------------------------------------------------------------
 
  // ブラウザで利用する場合
  window['Foo'] = Foo;
  // Node.js や Browserify で利用する場合
  //module['exports'] = Foo;
})();
```

## 利用例

### ブラウザの場合

```html:index.html
<!DOCTYPE html>
<html>
<head lang="ja">
  <meta charset="UTF-8">
</head>
<body>
<script src="Foo.js"></script>
<script>

  // 例）インスタンス変数の利用
  var foo = new Foo();
  console.log(foo.publicMemberVar);

  // 例）クラス変数の利用
  console.log(Foo.publicClassVar);

</script>
</body>
</html>
```

### Node.js/Browserify の場合

```javascript:index.js
var Foo = require('./Foo');

// 例）インスタンス変数の利用
var foo = new Foo();
console.log(foo.publicMemberVar);

// 例）クラス変数の利用
console.log(Foo.publicClassVar);
```
androidStudio Could not normalize path for file

`Could not normalize path for file 'E:\WorkSpace\mapdemo\app\build\intermediates\mockable-Google Inc.:Google APIs:21.jar'`が出た場合の対処法

File　→　Project　Structure　→　Project　→　Android Plugin Versionを1.1.2に変更する

>参考：http://stackoverflow.com/questions/28646029/could-not-normalize-path-for-file-e-workspace-mapdemo-app-build-intermediates
エンジニアはもう一度CSSとちゃんと向き合ってみよう - 詳細度編

# 詳細度
## WHAT
CSSには詳細度（Specificity）という概念があります．

> 詳細度は、どのプロパティ値が最もある要素に関係があり、適用されるかをブラウザが決定する手段です。
>
> <cite>[詳細度 - CSS | MDN][mdn]</cite>

簡単に言うと，「スタイルが重複したとき，どのスタイルを優先するか」の優先度を定量評価したものになります．

詳細度は`a, b, c`のようなカタチで表されます．
細かい説明するのは面倒なので，ざっくりと以下にリストアップします．

* 全称セレクタ: a=0, b=0, c=0
  * `*`
* 要素，擬似要素: a=0, b=0, c=1
  * `li`, `::before`, `::first-line`, etc.
* クラス，擬似クラス，属性:  a=0, b=1, c=0
  * `.classname`, `:first-child`, `[type=password]`, etc.
* id:  a=1, b=0, c=0
  * `#idname`

あとは各桁ごとに雑に足せば詳細度の出来上がり！

## Quiz: 表示される文字は何色？
### Q1
[Q1 解説](#a1)

```css
#i1 { color: red; }
.c1 { color: blue; }
```

```html
<p id="i1" class="c1">ピザ食べたい</p>
```

### Q2
[Q2 解説](#a2)

```css
.c1 > .c2 { color: red; }
.c1 .c2 { color: blue; }
```

```html
<p class="c1"><span class="c2">寿司食べたい</span></p>
```

### Q3
[Q3 解説](#a3)

```css
#i1 { color: red; }
.c1.c2.c3.c4.c5.c6.c7.c8.c9.c10.c11 { color: blue; }
```

```html
<p id="i1" class="c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11">
  ビール飲みたい
</p>
```

### Q4
[Q4 解説](#a4)

```css
#i1 #i2 { color: red; }
#i1 .c1.c2.c3.c4.c5.c6.c7.c8.c9.c10.c11 { color: blue; }
```

```html
<p id="i1">
 <span id="i2" class="c1 c2 c3 c4 c5 c6 c7 c8 c9 c10 c11">
   おなかすいた
 </span>
</p>
```

## 解説
### A1
解説するまでもないですね，赤です．
`.c1`より`#i1`のほうが詳細度が高いです．

### A2
青です．
直下セレクタ`>`，隣接セレクタ`+`は詳細度に影響を及ぼしません．
この場合だと詳細度が同じ0.2.0であるため，**後から定義されたほうが優先**されます．

### A3
赤です．
詳細度は"100 v.s. 110"ではなく，"1.0.0 v.s. 0.11.0"なので，`#i1`が優先されます（後述）．

### A4
これも赤です．
詳細度は2.0.0と1.11.0なので，`#i1 #i2`が優先されます．

# よくある勘違い
## 詳細度ってポイント制じゃないの？
多くの解説サイトではポイント制として表現されています．要素は1ポイント，クラスは10ポイント，idは100ポイント，みたいなやつですね．
大きく外れているわけではないですが，この考え方には罠があります．
先ほどの[Q3](#q3)を例にするとよくわかると思います

* ポイントで考えた場合
  * `#i1 #i2`: 100 + 100 = 200
  * `#i1 .c{1..11}`: 100 + 10 * 11 = 210
* バージョン番号っぽく考えた場合
  * `#i1 #i2`: 2.0.0
  * `#i1 .c{1..11}`: 1.11.0

単純に大小比較をしてしまうと，結果がひっくり返って見えちゃいますね．
こういうわけで，**詳細度はバージョン番号っぽく考える**ことをオススメします．


## インラインスタイルは？
HTMLの要素中に属性値として定義するタイプのやつですね: `style=""`
これは古い解説サイトでは1000ポイントと言われていることが多いです．

が，それは遥か昔，古の時代の話です．
CSS3系ではなかったことになっています．

IE8なんてなかった．


## `!important`は？
「ここには絶対このスタイルを適用したい！」というとき，`!important`宣言を付与することでそのスタイルの優先度を最大にすることが出来ます．しかし，`!important`はあまりにも優先度が高いため，あとからスタイルを上書きしたくなったときにとんでもない茨の道に迷いこむことになります（`!important`を打ち消すには`!important`をぶつけたうえで詳細度で勝たなければならない… これが繰り返されるとどうなるのか…）．

あらゆるところで叫ばれていることではありますが，原則として**`!important`宣言の使用は避けましょう**．


## ここスタイル反映されないし，idつかっちゃえ〜〜
これもなるべく避けましょう．

`#idname`も`!important`ほどではありませんが，詳細度が高いうえに，同一ページ内での複数回の利用が許されないなど小回りも聞かないです．
上書きしたくなったときにどうしようもなくなって`!important`使うハメになった経験，ありますよね？

特に，使いまわすスタイルとかに入れるのは絶対やめましょう．わけわかんなくなります．
（`html`や`body`等のルートになる要素につけてページ固有のスタイル〜〜 ならまだわからなくもないですが…）


# Conclusion
* 詳細度はバージョン番号っぽく考える
* `#idname`はなるべく使わず`.classname`や属性でなんとかする
* インラインスタイルはやめましょう（`style=""`）
* `!important`は絶対にやめましょう


# References
* [9. Calculating a selector's specificity - Selectors Level 3][specificity]
* [詳細度 - CSS | MDN][mdn]

[specificity]: http://www.w3.org/TR/selectors/#specificity
[mdn]: https://developer.mozilla.org/ja/docs/Web/CSS/Specificity
setやmapのキーに任意のクラスを渡す


setやmapのキーに自作クラスを渡す場合の方法です。

```cpp
#include <map>
class Point{
public:
	int x, y;
	Point(){}
	Point(int x, int y):x(x),y(y){}
};

int  main(){
    typedef std::map<Point, int> PointMap;
    PointMap pmap;
    
    return 0;
}
```
この時点ではエラーが出ませんが、insertを使う時にエラーが出ます。
mapはキーをソートするために比較する必要があるので、それを定義しないといけません。

#クラス同士を比較できるようにする
operator<を追加します。
特に何も考えない場合、これが一番楽です。

```cpp
#include <map>

class Point{
public:
	int x, y;
	Point(){}
	Point(int x, int y):x(x),y(y){}
	bool operator<(const Point &right) const {return this->y < right.y;}
};

//クラスの外で定義するならこう
//bool operator<(const Point &left, const Point &right){return left.y < right.y;}

int  main(){
    typedef std::map<Point, int> PointMap;
    PointMap pmap;
    pmap.insert(PointMap::value_type(Point(0,0), 0));
    
    return 0;
}
```

#テンプレートの引数で指定する
上記の例だとPoint型を比較できるようにしているわけですが、yの値だけで比較するものを追加するのはちょっと変です。
こういう場合は関数オブジェクトを使ってmap側に比較関数を指定します。

```cpp
#include <map>

class Point{
public:
	int x, y;
	Point(){}
	Point(int x, int y):x(x),y(y){}
};

class PointCompareY{
public:
    bool operator()(const Point &left, const Point &right){return left.y < right.y;}
};

int  main(){
    typedef std::map<Point, int, PointCompareY> PointMap;
    PointMap pmap;
    pmap.insert(PointMap::value_type(Point(0,0), 0));
    
    return 0;
}
```

#コンストラクタで指定する
ラムダ式使わないと死ぬ死ぬ病だとか、実行時に比較関数を渡したい場合はmapのコンストラクタで比較関数を指定します。

```cpp
#include <map>

class Point{
public:
    int x, y;
    Point(){}
    Point(int x, int y):x(x),y(y){}
};

int  main(){
    typedef std::map<Point, int, bool(*)(const Point &left, const Point &right)> PointMap;
    PointMap pmap([](const Point &left, const Point &right){return left.y < right.y;});

//  ラムダ式ならこっちのほうがスッキリ？
//  auto f = [](const Point &left, const Point &right){return left.y < right.y;};
//  typedef std::map<Point, int, decltype(f) > PointMap;
//  PointMap pmap(f);

    pmap.insert(PointMap::value_type(Point(0,0), 0));
    
    return 0;
}
```
【CSS】複数行でも3点リーダーをきかせる

# 複数行でも3点リーダーをきかせる

## 1行で3点リーダー

```lang:css
p {
    overflow: hidden;
    text-overflow: ellipsis;
    white-space: nowrap;
  }
```

まぁ普通に3点リーダーになりますよね。

## 複数行で3点リーダー

Chrome・Safari でしか実装できませんが（今後はIEとかでも使えるようになる事を期待）下記のように書きます。

```lang:css
p {
    display: -webkit-box;
    -webkit-box-orient: vertical;
    -webkit-line-clamp: 3;
    overflow: hidden;
  }
```

複数行での3点リーダー実装するために、
”display: -webkit-box;”
”-webkit-box-orient: vertical;”
指定をします。
display属性を”box”とすることでフレキシブルボックス状態になり、
”-webkit-line-clamp”で指定した行までを表示するようになります。
box-orientはそのフレキシブルボックスの並び方向を指定しverticalと指定する。
overflow: hidden;をスクロールバー対策として追加しました。

普通であれば高さを指定するために”font-size””line-height”を元に高さを割り出し増すが、その必要がないのでお手軽にコードが書けるのと、リキッドレイアウトにも対応。

ただし”IE””Firefox”は現時点では使えない場合も多いので要注意。

それにしても"clamp"いい方が可愛い。
Developer Programが開始しました！！


#Developer Programの開始
Aldebaranの回し者Ryoです。(非公認です。)
AldebaranからDeveloper Programが始まったことが告知されましたね！！

![Developers___Aldebaran_Community.png](https://qiita-image-store.s3.amazonaws.com/0/35860/3e5893a1-f8fd-c520-af44-a19caea4ed18.png "Developers___Aldebaran_Community.png")


Developer Programに参加すると、Pepper開発用のChoreographe2.3.1が手に入るようです。
また、ロボット・アプリケーションス・タンダードという、開発規約のようなものも読めるようになりました！
日本語ドキュメントの抄訳も出たのは嬉しいですね！！

#ロボットを持ってなくても、今すぐ開発が出来ます!
##展望
ロボットを持ってなくても、今すぐ開発が出来るということみたいです。公式には以下の様なことが載っています。
###現在:

* 無償のプログラム（ベータ版）に参加できます。
* 簡単にロボアプリを開発するために、開発ツール（直感的なUIのChoregrapheとNAOqi SDK）とシミュレーションツールを入手できます。
* ロボットと開発ツール向けのフル版の技術ドキュメントを入手できます。 
* 他の開発者とアイデアを共有できるコミュニティフォーラムにアクセスできます。

###将来像:

* あなたの目的にあった最適なプログラムを選べます。
* あなたのアプリ開発をサポートしたり、アプリストアでの販売ができるようなフル版のサービス提供に向け、我々は取り組んでいます。
* 以下のようなサービスを予定しています:
* 開発したロボアプリの動画を公開し、ユーザーからフィードバックを得られます。
* 世界中のユーザーに向けて、あなたの開発したアプリを配信・販売できます。


##開発
###開発ツール:

* Choregraphe（コレグラフ） - コレグラフは、初心者からエキスパートまでどんなユーザーでも使える直感的なGUIが特徴の開発ツールです。プログラミングの知識がなくてもドラッグ＆ドロップだけで簡単に動きや会話を作る事ができます。更には、コレグラフ以外で開発したC++モジュールを呼び出したり、ボックスを時系列で組み立ててアプリを開発することもできます。
* NAOqi SDK - デベロッパーやアニメーター向けに使いやすいSDK（PythonやC++）を用意しています。
* SDKシミュレータ - バーチャルロボット上で自分の開発したアプリを3Dで確認できます。
* サンプルコード - でき合いのコードを使い、アプリ開発を効率化できます。

###サポート:

* 技術ドキュメントとデザインガイドで詳しい情報をみれます。
* フォーラムにて、質問を投稿したり、アイデアを共有できます。
* PepperとNAOに触れ合い、アプリ開発の魅力を知る為に是非アトリエ（東京、パリ）にお越しください。

##今後の予定
以下のとおりになっています。

* デベロッパープログラムの受付 - 現在登録受付中。
* チュートリアルや情報の追加など、リソースの拡大を予定しています。
* 今秋にアプリのショーケースを予定しています。
* 今冬にアプリ審査及び配信を予定しています。

#感想
NAOやPepperの開発でChoreographeを使っていましたが新しいChoreographeが出たことは喜ばしいことですね。
(安定していれば。)

ドキュメントも日本語版が出たのは嬉しいですね。
(すべてが日本語化されていれば。)

Pepperの開発者が増えれば、いろいろとQiitaの記事も増えていくので、NAOの開発者としても嬉しいです。
(Pepperが安定すれば。)

#関連URL

>Developer Program
>https://community.aldebaran.com/ja/developerprogram
次の案件ES6で書いてみたいメモ その2



次の案件ES6使ってみようと思ったので勉強記 その2です。

![es6-logo.png](https://qiita-image-store.s3.amazonaws.com/0/76843/111a9e47-ead3-ec42-102a-4cb462a2661c.png)

(独断と偏見で今度
使いたいなと思ったのを取り上げてるので他の方のいろいろな記事も見てみてください。。)


# 6、デフォルト引数  

デフォルト引数が使えるようです。

```js:sample
// es6
function greeting( word = 'お疲れさまです'){
	console.log(word);
}

greeting(); // お疲れさまです
greeting('おっはー'); // おっはー


/* 
こんな風に変換されてました
es5

'use strict';
function greeting() {
	var word = arguments[0] === undefined ? 'お疲れさまです' : arguments[0];
	console.log(word);
}
*/
```

# 7、変数埋め込み
バッククオートで囲んだ文字列の中に変数を埋め込めるようです。
+ ほにゃらら + みたいな連結が楽になりますね。

```text:sample
var name = 'すず';
console.log(`私の名前は${name}です`);
// 私の名前はすずです
```

# 8、for/of 文 

配列の要素を順番にアクセスするのが楽に

```js:sample
var songs = ['そばかす', '散歩道', 'くじら12号'];

// es5
for (var i = 0; i >= arr.length; i++){
	console.log(arr[i]);
}

// es6
for(let song of songs){
	console.log(song);
}

// そばかす、散歩道、くじら12号
```

つづく、、、かもしれない
AlfrescoのREST APIを活用する


## AlfrescoのREST API
AlfrescoにはRESTのAPIが用意されていて、外部アプリケーション連携・管理作業の自動化が可能です。
例えば、ドキュメントの属性変更、ユーザーの登録・更新、タグやカテゴリーの登録がREST APIで実現できます。
http://docs.alfresco.com/community/pra/1/topics/pra-welcome-aara.html
http://docs.alfresco.com/community/pra/1/concepts/pra-resources.html

## 対象環境
Alfresco Community Edition 5.0d


## REST API利用例
非常にシンプルな例として「タグの一括登録」をREST API経由で自動化するケースを題材に、外部アプリケーションの代わりにRubyスクリプトからAPIを利用してみます。

リファレンスを読むと説明がありますが、認証が必要なAPIを利用する場合、最初にログイン処理でAPIキーを取得し、それを引き回す必要があります。
http://docs.alfresco.com/5.0/references/RESTful-RepositoryLoginPost.html


```ruby:create_tags.rb
require 'json'
require 'rest-client'

TARGET_HOST = 'http://xx.xx.xx.xx'
LOGIN_URL = TARGET_HOST + '/alfresco/s/api/login'
TAGS_URL = TARGET_HOST + '/alfresco/service/api/tags/workspace/SpacesStore?'

# 実行ユーザー
USER = 'admin'
PASSWORD = 'xxxxxx'

def login(user, password)
  begin
    response = RestClient.post LOGIN_URL, {'username' => user, 'password' => password}.to_json, :content_type => :json, :accept => :json
    @alf_ticket = 'alf_ticket=' + JSON.parse(response)["data"]["ticket"]
    puts @alf_ticket
  rescue => e
    puts e.response
  end
end

def create_tags(tags)
  begin
    tags.each {|t|
      RestClient.post TAGS_URL+ @alf_ticket, {'name' => t}.to_json, :content_type => :json, :accept => :json
    }
  rescue => e
    puts e.response
  end
end

# 登録するタグのリスト
# Alfrescoの仕様で、ASCII部分はdowncaseされてしまう
tags = [
  "NeverWinter",
  "Pathfinder",
  "マウスガード"
]


login(USER, PASSWORD)
create_tags(tags)
```

(TARGET_HOST, USER, PASSWORDは各自の環境に合わせてください)


実行すると、列挙したタグが登録されます。
（Alforescoの管理画面のタグから確認可能です）

こんな感じで、外部アプリケーションとの連携や管理作業の自動化が可能です。
[ConoHa API] JavaScriptでサーバ一覧を取得する

## 方針

トークンは一度発行すると15時間有効です。なので、トークンが必要なAPIを使用するたびに発行するのではなく、一度発行したらそれを保存して再利用します。

保存先は以下のローカルストレージとします。

```js
window.localStorage['token']
```

## JSONアクセス

JSONにアクセスする部分は以下ような関数にまとめてしまいます。

```js
//
// JSON access
//
var access = function(url, data, type, onSuccess) {
    $.ajax({
      url: url,
      data: JSON.stringify(data),
      type: type,
      headers: {
        'X-Auth-Token' : window.localStorage['token']
      },
      success: onSuccess,
      error: function() {
        console.log('$.ajax error');
      }
    });
}
```

引数でAPIごとに異なる情報 (url, POSTデータ, POST/GET, 成功時の処理)を渡します。また、トークンはローカルストレージから読み込んでいます。

ローカルストレージに値がないとき、X-Auth-Tokenが空となってしまいますが、APIは正常に処理されるようです。

## token API

access関数に以下の情報を渡すことでトークンを発行します。

```js
//
// token API information
//
var token_url = "https://identity.tyo1.conoha.io/v2.0/tokens";
var token_data = {
  "auth": {
    "passwordCredentials": {
      "username": user_id,
      "password": password,
  },
  "tenantId": tenant_id
  }
};
var token_type = "POST";
var tokenOnSuccess = function(data) {
  $('#output').text(JSON.stringify(data));
  window.localStorage['token'] = data.access.token.id;
}
```

渡し方はこんなかんじです。

```js
access(token_url, token_data, token_type, tokenOnSuccess);
```


## servers API

tokenと同様に実装していきます。

```js
//
// servers API information
//
var servers_url = "https://compute.tyo1.conoha.io/v2/" + tenant_id + "/servers";var servers_data = {};
var servers_type = "GET";
var serversOnSuccess = function(data) {
  $('#output').text(JSON.stringify(data));
}
```

同様にこんな風にアクセスします。

```js
access(servers_url, servers_data, servers_type, serversOnSuccess);  
```


## ロード時に情報取得

html起動時にtokenおよびservers APIにアクセスし、情報を取得します。

```js
//
// Run on load
//
$(function(){
  if (window.localStorage['token'] === undefined) {
    access(token_url, token_data, token_type, tokenOnSuccess);
  } else {
    access(servers_url, servers_data, servers_type, serversOnSuccess);  
  }
});
```

ローカルストレージにトークンが入っていないときはtoken API、入っているときはservers APIにアクセスします。


## 実行

まず一回目の起動で以下の様な画面になります。token APIにアクセスしてローカルストレージにトークンが保存されている様子がわかります。

![servers01_01.png](https://qiita-image-store.s3.amazonaws.com/0/85105/01015231-bf7f-e881-9a5a-19ab4ff4577d.png)

一度リロードすると以下の様な画面になります。サーバ情報が取得できていますね！

![servers01_02.png](https://qiita-image-store.s3.amazonaws.com/0/85105/a4b1ab99-61fa-5f50-4a76-760e53baa467.png)

動作するサンプルコードは[ここ](https://github.com/OttyLab/ConoHa_sample/blob/master/servers01.html)にあります。

## 改善点

一度リロードしないとサーバ一覧が出ないのは不便です。また、トークンが期限切れしたり、誤った値が入ってしまった時に削除する機能も必要です。

次回はこの辺りを修正しようと思います。
hubot-starbucks-egiftの環境構築方法


# 概要
[hubot-starbucks-egift](https://www.npmjs.com/package/hubot-starbucks-egift)の環境構築方法をまとめました

# docker/docker-composeをインストール
* seleniumをインストールする必要がある関係で、docker上にhubotを作成する
* docker/docker-composeのインストールは公式ページを参考にインストール
* [docker](https://docs.docker.com/)
* [docker-compose](https://docs.docker.com/compose/install/)

# ディレクトリ構成
<dl>
	<dt>app</dt><dd>docker-compose.ymlを配備</dd>
	<dt>app/bot</dt><dd>hubotコンテナのディレクトリ</dd>
	<dt>app/bot/resources</dt><dd>メッセージを格納するディレクトリ</dd>
	<dt>app/bot/judge</dt><dd>条件判定スクリプトを格納するディレクトリ</dd>
</dl>

#　ホスト環境にhubotをインストール
## hubotをインストール

```
npm install -g hubot coffee-script yo generator-hubot 
```

## hubotを作成
app/botのディレクトリに移動し、雛形を作成する

```bash:app/bot
yo hubot
```

package.jsonとexternal-scripts.jsonにhubot-starbucks-egiftを追記する

```bash:app/bot/package.json
"dependencies": {
  "hubot-starbucks-egift": "0.0.1"
}
```

```bash:app/bot/external-scripts.json
["hubot-starbucks-egift"]
```

## Dockerfileを作成する
app/botにDockerfileを作成する
※adapterをslackにしています

```bash:app/bot/Dockerfile
FROM iojs:2.3.0

RUN mkdir /bot && cd /bot
ADD . /bot

WORKDIR /bot

CMD ["bin/hubot", "--adapter", "slack"]
```

## docker-compose.ymlを作成する
appディレクトリにdocker-compose.ymlを作成
※ ブラウザを確認できるようにデバッグ用の設定です

```bash:app/docker-compose.yml
selenium:
  image: selenium/standalone-chrome-debug:2.46.0
  ports:
    - "4444:4444"
    - "5900:5900"
  environment:
    SCREEN_WIDTH: 1280
    SCREEN_HEIGHT: 800
  volumes:
    - /dev/urandom:/dev/random

bot:
  build: ./bot
  restart: always # 接続が切れるとhubotが落ちるので再起動を設定
  ports:
    - "8080:8080"
  environment:
    HUBOT_SLACK_TOKEN: 
    SELENIUM_BROWSER: chrome
    SELENIUM_REMOTE_URL: http://<プライベートIP>:4444/wd/hub　# なぜかlocalhostだと接続できないので
    STARBUCKS_MAIL_ADDRESS: 決済通知用のメールアドレス
    STARBUCKS_CREDIT_NUMBER: "クレジットカード番号"
    STARBUCKS_CREDIT_MONTH: "クレジットカード(月)"
    STARBUCKS_CREDIT_YEAR: "クレジットカード(年)"
```

# 起動
appディレクトリで以下を実行すると、hubotとseleniumのコンテナが起動する

```bash:app
docker-compose up -d
```
CSSだけでアスペクト比を固定するテク

**Javascript**を使わず、**CSS**だけで**img**や**div**や**iframe**のアスペクト比を固定したままコンテナに合わせてリサイズする方法です。
レスポンシブなデザインの場合は端末の画面サイズに合わせて要素の幅を変える必要があるので、こういうテクニックを使ってアスペクト比を固定してやります。

## imgの場合

**HTML**

```html
<img src="http://mrg.bz/Gl2K6Z" />
```

**CSS**

```css
img {
    width: 100%;
    height: auto;
}
```

[デモ](http://jsfiddle.net/ryounagaoka/399gar30/3/)

imgタグは**height: auto**が使えるので簡単ですね。

## divやpなどのブロック要素の場合

**HTML**

```html
<div id="wrapper">
    <div id="content">hogehoge fugafuga</div>
</div>
```

**CSS**

```css
#wrapper {
    position: relative;
    width: 100%;
}
#wrapper:before {
    content:"";
    display: block;
    padding-top: 75%; /* 高さを幅の75%に固定 */
}
#content {
    position: absolute;
    top: 0;
    left: 0;
    bottom: 0;
    right: 0;
}
```

[デモ](http://jsfiddle.net/ryounagaoka/u7cc2wc1/)

ブロック要素の場合はラッパーで囲んだ上、ちょっとトリッキーなテクニックが必要です。
なんでこう書くと上手く動くのかは必要に応じてググればいいので割愛します。
1つ覚えておかないといけないのは**#wrapper:before**に設定した**padding-top**の値によってアスペクト比をコントロール出来るということです。
上の例では幅:高さの比を4:3にするために75%という値を使ってます。
この値は以下の式で求めることが出来ます。

```
高さの比率 ÷ 幅の比率 × 100
```
上の例では4:3に固定したいので、3/4*100で75となります。

## iframeの場合
iframeは埋め込み動画なんかで出番が多いですね。

**HTML**

```html
<div id="wrapper">
    <iframe id="content" src="https://player.vimeo.com/video/98746172" frameborder="0"></iframe>
</div>
```

**CSS**

```css
#wrapper {
    position: relative;
    width: 100%;
}
#wrapper:before {
    content:"";
    display: block;
    padding-top: 56.25%; /* 高さと幅の比を16:9に固定。9/16*100=56.25 */
}
#content {
    position: absolute;
    top: 0;
    left: 0;
    width: 100%;
    height: 100%;
}
```

[デモ](http://jsfiddle.net/ryounagaoka/qL1h3nqn/)

ブロック要素の場合にかなり似てるんですが、**#content**で**width**と**height**に**100%**を指定しているというところだけが違っています。

## IEは？
IEって何ですか？
と言いたいところですが、IE7まではこのテクニックが使えないはずです。
JSで何とかしましょう。

## 参考
* http://stackoverflow.com/questions/5445491/height-equal-to-dynamic-width-css-fluid-layout
* http://www.mademyday.de/css-height-equals-width-with-pure-css.html
wordpressのプラグインのMW WP Formで添付ファイルをリンクにする方法

メールサーバによっては、メールの添付容量が制限されていて、うまく送れない場合があるので、
リンクに変更してみた。
直接プログラムをしゅうせいしてしまうのが、欠点。

変更点
1 function.phpに以下を追加

```/**
 * add
 * 添付資料の場合、リンクにつけるための関数
 * !!で囲まれたタグを、DBに登録される値に置換する
 * 

 * 
 * 
 */

function my_mail( $Mail_raw, $values, $Data ) { //管理者

    $Mail_raw->body = str_replace("!タグ!", $Data->get("タグ"), $Mail_raw->body); 
    return $Mail_raw;
}
add_filter( 'mwform_admin_mail_raw_mw-wp-form-1461', 'my_mail', 10, 3 );
function my_mail2( $Mail_raw, $values, $Data ) {    //自動返信用
    $Mail_raw->body = str_replace("!タグ!", $Data->get("タグ"), $Mail_raw->body); 
    return $Mail_raw;
}
add_filter( 'mwform_auto_mail_raw_mw-wp-form-1461', 'my_mail2', 10, 3 );
```

2 添付ファイルを追加しないように、class/services/class.mail.phpの70行目をコメントアウト
3 管理画面からメール本文に!タグ!を追加
AndroidエンジニアのためのiOSのUIViewControllerのライフサイクルとAndroidのActivityのライフサイクル比較


自分は絶賛iOSの勉強中のAndroidエンジニアです。

理解しやすくするためiOSのUIViewControllerのライフサイクルをAndroidのActivityとを比較してみました。

## まずはおなじみActivityのライフサイクル

<img src="http://developer.android.com/images/activity_lifecycle.png" width=350 />

## そしてiOSのライフサイクル

iOSのライフサイクルはそもそも考え方が違うみたいです。

というのも公式には下記のようにライフサイクルにはAppearかDisappearのステータスの概念しかないようです。(Androidはその観点だけによってライフサイクルが作られているわけじゃないしメインの観点でもない。)

<img src="https://developer.apple.com/library/ios/documentation/UIKit/Reference/UIViewController_Class/Art/UIViewController%20Class%20Reference_2x.png" width=350 />


なので、そもそも比較自体に無理もあるのですが、とはいえ、呼ばれるタイミングなどは少なからず似通ってるだろうと思って、Activityのどこのメソッドに相当するのか整理してみました。

<img src="https://qiita-image-store.s3.amazonaws.com/0/47114/087d03ee-2e26-9e50-a60c-ed331e59853a.png" width=350 />

**似ている** というのは呼ばれるタイミングがということです。

### loadView,viewDidLoadはonCreateに似ている

呼ばれ方が下記の点で、ActivityのonCreateに似ているなと思いました。

- 画面遷移後1度呼ばれる。
- 画面遷移して戻って来た時は呼ばれない

### viewWillAppear,viewDidAppearはonResumeに似ている

呼ばれ方が下記の点で、ActivityのonResumeに似ているなと思いました。

- 画面遷移後1度呼ばれる
- 画面遷移して戻って来た時も呼ばれる

ただ下記の点では違いました。

- 画面のON/OFFをしても呼ばれない
- アプリをバックグラウンドにやって、再度アプリをフォアグランドに戻しても呼ばれない

### viewWillDisappear,viewDidDisappearはonPauseに似ている

呼ばれ方が下記の点で,ActivityのonPauseに似ているなと思いました。ただ、これだけだとonDestroyに似ていると言えるのですが、(viewWillAppear, viewDidAppear)とセットと考えるならonPauseだろうという思惑が入った結果、こちらを選びました。

- 画面を閉じる際に1度呼ばれる

ただ下記の点では違いました。

- 画面のON/OFFをしても呼ばれない
- アプリをバックグラウンドにやる際に呼ばれない

### 昔はviewWillUnload,viewDidUnloadもあったみたい

試してませんが、こちらはonDestroyっぽいのかな。

## やっぱり結構無理があった

無理やり当てはめてみたけど下記の点で結構無理があった感。

- iOSのライフサイクルは表示されているか否かだけに依存しているけど、Androidはそうじゃない
- iOSは画面のON/OFFとかフォアグランド/バックグランドは意識してない
- onCreate <=> (loadView,viewDidLoad)とか呼ばれるタイミングは似通ってるかもだけど、中でやってることはイコールじゃない

とはいえ、比較によって理解が深まったので良かったです。
ある特定の所有者ファイルを別ユーザへ変更する


Gnu版chown限定っぽい。

あるディレクトリ以下の全ての特定ユーザ( Owner )の所有物を別ユーザに変更する。

```shell
> # この例だと、Owner apache の所有物を全て root に変更する
> chown -R . --from=apache: root
```


Gnu Chown の man は古いままだし info コマンドはなんか使いにくいし日本語訳はどこにあるのかわからないし…

## 参考

http://www.gnu.org/software/coreutils/manual/html_node/chown-invocation.html#chown-invocation

```shell
> chown --help
Usage: chown [OPTION]... [OWNER][:[GROUP]] FILE...
  or:  chown [OPTION]... --reference=RFILE FILE...
Change the owner and/or group of each FILE to OWNER and/or GROUP.
With --reference, change the owner and group of each FILE to those of RFILE.

  -c, --changes          like verbose but report only when a change is made
      --dereference      affect the referent of each symbolic link (this is
                         the default), rather than the symbolic link itself
  -h, --no-dereference   affect each symbolic link instead of any referenced
                         file (useful only on systems that can change the
                         ownership of a symlink)
      --from=CURRENT_OWNER:CURRENT_GROUP
                         ここで指定した現在の所有者やグループと一致した
                         ファイルについてのみ、所有者やグループを変更する。
                         いずれか一方は省略できる。その場合、省略された方の
                         属性については一致の検査を行なわない。
      --no-preserve-root  do not treat `/' specially (the default)
      --preserve-root    fail to operate recursively on `/'
  -f, --silent, --quiet  suppress most error messages
      --reference=RFILE  use RFILE's owner and group rather than
                         specifying OWNER:GROUP values
  -R, --recursive        operate on files and directories recursively
  -v, --verbose          output a diagnostic for every file processed

The following options modify how a hierarchy is traversed when the -R
option is also specified.  If more than one is specified, only the final
one takes effect.

  -H                     if a command line argument is a symbolic link
                         to a directory, traverse it
  -L                     traverse every symbolic link to a directory
                         encountered
  -P                     do not traverse any symbolic links (default)

      --help     この使い方を表示して終了
      --version  バージョン情報を表示して終了

Owner is unchanged if missing.  Group is unchanged if missing, but changed
to login group if implied by a `:' following a symbolic OWNER.
OWNER and GROUP may be numeric as well as symbolic.

Examples:
  chown root /u        Change the owner of /u to "root".
  chown root:staff /u  Likewise, but also change its group to "staff".
  chown -hR root /u    Change the owner of /u and subfiles to "root".

Report chown bugs to bug-coreutils@gnu.org
GNU coreutils home page: <http://www.gnu.org/software/coreutils/>
General help using GNU software: <http://www.gnu.org/gethelp/>
Report chown translation bugs to <http://translationproject.org/team/>
For complete documentation, run: info coreutils 'chown invocation'
```
WKWebViewにローカルの画像をJavaScriptで渡して<img>タグで表示させる

WKWebViewはローカルのファイルを file:// によって読み込ませることが出来ません。
しかし、JavaScriptを介してbase64エンコードしたデータ文字列として渡すことが出来れば利用できます。

下記は、ローカルのPNG画像をbase64エンコードしたデータ文字列として
JavaScriptを介して画面に受け渡して`<img>`タグで表示します。

    // (WKWebView *)webView
    NSData *imageData = [NSData dataWithData:UIImagePNGRepresentation([UIImage imageNamed:@"SOME_PNG_FILE_NAME"])];
    NSString *image64EncodedData = [imageData base64EncodedStringWithOptions:NSDataBase64EncodingEndLineWithLineFeed];
    NSString *bodyHTML = [NSString stringWithFormat:@"<img src=\"data:image/png;base64,%@\"/>", image64EncodedData];
    [webView evaluateJavaScript:[NSString stringWithFormat:@"document.body.innerHTML = '%@';", bodyHTML] completionHandler:nil];