OmniAICreator/Qiita-1.07M huggingface dataset:
ReactNativeを使ってみる

##ReactNativeとは
ReactNative http://facebook.github.io/react-native/

ReactNativeとはReactjsベースでネイティブアプリを構築できるSDK（プラットフォーム？）で、Facebookが作っています。FacebookやInstagram, AirBnBなどのアプリがReactNativeで書かれているらしいです。
現在はiOS, Androidともに動かせるようになっている（v0.45.0現在）

内部ではJavaScript のコードがコンパイルされてネイティブコードになるわけではなく、内部に JavaScript ランタイム (JavaScriptCore) があって JS はそのランタイム上で動く。


内部には Objective-C で書かれた、JS <=> ネイティブブリッジの実装があり JavaScript ランタイムからはそのブリッジが呼ばれて、UIKit の各種コンポーネントや iOS ネイティブの API が呼ばれるようになっている。


JavaScript ランタイムの実行とネイティブコードは、ドキュメントをみる限り非同期で実行されていて各種ネイティブモジュール群も別スレッドで動いており、パフォーマンス的な劣化はそれほど大きくないと謳っている。

#開発環境
Document参照
http://facebook.github.io/react-native/docs/getting-started.html#content

- Mac OS X
- Xcode(最新推奨)
- 適当なエディタ

##準備
- Homebrewをインストールhttp://brew.sh/index_ja.html


- node.jsが入っていない場合はnodejsをインストール

```zsh
brew install node
```

- watchmanをインストール(bug監視のため)

```zsh
brew install watchman
```

- flowをインストール(使いたかったら。。。flowはtype errorをチェックしてくれるツールです)

```zsh
brew install flow
```

- reactNativeをグローバルにインストール

```zsh
npm install -g react-native-cli
```

- 作りたいディレクトリに移動し、プロジェクトを作成

```zsh
react-native init hogeProject
```

ここでなんと僕の場合
>zsh: command not found: react-native

###ふぁっ！？

sudoしてもプロジェクト立てるディレクトリでnpm initしてもダメ。。。
どうやらこちらの記事http://qiita.com/umechiki/items/a1de903a2e5e27f5c606
にあるようにPATHが通ってなかったみたいです。（gulpとかは動くのに、、、なぜ？）

```.zshrc
if [ -d ${HOME}/node_modules/.bin ]; then
    export PATH=${PATH}:${HOME}/node_modules/.bin
fi
```

を入れて

```zsh
source ~/.zshenv
```
これで再びコマンドを叩くとプロジェクトを立てることが出来ました。

その後、プロジェクトのディレクトリ内で

```zsh
$ cd hogeProject
$ npm i  <--これでnode_modulesをインストール
$ react-native link
```

#はじめてみる
できたプロジェクトの中から
>hogeProject.xcodeproj
というのを起動
とりあえず実行してみると
![welcome to React Native](http://cdn1.raywenderlich.com/wp-content/uploads/2015/03/ReactNative-Starter-281x500.png)
みたいなページがiOSシュミレータで立ち上がります。

立ち上がらない場合はターミナルから

```zsh
$ react-native run-ios
```
を実行してみてください

起動するときにターミナルが立ち上がると思いますがこのターミナルは閉じてはいけません。もし閉じてしまった時にはXcodeからもう一度ビルドしましょう。



#参考ページ
- ReactNativeでサクッとReactjs記事リーダーを作ってみるhttp://qiita.com/y_matsuwitter/items/a7fc88e566b80b4c1eea
- React Native ファーストインプレッションhttp://qiita.com/naoya@github/items/ecda4d3089902dcbea53

これからどんどん使ってみるのでなんかあったら追記していきます
Audioオブジェクトで音声ファイルを遅延させて再生する

## 今回やりたいこと
* タッチ後に音声の再生
* 複数の音声を遅延させて再生

## 問題
iOSのブラウザで複数の音声ファイルを任意のタイミングで、
再生しようとしたけど再生できない。

というわけで、タップした時に音声ファイルを遅延して再生するということで、
ファイルロード時にAudioオブジェクトを生成し、setTimeoutで遅延させてから
play()メソッドで再生すればいいだろうと安易な考えをしていました。

### 問題のソースコード

```js
var play = document.getElementById('play');
var audio = {
    select: new Audio("./mp3/select.mp3"),
    atari: new Audio("./mp3/atari.mp3"),
    hazure: new Audio("./mp3/hazure.mp3")
};

// 自動再生をオフ
for(var key in audio){
    if(audio.hasOwnProperty(key)) {
        audio[key].autoplay = false;
    }
}

// 再生ボタンの処理
play.addEventListener('click', function(){
    // select.mp3 再生
    audio[select].load();
    audio[select].play();

    setTimeout(function(){
        // atari.mp3 再生
        audio[atari].load();
        audio[atari].play();
    }, 1000);
}, false);
```

PCブラウザで確認し、mp3ファイルが再生していることが確認できた。。。

準備は整った!
ということで、iPadで再生!!!


俺氏「(再生…!!!!)」

iPad「・・・」

俺氏「」

俺氏「進捗ダメです(ﾎﾞｿｯ」



select.mp3は無事再生されましたが、
atari.mp3が再生されなかった・・・。


なんだかんだ調べた結果、 [こちら](http://dsuket.hatenablog.com/entry/2013/05/05/101430)によると
ユーザーが知らない間に重量課金されるかもしれないので、
preloadとautoplayは効きません。ユーザーイベントがないと、
JavaScriptでのplay()やload()も発火しません。
なので、touchendやclickイベントの直後ならplay()を呼べますが、
ファイルロード時はplay()メソッドは発火しませんよ。

## 解決策
``` js

// 再生ボタン クリックの処理
play.addEventListener('click', function(){
    // select.mp3 再生
    audio[select].load();
    audio[select].play();

    // atari.mp3 再生
    audio[atari].load();
    setTimeout(function(){
        audio[atari].play();
    }, 1000);
}, false);
```

## 結論
setTimeoutの前に、再生したいAudioオブジェクトを
load()しておけばいいみたいです。

スマホ用のwebアプリなんかを作るときにひっかかりそうなので、
よかったら試してみてはいかがでしょうか。
スクロールで特定の部分をwindowに固定する、cssとjsの書き方

備忘録を兼ねて共有します。


#方法
##html
固定したい要素(以後`.fixing-box`)を別の要素(以後`.fixing-base`)で包みます。

````fixing_sample.html
<div class="fixing-base">
  <div class="fixing-box">
  </div>
</div>
````

##css
`.fixing-base .fixing-box.fixed`がwindowに固定される記述を追加します。

````fixing_sample.css
.fixing-base .fixing-box.fixed {
  position: fixed;
  top: 0;
  z-index: 9999;
}

````

##js
`.fixing-base`より後にスクロールされた場合に下記の操作を行います。
- `.fixing-box`に`.fixed`を追加する -> 固定
- `.fixing-base`に`.fixing-box`のmarginも含めた高さを設定する -> スクロール位置のズレ防止
- `.fixing-box`に`.fixing-base`の幅を設定する -> `.fixing-box`の見栄え調整

````fixing_sample.js
function(){
  // 固定する場所が存在することの確認
  if( $('.fixing-base .fixing-box').length > 0 ){
    var baseSelector = '.fixing-base'
    var fixingSelector = baseSelector + ' .fixing-box'

    $(window).on('load scroll resize', function(){
      var baseTop = $(baseSelector).offset().top

      //固定開始位置より後にスクロールされた場合
      if( $(window).scrollTop() > baseTop ){
        $(fixingSelector).addClass('fixed')
        $(baseSelector).height($(fixingSelector).outerHeight())
        $(fixingSelector).width($(baseSelector).width())

      //固定開始位置以前にスクロールされた場合
      } else {
        $(fixingSelector).removeClass('fixed')
        $(baseSelector).height('')
        $(fixingSelector).width('')
      }
    })
  }
}
````

以上です。

#参考
http://blog.idea-clippin.com/?p=1486
React Routerでパスに直接アクセスすると404エラーがでたときの対応


# **概要**

React Routerでパスに直接アクセスすると404エラーが発生しました。


# **考えたこと**
サーバーサイドで、毎回`Router.run`を走らせる必要がある説。

* <a href="http://stackoverflow.com/questions/27928372/react-router-urls-dont-work-when-refreshing-or-writting-manually" target="_blank">javascript - React-router urls don't work when refreshing or writting manually - Stack Overflow</a>

## 問題
* Node.jsじゃないとだめ
* Angular.jsではできていたのに何故できないのか



# **解決策**

```js
Router.run(Routes, Router.HistoryLocation, function (Handler) {
  React.render(<Handler/>, content);
});
```

を

```js
Router.run(Routes, Router.HashLocation, function (Handler) {
  React.render(<Handler/>, content);
});
```

にして解決。

<a href="http://rackt.github.io/react-router/#HashLocation" target="_blank">React Router Documentation</a>には以下のようにある。

```
This is the default location used in Router.run because it will always work, though we recommend you configure your server and use HistoryLocation.
```

`HistoryLocation`はサーバーの設定が必要だそうです。
Swiftのinについて


Swiftのinは次のような繰り返し処理で利用します。

```swift
var numbers = [1, 2, 3]
for number in numbers {
	println(number * number)
}
```

inはまた、次のようなクロージャの構文でも利用されます。

```swift
var numbers = [1, 2, 3]
var squares = numbers.map({(number) -> Int in
    var square = number * number
    return square
})
```

これらは用途が全く異なるため、少し戸惑うかもしれません。

また、クロージャのinの後ろには処理を書きますが、上記のように複数行の処理も記述可能です。
複数行の処理は全体を{}で括りたくなりますが、実際に試してみると構文エラーになってしまいます。
[jQuery]　ajaxメソッドを使った非同期通信

　
参考
http://mikaduki.info/webprogram/js/jquery/1534/

###非同期通信と同期通信
　ホストに対してリクエストを送り、ホストからレスポンスが返ってきて全てのデータを受信したら、次の処理に移れるのが同期通信です。
　![doukituusin.png](https://qiita-image-store.s3.amazonaws.com/0/59354/cccb1e0d-a27b-7637-1935-60258c4dd2e8.png "doukituusin.png")
　
　非同期通信というのは、レスポンスをまたずして次のリクエストを送ることができます。
![hidoukituusin.png](https://qiita-image-store.s3.amazonaws.com/0/59354/905aaf43-581f-0f60-d4e0-856a15a7a94e.png "hidoukituusin.png")
　
###jQueryでAjaxを使う
　jQueryにはajaxというメソッドがあって、同期通信、非同期通信、どちらも使用することができます。
　XMLHttpRequestオブジェクトでも行えますが、今日はjQueryのajaxメソッドについて書きたいのでXMLHttpRequest使いたい人はMDNのサンプルをみてください。
MDN url
https://developer.mozilla.org/ja/docs/XMLHttpRequest/Synchronous_and_Asynchronous_Requests
　
###データを読み込む場合
よく使うやり方。
>```
jQuery.ajax(
	"moge.json",{
		type : 'POST',					//GET,POSTを指定してHTTPの通信タイプを決定
		dataType: 'json',				//json,jsonp,html,text,script,xmlが指定できます。
			success: function(json){	//成功した場合に走る関数です。
				console.log(json);
			}
	}
);

>```

１つ目の引数には、データへのパスを書いてあげます。
２つ目の引数にはオブジェクトを定義します。
このオブジェクトの中に定義出来るものはいろいろありますが、ここではよく使うものだけ紹介するよていです。

　XMLHtppRequest cannot loadが出る場合がありますが、これはドメインが同一でないと発生するエラーです。
　Webサーバー上で動作させるなり、絶対パスで指定してあげると多分出なくなると思います。
　
###データを送りたい場合
　dataの中に、名前と値をセットで入れると、phpにデータが送られるというサンプルです。
>```
jQuery.ajax(
	"moge.php",{
		type : 'POST',	
		dataType: 'text',
		data: {						//nameとvalueをセットでオブジェクトの中に定義する
			"age" : 18,
			"name" : "mogeri",
		},
		success: function(post){
			console.log(post);
		}
	}
);
>```

　textをjsonとかに変えてphp側にjsonでデータを吐き出させると、jsonでも受け取れます。
　
###エラーを受け取りたい場合
　オブジェクトに１個エラーを定義して関数を書きます。
>```
jQuery.ajax(
	"moge.php",{
		type: "POST",
		dataType: 'json',
		data: {
			"age" : 18,
			"name" : "mogeri",
		},
		success: function(post){
			console.log(post);
		},
		error : function() {					//こんな感じです。
			console.log("era-desuyo");
		},
		complete: function() {				//読み込み完了時にもプログラムが動かせます。
			console.log("読み込みOK");
		}
	}
};
>```
[java8] 7回目：インタフェースのデフォルト実装　～菱形継承～

[前回：インタフェースのデフォルト実装]
(http://qiita.com/yuusuke_s/items/c68fef425fe3cb86d41a#comment-cb4bc98a57b6a14aa5d9)

前回はインタフェースのデフォルト実装を紹介しました。
応用編として、複数のインタフェースを実装（菱形継承）した場合の、同名メソッドの振る舞いについて見てみます。

## クラス図
以下のように、菱形な継承関係を持つものです。
![クラス図0.png](https://qiita-image-store.s3.amazonaws.com/0/53753/6b79d82b-1fd6-c7d7-181c-b8f8e739c77c.png)


## ChildAのメソッドをoverrideした場合
``` java
package com.ramda;

public interface Parent {
	default String hello() {
		return "Hellp Parent.";
	}
}

interface ChildA extends Parent {
	@Override
	public default String hello() {
		return "Hellp ChildA.";
	}
}

interface ChildB extends Parent {
	// not override
}

class Grandchild implements ChildA, ChildB {

}

class Main {
	public static void main(String[] args) {
		Parent parent = new Grandchild();
		System.out.println(parent.hello());
	}
}
```

結果
> Hellp ChildA.

より継承関係の近いインタフェースの実装が適用されました。
このように、メソッドの呼び出しに優先順位を付けて、問題を回避しているようです。

では、ChildA、ChildBを両方overrideしたらどうなるでしょう？


## ChildA、ChildBのメソッドをoverrideした場合
``` java
package com.ramda;

public interface Parent {
	default String hello() {
		return "Hellp Parent.";
	}
}

interface ChildA extends Parent {
	@Override
	public default String hello() {
		return "Hellp ChildA.";
	}
}

interface ChildB extends Parent {
	@Override
	public default String hello() {
		return "Hellp ChildB.";
	}
}

class Grandchild implements ChildA, ChildB {

}

class Main {
	public static void main(String[] args) {
		Parent parent = new Grandchild();
		System.out.println(parent.hello());
	}
}
```

結果
> コンパイルエラーとなりました。
Duplicate default methods named hello with the parameters () and () are inherited from the types ChildB and ChildA

優先順位が付けられない場合、コンパイルエラーとなるようです。


## 最後に
多重継承をした場合、上記のような衝突が当然おきますが、上手く回避されているようです。
考慮すべき点は多いと思いますが、C++の多重継承のように状態を持つことはないため、
それほどの複雑性はないと感じました。
waifu2x-converter-cppのdocker image作ってるとこ

http://waifu2x.udp.jp/index.ja.html
様のHPを使うのも良いと思います。

[khws4v1/waifu2x-converter-cpp](https://github.com/khws4v1/waifu2x-converter-cpp) をビルドしました。

## 使い方

```bash:
docker run --rm -it -v `pwd`:/srv tukiyo3/waifu2x -- -i /srv/hoge.png
```


## Dockerfile

```bash:
FROM ubuntu:vivid

RUN set -eux &&\
    apt-get update &&\
    apt-get install -y build-essential wget git &&\
    apt-get install -y cmake &&\
    apt-get clean

RUN set -eux &&\
    git clone https://github.com/khws4v1/waifu2x-converter-cpp.git /opt/waifu2x-converter-cpp.git &&\
    (cd /opt/waifu2x-converter-cpp.git && ./build.sh)

WORKDIR /opt/waifu2x-converter-cpp.git
# usage: waifu2x -i hoge.png
ENTRYPOINT /opt/waifu2x-converter-cpp.git/waifu2x-converter-cpp $@
```


# special thanks

## オリジナル版

* [waifu2x](http://waifu2x.udp.jp/)
* [nagadomi/waifu2x](https://github.com/nagadomi/waifu2x)
  * NvidiaのGPU必要

## pythonに移植された方

* [https://marcan.st/transf/waifu2x.py](https://marcan.st/transf/waifu2x.py)
  * GPU不要、変換に一時間かかるらしい

## cppに移植された方

* [WL-Amigo/waifu2x-converter-cpp](https://github.com/WL-Amigo/waifu2x-converter-cpp)
  * GPU不要、変換に1分もかからない程度

## ubuntu用ビルドスクリプト作成された方

* [waifu2xのローカル版が出たのでビルドするスクリプト書いといた | かひわし4v1.memo](http://khws4v1.myhome.cx/article/2015/05/28/waifu2x-converter-cpp%E3%81%AE%E3%83%93%E3%83%AB%E3%83%89%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%97%E3%83%88%E6%9B%B8%E3%81%84%E3%81%9F/)
  * [khws4v1/waifu2x-converter-cpp](https://github.com/khws4v1/waifu2x-converter-cpp)

## windows版

* [【レビュー】人工知能を駆使して高品質に画像を拡大する“waifu2x”をローカルで扱えるGUIツール - 窓の杜](http://www.forest.impress.co.jp/docs/review/20150528_704250.html)
windows で sails のビルドにエラー MSB4198 で失敗するとき ヽ(ﾟｰﾟ*ヽ)(ﾉ*ﾟｰﾟ)ﾉわぁい

みなさん、おはこんばんにちはでス。大変ご無沙汰しております。そういえば、sails.jsがv0.11.0になりましたね。手元のwin環境でアップデートに失敗したので解決方法と合わせてメモを投稿します。

# 内容

今回は、windowsの環境でアップデートしようとしたら失敗したという話です。Macの方はブラウザバック :back: で。エラー自体はちゃんとメモしていなかったので詳細が書けないのですが、

* MSB4198 というエラー番号
* directoryname でディレクトリ名関連のエラー
* つまり、**対象ファイルのパスが長すぎてダメ**

ということでした。v0.10.0のインストールが成功している環境ゆえ、そのまま v0.11.0 も

```
npm update sails
```

でアップデートできると思ったのですが、上記のエラーが発生したのです。

# :sunny: 解決方法

github のnode.js/npm周辺のディスカッションをいくつか見たのですが

## 開発サイドの言い分

* それ悪いのWindowsだから
* node.js/npm で対応しないんでごめんね
* チケット閉じるね

## 困っている人の言い分

* ずっと問題発生しているのにまだ解決しないの？
* ナントカしてよ
* チケット再度Openしてよ

という大変不毛な議論が繰り返されていました。本当に不毛ですね :anger: :smile:

結局、今回のバージョンで依存関係に追加されたらしい `sails-hook-sockets` を先にインストールし、そのあとに、sailsをインストールすることで回避できました。

```.sh
npm install sails-hook-sockets
npm update sails
```

手元の環境では sails-hook-sockets のビルド時のパスがwindowsの256文字制限に引っかかっていたのが原因でした。もし、同じ問題で困ったときに参考になればと書いた次第です。最近はMacの人が多いからあまり役に立たないかもしれませんが。

# 参考

すぐ `sucks` 言う人達のやり取り

* Node's nested node_modules approach is basically incompatible with Windows · Issue #6960 · joyent/node - https://goo.gl/VFCcXx
* Too many dependencies break the Windows file system · Issue #3697 · npm/npm - https://goo.gl/2q2nGL
* Install error with npm on Windows 7 x64 · Issue #57 · node-xmpp/node-expat - https://goo.gl/BbEHqC
MacのTerminalでプロンプトに絵文字を表示しよう


海外のscreencastsをたまに見たりするんですが、Terminalのプロンプトに絵文字を使っているのを見かけたので自分でもやってみました。

通常は:smile:を表示して、イレギュラーなときは、:scream:を表示するようにします。

## 環境

* Max OSX 10.8.5
* Zsh


## やり方の3ステップ

1. 文字ビューアを開く
2. .zshrcを開いて、PROMPTに文字ビューアの絵文字をドラッグする  
（もしくは挿入したい位置にカーソルを合わせておいて、文字ビューアのアイコンをダブルクリック）
3. `source ~/.zshrc`を実行して設定を反映させる



![スクリーンショット 2015-06-01 2.42.34.png](https://qiita-image-store.s3.amazonaws.com/0/10278/bcc03450-027e-e8dd-7449-7099a048f4ba.png "スクリーンショット 2015-06-01 2.42.34.png")


設定が反映されるとこんな感じになりました。

![スクリーンショット 2015-06-01 2.57.24.png](https://qiita-image-store.s3.amazonaws.com/0/10278/96371895-1f8a-3b98-f53a-fd3f148389bd.png "スクリーンショット 2015-06-01 2.57.24.png")



こんな感じで結構簡単に出来たので、試してみてはどうでしょうか。
HubotとTwilio APIを使ってSlackから電話をかけてピザを注文してみる

# はじめに

極端に面倒臭がり屋なぼくは、 Slack から出前ピザが注文できたらいいなと思いついたので Hubot スクリプトを書いてみることにしました。

# 実行例

![e090d641ed73da816587b004f7d5d56d.png](https://qiita-image-store.s3.amazonaws.com/0/77843/e86dc209-55b7-34de-0e2e-6857e5174420.png)

`hubot call +818044431800 起きろ！` てな感じで命令すると、電話して合成音声でメッセージを話してくれます。画像の電話番号は僕の携帯ですが、モザイクをかけるのも面倒なので気にしないでください。

電話番号に + がない場合 Twilio は from 番号と同じ国番号を使うそうなので、この例では頭の 0 を取った番号に日本の国番号 +81 を追加しています。


# Hubot の導入

導入については下記の記事を参考にしてください。bouzuya さんかっこいいです。

[Slack で Hubot を使えるようにする](http://qiita.com/misopeso/items/1f418dd02e89234499b3)
[Hubot / ChatOps とは](http://qiita.com/bouzuya/items/c7d0ad80c357aab6b696)

# Twilio への登録、ID の取得など

電話をかけるために、なにはともあれ [Twilio](http://twilio.kddi-web.com) への登録をします。アカウントを登録したら、アカウントセッティングのページに行き `AccountSID` と `AuthToken` と `コール元の電話番号` をひかえます。

そうそう、トライアルではひとつの番号にしかかけられないため、色んな番号にかけたいのであればクレジットカードの登録が必要です。

# Hubot-twilio-call のインストール

`npm install --save hbkr/hubot-twilio-call`

[GitHubに置いてるスクリプト](https://github.com/hbkr/hubot-twilio-call/blob/master/src/twilio-call.coffee)を直接 `hubot/scripts` 配下にぶっこんでもらっても大丈夫ですが、下記依存モジュールの追加をお願いします。

`npm install --save twilio querystring`

## 環境変数のセット

上記 Twilio で取得したデータをセットします。

```bash
$ heroku create
$ heroku config:set HUBOT_TWILIO_ACCOUNT_SID=<Twilio AccountSID>
$ heroku config:set HUBOT_TWILIO_AUTH_TOKEN=<Twilio AuthToken>
$ heroku config:set HUBOT_TWILIO_FROM_PHONE_NUMBER=<取得した twilio の電話番号>
$ heroku config:set HUBOT_TWILIO_VOICE_TYPE=<man or woman>
$ git push heroku master
```

# ピザを注文してみる

これで無事にSlack からピザを注文できるようになりましたので、ピザハット渋谷１丁目店に注文してみます。

```
ieiri> hubot +81354531112 東京都渋谷区道玄坂2-10-12株式会社キメラまで、ピザを１枚お願いします。
hubot> Calling to +81354531112
```

## 結果

合成音声が不審がられたのか、注文は通りませんでした。無念です。

# おまけ

SMS送信機能もつけてみました。これはこれで便利かもですね。
`hubot sms +818044431800 起きろ！`
こんな感じ。
CSVからSQLを生成するツールを作った

CSVからSQLを生成するツールを作った http://ponkotuy.github.io/csv2sql

## モチベ
巷にあるSQL生成ツールが生成するSQLが気に入らなかったのと、ReactJSとgulpを試したかった。

## ReactJS
とりあえずFirst impressionとしては、AngularJSよりカスタム性高そうってことだった。逆に言うとAngularJSと同じことをやろうとすると手間が多いかも。個人的にはAngularJSより覚えることは少なそう。大体同じようなことが出来そうなイメージ。

※個人の感想であり(以下略

## gulp
Gruntを前使ってたので比較すると、別に言う程優れている訳でもなさそう。まぁどっちでもしたいことがサクッと書けそうだし特に不満はない。ああでもgulp-plumberという仕組みはクソだと思う。

## 今後
とりあえずTSVはすぐ対応できるのでするけどUIどうするかな。ダウンロードボタンもコード上ではある(コメントアウトされてる)ので、はよ作りたい。

本当はUPSERT系も作りたかったんだけどRDBMS依存なので結構面倒そう。PR待ちか？w
Jadeである要素の子に複数要素を記述する方法

## 悩みました

```html
<p>
  ◯◯◯◯◯のページ<a href="#">リンク</a><br>
  ほげほげ
</p>
```

こんなHTMLをJadeで書きたかったのですが、単純にどうやって書いたらいいのか迷いました。

## 答え

```jade
p
 | ◯◯◯◯◯のページ
 a(href="#")リンク
 br
 | ほげほげ
```
パイプを使うとOK!
Ruby on Rails で vote (like, dislike, unvote) 出来るアプリケーションを作る (acts_as_votable)

#### [>>> デモサイトはこちらです <<<](https://yuto-vote-system.herokuapp.com)

#### [>>> 参考：Bootstrapの開発環境を自動的に作る <<<](http://qiita.com/YutoYasunaga/items/f53e62d850570eb85e4f)

このアプリケーションでは、ユーザーはLike、Dislike、またはUnvote出来る機能を追加したいと思います。

![Screen Shot 2015-05-31 at 23.48.46.png](https://qiita-image-store.s3.amazonaws.com/0/35605/4ae10c18-36d9-52a2-7088-117b5518dee8.png)


```ruby:Gemfile
gem 'acts_as_votable'
gem 'devise'
```

### ユーザー登録を作成

##### Deviseをインストール：

`rails g devise:install`

##### ユーザーモデルを作る：

`rails g devise User`

##### ユーザー登録のリンクを付ける

```ruby:app/views/layouts/application.html.slim
- if user_signed_in?
  li Signed in as #{current_user.email}
  li = link_to 'Sign out', destroy_user_session_path, method: :delete
- else
  li = link_to 'Sign up', new_user_registration_path
  li = link_to 'Sign in', new_user_session_path
```


### 記事を作成

##### ArticleのScaffoldを作る

`rails g scaffold Article title content:text`

##### データベースをマイグレート：

`rake db:migrate`

### これからVoteのシステムを作ります

```ruby:config/routes.rb
  resources :articles do
    member do
      put 'like'    => 'articles#like'
      put 'dislike' => 'articles#dislike'
      put 'unvote'  => 'articles#unvote'
    end
  end
```

**ユーザーはVoteします**

```ruby:app/models/user.rb
acts_as_voter
```

**記事はVoteされます**

```ruby:app/models/article.rb
acts_as_votable
```

```ruby:app/controllers/articles_controller.rb
  before_action :set_article, only: [:show, :edit, :update, :destroy, :like, :dislike, :unvote]
  
  def like
    @article.liked_by current_user
    redirect_to @article, notice: "You liked this!"
  end

  def dislike
    @article.disliked_by current_user
    redirect_to @article, notice: "You disliked this!"
  end

  def unvote
    @article.unvote_by current_user
    redirect_to @article, notice: "You unvoted this!"
  end
```

#### 記事に関するメソッド：

Voteを数える：`@article.votes_for.size`

Likeを数える：`@article.get_likes.size`

Dislikeを数える：`@article.get_dislike.size`

Likeされたユーザー：`@article.votes_for.up.by_type(User).voters`

Dislikeされたユーザー：`@article.votes_for.down.by_type(User).voters`


#### ユーザーに関するメソッド：

Likeしたかどうかを確認：`current_user.voted_up_on? @article`

Dislikeしたかどうかを確認：`current_user.voted_down_on? @article`

Likeした記事：`current_user.votes.up.for_type(Article).votables`

Dislikeした記事：`current_user.votes.down.for_type(Article).votables`

```ruby:app/views/articles/show.html.slim
= link_to 'Like', like_article_path(@article), method: :put
= link_to 'Dislike', dislike_article_path(@article), method: :put
= link_to 'Unvote', unvote_article_path(@article), method: :put
```
さくらのクラウドのアーカイブ作成をコンソールから簡単に実行する

「さくらのクラウド」のアーカイブ作成をコンソールから実行するためのgemを作成したので、使い方を紹介します。
## 概要
このgemを使用することにより、コンソールから簡単に複数のディスクのアーカイブを作成できます。
また、アーカイブ作成時に古いアーカイブの削除を同時に行うことも可能です。
cronで定期的に実行するように設定することで、面倒なバックアップ作業を自動化できます。

## インストール
    gem install sarchive
    
## 基本的な使い方
1. 設定ファイルの生成
デフォルトではカレントディレクトリに`sarchive.config.yml`を生成します。
生成先を変更する場合は`--path`オプションでパスを指定してください。

        sarchive init [--path] (</path/to/config/sarchive.config.yml>)
2. 設定ファイルの編集
実行に必要となるAPIキーや、アーカイブ作成対象のディスクを指定してください。
APIキーは[コントロールパネル](https://secure.sakura.ad.jp/cloud/iaas/#!/pref/apikey/)から作成できます。

        token:   # コンパネで作成したAPIキーのaccess-tokenを指定してください
        secret:  # コンパネで作成したAPIキーのaccess-token-secretを指定してください
        disks:
          tk1v:  # 対象のゾーン名 (tk1a: 東京第1, is1a: 石狩第1, is1b: 石狩第2, tk1v: Sandbox)
            - 999999999999 # 対象ディスクのID
            - 999999999999 # 複数指定可
    
3. 実行
デフォルトではカレントディレクトリの`sarchive.config.yml`をもとに実行します。
読み込む設定ファイルを変更する場合は、`--path`オプションでパスを指定してください。

        sarchive exec [--path] (</path/to/config/sarchive.config.yml>)

## その他の機能
### アーカイブ自動削除
アーカイブ作成と同時に古いアーカイブを削除することができます。
以下のように設定ファイルを編集してください。

    auto_delete:
    enable: true  # trueを指定し自動削除を有効にしてください
    store:        # 何を基準にアーカイブを削除するかの設定です。counts, hoursのどちらか一方を指定してください
      # counts: 3
      # hours : 72

- `counts`  
数を基準に削除を行います。仮に3を指定した場合、新しい順に3個残して4つ目以降を削除します。  
- `hours`  
経過時間を基準に削除を行います。仮に72を指定した場合、作成から72時間より多く経過しているものを削除します。

## 注意事項
プロダクション環境で利用する前に[Sandbox](http://cloud-news.sakura.ad.jp/sandbox/)でテストすることを推奨します。
本プログラムを使用して損害が発生した場合も、本プログラム作成者は一切の責任を負いません。

## ライセンス
MIT

## ソースコード
[GitHub - hogesuke/sarchive](https://github.com/hogesuke/sarchive)
Eclipse 4.4 (Luna) でBabelをインストールして日本語化した後にキー入力が効かなくなった場合の対応

コマンドラインでeclipseのインストールされているフォルダに移動して、
<pre>
eclipse.exe -clean
</pre>
をする。

そういうことだったんですよ…っ！(震え声

なお、私の場合は上記の対応で直りましたが他にもこういうものもあるよう。

http://d.hatena.ne.jp/masa_m_0074/20150112/1421070665

<pre>
--launcher.GTK_version
3
</pre>
をiniファイルの
<pre>
--launcher.defaultAction
</pre>
の上あたりに追加するというもの。
MacでPhaser使ってゲーム作る話 #003 敵の動きを作る


# はじめに
[前回までの記事](http://qiita.com/orzngo/items/703daf24798ccbc24fdd)で、画面にキャラクターを出すところまではかけたので、今回は敵を作ります。
シューティングゲームにおいて、敵を作るという事は、どのように敵を動かすかだと思います。さらに単純化すると、**画面にどのように線を引くか、**となります。

# Phaserのライン計算機能を使う
[オフィシャルチュートリアル](https://phaser.io/tutorials/coding-tips-008)に、曲線に関する機能の紹介があります。
Phaserには、任意の二次元座標の配列と、それを結ぶアルゴリズム、スプライトがその線上の何%の位置にいるのか、を指定する事で、その時点での座標を算出する機能が備わっています。アルゴリズムは直線、スプライン、ベジエに対応しています。

## 結果のキャッシュ
この機能は、座標の集合とスプライトの位置を指定するたびに座標を計算して返すため、ややCPUを食います。このため、座標の集合が動的に変化しないのであれば、計算結果をキャッシュしておく機構があった方がよいです。連続曲線の座標を配列に持つ訳です。
座標の集合が動的に変わる例としては、自機の座標にあわせて誘導する敵が挙げられます。
計算結果をキャッシュしておく都合上、敵キャラの移動パターンは予め数種類用意しておき、それらの組み合わせで複雑な動きをさせた方がよいと思います。

# 

# おまけ：僕の実装例
![move.gif](https://qiita-image-store.s3.amazonaws.com/0/40020/eff899fd-b207-543c-0b02-27ab97bf66a4.gif)

フレームレートが低いですが、こんな感じで、曲線を描いてスプライトを動かせます。
この例では、同じモーション（計算結果のキャッシュ）を３つのスプライトで共有しています。
各々、初期位置とスピードが違うだけですが、わりとそれっぽく見える物ですね。

モーションデータは、点の座標を４個ほど入力し、それを全てつなぐ曲線を計算し、計算結果の座標を1200個の配列に保持しています。
各スプライトが、毎フレーム、1200個の配列の先頭から座標を取得し、自分の開始地点などを加味して現在座標を算出してそこにレンダリングされます。スピードが速いスプライトは、配列のインデックスを進める量の多さで実現しています。


あとでギッハブのURLもはっておきます。

# おまけ２：あたり判定の罠
Phaserには、Spriteが画面外へ出たらkill()を実行する、outofBoundsKillというプロパティが生えています。
結構便利なように見えますが、これを有効にした場合、そのSpriteは毎フレーム、**スプライト全体が画面外に出ていないか**チェックされます。
簡単に言うと、スプライトが四角形だった場合に、その４つの頂点の座標全てが、画面外に出ていないか毎フレームチェックしているという事です。**計算量４倍です。**

多くの場合において、そこまでの精度は必要ない事が多いです。スプライトの座標が、画面外へ充分離れたらkill()を呼ぶ、というのを各Spriteのupdate()内でやった方がマシだと思います。これなら、どんな多角形であろうと、計算は最大４回ですみます。
（Spriteのサイズと画面のサイズが予め定まっている場合）
実際ドキュメントにも

>This is a relatively expensive operation, especially if enabled on hundreds of Game Objects. So enable it only if you know it's required, or you have tested performance and find it acceptable.

（この処理は、特に数百のスプライトに適用すると、わりと高負荷なので、必要な時にonにするか、テストしつつ処理量を見極めて使ってね）
と書いてあります。利用する場合はご注意ください。
Unityで定数を定義する

Const.csでnamespaceを宣言、public staticなクラスを定義して
Main.csでusing Constして参照しています。

```csharp:Const.cs
namespace Const {
	
	public static class CO {
		public const int CONST_INT = 10;

		public static readonly float[] CONST_LIST = {
			1.0f, 2.0f, 3.0f
		};
	
	}
	
}
```

```csharp:Main.cs
using UnityEngine;
using System.Collections;

using Const;

public class Main : MonoBehaviour {

	// Use this for initialization
	void Start () {
		Debug.Log (Const.CO.CONST_INT);
		Debug.Log (Const.CO.CONST_LIST[0]);
	}

}
```

-----
##追記

上の書き方だと配列の内容の変更まで制限してくれないらしいので以下の書き方がよさげ。

```csharp:Const.cs
namespace Const {
	
	public static class CO {
		public const int CONST_INT = 10;

		public static readonly ReadOnlyCollection<float> CONST_LIST = 
                    Array.AsReadOnly(new float[] {1.0f, 2.0f, 3.0f});
	
	}
	
}
```
Ionic Frameworkをはじめる ~ Getting Started ~


[Getting Started with Ionic - Ionic Framework](http://ionicframework.com/getting-started/)をやってみたので忘れないようにメモを書きました。初投稿です。

# 開発環境を整える
OSX Yosemite (10.10.3)
## 準備しておくもの（OSX）
### 最新版のXCode
[こちら(MacAppStore)](https://itunes.apple.com/jp/app/xcode/id497799835?mt=12)から**最新版のXCode**をダウンロードし、インストールします！
この中には、**iOSエミュレータ**も含まれています。
### Node.js
Node.jsのバージョン管理をしてくれる**nodebrew**でインストールしておくと、便利かつ使いやすそうです。
僕は**Homebrew**を使っているので、このサイトを参考にしました！

[【Mac】nodebrewのインストールとコマンドなど使い方まとめ | TASK NOTES](http://www.task-notes.com/entry/20141130/1417319179)

## Ionic関係をインストール
まず、Node.jsのモジュール管理ツール**npm**で**cordovaモジュール**と**ionicモジュール**をインストールします。

```bash
$ npm install -g cordova ionic
```

オプション -g は**グローバルインストール**と呼ばれ、これでシステムにパスが通ります。
つまり、システム全域でコマンド（モジュール）が使えるようになります。

追加で、ターミナルからiOSエミュレータを動作させるのに**ios-simモジュール**が必要なのでインストールします。

```bash
$ npm install -g ios-sim
```

# Ionicプロジェクトを作成

Ionicプロジェクトはこのコマンドで作成します。

```bash
$ ionic start myApp tabs
```
※ Cordovaでは「cordova create」となるように、ionicとcordovaではコマンドがちょっとずつ違ったりします！

「myApp」という名称の新しいフォルダに、tabsテンプレートの内容が展開されます。

テンプレートはblank（特別何も無い）, tabs（タブ型ナビゲーション）, sidemenu（ドロワー型ナビゲーション）の3つから、なんとなく作りたいものを選びます。

![Getting_Started_with_Ionic_-_Ionic_Framework.png](https://qiita-image-store.s3.amazonaws.com/0/81065/dbed9e3b-d657-e832-98b4-dcd1a32d0bd7.png "Getting_Started_with_Ionic_-_Ionic_Framework.png")


# そして動かす

先ほど作られたフォルダへ移動し、対象プラットフォームにiOSを追加。

```bash
$ cd myApp
$ cd ionic platform add ios
```

**ビルドした後**、**エミュレーターを起動**します。

```bash
$ ionic build ios
$ ionic emulate ios
```

iOSエミュレータが起動し、アプリが起動します。

![iOS Simulator Screen Shot 2015.06.01 0.26.37.png](https://qiita-image-store.s3.amazonaws.com/0/81065/31fea8b4-5d7b-1313-77a4-e7722ad90912.png "iOS Simulator Screen Shot 2015.06.01 0.26.37.png")

# ふり返って
わざわざ書くほどの内容なのかよく考えるべきだったのかもしれないです。
GoのDockerで自動的にimport packageが入るからくり

[Goの公式Docker](https://registry.hub.docker.com/_/golang/)で自動的に使用しているパッケージが入ったのでなんで？って思ってずーっと調べてた。
どんな大掛かりなからくりなんだろうと思って調べていたが、結局対象のGoアプリディレクトリで
`$ go get -v -d`
を使うと使用するパッケージが自動で入るようだった。
フラグつけるだけだったとは・・・。

もうちょっと深く調べた所、
-vは[go getのフラグ](https://golang.org/cmd/go/#hdr-Download_and_install_packages_and_dependencies)には無く、[go buildのフラグ](https://golang.org/cmd/go/#hdr-Compile_packages_and_dependencies)でした。
> -v
	print the names of packages as they are compiled.

(go buildのフラグはgo getでも使える)
> go get [-d] [-f] [-fix] [-t] [-u] [build flags] [packages]

go buildで指定すると使用している外部パッケージが表示された。
buildの場合、パッケージのダウンロードはされなかった。

でも、「go getの時に使うと自動で必要パッケージダウンロードするよ〜」みたいなことは書いてないな〜

ちなみに-dはダウンロードだけでインストールはしないというフラグ。

今まで一つ一つ使用するパッケージを`$ go get package_name`としていたのでこれからはこれ使おうと思います。

**2015/07/18追記**

`package main`が書かれているファイルがある階層で
`$ go get`
を実行するだけでいいようです。
`-v`オプションはログを表示するオプションでした。

また、`package main`が書かれているファイルがカレントに無い場合、
(カレントより深い階層に`package main`が書かれているファイルがある場合)
`$ go get ./...`
を実行するとすべてのパッケージが入ります。
ログを表示する場合は`$ go get -v ./...`かな。
新規作成したローカルリポジトリをGitHubのリモートリポジトリにpushする

    $ cd gitで管理したいディレクトリ
    $ git init
    $ git add .
    $ git commit -m "コミットメッセージ"
    $ git remote add origin git@github.com:アカウント名/リモートリポジトリ名.git
    $ git push -u origin master
Toppers/ASPのRenesas RXアーキテクチャ GCC版

#Toppers/ASPのRenasas RXアーキテクチャ GCC版を公開しました。
オープンソースの組み込み向けRTOS Toppers/aspのRenesas RX GCC版が無かったので作ってみました。

##ソースコード
ソースコードはRXアーキテクチャのHEW版を修正して作成しました。(主にアセンブラ、割込みベクタ、リンカ周りの修正です。)
ソースコードは以下を参照してください。
https://github.com/farmer-bism/bismath_evalkit_target

~~公開したソースコードはRX依存部のみです。 カーネル本体はToppersプロジェクトからダウンロードしてください(https://www.toppers.jp/asp-kernel.html)~~ tinetをマージするためにカーネル本体も登録しました。
ターゲットはGR-SAKURA(http://sakuraboard.net/gr-sakura.html )です。
コンフィギュレータはOSに依存になるため登録していません。toppersのサイト(https://www.toppers.jp/cfg-download.html)からダウンロードしてください。


##開発環境
開発環境は以下の通りです。
OS: Windows8.1のVM(Hyper-V)にインストールしたUbuntu
クロスツール: GCC 4.8.4, Binutils 2.24.90 Newlib 2.2.0
開発環境は本家のソースコードからコンパイルして使用しています(KPITのものは使用していません)
クロスツールのコンパイルオプションは次のサイト(http://dev.inventit.io/blog/embedded_c/embedded_cxx/renesas_rx/2013/11/15/cross-gcc.html )を参考にしました。

##検証状況
動作検証はLED点滅、tinetのエコーサーバを動かしてみた程度です。これから評価を進めていきます。
UARTのドライバは評価していないので、ログ出力を有効にすると動かないかもしれません。

##注意
IDコードはすべて0xFで埋めています。
デフォルトではデバッガの接続を受け付ける、ROMコードの保護が無効になっています。
"Your account already has a valid iOS distribution certificate" というエラーが出た時の解消法

Xcode で ipa に Export したり、"Submit To App Store..." をしようとした時に、以下の様なエラーが出る時がある。
// Xcode 5 を 6 に上げたら出るようになったような…

```
Failed to locate or generate matching signing assets:

Your account already has a valid iOS Distribution certificate
...
```

![Screen Shot 2015-06-20 at 4.26.46 PM.png](https://qiita-image-store.s3.amazonaws.com/0/1635/12d66021-1b5e-0446-6785-ce8eeb1caef5.png)

これは、Distribution 証明書が Apple Developer Member Center で登録されているが、ローカルには存在しないというエラーである。

そのため、Member Center で登録している Distribution の証明書を正しくインストールすれば解消する。

以下、このアプリの本番署名用の、3つのファイルが必要になる。

- 証明書
    - ```*.cer```
- 秘密鍵
    - ```*.p12```
- Provisioning Profile
    - ```*.mobileprovision```

証明書と秘密鍵がインストールされているかどうかは KeychainAccess.app で確認できる。

もし、別の PC で作成した証明書を使っていて、p12 が手に入らない場合等は、最終手段として Revoke して作りなおす必要がある。

# どうしてもこのエラーが解消できない時
どうしても解消できないが、ipa を作成したい場合、回避方法が2種類ある。

1. コマンドからビルドする
  - 以下の様な方法で xcodebuild コマンドを使って ipa を Export する
      - http://qiita.com/sea_mountain/items/6bb386d0fe6d7b4fffba
2. Xcode 5 の Organizer を使って Export する
  - Xcode 6 だとこの問題が発生するが、Xcode 5 を使うと Export できる
      - Xcode 5 を開き、メニューバーの Window > Organizer を使って Export すると、このエラーが発生しない
WSHでVirtualBoxの仮想マシンを起動する

WSH上のJScriptでVirtualBoxの仮想マシンを起動させてみました。例では「Windows 8.1 Pro JP 32bit」という名前を指定して起動します。まずは、これを出発点に色々実験しようと思っています。

```js
var vb = WScript.CreateObject("VirtualBox.VirtualBox");
var session = WScript.CreateObject("VirtualBox.Session");
var machine = vb.findMachine("Windows 8.1 Pro JP 32bit");
// WScript.echo(machine.id);
var progress = machine.launchVMProcess(session, "gui", "");
progress.waitForCompletion(-1);
```
Xcode6でプロジェクト名とBundle Identifierを変更する方法

基本的には[Xcode 4でプロジェクトの名称変更](https://nolili.wordpress.com/2011/06/04/xcode-4%E3%81%A7%E3%83%97%E3%83%AD%E3%82%B8%E3%82%A7%E3%82%AF%E3%83%88%E3%81%AE%E5%90%8D%E7%A7%B0%E5%A4%89%E6%9B%B4/)や[Xcodeでプロジェクト名を変更する方法](http://qiita.com/284km/items/2cca044af2085ee8df6b)と同じようにできました。
ただし、cocoapodsを使用している場合 xcworkspace ファイルは更新されないので再度`$ pod install`が必要でした。

## 手順
1. Projectを選択
2. 右側のインスペクタでIdentity and TypeのNameを変更
3. 確認画面で確認後Renameボタンを押す
4. `$ pod install`を行う
5. 古いxcworkspace ファイルはいらないので削除

その他、フォルダ名は変わっていないので手動で変更しました。この辺自動で行う良い方法はないのかな。
libGDXの基礎１４ ゲームパッドを使う

libGDXとはWindows、Linux、Mac、Android、iPhone、HTMLに対応したクロスプラットフォームゲームライブラリです。有名なIngressでも利用されています。欧米ではわりとメジャーどころです。


#ゲームパッドを使いたい

キーボードやマウス、タッチパネルなどでもゲームはできますが、アクション系に関してはやはり物理的にゲームに適したインターフェースである、ゲームパッド、ジョイスティックといったインターフェースも対応したいことはかなりあります。

今回はそれを使う方法を解説します。


#対応プラットフォーム

libGDXにはコントローラエクステンションがあり、対応しているプラットフォームはDesktop（Windows、Mac、Linux）とAndroid、そしてHTMLです。現時点ではiOSは対応していません。

手元ではパッドが使える環境はPCしかないため、Desktopのみで解説します。

#まずはゲームパッドの動作確認

コードを書く前にパッドがちゃんとOSから認識されているか確認しましょう。

たとえばWindowsであればコントロールパネルから確認可能です。

![0620-01.png](https://qiita-image-store.s3.amazonaws.com/0/46371/1b7c6180-5c38-24d5-ad0b-29717c312176.png)

どのボタンを押したらどう動くかは把握しておいてください。

これはPS2のパッドの変換器です。この変換器でマッピングされるボタンは以下のようになっています。
マッピングは右側のボタン4つはそれぞれボタン1-4。
L2、R2、L1、R1がボタン5-8。
スタートボタンとセレクトボタンがそれぞれ9と10。
アナログレバーの押し込みがボタン11と12です。

XとYはデジタルでそれぞれ-1、0、1を表していて、X軸は0がニュートラル、-1が左、1が右を表しています。Y軸は上が-1で0がニュートラル、1が下です。

アナログモードにすると左アナログレバーの入力が可能になり、XとYは-1から1の間の微妙な数値が出るようになります。

右アナログレバーは左右方向に動かすとZ軸、上下方向に動かすとZ回転に割り当てられています。が、ContollerからはZ軸の方しか正常に取得できていないようですので右アナログレバーは無視することにします。

#セットアップ

libgdxのgdx-setup.jarを起動すると利用するエクステンションをチェックボックスで設定できます。ここにコントローラがあるのでこれにチェックをするとライブラリは組み込まれた形ですぐに利用できます。

![0620-02.png](https://qiita-image-store.s3.amazonaws.com/0/46371/9d21f3d4-b848-fc69-62bb-bf6db3a60f1d.png)

すでにセットアップ済みの場合はbuild.gradleの依存に以下の行を追加します。

coreの依存箇所

```
compile "com.badlogicgames.gdx:gdx-controllers:$gdxVersion"
```

desktopの依存箇所

```
compile "com.badlogicgames.gdx:gdx-controllers-desktop:$gdxVersion"
compile "com.badlogicgames.gdx:gdx-controllers-platform:$gdxVersion:natives-desktop"
```

antなどの場合はアーカイブのextensions/gdx-controllersにある各種実装を追加してください。gdx-controllers.jarはAPIインターフェースですのでこちらをcore部分に追加してください。


#プログラム

##接続されているゲームパッド一覧を取得する

```java
Array<Controller> controllers = Controllers.getControllers();
```

##名前を取得する

```java
  String name = controller.getName();
```

##十字キーの状態取得

```java
//十字キーの左右(-1.0 ～ 1.0)
float axis = controller.getAxis(3);
if(Math.abs(axis) > 0.5f ){
    System.out.println("X="+axis);
}

//十字キーの上下(-1.0 ～ 1.0)
float axis = controller.getAxis(2);
if(Math.abs(axis) > 0.5f ){
    System.out.println("Y="+axis);
}
```
自分の環境では3と2がそれぞれX軸とY軸でした。

##ボタンを押しているかどうか調べる

```java
//1つ目のボタン
boolean isPress = controller.getButton(0);
if(isPress){
    System.out.println("1ボタン");
}
```

##イベント

ポーリングではなくイベントで取得したい場合は以下のようになります。ControllerAdapterはControllerListenerの空実装なのでこれを継承してイベント処理をしたいところだけオーバーライドしてください。

```java
controller.addListener(new ControllerAdapter(){

    @Override
    public boolean axisMoved(Controller controller, int axisIndex, float value) {
        System.out.println("axis "+axisIndex+"="+value);
        return true;
    }

    @Override
    public boolean buttonDown(Controller controller, int buttonIndex) {
        System.out.println("button down="+buttonIndex);
        return true;
    }

    @Override
    public boolean buttonUp(Controller controller, int buttonIndex) {
        System.out.println("button up="+buttonIndex);
        return true;
    }

});
```

パッドの抜き差しもあるのですが、自分の環境ではイベントで取れませんでした。

ボタンのIDなどはOUYAのみマッピングはすでに用意されているようです。
Xcodeのプロジェクトをターミナルから開く方法

Macのターミナルで以下のようにコマンドを入力する。
openコマンドの第１引数にXcodeのパス、第２引数に開きたいXcodeのプロジェクトのパスを指定。
これで複数のディレクトリにまたがった同名のXcodeプロジェクトがあっても迷わずに開くことができる。

```lang:ターミナル
open /Applications/Xcode.app/ sample.xcodeproj/
```
LXCのストレージバックエンドでbtrfsを使う


ベースはこれ。
http://qiita.com/kinumi/items/024dde6a39d23dbb90b7

これで入れたlxcのストレージバックエンドにbtrfsを使えるようにする。
btrfsにすることで、クローンやスナップショットが便利になる。

## btrfsパーティションの準備

すべての領域を使ってXubuntuをインストールしてあるため、
btrfsのパーティションを作るために既存のパーティションを縮小する。

**この作業はXubuntuのライブUSBでブートして行う。**

### 1. 既存パーティションの縮小

- GPartedを起動
- /dev/sda1を右クリックし「Resize/Move」
- 「New size」を「20480」(20GB)に変更して「Resize/Move」
- 「Apply All Operations」で適用

こんな感じ
![縮小結果](https://qiita-image-store.s3.amazonaws.com/0/83429/3008ac9a-0b38-261d-c23a-e49a61018139.png "縮小結果")

### 2. 新規パーティションの作成

- unallocatedな領域を右クリックし「New」
- 「Filesystem」に「btrfs」を選択して「Add」
- 「Apply All Operations」で適用

こんな感じ
![作成結果](https://qiita-image-store.s3.amazonaws.com/0/83429/05ae0447-83fa-613e-5192-8f24f9c6b80a.png "作成結果")

## btrfsパーティションの設定

**この作業は通常どおりXubuntuをブートして行う。**

### 1. btrfs-toolsの導入

```bash:btrfs-tools導入
$ apt-get install btrfs-tools
```

### 2. サブボリュームの作成、マウント

こちらを参考に実施
http://gihyo.jp/admin/serial/01/linux_containers/0020

```bash:サブボリュームの作成、マウント
$ sudo mkdir /mnt/temp
$ sudo mount /dev/sda3 /mnt/temp
$ cd /mnt/temp
$ sudo btrfs sub create lxc
$ sudo btrfs sub create lxcsnaps
$ sudo vi /etc/fstab #下記参照
$ sudo mount -a
$ sudo umount /mnt/temp
$ sudo rm -r /mnt/temp
```

```bash:fstabに追記する内容
/dev/sda3 /var/lib/lxc      btrfs subvol=lxc      0 0
/dev/sda3 /var/lib/lxcsnaps btrfs subvol=lxcsnaps 0 0
```

## コンテナの作成

こんなかんじで使える

```bash:コンテナの作成
$ sudo lxc-create -n test -t ubuntu -B btrfs
$ sudo lxc-ls
test
```
【Ruby on Rails】Foundation5 flash message with slim

```ruby:app/views/layouts/_message.html.slim
- flash.each do |name, msg|
  - if msg.is_a?(String)
    div data-alert='' class="alert-box round #{name.to_s == 'notice' ? 'success' : 'alert'}"
      = content_tag :div, msg
      a href='#' class='close' &times;
```
Windows に OpenLDAP を入れてみる

# 背景

Windowsでチーム開発の環境を色々整えている。
Redmine とか Jankins とか SonarQube とか GitBucket とか色々なツールを入れているとユーザ管理が面倒になってくる。
Redmine と Subversion は認証連携があるのでこれでしのいでいたのだけど、最近上に挙げたような色々なツールを入れようとしている。

# 2つのOpenLDAP for Windows

[SourceForge](http://sourceforge.net/projects/openldapwindows/) と 
[userbooster](http://www.userbooster.de/en/download/openldap-for-windows.aspx) の2つがある様子。

試したところ、SourceForge版はサービス化ができないみたいで、いちいち起動しないといけなくてめんどい。
よって、userbooster版を利用することにする。
ちなみに、ライセンスはどちらもOpenLDAP Public Licenseになっている。

インストールは適当にNextを押していけばよいのだが1点だけ注意。

![openldapインストール.png](https://qiita-image-store.s3.amazonaws.com/0/53147/9901e651-2f95-005d-1464-37c74779a6fb.png)

ここのDejaVu Sans Mono Font fow Windows Consoleは入れると危なそうなのでチェックを外しておく。（Unicodeサポートのフォントらしい）
・・・

途中管理者パスワードを2回聞かれるけど違いが良くわかっていない・・・
しかも、デフォルトのslapd.confはパスワードがsecretのSSHAになっているっぽい。

派手なインストーラの割には肝心なLDAPデータベースのsuffixとか聞いてくれないので、インストール後にサービスを停止してslapd.confを編集する必要がある。

なんか謎のエラーにより、MDBバックエンドはうまく動かないので、BDBバックエンドにする必要がある。
JenkinsやSonarQubeがクエリ送るときにderef=3（ldapsearch だと -a alwaysオプションをつけたのに相当）が付いていて、そのとき、めちゃくちゃ時間がかかって、タイムアウトになってしまうという問題があるみたいだ。Redmineはderef=0で送るので問題なかったけど、BDBにしておくのが無難そうだ。
Crystal：オブジェクトに対する暗黙の文字列変換

<i class="fa fa-exclamation-triangle"></i> <a href="#-追記">追記</a>あり

RubyからCrystalへ移植しようとして躓いた点その1。
Rubyだとオブジェクトに `to_s()` メソッドが定義されていれば，`puts` や文字列内の式展開で暗黙のうちに `to_s()` で文字列変換された結果が使用される。一方，Crystalでは `to_s()` を定義しただけでは，暗黙の文字列変換で使用されない。

```ruby:person.rb
class Person
  def initialize(name)
    @name = name
  end

  def to_s
    "Hi, I'm #{@name}."
  end
end

puts Person.new("John")
```

上記のRubyソースコードは，Crystalでも問題なく実行可能だが，その実行結果はRubyとは異なっている。

```
$ ruby person.rb
Hi, I'm John.
```

```
$ crystal person.rb
#<Person:0x10cda3ec0>
```

Crystalでオブジェクトが暗黙の文字列変換を行うためには，`to_s()` ではなく引数に **IO** オブジェクトを取る `to_s(IO)` を実装しなければならない。（Crystalではオーバーロードが可能）
この `to_s(IO)` で，変換後の文字列を `to_slice` で **Slice**オブジェクト化したものを，**IO** オブジェクトの `write` メソッドに与えてやる。
例えば，

```ruby:person.cr
class Person
  def initialize(name)
    @name = name
  end

  def to_s
    "Hi, I'm #{@name}."
  end

  def to_s(io : IO)
    io.write to_s.to_slice
  end

end

puts Person.new("John")
```

のようにすることで，暗黙の文字列変換が機能するようになる。

```
$ crystal person.rb
Hi, I'm John.
```

（とはいえ，同じ `to_s` という名前なのに `to_s(IO)` が文字列を返さないのはどうなんかなぁ）

# <i class="fa fa-exclamation-triangle"></i> 追記

コメントで指摘していただいた内容を追記します。

Rubyにおける `to_s` と同じことをしたい場合， `to_s()` はオーバーロードせず， `to_s(IO)` の **IO** オブジェクトに出力したい内容を与えてやれば良い，との事です。

よくよくソース見をたら，`Object#to_s()` の中で `to_s(IO)` が呼ばれてたし，ドキュメントにも

> def `to_s`
> Returns a string representation of this object.
> 
> Descendants must usually **not** override this method. Instead, they must override `#to_s(io)`, which must append to the given IO object.

って書いてあった。

Rubyの意識で `to_s()` が文字列を返すもの，という先入観があって `to_s()` のオーバーロード有りきで考えてしまったのが良くなかったです。反省。

というわけで，コメントで示してもらった代替案が以下のコード。


```ruby:person2.cr
class Person
  def initialize(name)
    @name = name
  end

  def to_s(io : IO)
    io << "Hi, I'm " << @name << "."
  end

end

puts Person.new("John")
```
```
$ crystal person2.rb
Hi, I'm John.
```
Unity エディタ拡張の作り方1

Unityのエディタ拡張は、開発中にデバッグ用に設定を変更したりとかよく使われるかと思います。
簡単に作れて便利なのですが意外と作ったことがない人が多い（弊社比w）ようでしたのでまとめてみました。

# 最初の一歩
最初にAssetsの下にEditorという名前のフォルダを作ります。
フォルダ名は必ずEditorである必要がありますがAssets直下で無くてもかまいません。
例えばAssets/MyTools/Editorでも大丈夫ですが必ずEditorでなくてはいけません。

![create.png](https://qiita-image-store.s3.amazonaws.com/0/83468/69e03e3d-5829-5c8d-8517-65d78470449c.png)

Project内で右クリックをして[create]-[C# Script]を選択してTestExtention.csというC#のファイルを作ります。

# Editor拡張を作る
MonoBehaviourを継承したいつものファイルが生成されたはずですが以下のように書き換えください。

```csharp
using UnityEngine;
using UnityEditor;
using System.Collections;

public class TestExtention : EditorWindow
{
	[MenuItem ("Window/エディタ拡張テスト")]
	public static void  ShowWindow () {
		EditorWindow.GetWindow(typeof(TestExtention));
	}

	void OnGUI () {
	}
}
```

![menu.png](https://qiita-image-store.s3.amazonaws.com/0/83468/4daf233a-ed22-8dc8-e3d2-669414218f42.png)

保存するとUnityエディタに反映されます。
※Unity4はビルドが必要かもしれない
メニューはWindowだけでなく自由に指定できます。
たとえば
>　[MenuItem ("Window/エディタ拡張テスト")]

の行を
>　[MenuItem ("テスト/エディタ拡張テスト")]

に書き換えると

![menu2.png](https://qiita-image-store.s3.amazonaws.com/0/83468/d143bffd-0fa9-2935-1dd2-1f4abfbea0a7.png)

[テスト]-[エディタ拡張テスト]というメニューが作られます。
メニューをクリックするとウインドウが表示されます。

![キャプチャ.PNG](https://qiita-image-store.s3.amazonaws.com/0/83468/ce2408a3-d22f-3090-61f9-95f83a9c5190.png)

あとはOnGUI()の中に処理を追加していくだけです。
次回はOnGUI()の中身について書きたいと思います。


参考
http://docs.unity3d.com/ja/current/Manual/editor-EditorWindows.html
Rubyで委譲…forwardable

オブジェクト指向プログラミングでは、「委譲」と呼ばれる手法があります。今回は、Rubyで委譲を行う'forwardable'について触れてみます。

# 利用例
たとえば、親クラス（`Parent`とします）があるハッシュをメンバに持っていて、しかも

* `Parent`からは、このハッシュを変更できる。
* ハッシュ自体は外部で変更されたくはないが、読み取り用としてはハッシュとして外部でも使って欲しい
* 外部から使うたびにコピーするにはハッシュが大きすぎる

というような状況にあるとします。このようなときに、「委譲」を使うことができます。

# `forwardable`モジュール
Rubyに標準添付されている[`forwardable`というライブラリ](http://docs.ruby-lang.org/ja/1.9.3/library/forwardable.html)があって、「指定されたメソッドを、特定のオブジェクトに実行させる」ことができます。クラスに`extend Forwardable`とすることで、`attr_accessor`のようなクラスメソッドとして、`def_delegators`が使えるようになります。

```rb:def_delegators
class Foo
  extend Forwardable
  def_delegators :@item, :method_1, :method_2 #...
end
```
このようにすると、`Foo`クラスのオブジェクトに`method_1`や`method_2`のようなメソッドができて、それはインスタンス変数の`@item`への呼び出しになります。

## `includes`との併用
このような形で委譲をかける場合に、`Enumerable`や`Comparable`があるクラスですべてをやろうとすると、手間になってしまいます。ただ、`Enumerable`は`each`だけあれば、`Comparable`は`<=>`だけあれば動くので、そのキーになるメソッドだけ委譲して、残りは直接`include`してしまう形で問題ありません。

```rb:include
class Bar
  extend Forwardable
  include Comparable
  include Enumerable
  #includeしたのを動かすのに必要十分なメソッドだけ借りてくる
  def_delegators :@item, :each, :<=>
end
```

#最初の例の実装
では、最初のユースケースについてフル実装します。

```rb:ReadOnlyHash
require 'forwardable'

class Parent
  class ReadOnlyHash
    extend Forwardable
    include Enumerable
    # 破壊的変更をしないメソッドだけ読み込む
    def_delegators :@hash, :each, :[], :fetch, :empty?, :clone, :dup
    def_delegators :@hash, :each_pair, :each_key, :each_value, :keys, :values
    def_delegators :@hash, :has_key?, :key?, :include?
    # 多いので以下省略
    
    def initialize(hash)
      @hash = hash
    end
  end

  #内部的にいろいろ操作する
  @hash = {  }

  #読み取りしかできないものを返す
  def hash
    ReadOnlyHash.new @hash
  end

end
```

# その他
これは`Hash`を`freeze`した場合にも通じますが、ハッシュの中身が文字列やコンテナなどの場合、要素への破壊的変更は行えてしまいますので、その点には注意が必要です。
vagrantで構築したvm(centos6.6)にruby on railsインストール（by rbenv）

##　手順

1. 必要なパッケージインストール
2. git から 必要なモノ（rbenv, ruby-build） を clone
3. rbenv動作設定
4. rbenvでrubyインストール
5. 同じくrailsインストール

※vagrantでvm（centos6.6）環境まではある前提

## 1. 必要なパッケージインストール
```
$ sudo yum install zlib zlib-devel openssl-devel sqlite-devel gcc-c++ glibc-headers libyaml-devel readline readline-devel zlib-devel libffi-devel
```

## 2. git から モノ（rbenv, ruby-build） を clone
```
$ git clone https://github.com/sstephenson/rbenv.git ~/.rbenv
$ git clone https://github.com/sstephenson/ruby-build.git ~/.rbenv/plugins/ruby-build
```

## 3. rbenv動作設定
```lang:bash_profie
$ vi ~/.bash_profile
$ export PATH=$PATH:$HOME/.rbenv/bin:$HOME/.rbenv/shims　#　これを追記
$ source ~/.bash_profile
$ rbenv -v
rbenv 0.4.0-151-g83ac0fb
```

## 4.rubyインストール
```
$ rbenv install --list
$ rbenv install 2.2.2
$ rbenv global 2.2.2
$ rbenv version
2.2.2 (set by /home/vagrant/.rbenv/version)
$ ruby -v
ruby 2.2.2p95 (2015-04-13 revision 50295) [i686-linux]
```

## 5.Railsインストール
```
$ gem update --system
$ gem install --no-ri --no-rdoc rails
```

が、自分の場合、ここで[エラー](http://qiita.com/chobi9999/items/7b66677b3bf3da8acc14)（※下記記載）となり、リンク先の通り、下記のように対応

```
$ yum -y install libxml2 libxslt libxml2-devel libxslt-devel
$ gem install nokogiri -- --use-system-libraries
$ gem install --no-ri --no-rdoc rails
```

## gem のインストール時に ri, rdoc ドキュメントを入れない設定
$ vim ~/.gemrc
gem: --no-ri --no-rdoc # 追記

## 参考
* [nokogiriをビルドできずにrailsのインストールが失敗する。](http://qiita.com/chobi9999/items/7b66677b3bf3da8acc14)
Playでapplication.confの設定値を調べたい


Playのapplication.confの設定値を環境変数や起動時の`-D`パラメータで上書きしている場合、設定値が現在何になっているかを調べたいことがあります。ここでは、どのように設定値を確認するか紹介します。

Activatorに入る。

```console
$ activator
```

コンソールを起動する

```
> console
```

コンソールで`com.typesafe.config.ConfigFactory.load.getValue("調べたいキー")`を実行する

```
scala> com.typesafe.config.ConfigFactory.load.getValue("logger")
```

コンソールに結果が表示されます。

```scala
res1: com.typesafe.config.ConfigValue = SimpleConfigObject({"application":"DEBUG","play":"INFO","root":"ERROR"})
```
Windows 10 の広告アイコンを消す方法

Microsoft は Windows 10 へのアップグレードを促す広告アイコンをタスクバーに生やした。
まさに外道！

- [MicrosoftがWindowsの更新プログラムに次期OSの広告を仕込んでいたことが判明 - GIGAZINE](http://gigazine.net/news/20150407-windows-update-trap/)
- [Windows 10 を強制する Microsoft — Medium](https://medium.com/@spiegel/-b14e93594a76)

このアイコンは通常の操作では消すことができない。まじ極道。

まぁ，でも，この件に関しては苦情が殺到したのか， Microsoft の以下のページの最後の方にひっそりとアイコンを非表示にする方法が書かれていた。

- [Windows Update からの Windows 10 へのアップグレードを予約する - Ask CORE - Site Home - TechNet Blogs](http://blogs.technet.com/b/askcorejp/archive/2015/06/04/windows-update-windows-10.aspx)

> 以下のレジストリを設定いただくことにより、KB3035583 がインストールされた環境におきましても、通知領域の Get Windows 10 アプリ アイコンからの通知を停止することが可能となります。
>
> キー : HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Gwx
> 名前 : DisableGwx
> 種類 : REG_DWORD
> 値 :  1

一般の方にレジストリ操作をさせるのは気が引けるが，このサイトはエンジニアの方がメインなので，大丈夫だろう。上のレジストリを設定するには reg コマンドを使える。ただし reg コマンドには PATH が通ってない上に管理者権限がないと使えない。

レジストリを設定するにはコマンドプロンプトを「管理者として実行」した上で以下のコマンドを入力すればよい。

```shell
C:>cd C:\Windows\system32
C:\Windows\system32>reg add HKEY_LOCAL_MACHINE\SOFTWARE\Policies\Microsoft\Windows\Gwx /v "DisableGwx" /t REG_DWORD /d 00000001 /f
この操作を正しく終了しました。
```

念のためレジストリエディタで正しく登録されているか確認したらいいだろう。これで再起動すれば件の広告アイコンは表示されなくなる。ただし，これはアイコンを非表示にするだけでアップグレード・アプリが削除されたわけではないのでご注意を。

「Windows 10 なんて要らんお世話」という方はお試しあれ。

## 追記

その後本家のブログで

- [また Windows 10 にヤラレタ（KB3112343 の恐怖） — しっぽのさきっちょ | text.Baldanders.info](http://text.baldanders.info/remark/2015/windows-10-upgrade-problem/)

という記事を書いた。ここよりもう少しだけ情報を載せている。よろしければ参考にどうぞ。
[php]日付情報を年月日に分割して配列に入れる

# 書き方色々あります
正規表現で地道にやるなら、preg_matchを使う。

※記事下のコメントで、@tadsanさんがDateTime::createFromFormat()を使う方法を書いて下さいました。
※さらにコメントで、@ktty1220さんがexplode()を使う方法を書いて下さいました。

# 日付情報の前提条件
・年,月,日以外の情報が入っていない事(曜日とか時間とか)
・斜線または"年月日"で区切られている事

# preg_matchで書くなら
## preg_match()の引数の入れ方
preg_match("分割する条件", 分割したい値や変数, 分割した値を入れる配列);
第1引数　…　条件全体と、()で囲んだ部分がマッチする。
第2引数　…　下の例では変数を使っているが、そのまま値も入れられる
第3引数　…　[0]に全体が入り、[1]には一番左の()にマッチしたもの、[2]はその隣の()にマッチにしたものが入る。

## yyyy/mm/ddタイプの例
```php:index.php
$set_date = '2015/5/8';
$date = array();

preg_match("@([0-9]{4,})/([0-9]{1,2})/([0-9]{1,2})@",$set_date,$date);

echo $date[0]; // 2015/5/8
echo $date[1]; // 2015
echo $date[2]; // 5
echo $date[3]; // 8
```
##yyyy年mm月dd日タイプの例
```php:index.php
$set_date = '2015/5/8';
$date = array();

preg_match("/([0-9]{4,})年([0-9]{1,2})月([0-9]{1,2})日/",$set_date,$date);

echo $date[0]; // 2015/5/8
echo $date[1]; // 2015
echo $date[2]; // 5
echo $date[3]; // 8

```
#追記
@ngyuki さんからご指摘いただきました。
年が4桁限定だと、遥か未来に不具合になります確かに。
ありがとうございます。記事修正済みです。

@tadsan さんからご指摘いただきました。
DateTime::createFromFormat()での書き方ありがとうございます。
デリミタが変更できるのは初めて知りました！
そもそもデリミタが何かを知りませんでした(^^;)
ありがとうございます。記事修正済みです。

@ktty1220 さんからご指摘いただきました。
explode()での書き方ありがとうございます。
確かに、区切り文字が同じなら、わざわざ正規表現使うは必要ないですね！
ありがとうございます。記事修正済みです。
以上。
他にもなにかご指摘有ればコメント下さいませ。
node.jsのソートアルゴリズム

配列の要素数が22以下の場合は挿入ソート。
23以上の場合はクイックソート。

ここに書いてありました。
https://github.com/v8/v8-git-mirror/blob/cbf9137707edcc6c4e09b2a680667a52c3226621/src/array.js#L893