OmniAICreator/Qiita-1.07M huggingface dataset:
【C++】ランダムな色相の虹を合成

C++で彩度が均一でランダムな色相の虹のようなものを作り出そうとしたのですが、意外と工夫が必要でした。
やり方を共有しておきます。
Photoshopなどで確認してみると、彩度がmaxの色は、
1.rgbのうち一つの要素が255で
2.他の二つのうち一つの要素が0で
3.残りの一つの要素が0 ~ 255の間の値
という条件を満たしているようです。
上記の要件を満たすようなrgbの値をランダムに生成します。

```cpp
    // 虹色ランダムの合成
    int color_elem[3];
    color_elem[0] = 255;
    color_elem[1] = rand() % 256;
    color_elem[2] = 0;
    int color_r_index = rand() % 3;
    int r_bin = rand() % 2;
    int color_g_index = (color_r_index + 1 +  r_bin) % 3;
    int color_b_index = (color_r_index + 1 + !r_bin) % 3;
    // openFrameworksの色構造体に色を格納
    // color.set(red, green, blue);で色を作成できる
    ofColor color;
    color.set(color_elem[color_r_index], color_elem[color_g_index], color_elem[color_b_index]);
```

彩度を調節するためには、

```cpp
    color_elem[1] = rand() % 256;
```

のところを

```cpp
    color_elem[1] = rand() % (256 - BIUS) + BIUS;
    // 0 < BIUS <= 256
```

のようにすると良さそうです。

![スクリーンショット 2014-01-17 10.13.57.png](https://qiita-image-store.s3.amazonaws.com/0/33933/b6f93c18-8c57-9224-300b-9466decb3372.png)

ﾖｯｼｬ!ｲｲｶﾝｼﾞ!
コンソールからクリップボードにコピー

windows7以降
==============

```bash:クリップボードにコピー1
clip < .vimrc
```

```bash:クリップボードにコピー2
dir | clip
```

Mac
==============

```bash:クリップボードにコピー1
$ pbcopy < ~/.ssh/id_rsa.pub
```

```bash:クリップボードにコピー2
$ date | pbcopy
```

```bash:貼り付け
$ pbpaste
```

Linux
============

xclipだと[日本語の文字化けするらしい](http://mollifier.hatenablog.com/entry/20100317/p1)ので、xsel使うとよいとのこと。
pythonでflatten

Rubyにはネストされた配列を1次元配列にフラット化するflattenというメソッドがあるのですが、pythonでも使いたくなることがあるので、どんな方法があるか調べてみました。

```py:やりたいこと
>>> flatten([[1, 2], [3, [4, 5]]])
[1, 2, 3, 4, 5]
>>> flatten([1, [2, 3], [[4, [5, 6]], 7]])
[1, 2, 3, 4, 5, 6, 7]
```

# Qiitaで見つけた方法

http://qiita.com/kento1218@github/items/f3baf574aadb3d1cbeae

# ジェネレータ関数にする

Qiitaで見つけた方法を参考にしてジェネレータ関数にしてみました。
リスト化するには `list(flatten([[1, 2], [3, [4, 5]]]))` のようにする必要があります。

```py
def flatten(data):
    for item in data:
        if isinstance(item, list):
            yield from flatten(item)
        else:
            yield item
```

# ジェネレータ内包表記にする

```py
def flatten(data):
    return (element
            for item in data
            for element in (flatten(item) if isinstance(item, list) else [item]))
```


# リスト内包表記にする

```py
def flatten(data):
    return [element
            for item in data
            for element in (flatten(item) if isinstance(item, list) else [item])]
```

# 既存ライブラリにある関数を使う

ここで見つけました。
http://stackoverflow.com/questions/2158395/flatten-an-irregular-list-of-lists-in-python

```py
from compiler.ast import flatten
```

# sum関数を使ってリストのリストを深さ1だけflattenする

```py
>>> data = [[1, 2], [3], [4, 5, [6]]]
>>> sum(data, [])
[1, 2, 3, 4, 5, [6]]
```

# 深さ指定オプション付き関数

Rubyではフラット化する深さを指定できるので、対応してみました。

```py:flatten.py
#!/usr/bin/env python3

def flatten(data, depth=-1):
    """
    flatten(data) -> list
    flatten(data, depth) -> list

    Return flatted data of list or tupple as list.

    >>> data = [[1, 2], [3, [4, 5, [6]]]]
    >>> flatten(data)
    [1, 2, 3, 4, 5, 6]
    >>> flatten(data, 0)
    [[1, 2], [3, [4, 5, [6]]]]
    >>> flatten(data, 1)
    [1, 2, 3, [4, 5, [6]]]
    >>> flatten(data, 2)
    [1, 2, 3, 4, 5, [6]]
    >>> flatten(data, 3)
    [1, 2, 3, 4, 5, 6]
    """
    return [element
            for item in data
            for element in (flatten(item, depth - 1)
                            if depth != 0 and isinstance(item, list)
                            else [item])
            ]
```

```shell-expression
$ python -m doctest -v flatten.py
Trying:
    data = [[1, 2], [3, [4, 5, [6]]]]
Expecting nothing
ok
Trying:
    flatten(data)
Expecting:
    [1, 2, 3, 4, 5, 6]
ok
Trying:
    flatten(data,0)
Expecting:
    [[1, 2], [3, [4, 5, [6]]]]
ok
Trying:
    flatten(data, 1)
Expecting:
    [1, 2, 3, [4, 5, [6]]]
ok
Trying:
    flatten(data, 2)
Expecting:
    [1, 2, 3, 4, 5, [6]]
ok
Trying:
    flatten(data, 3)
Expecting:
    [1, 2, 3, 4, 5, 6]
ok
1 items had no tests:
    flatten
1 items passed all tests:
   6 tests in flatten.flatten
6 tests in 2 items.
6 passed and 0 failed.
Test passed.
```
proxmoxで自動バックアップの注意点

自動バックアップは非常に便利な機能ですが、以下注意点がありました。

* backup先を外部接続HDDにしていた場合、そのHDDをアンマウントしていても自動バックアップが行われます。
  * / パーティションの空き容量が減るので注意。

* backupから復元時、KVM、OpenVzのイメージ両方共MACアドレスをバックアップ時のまま復元します。
  * MACアドレスの重複に注意。confファイルを書き換えておきましょう。(XXX.confとか)
d3 + angularなdangle.jsを触ってみた

## dangle.jsって何物？
[dangle.js](http://www.fullscale.co/dangle/)は、↓なJavaScriptライブラリ.
 - [d3.js](http://d3js.org/)によるグラフ描画を[angular.js](http://angularjs.org/)のディレクティブとして提供している.
 - [elasticSearch](http://www.elasticsearch.org/)のブラウザ向け可視化用として開発されたらしい.

## 準備
必要な.jsは下記.

```html
<script src="bower_components/angular/angular.js"></script>
<script src="bower_components/d3/d3.min.js"></script>
<script src="bower_components/dangle/dist/dangle.min.js"></script>
```

bower使っているのであれば、↓を叩くと上記の構成で.jsが手に入ります.

```
$ bower install angluar
$ bower install d3
$ bower install dangle
```

### 円グラフを描画してみる
dangleはscopeのデータを各種グラフとして描画するらしいので、まずはscopeにデータを準備.

```js:main.js
angular.module('firstDangleApp', ['dangle']).controller('MainCtrl', function ($scope) {
	$scope.data1 = {
		_type: 'terms',
		terms:[{
			term: 'IE',
			count: 21 
		},{
			term: 'FireFox',
			count: 18
		},{
			term: 'Chrome',
			count: 33
		},{
			term: 'Safari',
			count: 16 
		},{
			term: 'Opera',
			count: 3
		}]
	};
});
```

APIドキュメントを読んでも、データのJSONスキーマがよく判らないが、termにデータの名称、countに対応量を書けば良いっぽい。_typeキーに'terms'以外に何を取りうるとかは不明。

んで、上記のscopeデータを描画するディレクティブは下記のようになる.

```html:index.html
<div ng-controller="MainCtrl">
  <fs-donut bind="data1" />
</div>
```

### 描画結果
↓のようになる。なお、凡例はディレクティブが勝手に出力してくれる。
![dangle01.png](https://qiita-image-store.s3.amazonaws.com/0/8808/263d9643-89bc-7b64-8970-95193566d0a1.png)

## clickによるアニメーション
なお、fsDonut(円グラフ)に限らず、fsDateHisto(日付ヒストグラム)等のfs-*ディレクティブには、on-click属性(ng-clickに非ず)を張ることができる。

下記のように、データ値を更新する関数を用意しておき、

```js
$scope.change = function(type, term){
  $scope.data1 = {...} //変更後データ(ex:term毎のcount値をいじる)
};
```

duration(単位はミリ秒)とともにfs-*ディレクティブにくっつけてやると、クリックでデータ変動をアニメーション表示することが可能.

```html:index.html
<fs-donut bind="data1" on-click="change" duration="500" />
```

## 感想
API docs見るに、対応しているグラフも円グラフ、折れ線、日別ヒストグラム、バーチャートの4種類のみであり、グラフ自体の色などもどのようにカスタマイズしたら良いのか(そもそもできんの？)不明であり、まだまだ発展途上な印象。

d3が判らなくても、angularだけでグラフ書けちゃうのは良いなぁ。

似たような(というか同一)スタックのライブラリに、[radian.js](http://openbrainsrc.github.io/Radian/index.html)が存在するが、こちらは数学的なグラフに特化している印象のため、dangle.jsとは利用シーンが少し違うのかしら...

### 参考情報
 - 本家APIドキュメント(http://www.fullscale.co/dangle/)
interfaceを使おう 

laravel4でリフレクションを使って簡単に開発出来る様になっているのは皆さんご存知だと思いますが、
よりテストもしやすく開発するのに、interfaceを使いましょう。

interfaceを使う事によって、より安全な拡張性、
(interfaceに沿って実装すれば中身が何であっても自由に拡張出来ます)
入れ替え自由(dependency injection)、など利点が沢山有ります。

では実際にlaravel4でinterfaceで実装して、テストもしやすくしてみます

```php
class CalendarController extends BaseController {

	protected $schedule;

	/**
	 * __construct
	 */
	public function __construct(\Schedule $schedule)
	{
		$this->schedule = $schedule;
	}
	
	public function getIndex()
	{
		$this->schedule->getSchedule();
	}
}
```

スケジューラー的なアプリケーションを作ってるとします。
現在はDBでしょうか
DBのみでしか実装しない場合はこのままでも大丈夫ですし、
newしている訳ではないので別にインターフェースじゃなくても・・という感じですね
例えばテストする場合はどうしましょうか？
テスト用に何か実装を作らないと・・・、
それもいいですが、もっと楽に簡単にできた方がハッピーです

DBを使ってテストすりゃいいーじゃん！と言われればそれまでなんですが・・

interfaceを使う事により、
テスト時にDBだろうが何だろうが意識せずにすむ様になります

```php
interface ScheduleInterface
{
	public function getSchedule();
}
```

簡単にgetScheduleをかならず実装しなければならないものとします。
これを書く事によって、DBだろうがmongoだろうがredisだろうがなんでも動作は保証されるようになります。

```php
class CalendarController extends BaseController {

	protected $schedule;

	/**
	 * __construct
	 */
	public function __construct(\ScheduleInterface $schedule)
	{
		$this->schedule = $schedule;
	}
	
	public function getIndex()
	{
		$this->schedule->getSchedule();
	}
}
```

interfaceにして完全に分離してしまいます。
interfaceと実装を結びつけるのはどうしたらいいの？と

そんなときにbindです

```php
App::bind('\ScheduleInterface', '\Schedule');
```

これで結びつける事ができました。
まだ利点がちょっと分かりにくいかもしれません。

ではそのままでDBを使わずにテストする様にしてみましょう。

```php
class CalendarControllerTest  extends TestCase
{
	/**
	 * __construct
	 */
    public function setUp()
    {
        parent::setUp(); 
        App::bind('\ScheduleInterface', '\Schedule\Stub');
    }
	
	public function testGetIndex()
	{
		$this->client->request('GET', '/');
		~~
	}
}
```

setUpでテストではDBを使わずにinterfaceで定義したものを実装したstubを使う様にします。
テスト用に何か特別なものを用意したりという必要がなくなりました。
テスト以外でも同様にDBから他のものへ変更しても簡単に対応できます。
interfaceから開発していく様にすればきっとモテるでしょう
同じマシンの同じリポジトリ内で複数のgithubアカウントを使い分けるためのスクリプト

##はじめに
私の所属する組織ではロボット内の共有アカウントで複数のプログラマが開発しています。

最近GitHubでソースコードを管理し始めたのですが、ロボット内の同じリポジトリ内で開発しているとコミットする時のユーザ管理が少しめんどうだったのでメモ。

同じリポジトリ内で複数のアカウントを切り替えたいのですが、調べてもリポジトリ毎に設定する方法しか見当たりませんでした。

使用者は頻繁に入れ替わるのでgitconfigをその都度書き直すのもめんどうですし、忘れそうです。

##解決策
コミット前にコミッタをチェックするスクリプトを書きました。

ソースコードは[ここ](https://github.com/DaikiMaekawa/git-check-committer)にあります。

##使用方法

普通にコミットする。

    $ git commit -m "msg"

アカウントの情報が表示され

 * yを入力すると通常通りコミットされる。
 * nを入力するとアカウントを再設定できる。

    Author = USER_NAME <USER_EMAIL>
    Do you want to me to keep it this way? [y/n] n

新しいアカウントを設定する。

    Username:NEW_USER_NAME
    Email:NEW_USER_EMAIL
    Please commit that again...

もう一度コミットを求められる。

    $ git commit -m "msg"

更新されたアカウントの情報を確認し、問題なければyを入力する。

    Author = NEW_USER_EMAIL <NEW_USER_EMAIL>
PHPぽい文字列型をC言語で実装してみた

PHPには文字列型が最初からある。

```php
<?php
$s = "test";
?>
```

バイナリーセーフだし、文字列の連結も簡単である。

```php
<?php
$s = "Hello" . " " . "world" . "!!";
echo "$s¥n";
?>
```

C言語には何もない。困った。

というわけで作ってみました。

```c:binary_safe_string.c
#include <stdio.h>
#include <stdlib.h>
#include <stdarg.h>
#include <string.h>

#define BSS_OK 0
#define BSS_GENERIC_ERROR 1

typedef struct binary_safe_string_tag {
    size_t allocated;
    size_t length;
    char *buf;
} binary_safe_string;

void bss_init(binary_safe_string *bss) {
    memset(bss, 0, sizeof(binary_safe_string));
}

void bss_release(binary_safe_string *bss) {
    free(bss->buf);
    memset(bss, 0, sizeof(binary_safe_string));
}

int bss_reserve(binary_safe_string *bss, size_t sz) {
    if (bss->allocated < sz) {
        bss->buf = realloc(bss->buf, sz);
        if (bss->buf) {
            bss->allocated = sz;
        }
        else {
            return BSS_GENERIC_ERROR;
        }
    }

    return BSS_OK;
}

int bss_set_data(binary_safe_string *bss, const void *data, size_t len) {
    int ret = bss_reserve(bss, len);
    if (ret)
        return ret;

    memcpy(bss->buf, data, len);
    bss->length = len;
    return BSS_OK;
}

int bss_set_cstring(binary_safe_string *bss, const char *s) {
    size_t len = strlen(s);
    return bss_set_data(bss, s, len);
}

int bss_append_data(binary_safe_string *bss, const void *data, size_t len) {
    int ret = bss_reserve(bss, (bss->length + len) * 2);   // allocate extra space to avoid memory allocation too often
    if (ret)
        return ret;

    memcpy(&bss->buf[bss->length], data, len);
    bss->length += len;
    return BSS_OK;
}

int bss_append_cstring(binary_safe_string *bss, const char *s) {
    size_t len = strlen(s);
    return bss_append_data(bss, s, len);
}

int bss_concat(binary_safe_string *bss, ...) {
    va_list ap;
    char *s;
    int ret = BSS_OK;

    va_start(ap, bss);
    while (1) {
        s = va_arg(ap, char *);
        if (!s)
            break;
        ret = bss_append_cstring(bss, s);
        if (ret)
            break;
    }
    va_end(ap);

    return ret;
}

int main()
{
    binary_safe_string s;
    bss_init(&s);

    bss_concat(&s, "Hello", " ", "world", "!!", NULL);

    fwrite(s.buf, 1, s.length, stdout);
    printf("\n");

    bss_release(&s);

    return 0;
}
```

ビルド方法

`gcc -Wall binary_safe_string.c`

実行結果

```
Hello world!!
```


さて、こんな車輪の再発明をするよりライブラリーを使った方がたぶんいいです。

何より、C++にはstd::stringがあるので、こっちを使った方がいいですね。

それでも、あえて車輪の再発明をしてみて標準ライブラリやSTLのありがたみを感じるのも楽しいと思います。
Windows Azure モバイルサービスでNode.jsのモジュール（npm）を使う方法


## 概要
- モバイルサービス内のスクリプトでNode.jsのモジュールを使えるようにします。

## 手順
### 1.ソース管理を有効にする

- モバイルサービスのダッシュボードから「ソース管理の設定」をクリック。
- GitのID/PW設定画面が表示されるので、ID/PWを登録する。
- モバイルサービスの構成に「ソース管理」という項目が追加され、GitのURLが表示される

### 2.Gitでnpmをpushする

- まずローカル環境にgit cloneする。

```
git clone <GitのURL>
```

- ID/PWを求められるので、設定した値を入力する。
- `git clone`したディレクトリの`<サービス名>/Service`に移動し、`node_modules`フォルダを作成する。

```
cd <サービス名>/Service
mkdir node_modules
```

- ローカルリポジトリにNode.jsのモジュールをインストールする。

```
npm install <パッケージ名>
```

- `git add`、`git commit`する。

```
git add node_modules/
git commit -m “added node_modules”
```

- モバイルサービスのリポジトリに`git push`する。
- リモートリポジトリはorigin、ブランチはmasterがデフォルトの状態。

```
git push origin master
```

### 3.サーバスクリプトから利用する
- 標準的なnpmの使い方で使えます。


## 参考
- [モバイル サービスの更新と通知ハブでの Android サポート](http://blogs.msdn.com/b/windowsazurej/archive/2013/06/19/azure-blog-mobile-services-updates-and-android-support-for-notification-hubs.aspx)
- [Work with server scripts in Mobile Services（英語）](http://www.windowsazure.com/en-us/documentation/articles/mobile-services-how-to-use-server-scripts/?fb=ja-jp#shared-code)
- [Store server scripts in source control（英語）](http://www.windowsazure.com/en-us/documentation/articles/mobile-services-store-scripts-source-control/?fb=ja-jp#use-npm)
FFmpegを使ってみる

動画配信サービスなどを開発する際に動画をエンコードしないとサイズが大きすぎるので、
FFmpegというフリーソフトをサーバーへインストールして、サーバー上でエンコードをします。
FFmpegは今主流？のH264エンコードにも対応しています。

#RPMリポジトリを追加する
リポジトリはファイルサーバーみたいなもの。ディレクトリ構造でファイルを保管しておける保管庫的なもの。

```php:
# wget http://pkgs.repoforge.org/rpmforge-release/rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
# rpm -Uvh rpmforge-release-0.5.3-1.el6.rf.x86_64.rpm
```

※CentOS6で64bitの場合なので、サーバーOSによってインストールするファイルが違うので注意

#yumコマンドを実行する時にデフォルトでRPMforgeが使用されないように設定する
viでrpmforge.repo内のいくつかのenableを全て0に変える。

```
# vi /etc/yum.repos.d/rpmforge.repo
enable=1 //このenableを0にかえる
```

#ffmpegをインストール

```
# yum --enablerepo=rpmforge install ffmpeg
```

#ffmpegを使う
コマンドラインから実行します。

##ffmpegコマンドの基本型

```
ffmpeg -i 入力ファイル名   その他いっぱいオプション  "出力ファイル名.拡張子"
```

##mp4をflvに変換（コンテナを変える）

```
ffmpeg -i sample.mp4 sample.flv
```

##コーデックを変換

```
ffmpeg -i sample.mp4 -vcodec libx264 sample.mp4
```

##動画情報を見る

```
ffmpeg -i sample.flv
```
SailsでPubSubするときのClient側でのメッセージの受け方

Sailsでのpubsubはsocket.ioを利用したものなので、client側（ブラウザ側）ではmessageイベントを拾ってあげればpublishされた中身を取ることができる。

例えばユーザが新たに追加された通知をする場合には、UserクラスのsubscribeとpublishCreateを利用して、clientではsocketのonメソッドでmessageイベントを拾ってUserクラスのcreate時にpublishされたメッセージを取り出す。

例えばこんな感じ。

```js:UserController.js

createUser: function(req,res) {
  User.subscribe(req.socket);
  User.publishCreate({id:req.param('userID')});
}
```

```html:user_id_list.ejs
<div id='user_id_list'>
  <ul id='id_list'>
  </ul>
</div>
<script type="text/javascript">
$(function(){
  socket.on('message',function(msg){
    var model = msg['model'];
    if(model=='user') {
      var userId = '<li>'+msg['id']+'</li>';
      $('#id_list').append(userId);
    }
  });
});
</script>
```
PHPでffmpegを使った動画の変換を裏側で行う

#ffmpegを使った動画の変換を裏側で行う
ユーザーが動画をアップした時に変換している間なにも出来ないんじゃ困るので、アップしたら後は勝手にバックグラウンドで粛々と変換されるようにします。

#やり方
ffmpegの変換はターミナルなんかを起動してffmpegコマンドを実行して行うので、PHPからシェルを実行できる`exec()`とか`shell_exec()`という関数を使います。

```
shell_exec("ffmpeg -i sample.flv -vcodec libx264 -vpre default sample.mp4");
```
shell_execのカッコの中に通常のffmpegコマンドをそのまま書けば出来ます。


これを使ったエンコード処理をするphpファイル（例えばconvert.php）を作り、
アップロードされた際にそのphpファイルへ遷移させ、その後完了画面へ遷移させます。

```php:convert.php
//convert.php
shell_exec("ffmpeg -i sample.flv -vcodec libx264 -vpre default sample.mp4");
header('Location: complete.php');
```

このままだと、ffmpegコマンドが終わらない限り、完了画面（complete.php）へ遷移できないので、
ffmpegコマンドの最後に「&」をつけます。

```
shell_exec("ffmpeg -i sample.flv -vcodec libx264 -vpre default sample.mp4 &");
header('Location: complete.php');
```

これで、ffmpegコマンドが完了（エンコード処理完了）しなくてもすぐ完了画面へ遷移し、バックグラウンドではそのままエンコード処理が勝手に続きます。


```php:access.php
shell_exec('/usr/bin/php /var/www/html/convert.php &');
header('Location: complete.php');
```

```php:convert.php
shell_exec("ffmpeg -i sample.flv -vcodec libx264 -vpre default sample.mp4");
header('Location: notice.php?convert=success');
```

```php:notice.php
$flg = $_GET['convert']; //終了フラグを受け取る。
//・・・DBに書き込む処理
```

```php:complete.php
echo  'エンコードが完了しました';
```

「/usr/bin/php」というのは、サーバーにあるPHPの実行ファイルのあるパスで、コマンドラインからPHPを実行する場合には、こういう書き方をします。（サーバーによってphpのパスが違う場合がある）
phpのパスが分からなければコマンドラインで`# which php`と打てばパスが分かる。

後半の「/var/www/html/convert.php」はconvert.phpのパス。

#動画を別サーバーに置く場合
サイトのあるサーバーと動画ファイルを保管しておくサーバーとを別にする場合、
convert.phpは動画ファイルのあるサーバーに置いておかないといけないので、
サイトのあるサーバーでaccess.phpを実行し、コマンドラインからconvert.phpへ遷移しようとしても出来ない。

その場合には、access.php内でコマンドラインから「wget」を使う。
wgetはファイルをダウンロードしてくるコマンドで、これを使う事でサイトのあるサーバーへconvert.phpをダウンロードしてこれる。
そして、そのconvert.phpを実行するという流れ。

```php:access.php
shell_exec('wget http://hogehoge.com/convert.php &');
header('Location: complete.php');
```

もし、convert.phpへ複数のGETパラメータを渡したいならURLをクォーテーションで囲ってあげないと、２つ目以降のパラメータがわたらないので注意。

```php
shell_exec("wget 'http://hogehoge.com/convert.php?id=1&name=sample' &");
```
homebrew-caskでインストールしたアプリをalfredから呼び出すときのメモ


1 brew-caskをインストールする

```
brew tap phinze/cask
brew install brew-cask
```

2 guiアプリをインストールする

```
brew cask install google-chrome
```

3 このとき、そのままインストールすると
~/Applicationsにインストールされてしまうので以下の環境変数を追加する。

```
export HOMEBREW_CASK_OPTS="--appdir=/Applications"
```

4 この状態だと、Applications内のアプリはシンボリックリンクになっているので、Alfredがアプリを見つけられない。
そこでbrew-caskを使ってalfredを再インストールする。

```
brew cask install alfred
```

5 インストール後に指示に従って設定を行い、以下のコマンドを実行する。
そうすると見えなかったシンボリックリンクが見つけられるようになる。

```
brew cask alfred link 
```

6 さらに、brewdler(gem)を入れるとBrewfileでgemみたいに管理できるがrubyに依存したくないので今のところ利用しない


参考
http://rcmdnk.github.io/blog/2013/09/12/computer-mac-install/

https://mug.im/manage-your-mac-apps-with-homebrew-cask/
springがごきげんに速い件


springを導入したらrailsコマンドもrakeコマンドも爆速になったので本当におすすめ。

``` Gemfile
group :development, :test do
  (略)
  gem 'spring'
end
```
と、Gemfileにspringを追加して、bundle install。

あとは

```
$ spring rails server
```

といった感じにrailsやrakeの前にspringとつけるだけで爆速で動いてくれる。
Macで時間のかかるコピーが終わったら、自動で通知するzsh設定


時間のかかる`Finder`でのコピーが終わったら､自動で通知するコマンドを設定してみます｡



なお、常にウィンドウを監視していても通知できますが､リソースの無駄遣いなので､時間がかかりそうな時だけ通知するコマンドを用意してみます｡


##設定

まず、[growlnotify](http://growl.info/downloads)コマンドを使えるようにしてください｡

```
$ curl -O http://growl.cachefly.net/GrowlNotify-2.1.zip
```


次に､[growl-finder-copy.zsh](https://gist.github.com/syui/9736256)をダウンロードします｡


```
$ curl -O https://gist.githubusercontent.com/syui/9736256/raw/growl_finder_copy.sh

$ chmod +x growl_finder_copy.sh

$ ./!$
```


上の手順が上手くいけば､以下のようになっているはずです｡


##通知

後は､`Finder`でコピーを行っている時に､以下のコマンドを実行します｡


```
$ growl-finder-copy &
```

[zshのコマンド終了をGrowlで通知する方法](http://mba-hack.blogspot.jp/2013/10/zshgrowl.html)
[Finderを使ったファイルコピーが終了したら通知する](http://mba-hack.blogspot.jp/2014/02/finder.html)
enchant.js勉強する流れになったのでスタート[1日目]

enchant.js勉強する流れになったのでスタート[1日目]
enchant.jsについてと、画像の読み込みまで。

#enchant.jsについて

##enchant.jsとは
* もともとはプログラミング学習を目的として開発された
* HTML5向けゲームエンジン
* CSS3アニメーションやjQueryをを加えてもOK。
* 0.6.x系以降でDOM→Canvasベースになったっぽい  
（PCブラウザはパフォーマンスがあがるけど、Android 4.1の標準ブラウザによる描画に不具合有）

##メリット
* PCでもスマホでも遊べる
* 他のJSライブラリと相性がいい
* 他のゲームライブラリと比べると軽め
* プラグインが豊富

[プラグイン]

* [enchant.js公式サイトのプラグイン紹介ページ](http://enchantjs.com/resource/plugins/)
* [enchant.js Developers Blog](http://blog.enchantjs.com/ja/)


##デメリット
* AndroidでViewport指定を無視することがある  
（enchantのベージョンとブラウザの相性により都度修正が必要）　
* 高解像度端末は低解像度のより動作速度が遅い
* 画面いっぱいに広がる処理はカクつく
* マルチタッチを扱うメソッドはない

##学習環境

* [ゲーム学習サイト](http://code.9leap.net/)
* [9leap](http://9leap.net/)


#実際の組み立て


##命令文調べたかったらココ
* [命令文一覧](http://wise9.github.io/enchant.js/doc/core/ja/index.html)

##ゲームの組み立て方
* ゲーム本体にあるCoreオブジェクトを設定  
Coreオブジェクトは rootScene を持っているので rootScene の上にくまを表示させる
* くまはSpriteオブジェクト（bearというオブジェクトをつくる）

```js:main.js
enchant();

window.onload = function () {

  //coreオブジェクトの設定
  var core = new Core(320,320);
  core.preload('chara1.png');
  core.onload = function() {

    //bearオブジェクトの設定
    var bear = new Sprite(32,32);
    bear.image = core.assets['chara1.png'];
    bear.x = 0;
    bear.y = 0;
    
    //coreにbearオブジェクトをのっける
    core.rootScene.addChild(bear);
  };
  core.debug();
  // core.start();
};
```

##デバック
core.start();の代わりにcore.debug();を使うと、赤枠がでてデバックしやすいみたい
  

##参考サイト
* [enchant.jsでゲームを作る7つの利点と5つの注意点](http://www.atmarkit.co.jp/ait/articles/1212/03/news018.html)
* [どっとインストール　enchant.js入門 (全12回)](http://dotinstall.com/lessons/basic_enchant_js_v2)


***
Flashっぽいので、なんとなくわかる気がする...
***
Google Time Zone APIの使い方

##Google Time Zone APIとは？
簡単に言うと、位置情報から時差やタイムゾーンを取得できるAPIです。
詳細は以下をご参照ください。
https://developers.google.com/maps/documentation/timezone/

###実際に使ってみよう
世界地図をクリックしたら、その場所のタイムゾーンや標準時との時差を表示させてみましょう。

コードはこちらに置いておきます。
https://github.com/hamichamp/google-timezone-api-sample

マップをクリックすると、タイムゾーンや時差を表示してくれると思います。
アラートが出た場合は、タイムゾーンの取得に失敗していますので、適切な位置をクリックしてみてください。
（海をクリックするとよく失敗します。）

##解説
Google Time Zone APIはtimezone-api-sample.jsで呼び出しています。

###呼び出し方
https://maps.googleapis.com/maps/api/timezone/outputFormat?parameters
として呼び出します。
outputFormatにはjsonまたはxmlを指定可能です。
今回はjsonを使用しました。

###必須パラメーター
####location
緯度経度を渡します。
location=-33.86,151.20という形でlat,lngを指定してください。
この位置に関連したタイムゾーンや時差を取得することになります。

####timestamp
時刻を渡します。
UTCとして渡す必要があります。
timestamp=1391606442というような形で指定してください。

ちなみに、なぜ時刻を渡す必要があるのか？という点については、疑問に思ったんですが、
レスポンスにサマータイムによる時差が含まれていることがその理由です。
サマータイム導入地域の時間を指定すると、サマータイム導入地域はその時差も返してくれます。
但し、サマータイムが導入されていない時間を指定するとサマータイムの時差は０として返します。

####sensor
おなじみですね。
GPSセンサーの情報を要求するか否かというものです。

###オプションパラメーター
####language
タイムゾーン名をどの言語で返して欲しいかを指定できます。
今回は日本語で返してもらうために、'ja'を指定しました。

###取得できる情報
####status
OKならば、正常に取得できています。

####dstOffset
サマータイムによる時差を表します。
指定したtimestampの値に依存します。
単位は秒です。

####rawOffset
時差を表します。
単位は秒です。

####timeZoneId
タイムゾーンIDです。
東京はAsia/Tokyoで表されます。

####timeZoneName
タイムゾーン名です。
東京は日本語で日本標準時と表されます。

##最後に
いかがだったでしょうか？
意外と簡単に利用できますね。
皆さんも活用してみましょう。

次回は、現地の時間を表示する方法にもチャレンジしてみたいと思います。
Paperclip with S3な画像アップロードをRSpec+WebMockな環境でテストする

タイトルの通りです。
幾つかやり方はあるみたいですが、自分の環境下（WebMock+RSpecでテスト。Paperclip+S3でファイルアップロード）では

```rb
AWS.config(:access_key_id => "TESTKEY", :secret_access_key => "TESTSECRET", :stub_requests => true)
Image.any_instance.stub(:save_attached_files).and_return(true)
@image = fixture_file_upload('/files/test.gif', 'image/gif')
```

で可能になりました。
追記：この記述はコントローラー向けです。下にモデルでテストを書く時の記述をしています。
テスト用のファイルは`spec/fixtures/files/`以下に置きます。
`Image`は利用しているファイルを所有するモデルです。

後は`@image`を適当な所で使えばおｋです。

`AWS`の設定部分が記述されていないと

```rb
     WebMock::NetConnectNotAllowedError:
       Real HTTP connections are disabled. Unregistered request: PUT https://...
```

となってしまいました。

## 追記
`fixture_file_upload`はモデルのテストを行う時利用できませんでした。
ので

```rb
stub_request(:get, "http://example.com/image.gif").
  with(:headers => {'Accept'=>'*/*', 'User-Agent'=>'Ruby'}).
  to_return(:status => 200, :body => File.read('spec/fixtures/image.gif'), :headers => {"Content-Type" => 'image/gif'})
```

と`webmock`の時点でファイルを読みこませればOKです。
その際`@image = fixture_file_upload('/files/test.gif', 'image/gif')
`の記述は不要です。
Webアプリ開発実践：Djangoでシフト作成ページを作ろう！（はじめに）

# そろそろDjangoでちゃんとした作品を手がけてみようと思い、まずはシフト作成用のWebアプリを作ってみることにしました。
自分が現在働いている介護施設でのシフト作りがとても大変そうなので代わりのツールを開発していきます（なお、自分の職場で使えればいいという前提なので汎用性は考慮しません）。

今回はとりあえず、欲しい機能をあぶり出すために色々と考えてみました。

### 1.シフト（考え方）

まずはシフト作成で考慮するであろう点を箇条書きに。

- **スタッフの勤務形態には「日勤」、「夜勤」等がある**
- **利用者（お客さんのこと）へのサービス形態には「通い」と「泊まり」、「訪問」がある**

>これらを踏まえた上で考えていきます。

- **利用者の顔ぶれや人数、利用時間・サービス形態は日ごとに異なる**

>主に曜日で決まっているのですが、ちょいちょい変動があるので油断なりません。

- **「通い利用者」がある日は送迎スタッフが必要**

>免許所有者が必要なほか、補助のスタッフも別途必要。また、その間施設にいるスタッフが減っていることも考慮しなければなりません（「泊まり利用者」があるなら居残るスタッフが別途必要だったり）。

- **「泊まり利用者」がある日は夜勤者が必要**

>基本的に一人いればOKですが、夜勤は出勤が日をまたぐので実質二日分の日程を食います（ちなみに各スタッフともに月１０回が上限らしいです）。

- **調理師不在の日はスタッフが一人台所に入る**

>その人は昼食の前後一時間程度まともに接客できないので余分に人数が必要です。

- **スタッフごとの条件**

>曜日指定でしか出られない人も居るし、勤務形態が限られている人も居るので。

以上、おおむねこんなところだと思われます。
**正直なところ、最初はこのシフト作成自体を全部プログラムで自動化できたら格好いいなと考えていたのですが、上に書いたことのアルゴニズムが全く分からなそうなので諦めました。**

気を取り直して次へ。

### 2.シフト（作り方）

今度は、シフトを実際に作る際の流れを簡単にまとめてみました（なお、自分で作ったことがあるわけではなく聞いた話を参考にしているだけなのであしからず）。

1. **利用者の「予定表」を確認し、必要な人員を予想。**
2. **スタッフの「シフト希望表」を確認し、考慮。**
3. **例の考え方で考える。**
4. **打ち込む（Exel）。**

ここで気付いたことが一点。
実は、 **1と2はそれぞれ別々の資料なので、確認する際は毎回いちいち視線を移して、その後にまたExelの作成画面に戻ってこないといけないことになります。** 面倒くさいですね。そういった情報は作成画面にそのまままとめて表示してあったほうがいいように思います。
### ということで、それを作ってみることにします。

## 次回、まずは『データベースモデルの設計』から。
Called doStart when already startedが出たら

http://stackoverflow.com/questions/14559573/getting-called-dostart-when-already-started-from-loadermanager-why

ViewPagerにFragmentPagerAdapterをセットして、各ページのFragmentで非同期通信させてたら起きました。

重要な点はgetLoaderManager()を呼ぶ場所。onActivityCreated()で呼んでそれより前に呼んではいけないってこと。
netrw(Vimのファイルエクスプローラ)でファイル作成


`vim .`などとしてvimでディレクトリを開くことが出来ます。
このとき使われるのがnetrwというディレクトリ編集などに関するプラグインです。

これが開けたら`%`を押してみましょう。

```
Enter filename:
```

と表示されてファイルを作成することが出来ます。
Lobi Rec SDK で Box2D を動かしてパフォーマンスを確認する。(Cocos2d-x)

ゲームのプレイ中の画面を録画/共有することのできる[Lobi REC SDK](https://lobi.co/recsdk)でBox2Dを動かしてパフォーマンスを確認してみました。

結論
----

以外とFPSの落ちが少なくない？

準備
----

テストに使用したプロジェクトは[https://github.com/KAMEDAkyosuke/lobirecsdk_cocs2dx_box2d_sample](https://github.com/KAMEDAkyosuke/lobirecsdk_cocs2dx_box2d_sample)
の`cocos2d-x-2.2.2/projects/lobi_rec_box2d/proj.ios/lobi_rec_box2d.xcodeproj`です。

> **NOTE**
> cocos2d-x のプロジェクト、どこまで共有すればシンプルなのかよく理解していない。

導入は[Lobi Rec SDK のサンプルアプリを動かす。(Cocos2d)](http://qiita.com/items/ee85d8943b97448c7c8e/edit)と[https://github.com/kayac/Lobi/wiki/iOS-LobiRecSDK-Docs](https://github.com/kayac/Lobi/wiki/iOS-LobiRecSDK-Docs)を参考にしました。

結果
----

iPhone5sで以下の条件で実行してみました。

* Release Build
* マイク入力なし
* ワイプなし
* 毎フレーム録画

また、FPS はオブジェクト追加後安定するまで待った後の値を使用しています。

オブジェクト数 | REC ON | REC OFF 
---------------|--------|--------
             1 | 60 FPS |  60 FPS
           100 | 60 FPS |  60 FPS
           150 | 60 FPS |  60 FPS
           200 | 60 FPS |  60 FPS
           250 | 60 FPS |  60 FPS
           300 | 60 FPS |  60 FPS
           350 | 25 FPS |  29 FPS
           400 | 22 FPS |  25 FPS
           450 | 18 FPS |  20 FPS
           500 | 16 FPS |  18 FPS
           
![500個置いた際のスクリーンショット](https://qiita-image-store.s3.amazonaws.com/0/36777/55f0a357-d677-2289-2ec5-62b9833ee4ac.png)
500個置いた
Java7u51でJavaDB(1527port)が起動しなくなったときの対処

## **Occured Error**

Windows7, Java7u51 + NetBeans7.4でJavaDBのsampleを覗こうとして、NetBeansからJavaDBを起動しようとしたら
ポート1527の接続が確立できないエラーが発生して起動できず。
![fail1.png](https://qiita-image-store.s3.amazonaws.com/0/13874/acfbdf8d-45df-aff2-4084-fd2fa9cd09e7.png)

標準出力にもExceptionががが・・・

```
Wed Feb 05 20:12:51 JST 2014 : access denied ("java.net.SocketPermission" "localhost:1527" "listen,resolve")
java.security.AccessControlException: access denied ("java.net.SocketPermission" "localhost:1527" "listen,resolve")
    at java.security.AccessControlContext.checkPermission(AccessControlContext.java:372)
    ～以下省略～
```

## **Cause**

Java7u51でDefault Socket Permissionsが変わったとのこと。
[Java™ SE Development Kit 7, Update 51 (JDK 7u51) - Update Release Notes](http://www.oracle.com/technetwork/java/javase/7u51-relnotes-2085002.html)
確かTwitterでもアプレット使ってる場合は注意してねって言われてたような気も・・・アプレット使ってないので忘れてました。

Known IssuesにもちゃんとJavaDBについて記載ありました。

[寺田佳央さん](https://twitter.com/yoshioterada)もつぶやいてました。
https://twitter.com/yoshioterada/status/423391512370483201

StackOverflowにも…
http://stackoverflow.com/questions/21154400/unable-to-start-derby-database-from-netbeans-7-4

## **To Fix Problem...**

C:\Program Files\Java\jdk1.7.0_51\jre\lib\security\java.policyを編集します。
今回は以下のような記述を追加しました。

```
grant codeBase "file:C:/Program Files/Java/jdk1.7.0_51/db/lib/*" {
    permission java.net.SocketPermission "localhost:1527", "listen,resolve";
};
```

環境変数JAVA_HOMEを設定してれいれば、システムプロパティ${java.home}を使えると思いますが、設定していないので絶対パスでの指定にしました。

参考: システムプロパティ${java.home}を使った場合

```
grant codeBase "file:${java.home}/db/lib/*" {
    permission java.net.SocketPermission "localhost:1527", "listen,resolve";
};
```

設定を追加した後でJavaDBを起動すると正常にポート1527でListenできました！
PHPUnit/Phake のモックで、あるメソッドが異なる引数で複数回呼ばれることをテスト

次のようなクラスがあったとして、

```php
class Hoge
{
    public function func($v) {}
    public function xxxx() {}
}
```

Hoge をモック化して func が次のように呼ばれることをテストする。

 - 引数 'A' で 1 回
 - 引数 'B' で 2 回

---

Phake ならこのように書ける（`Phake::times(1)` は省略可能）。

```php
$hoge = Phake::mock('Hoge');

$hoge->func('A');
$hoge->func('B');
$hoge->func('B');

Phake::verify($hoge, Phake::times(1))->func(identicalTo('A'));
Phake::verify($hoge, Phake::times(2))->func(identicalTo('B'));
```

これは次のテストとなる。

 - func が 'A' を引数に呼ばれる回数が 1 回
 - func が 'B' を引数に呼ばれる回数が 2 回

Phake::inOrder で呼び出し順のテストも可能。

```php
$hoge = Phake::mock('Hoge');

$hoge->func('A');
$hoge->func('B');
$hoge->func('B');

Phake::inOrder(
    Phake::verify($hoge, Phake::times(1))->func(identicalTo('A')),
    Phake::verify($hoge, Phake::times(2))->func(identicalTo('B')),
    Phake::verify($hoge, Phake::times(2))->func(identicalTo('B'))
);
```

前後や間に別のメソッド呼び出しがあっても大丈夫。

```php
$hoge = Phake::mock('Hoge');

$hoge->xxxx();
$hoge->func('A');
$hoge->xxxx();
$hoge->func('B');
$hoge->xxxx();
$hoge->func('B');
$hoge->xxxx();

Phake::inOrder(
    Phake::verify($hoge, Phake::times(1))->func(identicalTo('A')),
    Phake::verify($hoge, Phake::times(2))->func(identicalTo('B')),
    Phake::verify($hoge, Phake::times(2))->func(identicalTo('B'))
);
```

ぱっとみ 'B' を引数に 4 回呼んでいるテストに見えるのが微妙なところ。

---

Phake に慣れているためか、PHPUnit のモックで同じことをやろうとして次のように書いてしまう。

```php
$hoge = $this->getMock('Hoge');

$hoge->expects(exactly(1))->method('func')->with(identicalTo('A'));
$hoge->expects(exactly(2))->method('func')->with(identicalTo('B'));

$hoge->func('A');
$hoge->func('B');
$hoge->func('B');
```

これは次のテストになり成立しない。

 - func が 1 回呼ばれてその引数は 'A'
 - func が 2 回呼ばれてその引数は 'B'

次のように at を使わなければならない。

```php
$hoge = $this->getMock('Hoge');

$hoge->expects(at(0))->method('func')->with(identicalTo('A'));
$hoge->expects(at(1))->method('func')->with(identicalTo('B'));
$hoge->expects(at(2))->method('func')->with(identicalTo('B'));

$hoge->func('A');
$hoge->func('B');
$hoge->func('B');
```

これは次のテストとなる。

 - 0 回目の呼び出しは func で 引数は 'A'
 - 1 回目の呼び出しは func で 引数は 'B'
 - 2 回目の呼び出しは func で 引数は 'B'

**func の N 回目の呼び出し** ではないので、他のメソッド呼び出しが前や間にあると at の値も変更しなければならない。

 - http://phpunit.de/manual/3.7/ja/test-doubles.html#test-doubles.mock-objects.tables.matchers
    - 少し下の注記

```php
$hoge = $this->getMock('Hoge');

$hoge->expects(at(1))->method('func')->with(identicalTo('A'));
$hoge->expects(at(3))->method('func')->with(identicalTo('B'));
$hoge->expects(at(5))->method('func')->with(identicalTo('B'));

$hoge->xxxx();
$hoge->func('A');
$hoge->xxxx();
$hoge->func('B');
$hoge->xxxx();
$hoge->func('B');
$hoge->xxxx();
```

func だけをモック化すれば **func の N 回目の呼び出し** にすることもできる。

```php
$hoge = $this->getMock('Hoge', ['func']);

$hoge->expects(at(0))->method('func')->with(identicalTo('A'));
$hoge->expects(at(1))->method('func')->with(identicalTo('B'));
$hoge->expects(at(2))->method('func')->with(identicalTo('B'));

$hoge->xxxx();
$hoge->func('A');
$hoge->xxxx();
$hoge->func('B');
$hoge->xxxx();
$hoge->func('B');
$hoge->xxxx();
```
Yeoamanを使ってAngularJSプロジェクトの雛形を作る

最近、バックエンド系ばかりなので気分転換にフロントを毎日少しずつやろうかなとふと思い、Yeomanといういかしたおっさんを使ってAngularJSのプロジェクトの雛形を作ってみたよ。

## 環境
Mac OSX 10.8.4
Homebrew 0.9.5


## やったこと

1. 念のため、``brew update``
1. Yeomanをインストール
``npm install -g yo``
※ この時のVer.1.1.2
1. Angularのジェネレーターをインストール
``npm install -g generator-angular``
1. プロジェクトフォルダの中で``yo angular``
1. おっさん登場！
![snp-mainte_—_node_—_149×39.png](https://qiita-image-store.s3.amazonaws.com/0/6886/e77a9555-572a-f7ec-cf19-61355bc09cd0.png)
1. その後、Sassは使う？Twitter Bootstrap使う？だの聞いてくるのでちゃんと応えてあげる
1. おっさんがせこせこ働きはじめるので、待ってあげる
1. 完成！！

プロジェクトを作成する際の面倒な作業を全てやってくれて便利！！
たしかビルドする際もJSやCSSをCompressしてくれた。(うる覚え。。。)
\texttt{\textbf{foo}}でちゃんと太字にする方法


LaTeXのデフォルト設定では，`\texttt{\textbf{foo}}`と書いても太字にならず`\texttt{foo}`とした場合と同じようにしか見えない．同様に，listings.styで`basicstyle={\ttfamily}`とした場合，予約語を太字にすべく`keywordstyle={\bfseries}`としても効果が出ない．

おそらくフォント設定をどうにかすればよいのだろうが，やり方を調べるのは面倒である（LaTeXに限らずフォント関連はよくわからないことが多い）．そこで\usepackageで読み込むだけで済む方法をいくつか挙げてみる（いずれか一つでよい）．

1. courier.sty:
\textttコマンドやverbatim環境等で指定されるタイプライタ体の文字が全てCourierになる．
それが嫌でなければボールドとそれ以外の違いもはっきりしていてよい．
2. couriers.sty:
Courierと他フォントの文字との大きさのバランスが気になるならこちらを使う．
具体的にはプリアンブルで`\usepacakge[scaled=0.9]{couriers}`のようにする．
3. inconsolata.sty, txfonts.sty, pxfonts.sty:
Courierが気に入らない場合はこちら．悪くはないけどCourierほど太字が目立たない．
4. bold-extra.sty:
CMフォントのままボールドにしたい場合に使う．あまり美しくない．
環境によっては`\usepackage[cmbtt]{bold-extra}`とする必要があるかも知れない．
ラムダ式とfilter関数を使った書き方とリスト内包表記を使った書き方


（１）ラムダ式とfilter関数を使った書き方

```python
# first 
threes_and_fives = range(1,16)

threes_and_fives = filter(lambda x :x % 3 == 0 or x % 5 == 0, threes_and_fives)

print threes_and_fives
```

（２）リスト内包表記を使った書き方

```python
# second: List Comprehension
threes_and_fives = range(1,16)

threes_and_fives = [x for x in range(1,16) if x%3 ==0 or x%5 ==0]

print threes_and_fives
```

---
コメントで指摘していただいたので、タイトル及び本文の追記・変更をしました。
プラットフォーム依存のgemのせいでデプロイがこける件


```
You are trying to install in deployment mode after changing
your Gemfile. Run `bundle install` elsewhere and add the
updated Gemfile.lock to version control.

You have deleted from the Gemfile:
* growl
```

みたいなメッセージがでてきてデプロイ大失敗した。

原因はGemfileに`RUBY_PLATFORM`を使ったことだった。

```rb:Gemfile
group :test do
  gem "growl" if RUBY_PLATFORM =~ /darwin/
end
```

上のメッセージはGemfileとGemfile.lockに不整合があるときに表示される。このようなGemfileの書き方だと、デプロイ先で実行したとき、`gem "growl"`が存在しないことになりGemfile.lockとの不整合が生まれると考えられる。

そこで、Gemfileをこう書き替えた。

```rb:Gemfile
group :test do
  gem "growl", group: :darwin
end
```

で、capistranoにこのグループをインストールしないように設定する。

```rb:deploy.rb
# Ignore platform-specific gems
set :bundle_without, %w(development test darwin).join(" ")
```
Capistranoでデプロイできなくてこまった


バージョンは
Capistrano Version: 3.0.1 (Rake Version: 10.1.1)
です。


結論から入ります。
**デプロイ先のサーバーにログインしてgit-ssh.shを削除したらデプロイできました。**

以下経緯。

---

Capistranoで設定していて以下のエラーがでました。

```log
Permission denied (publickey).
Finished in 0.483 seconds with exit status 128 (failed).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
```

デプロイ先のサーバーからgitリポジトリへのアクセスに失敗しているエラーです。
gitリポジトリにアクセスするための秘密鍵の設定が誤っていたので直しました。

が…

```log
$ cap production deploy
...
Permission denied (publickey).
Finished in 0.483 seconds with exit status 128 (failed).
fatal: Could not read from remote repository.
Please make sure you have the correct access rights
and the repository exists.
```

変わらぬ…
何度やっても失敗するのでそこまでで実行しているコマンドをデバッグモードで確認しました。

```log
Command: ( RAILS_ENV=production /usr/bin/env mkdir -p /tmp/appname/ )
Uploading /tmp/appname/git-ssh.sh 0.0%
Uploading /tmp/appname/git-ssh.sh 100.0%
Command: ( RAILS_ENV=production /usr/bin/env chmod +x /tmp/appname/git-ssh.sh )
Command: ( RAILS_ENV=production GIT_ASKPASS=/bin/echo GIT_SSH=/tmp/appname/git-ssh.sh /usr/bin/env git ls-remote git@gitserver:appname.git)
```

git-ssh.shを生成、アップロードし、実行権限を付与。
そのあとls-remoteで失敗する。

ということはgit-ssh.shが悪いのか…
しかし毎回ファイル生成してアップロードしてるからそもそも生成されるファイルが悪いということで、
設定ファイルが間違っているのかと思いいろいろテストしました。

悩んだ結果、リセットしてみようと思い、git-ssh.shを削除したらなおりました。
ファイルが既に存在している場合上書きされていなかったのか。

もし同じ現象にハマった人がいたらと思ったので共有でした。
.emacs.dを散らかさない保存ファイルの場所を変更する設定まとめ


.emacs散らかしていませんか？
役割を決めてフォルダを作りきちんと振り分けましょう！

別の環境と住み分けたい場合があるのでファイル名に`user-full-name`をつけています。

```el
;; /path/to/userhome/.emacs.d/
(defvar my-emacs-dir (expand-file-name user-emacs-directory))
;; /path/to/userhome/.emacs.d/hist/
(defvar my-history-dir (concat my-emacs-dir "hist/"))
;; /path/to/userhome/.emacs.d/backup/
(defvar my-backup-dir (concat my-emacs-dir "backup/"))

(defun my-set-history (&rest args)
  (concat my-history-dir (mapconcat 'identity args "")))

;; trash
(setq trash-directory "~/.Trash")
;; backup
(add-to-list 'backup-directory-alist (cons "." my-backup-dir))
;; auto-save
(setq auto-save-file-name-transforms `((".*" ,my-backup-dir t)))
;; auto-save-list
(setq auto-save-list-file-prefix (my-set-history "auto-save-list/.saves-"))
;; bookmark
(setq bookmark-default-file (my-set-history "bookmark-" user-full-name))
;; tramp
(setq tramp-persistency-file-name (my-set-history "tramp-" user-full-name))
;; savehist
(setq savehist-file (my-set-history "savehist"))
;; recentf
(setq recentf-save-file (my-set-history "recentf" "-" user-full-name))
;; save-place
(setq save-place-file (my-set-history "places"))

;; 外部拡張
;; save-kill
(setq save-kill-file-name (my-set-history "kill-ring-saved"))
;; undohist
(setq undohist-directory (my-set-history "undohist"))
;; auto-complete
(setq ac-comphist-file (my-set-history "ac-comphist.dat"))
;; multiple-cursors
(setq mc/list-file (my-set-history "mc-lists.el"))
;; request
(setq request-storage-directory (my-set-history "request-" user-full-name))
;; helm-github-stars
(setq helm-github-stars-cache-file (my-set-history "helm-github-stars-cache"))
;; helm-recentd
(setq helm-recentd-file (my-set-history "helm-recentd-" user-full-name))
```

何か補足がありましたらお知らせください。
vmwareでwindowsフォルダをマウントする

# 前提
 
* vmwareplayerの共有フォルダ機能が、ある時から急激にディスクアクセスが遅くなったので、別の方法で共有することにしました。

# 概要

* windowでファイル共有 → Linux側でマウント

## windowsでファイル共有

* フォルダ上で右クリックして共有
* 詳細な共有からアクセスコントロールで必要な権限を設定

## Linuxでマウント

```zsh
# ディレクトリ作成
mkdir -p /mnt/dir

# マウント
mount -t cifs -o uid=XX,gid=YY,user=WINDOWS_USER,password=WINDOWS_PASSWORD,rw,file_mode=0777,dir_mode=0777 //192.168.xxx.yyy/dir /mnt/dir  
```

今回の目的としてはapacheから読み書きできれば良いので、uidとgidにはapacheの実行ユーザの番号を指定します。
WINDOWS_USERとWINDOWS_PASSWORDには、Windowsにログインするときのユーザ、パスワードを与えてください。
192.168.xxx.yyyはWindowsのIPアドレスを指定します。

## マウント解除

```zsh
umount -l /mnt/dir
```
.DS_Storeを一気に消す

OSX以外の環境の人にとっては、
Thumb.db に匹敵するほど嫌わてれる .DS_Store

こいつをカレントディレクトリ以下から一気に消し去るには、

以下のコマンド
`find . -name ".DS_Store" -print -exec rm {} ";"`

これで、再帰的に削除してくれるので、安心してOSX以外の人とのファイル交換できる。

肌色率の高い画像ごっそりのディレクトリを、人が見てるのに Finder で開いてカバーフロー全開！！

なんて非常事態に備えて、定期実行しておくのも有効な利用方法かもしれない。
Knockout.jsを使ったajaxリスト切り替え表示

最近勉強し始めたばかりですが、Knockout.jsを使ってajaxで取得したリストを表示するサンプルです。
リストのソート順切り替えなんかに使えるかと。
※普段サーバーサイドばっかりでJavaScriptも詳しいわけではないので細かいところはツッコミなしでｗ

```js
var sortVal = [デフォルト値]; // ソート順のパラメータ
var vm = undefined; // view model 

$(function(){
  // view model の作成
  function viewModel(){
    var self = this;
    self.list = ko.observableArray(); //リストなので observableArray のみ
  }
  
  vm = new viewModel(); // vm に newしてやる
  ko.applyBindings(vm);
  
  getList(sortVal); // リストの非同期処理
  
});

function getList(sortVal) {
  var sort = sortVal != undefined ? sortVal : [デフォルト値];
  
  $.ajax({
    type:'get',
    url:'/[URL]/' + sort,
    cache:false,
    success:function(data){
      vm.list(data); // vm.list()でbindしてやる
    }
  });
}
```

viewModel内で定義した 'ko.observableArray()'に非同期で取得したJson形式のリストを突っ込むだけです。

HTML側は

```html
<div data-bind="forearch:list"> <!--  ko.observableArray()の変数名と同じ名前にする -->
<ul >
 <li><span data-bind="text:〇〇"></span></li> <!-- list.〇〇で取得出来る値 -->
</ul>
</div>
```

みたいな感じです。

あとは並び順を変更するたびに'getList([value])'と呼ぶだけで非同期でリストの中身を書き換えて表示します。


Knockout.js便利ですよね。

この辺りの技術を使ってサーバーサイドとは基本的にJSONでやりとりするような設計がいいかもと思ってます。
表示側に引っ張られてコードがスパゲッティになっちゃうとかよくあるし、APIサーバーにすればテストも楽になる…かも？
gitでsvn export的なことをやる

git 管理のファイル群をバイナリ抜きで配布したい！
という時があるかもしれない。

そんな時は以下のコマンド一発

```shell-session:
$ git checkout-index -a -f --prefix=export/
```

最後の / を忘れるとかなり悲惨な目に会うので注意。
また。当然ながら git 管理下のディレクトリで実行しないと怒られる。

上記コマンドで、カレントディレクトリに export という名前で、
git で管理してる全ファイルを含むディレクトリが作成される。

環境によっては `--prefix` で親ディレクトリや全く別な場所を指定するのも良いかもしれない。

ただし、 .gitignore とかも含まれるので、配布したい場合は手動削除するか、
シェルスクリプトを用意するなり、 alias に一緒に登録しておくと良さげ。

---
## 追記

[ngyuki](http://qiita.com/ngyuki) さんにコメントいただいた、 `git archive` で実現する方法。

コメントにもあるように .gitattributes の設定を見てくれるので、
hoge ディレクトリ以下を除外したい場合であれば、

```text
hoge/ export-ignore
```
のように書いておけば、 `git archive` が除外してくれる。

前述の checkout-index と同じことをやろうとするなら、

```shell-session:
$ mkdir ../export
$ git archive --format=tar HEAD | tar -C ../output -xf -
```
といった具合に、出力形式を tar にしてパイプで展開する。

当然、そのままアーカイブを出力することも可能

```shell-session:
git archive --format=zip HEAD > hoge.zip
git archive --format=tar HEAD | bzip2 > fuga.tar.bz2
```

任意のディレクトリ、ファイルのみアーカイブも可能

```shell-session
$ git archive --format=zip HEAD hoge.file fugadir > archive.zip
```

## まとめ

配布を目的とするならば、設定さえしてしまえば `git archive` のほうがミスが少なく便利。
コメントに書いたように配布先により異なるケースでも、シェルスクリプト書けば済む話しだし。

`git checkout-index` は、あえて全ファイルを export したい場合や、
全体を把握していないリポジトリでも、 とりあえず何とかなる、という感じかな。
2/5日のJavaScript学習内容

今日はあまり時間を取れなかったのですが、
主に様々なコマンドラインの実行と予約語について勉強しました。

まだ本格的にプログラムを書けていないので
順に実践的なプログラム作成も行っていきます。

まだ書けることが多くなくて、内容が薄くて大変申し訳ないです。
2/4日のJavaScript学習内容

引き続きJavaScriptの基本的な構造について勉強しました。

主に、昨日やり切れなかったオブジェクトについてです。

ドキュメントオブジェクトを使ってonclickによるイベントを行わせるプログラムを書きましたが、
先に書いたものから実行していくため、書くタイミング次第で実行されずに
しばらくなぜ動かないのか謎でしたが、
プログラムも変えることで実行内容の順番については解決出来ました。

まだ中々使いこなせませんが引き続きもう少し基礎を確認しようと思います。
JavaScriptの勉強2日目：2014年2月5日(水)

本日も、JavaScriptの学習を行った。
ドットインストールにアップされている、 jQuery入門の15回のうち、10回まで視聴を行った。

今までは、特に何も考えることなく、htmlやcssをただ思いつくままに記述したり、落ちているソースコードを理解することなく見よう見まねで記述していたが、それぞれの言語に本来の役割があり、そのことを考慮してコーディングしていく必要があることを理解した。

jQueryを使うことで、より効率的にコーディングができ、また、html側を訂正することなく、別のアプローチで表示内容や属性を変更できることを学んだ。

しかし、動画の最中に、「これは良く使う。」「ここを使うと便利」などというコメントが多々あったが、実際に大きなプログラムをまだ記述したことがないので、どういうタイミングでどのように便利なのかまでは理解できなかった。
その点については、追々自分でもっとコードを書くようになってから理解していきたい。

まだUIというか、画面のデザインなどの内容しか学習していないので、早くたくさんの技術を覚えて面白いものを作れるようになりたい。
StateTとIORefの速度を比較した

- - -

先日はじめてStateモナドを使ってみたら予想外によかったので、IORefとの速度を比較してみた

比較方法はそれぞれが保存する文字列を1000000回表示するというもの

使用したコードは以下の通り

計測にはtimeコマンドを使用しました

```Haskell:time.hs

{-# LANGUAGE UnicodeSyntax #-} 

module Main where

import Data.IORef
import Control.Monad.Trans.State
import Control.Monad.IO.Class
import Control.Monad
import System.Environment

repeatM :: Monad m => Integer → (a → m a) → a → m a
repeatM 0 _ = return
repeatM n f = f >=> repeatM (n - 1) f

repeatM_ :: Monad m => Integer → m a → m ()
repeatM_ 0 _ = return ()
repeatM_ n m = m >> repeatM_ (n - 1) m

printState :: StateT String IO ()
printState = do
        str ← get
        liftIO $ putStrLn str

printIORef :: IORef String → IO (IORef String)
printIORef ref = do
        str ← readIORef ref
        putStrLn str
        return ref

times :: Integer
times = 1000000

main :: IO ()
main = do
        (x:_) ← getArgs
        case x of
            "IORef" → newIORef "Hello" >>= repeatM times printIORef >> return ()
            "State" → runStateT (repeatM_ times printState) "Hello" >> return ()
            _ → return ()
```

```結果
StateT:
real	0m7.629s
user	0m3.948s
sys	    0m3.084s

IORef:
real	0m7.711s
user	0m3.601s
sys	    0m3.374s
```

結果は大体同じでStateTの方が若干速いといったところですかね
シンボリックリンクの作成と削除

# 作成

```pl
hoge# ln -s /hoge/fuga/watshi ./watashi
もしくは
hoge# ln -s /hoge/fuga/watshi watashi
また、もし同じ名前でいいのなら、
hoge# ln -s /hoge/fuga/watshi
```

すると

```pl
lrwxrwxrwx  1 hoge  hoge      24 Feb  5 16:20 watashi -> /hoge/fuga/watshi
```

*パスの最後にスラッシュはいりません

リンクの方にスラッシュをつけると、エラーになります。

```pl
hoge# ln -s /hoge/fuga/watshi/ ./watashi/
ln: target `./watashi/' is not a directory: No such file or directory
```


また、URIの方にスラッシュを付けると見辛い事になります。

```pl
hoge# ln -s /hoge/fuga/watshi/ ./watashi
hoge# ll
lrwxrwxrwx  1 hoge  hoge      24 Feb  5 16:20 watashi -> /hoge/fuga/watshi//  
```


# 削除

```pl
hog# unlink ./watashi
```

rmを使ってやることもできますが、、、

```pl
hoge# rm ./watashi
rm: remove symbolic link `watashi'? y
```

でも rm だと、↓みたいにもしスラッシュをつけちゃうとだと実体を削除しちゃうから注意

```pl
hoge# rm watashi/ 
```
JSFiddle (Code Playgrounds) と Quip の組み合わせが web デザイナーさんに jQuery 入門してもらうのに快適でした


HTML, CSS, JavaScript などを Wiki みたいな感じで Web 上で編集して、 Web 上で出力・実行結果を見れるサービスを

**"Code Playground(s)"**

というらしいです。 
(名前の意味的にコード種別は問わないでしょうけど)

でオススメのコード・プレイグラウンドはどれかというと、

[7 of the Best Code Playgrounds - SitePoint](http://www.sitepoint.com/7-code-playgrounds/)

を見ろ、という話なんですが (感謝!) 、
日本でよく見るのは順に、

1. http://jsfiddle.net
2. http://jsdo.it/
3. http://codepen.io

の印象です。(個人の感想です)

なんでこんなポストを書いたかと言うと、
Google Docs をライトにしたようなサービスである、

**[Quip](https://quip.com/)**

と JSFiddle を組み合わせてデザイナーさんに jQuery 入門をしていたら結構いい感じがしたからです。
Quip は、チャットとリッチテキストライティング+リアルタイム同期が快適でした。

いい感じがしたのは私だけだった可能性はとりあえず無視します。
known_hostからホスト情報を削除する


サーバの構成を変えたり、ネットワーク周りの設定を変更したりした後に
sshでそのサーバにログインしようとすると下記のようなメッセージが
表示されてサーバに接続できない場合があります。

````
$ ssh hogehoge@fugafuga.com
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
@    WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED!     @
@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@
IT IS POSSIBLE THAT SOMEONE IS DOING SOMETHING NASTY!
Someone could be eavesdropping on you right now (man-in-the-middle attack)!
It is also possible that a host key has just been changed.
The fingerprint for the RSA key sent by the remote host is
xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:xx:x.
Please contact your system administrator.
Add correct host key in ~/.ssh/known_hosts to get rid of this message.
Offending RSA key in ~/.ssh/known_hosts:57
RSA host key for fugafuga.com has changed and you have requested strict checking.
Host key verification failed.
````

これは、すごく大まかにいうと、
「今まで接続していたサーバとアドレスは同じだけど中身は違うっぽいよ？何かヤバそうだからサーバの管理者に確認してみて！！」
ということなので、身に覚えのない場合は、クラッキングされてたりする場合があるのですぐに調査してください。

そうでない場合、例えば下記のような場合はsshでサーバに入れなくなると困るので

* サーバのネットワーク周りの設定を変えた
* 自宅と会社で同じローカルIPをもつサーバにアクセスしようとした

この場合は下記コマンドでknown_hostからホストの情報を削除することで対応できます。

````
$ ssh-keygen -R fugafuga.com
````
brushを使って表示領域を変更する


- http://bl.ocks.org/mbostock/1667367 のソースコードを読んだ時のメモ

## 手順

```js
var brush = d3.svg.brush().x(x2).on("brush", brushed);
```
- `d3.svg.brush()` で brushオブジェクトを作る
- x2スケールと brushのx軸方向を結合する
- brush後に呼び出される brushed というcallbackをセットする。

```js
var area = d3.svg.area().interpolate("monotone”)
    .x(function(d) { return x(d.date); })
    .y0(height)
    .y1(function(d) { return y(d.price); });
```

- d3.svg.area() で areaを描画するためのgeneratorを用意する。
    - 普通のarea chartと同様
    - 二つ目のグラフも同様

```js
var focus = svg.append("g”)
    .attr("class", "focus") 
    .attr("transform", "translate(" + margin.left + "," + margin.top + ")");
```
focus という上半分のグラフを保持するグループを作る

```js
var context = svg.append("g”)
    .attr("class", "context") 
    .attr("transform", "translate(" + margin2.left + "," + margin2.top + ")");
```
- context という下半分のグラフを保持するグループを作る。
- その後、普通にグラフを２種類配置する

```js
  context.append("g”)
      .attr("class", "x brush”)
      .call(brush)
    .selectAll("rect”)
      .attr("y", -6) 
      .attr("height", height2 + 7);
```

- g要素をappendして、brush をcallする。
     - brush をcallすると次のようなDOM要素が作成される
          - rect.extent が選択範囲
              - rectに対して `attr("y", -6)` しているのはbrush中に表示される領域の微調整
          - g.resize.e (w) が選択範囲の右端（左端）
               - dragして選択範囲を左右に広げたり縮めたりできる
- `.call(brush)` で作成されるDOM要素は以下のようになる

```
<g class="x brush" style="pointer-events: none; -webkit-tap-highlight-color: rgba(0, 0, 0, 0);”>
     <rect class="background" x="0" width="910" y="-6" height="57" style="visibility: hidden; cursor: crosshair;"></rect>
     <rect class="extent" x="407" width="412" y="-6" height="57" style="cursor: move;"></rect>
     <g class="resize e" transform="translate(819,0)" style="cursor: ew-resize;”>
          <rect x="-3" width="6" height="57" y="-6" style="visibility: hidden;"></rect>
     </g>
     <g class="resize w" transform="translate(407,0)" style="cursor: ew-resize;”>
          <rect x="-3" width="6" height="57" y="-6" style="visibility: hidden;"></rect>
     </g>
</g> 
```

```
function brushed() {
  x.domain(brush.empty() ? x2.domain() : brush.extent());
  focus.select(".area").attr("d", area);
  focus.select(".x.axis").call(xAxis); 
}
```
- brushedのコールバックの中で、scaleを変更。その後、area chartとx軸の再描画
goのvimコマンド「Fmt」が、実はquickfixに登録してくれてて最高だった

vimでgolangを書く人なら定期的に手が勝手に「:Fmt」と打つようになっていると思いますが、失敗原因は表示されません。

が、実はquickfixに登録されていた事に気づきました。
（もし常識だったらごめんなさい）

# 実践
![Screenshot from 2014-02-05 15:31:22.png](https://qiita-image-store.s3.amazonaws.com/0/18520/8e41b91a-a2d2-e827-1b79-da917ff49ed8.png)
この状態だと何処で落ちたかわかりません。

![Screenshot from 2014-02-05 15:33:28.png](https://qiita-image-store.s3.amazonaws.com/0/18520/e899654c-9269-5334-10f6-f0154cd5c80e.png)
「:ll」でクイックフィックスの先頭へ案内してくれます。

![Screenshot from 2014-02-05 15:34:10.png](https://qiita-image-store.s3.amazonaws.com/0/18520/fe98a502-69ce-8f2a-b24f-0e20874065e1.png)
<del>「:lop」で一覧を表示してくれます。</del>
go1.3からlocation listではなくquickfix listになったので、「:cw」で開くようになった。

公式のmiscに入ってるvimプラギン、実は結構ちゃんと作ってあるのかも。
他のも読んで、何してくれてるのか調べておこう。
XCodeでビルドしても、iOSシミュレータが立ち上がらない！アプリも転送されない！

ビルドを繰り返したり中断したりし続けていたらそうなった件。

「`Waiting for process FooBar.app to launch.`」と表示されて、そこで止まる。

* http://stackoverflow.com/questions/5326757/xcode-4-waiting-for-process-appname-to-launch

> Go into your ProjectName.xcodeproj/ directory and delete anything named with your userid. Re-open the project in xcode and all that will get recreated and it should work. At least it did for me.

これを実行したら直った。これが不自由なソフトウェア......
githubのリポジトリにアクセスするとパスワードを求められる時の対処

~/.netrcにIDとパスワード書けばいいよ！と言う人もいるけど平文でパスワード書くなんて恐ろしい真似はしたくないよね。

まず、なぜパスワードを求められるかと言うと、http(s)でcloneしたからと思われる。新しいリポジトリを作った時、例としてhttpsでcloneするコマンドが出てくるのでついやっちゃってるケースがありそう。

## リモートのURLを確認・変更

リポジトリのディレクトリに入って

```bash
git config remote.origin.url
```

https://github.com/[ユーザID]/[リポジトリ] になってたら次のコマンドで変更。

```bash
git remote set-url origin git@github.com:[ユーザID]/[リポジトリ].git
```

公開鍵が登録されていればこれで次からパスワードは求められない。
されてなかったらAccount Settingsの[SSH Keys](https://github.com/settings/ssh)で登録する。
登録方法はぐぐれば出てくるので各自どうぞ。

## 追記

コメントで情報をいただきました。

global設定に以下を追加しておくと、httpsのリポジトリにpushすると自動的にssh経由（git@github.com）に置き換えてくれる。

```bash
git config --global "url.git@github.com:.pushinsteadof" "https://github.com/"
```

なお、remote.origin.urlはそのままなので、pullはhttps経由になるはず。