OmniAICreator/Qiita-1.07M huggingface dataset:
iOS7対応高速(15倍速い)スクリーンキャプチャ

iOS7である場合、UIViewを高速(15倍速い)でキャプチャできます。
iOS6以下は普通のキャプチャになります。

```objc
+ (UIImage *)screenCapture:(UIView *)view {
    UIImage *capture;
    UIGraphicsBeginImageContextWithOptions(view.frame.size , NO , 1.0 );

    if ([view respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) {
        [view drawViewHierarchyInRect:view.bounds afterScreenUpdates:YES];
    } else {
        [view.layer renderInContext:UIGraphicsGetCurrentContext()];
    }

    capture = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return capture;
}

+ (UIImage *)screenCaptureWithView:(UIView *)view rect:(CGRect)rect{
    UIImage *capture;
    UIGraphicsBeginImageContextWithOptions(rect.size, NO, 1.0);
    CGContextRef context = UIGraphicsGetCurrentContext();
    CGContextTranslateCTM(context, -rect.origin.x, -rect.origin.y);
    CALayer *layer = view.layer;
    if ([view respondsToSelector:@selector(drawViewHierarchyInRect:afterScreenUpdates:)]) {
        [view drawViewHierarchyInRect:view.frame afterScreenUpdates:YES];
    } else {
        [view.layer renderInContext:UIGraphicsGetCurrentContext()];
    }
    capture = UIGraphicsGetImageFromCurrentImageContext();
    UIGraphicsEndImageContext();
    return capture;
}
```
PATH の扱い

unix 系 OS では `${PATH}` 環境変数を参照してコマンドの検索パスを指定する事ができます。
通常はログイン時にシステムデフォルトのコマンド検索パスが `${PATH}` に自動で設定されていますが、ユーザ毎のシェルのログインファイル (`${HOME}/.profile` 等）で自分用のコマンド検索パスを追加設定する事が多いと思います。

ここで気をつけるべきは `${PATH}` 中のヌルパス (`::`) はカレントディレクトリ (`.`) と同等に扱われてしまう事です。

例えば

```

PATH="${PATH}:${mypath}:${HOME}/bin"

```

と設定した時に `${mypath}` が設定されていない場合は

```

PATH="${PATH}::${HOME}/bin"

```

と展開されてしまうので、結果としてカレントディレクトリが ${PATH} に含まれてしまいます。

この挙動は POSIX (IEEE Std 1003.1, 2004 Edition) の8.3 Other Environment Variables) にも明記されていて、

> The prefixes shall be separated by a colon ( ':' ). When a non-zero-length prefix is applied to this filename, a slash shall be inserted between the prefix and the filename.
> A zero-length prefix is a legacy feature that indicates the current working directory.

過去互換性の様なのですが非常に迷惑な仕様でもあります。

カレントディレクトリをコマンド検索パスに含める事は **セキュリティ上のリスクを伴うのでどんな場合でも避けるべき** ですので、PATH を設定する場合は注意が必要です。

例えば *`${HOME}/.profile`* で `${PATH}` を設定する場合に、 *sed* (1) を利用して以下の様にする事は防衛手段として悪く無い考えだと思います。

```

PATH="`echo ${PATH}:${mypath}:${HOME}/bin | sed 's/::*/:/g'`"

```

セキュリティの問題は自分だけではなく、同じサーバを利用している多くの利用者や、場合によってはインターネット全体など非常に広範囲にわたって影響を及ぼす可能性がある危険な問題ですので、注意を怠らない様にする事が重要だと思います。
Rの data frame から行や列を選択して取り出す


`data` がデータフレームだとして

````
# 最初の5行取り出す
data[1:5, ]
# 最初の100列取り出す
data[, 1:100]
# 最初の5行100列を取り出す
data[1:5, 1:100]
````

行をランダムサンプリングする場合は、サンプリングする行を `sample()` 関数で作り、インデックス指定で取り出す。

ランダムに100行取り出す。

````
data[sample(nrow(data), 100),]
````
Rで使わない変数を消す


````
remove(unused_var)
# または
rm(unused_var)
````

全部消してワークスペースをまっさらの白紙状態にしたいときは、`ls()` で変数一覧のベクトルを取得して、`rm()` の `list` パラメータに渡す。

````
rm(list=ls())
````
awk による正規表現にマッチした部分の抜き出し


amazon ec2 の現在の状態を API を利用して取得するスクリプトを作成している時に気がついた事です。

入力行に "running"、"stopping"、"stopped"、"pendding" のいずれかの単語が含まれる場合にその単語を抽出する処理ですが、 *awk* (1) の組み込み関数 sub()、gsub() ではマッチした部分の後方参照ができないのでマッチしたパターンに応じた変換を一度に行う事ができず、それぞれのパターンにマッチングさせて処理をするしかありません。

```
awk '
	/^INSTANCE.*running/{
		print running;
	}
	/^INSTANCE.*stopping/{
		print stopping;
	}
	/^INSTANCE.*stopped/{
		print stopped;
	}
	/^INSTANCE.*pending/{
		print pending;
	}
'
```
    
しかしこれではコードが冗長になってしまい解読性も悪くなり、あまりにも悲しいのでマニュアルをじっくりと調べた所、組み込み関数 match() で正規表現にマッチ処理を行うと、組み込み変数 **RSTART** にマッチした文字の位置、 **RLENGTH** にマッチした文字列の長さが設定されるので、組み込み関数 substr() と併用する事でマッチした部分を抽出する事ができる事に気がつきました。

```
awk '
	/^INSTANCE/{
		if(match($0, /running|stopping|stopped|pending/))
			print substr($0, RSTART, RLENGTH);
		if(match($0, /ec2.*\.amazonaws\.com/))
			print substr($0, RSTART, RLENGTH);
	}
'
```

*awk* (1) で正規表現によるパターン抽出を行う場合にちょっと便利な小技だと思います。

ちなみに gnu awk では組み込み関数 match() が拡張されていて、マッチした部分を簡単に取得する事ができる様ですが、POSIX 準拠の *awk* (1) の機能だけでも何とかマッチした部分を取得できる様になります。
TwitterのCard Validatorでinvalid card type (content-type間違い)

[TwitterのCard Validator](https://dev.twitter.com/docs/cards/validation/validator)でinvalid card typeが発生した。
原因はS3においたhtmlのcontent-typeがimage/jpegになっていたためだった＼(^o^)／
text/htmlに修正したらvalidator通った。

----
おまけ

正しい(と思われる)ページをくわしてもinvalid card typeが発生する期間があった。
https://dev.twitter.com/をくわしてもinvalid card type。
メンテナンス中とかだった？
後日どちらもinvalid card typeは発生しなくなった。
コマンドラインで `-` から始まるファイルを扱う時の方法

例えば `-foo` ってファイルがあったら普通にコマンドラインで処理すると
「-foo なんてオプションはねーよ！」という感じのエラーになります。

## 対策1

`./-foo` のように書く。

## 対策2

`-- "-foo"` のように書く。 `--` は「オプションとしての引数の終了」を意味するbash の build-in なのでこれ以降にかけばファイル名だと認識される。

## 参考

shell - What does "--" (double-dash) mean? - Unix & Linux Stack Exchange
http://unix.stackexchange.com/questions/11376/what-does-double-dash-mean
magit でコミットするときに新しいウィンドウを立ち上げないようにする

**(2019-03-07 追記)**

.emacs.d 大掃除をやってて気づいたのですが、このハックは現代の Emacs + magit では不要になっていました。

```
GNU Emacs 26.1 (build 1, x86_64-apple-darwin18.0.0, Carbon Version 158 AppKit 1671) of 2018-11-18
magit-20190306.413
```

---

**(以下 2013-10-11 時点での投稿)**

2ヶ月ほど前に magit のコミット周りの実装が大きく変わりました。それまではコミットメッセージの入力をミニバッファで行っていましたが、この変更に伴い git-commit-mode というメジャーモードを用いて入力、つまり一つのバッファを占有して行うようになりました。

本来この git-commit-mode は **同じ** ウィンドウ内の別バッファに開くことが意図されており、Linux 版ではこの通りの挙動を示します。
しかし、Mac 版 (Cocoa) Emacs では **新しく** ウィンドウを開いて（もう一つ Emacs を起動して）そこに git-commit-mode を開くという挙動を示し、大変面倒くさい感じになっていました。

2ヶ月間この挙動に悩まされていましたが、この度改善するための設定を発見したため、ここに共有します。

## Mac でも同一ウィンドウ内でコミットアクションを完結させる

/Application に Emacs.app を置いた場合は

```el:init.el
(set-variable 'magit-emacsclient-executable "/Applications/Emacs.app/Contents/MacOS/bin/emacsclient")
```

Homebrew で Emacs をインストールした場合は

```el:init.el
(set-variable 'magit-emacsclient-executable "/usr/local/Cellar/emacs/24.3/bin/emacsclient")
```

を init.el などに追記しましょう。

これで次回から git-commit-mode は **同じ** ウィンドウ内の別バッファに立ち上がるようになります。c を2回押したあと、ウィンドウを切り替えてメッセージ入れて C-c C-c したら手動でウィンドウを閉じる・・・といった煩わしさから開放されます。

![magit-commit.png](https://qiita-image-store.s3.amazonaws.com/0/17508/bf377733-c712-d54d-7d22-7c68bf77d032.png)

Emacs + magit で、さらなる作業効率の向上を！

ついでに僕の .emacs.d は [dtan4/dot.emacs.d](https://github.com/dtan4/dot.emacs.d) に置いてあります。

## 参考

[上記挙動に関する Issue #862](https://github.com/magit/magit/issues/862) に投稿された [aisipos 氏の投稿](https://github.com/magit/magit/issues/862)
GroovyのRangeメモ

たとえば、1から10までの整数のうち、指定した数だけ刻んだ数字をListに格納する処理。
具体例だと、1から10までの整数のうち、3つずつ数を刻んで格納してみます。
まずはオーソドックスにJavaっぽく。

```groovy
// Javaっぽく
ArrayList<Integer> list = new ArrayList<Integer>()
for(int i =1; i <= 10; i+=3) {
    list.add(i)
}

assert list == [1,4,7,10]
```
思いっきりJavaです。
これをもう少しGroovyっぽく変えてみる。

```groovy
// Groovyっぽく
def list = []
1.step(11,3) {
    list.add(it)
}

assert list == [1,4,7,10]
```
**.step()**メソッドはGroovyJDKの[Numberクラスにあるメソッド](http://groovy.codehaus.org/groovy-jdk/java/lang/Number.html#step(java.lang.Number, java.lang.Number, groovy.lang.Closure))です。

最初のコードよりは文字数が減ってスッキリしました。
ただ、処理の本質(stepに渡しているクロージャ)の中で必要な変数をその外で宣言しているのがイケてない。
そこで、関数型っぽく変数宣言なしで、さらにちゃんと値を返すようにしてみます。

```groovy
// 関数型っぽく
assert (1..10).step(3) == [1,4,7,10]
```

一気にコードが短くなりました。
**(1..10)**でまずは[Rangeクラス](http://groovy.codehaus.org/api/groovy/lang/Range.html)のオブジェクトを取得して、[.step()](http://groovy.codehaus.org/api/groovy/lang/Range.html#step(int))で、指定した値分刻んだ値のListが返されます。

で、ここで本題ですが、Number#step()とRange#step()はその終端が含まれるか含まれないか、という違いがあります（結果的に）
以下サンプルソースです。（比較がし易いように変数使ったり意図的に改行していなかったりします。）

```groovy
def start = 1
def end = 10
def list1 = []; start.step(end, 3){list1.add(it)}
def list2 = (start..end).step(3)

assert list1 == [1,4,7] // endの値は含まれない
assert list2 == [1,4,7,10] // endの値が含まれる
```

Range#step()でも渡す値(終端)を含みたくない場合は以下の方法があります。

```groovy
assert (1..10-1).step(3) == [1,4,7]
assert (1..<10).step(3) == [1,4,7]
```
明らかに後者の方がイケてますね！
個人的には、Number#step()よりも、関数型っぽく使えるRange#step()の方が好きです。
constメンバ関数から、同じクラスのメンバであるポインタの指す先は変更できる

今まで知らずにC++書いてた
ﾋｨｰ(((ﾟДﾟ)))ｶﾞﾀｶﾞﾀ

constメンバ関数から、同じクラスのメンバであるポインタの指す先は変更できる。（英訳したくない）
つまり、

```cpp
class A{
    double* a;
public:
    void func() const{
        a[0] = 1.0;
    }
};
```

これはエラーにならない。

```cpp
class A{
    double* a;
public:
    void func(double* b) const{
        a = b;
    }
};
```

これはエラー。つまり`double * const a`扱い。
`std::vector`なら期待通りconst

```cpp
class A{
    std::vector<double> a;
public:
    void func() const{
        a[0] = 1.0;
    }
};
```

はエラー。ちなみに

```cpp
class A{
    std::unique_ptr<double[]> a;
public:
    void func() const{
        a[0] = 1.0;
    }
};
```

はエラーにならない。
つまりコンテナ使えってことですね、わかります。
Rails4 ＋ Devise3でメールアドレスではなく、ユーザ名でログインする

DeviseがRails4に対応しました。

```
gem 'devise'
```

で大丈夫です。

メールアドレスではなく、ユーザ名でログインするには

```config/initalizers/devise.rb
config.authentication_keys = [ :username ]
```

に書き換え、Viewを書き換えると昔はできたらしい。(もちらん、usernameカラムは作ってください。

しかし、これだけだとエラーがでる。

上記に加え`UserModle`の`email_required?`と`email_changed?`をOverrideすればできるようになった。

```User.rb
#UserModel
def email_required?
  false
 end

def email_changed?
  false
end
```

##参考URL
[What are good ways to remove email as a required field in devise?](http://www.quora.com/What-are-good-ways-to-remove-email-as-a-required-field-in-devise)

5時間ぐらい探したけど、しれってQuoraに書いてありました。
画像をリアルタイムにグレースケールにしていくプログラム


[RubyKokuban](http://ongaeshi.hatenablog.com/entry/rubykokuban-release)の `Image#map_pixels` を使って書いた。こういうのはRubyKokubanが得意としている。

![gray-anim.gif](http://d3j5vwomefv46c.cloudfront.net/photos/large/814276272.gif?1381423434)

```ruby
def setup
  set_window_size(520, 420)
  set_background(Color::Linen)
  @image = Image.load("red-flower.jpg")
  @rate = 0.0
  @frame = 0
  @image_gray = gray(@image, @rate)
end

def update
  @frame += 1
  @rate += 0.003
  @rate -= 1.0 if @rate > 1.0
  @image_gray = gray(@image, @rate) if @frame % 10 == 0

  # @sequence_shot = SequenceShot.new(10, 40) unless @sequence_shot
  # @sequence_shot.update
end

def draw
  x = 10; y = 30
  set_color(Color::White)
  @image_gray.draw(x, y, @image_gray.width * 2.5, @image_gray.height * 2.5)

  # debug info
  set_color(0, 0, 0)
  # text(DebugInfo.fps, 10, 15)
  text("gray rate: #{@rate}", 10, 15)
end

# ----------------------------------------------------------

def gray(image, rate)
  image.map_pixels do |x, y|
    c = image.color(x, y)
    b = c.brightness
    Color.new(c.r * (1.0 - rate) + b * rate,
              c.g * (1.0 - rate) + b * rate,
              c.b * (1.0 - rate) + b * rate,
              c.a)
  end
end
```

## gifアニメの作り方

```ruby
  # @sequence_shot = SequenceShot.new(10, 40) unless @sequence_shot
  # @sequence_shot.update
```

をコメントアウトを外して実行すると`sequence_shot_xxx.png`という名前で連番画像が作られる。

その後で[ImageMagickを使って](http://qiita.com/ongaeshi/items/21fceae420b7330b0c1b)gifアニメに変換する。 

```
$ convert -layers optimize -loop 0 -delay 36 sequence_shot_*.png gray_anim.gif
```
rails4にjquery uiを導入するまで

draggableを使いたかったが
rails4には入っていなかったので

Gemfileに
gem 'jquery-ui-rails'
を加えて
bundle update
bundle install
した

その後、サーバの再起動が必要
ctrl c
で切って
rails s
で起動

assets/javascripts/
assets/stylesheets/
に読み込みを記入したいので
それぞれに
require jquery.ui.all
を加えるとdraggableが使えるようになる

しかしjquery uiはファイル数が多く、できればallで読み込みたくない
そこで必要なものだけ読み込む
こんな感じに
http://rubydoc.info/gems/jquery-ui-rails/4.0.1/frames
私の場合draggableを入れたいので、allのrequireは消して、
javascripts/の方に
require jquery.ui.draggable
と書けばOK
stylesheets/の方に同様に書くと、エラーになる
draggableにCSSは不要のため

完了！
Mac OS X に OpenGrok で、今日からコードリーディング


最近、[FxOS コードリーディング](https://www.facebook.com/groups/fxos.code.reading/)というグループに入れて頂きました。そこで、いつも持ち歩いている MBA で Firefox OS のコードを読んで行きたい! ということで Mac OS X に OpenGrok をインストールしました。ここに手順をメモします。

## 必要なモノ

パッケージをダウンロードしたサイトと今回ダウンロードしたバージョンのファイルを記載します。

- JDK 1.7 以上
- Ant
	- JDK と Ant は元々入っていたものを使いましたが、OS X Lion (10.7)  以降はインストールが必要です。ここ (<http://support.apple.com/kb/DL1572>) で Java をインストールします。Ant も一緒にインストールされるそうです。
	- なお、ant のバージョンは 1.7.1 以上なら OK です。以下のコマンドで確認できます。

	```
	$ ant -version
	```

- OpenGrok
	- <http://opengrok.github.io/OpenGrok/>
	- opengrok-0.11.1-src.tar.gz ("Source only" のパッケージを落とします)
- Tomcat
	- <http://tomcat.apache.org>
	- apache-tomcat-7.0.42.tar.gz
- JFlex
	- <http://jflex.de/>
	- jflex-1.4.3.tar.gz
- Exuberant ctags
	- <http://ctags.sourceforge.net/>
	- sctags-5.8.tar.gz

## Exuberant ctags のインストール
- Exuberant ctags をビルドして、インストールします。

	```
	$ tar xzf ctags-5.8.tar.gz
	$ cd ctags-5.8
	$ ./configure
	$ make
	$ sudo make install
	```

- /usr/local/bin/ctags にインストールされます。

## OpenGrok のビルド
- JFlex のコピー
	- 落としてきた Opengrok と JFlex を展開します。
	- JFlex.jar を opengrok-&lt;version&gt;-src/lib/ と /usr/share/ant/lib/ にコピーします。

	```
	$ cp jflex-1.4.3/lib/JFlex.jar opengrok-0.11.1-src/lib/
	$ sudo cp jflex-1.4.3/lib/JFlex.jar /usr/share/ant/lib/
	```

- OpenGrok のビルド
	- ant で OpenGrok をビルドします。

	```
	$ cd opengrok-0.11.1-src/lib/
	$ ant
	```

	- dist/source.war が出来たことを確認します。

	```
	$ ls -l dist/source.war
	```

## Tomcat の展開と OpenGrok のデプロイ
- Tomcat を展開します。後々 Tomcat を運用するディレクトリになるので適切な場所に展開してください。ここでは OpenGrok と同じディレクトリに配置しています。
- 環境変数で Exuberant ctags, Java, Tomcat のパスを指定するのが OSX へのインストールのキモです。(ここ以外は Linux の場合と同じです)

	```
	$ tar xzf apache-tomcat-7.0.42.tar.gz
	$ 
	$ export EXUBERANT_CTAGS=/usr/local/bin/ctags
	$ export JAVA_HOME=/System/Library/Frameworks/JavaVM.framework/Home
	$ export OPENGROK_APP_SERVER="Tomcat"
	$ export OPENGROK_TOMCAT_BASE=`pwd`/apache-tomcat-7.0.42
	$
	$ cd opengrok-0.11.1-src/
	$ ./OpenGrok deploy
	```

## Tomcat の起動
- Tomcat を起動します。

	```
	./apache-tomcat-7.0.42/bin/startup.sh
	```

- <http://localhost:8080/source> をブラウザを開いて、以下のような OpenGrok のページが開いていれば成功です。

	![opengrok.jpg](https://qiita-image-store.s3.amazonaws.com/0/26061/fb202d61-8331-bb9c-28f7-b3c6bd8bb31e.jpeg "opengrok.jpg")


## インデックス作成
- 見たいソースコードへのパスを指定して、インデックスを作成します。**なお、デプロイ時に設定した環境変数はここでも必要です。** (-E は sudo  で環境変数を引き継ぐために付けています)

	```
	sudo -E opengrok-0.11.1-src/OpenGrok index ~/source/B2G
	```

- インデックスデータは /var/opengrok/data 以下に作成されます。
- 大きなソースコードだと結構時間がかかります。

以上です。

## (参考) Firefox OS のソース取得方法
申し訳程度ですが、Firefox OS のソースの取得方法も書いておきます。

```
git clone git://github.com/mozilla-b2g/B2G.git
cd B2G
./config.sh emulator
```
- ビルドで生成される中間ソースコードもインデックス化しないとソースを追えないところが結構あるそうなので、ビルド後にインデックスを作ったほうが良さそうです。

- ビルドに必要なソースを全部落としてくるのでちょっと時間がかかります。また、インデックス作成はさらに時間がかかるので、サブプロジェクトのディレクトリごとに必要に応じてインデックスを取るのがよさそうです。
- "emulator" でなく実機にビルドしたい場合は、"./config.sh" だけで実行するとサポートされているデバイスの一覧が出てきますので、そちらから選んで指定して下さい。

- ビルドについて、詳しくはこちらを参照して下さい: <https://developer.mozilla.org/en-US/docs/Mozilla/Firefox_OS/Building_and_installing_Firefox_OS>
tmlib.js AssetManager について

tmlib.js には、AssetManager って言う素材を管理するクラスがあるです。(tmlib.js 0.1.8) 
シングルトンぽい感じで、tm.asset.AssetManager にインスタンス化もされてるのでそのまま使うみたい。

```js
tm.asset.AssetManager.load('windowskin','img/windowskin.png');
```

ロードしておいて

```js
tm.asset.AssetManager.get('windowskin');
```

素材(この場合Texture）のインスタンスがもらえる。便利。

さらに思ったのが、json ファイル
とりあえず固定的なデータは、jsonファイルで置いておいて、あとで変更しやすいように設定とかは外だしに、json ファイルをロードして使う感じの処理ってするよね？きっと。

これもある意味、素材だよね～？ってことで

```js
tm.asset.AssetManager.load('windowskin.config','data/windowskin.json');
tm.asset.AssetManager.get('windowskin.config');
```

なんて、すると json を読み込んでオブジェクトが取れれば、便利だな～と。
json の読み込みは全部これでＯＫ～的な。

調べてみると、画像の場合は、

```js
tm.asset.AssetManager.register("png", _textureFunc);
```

とかって登録されていて、register メソッドは、asset の path （上の例で言うと、'img/windowskin.png'）の拡張子に対応した function (_textureFuncのこと)を設定しておいて、それによって、インスタンスを作成する。

ふむふむ、

```js
tm.asset.AssetManager.register("json", jsonFunc);
```

こんなものがあれば良さそう？

ただ調べてみると、似たような事をしているクラスがありました。

```js
tm.asset.AssetManager.register("tmx", _tmxFunc);
tm.asset.AssetManager.register("tmss", _tmssFunc);
```

_tmxFunc は、MapSheet クラスをインスタンス化してくれて path には、json ファイルを指定（拡張子は .tmx）
_tmssFunc は、SpriteSheetクラス（拡張子は .tmss）

拡張子で作るインスタンスを制御するのもいいけど、RPGだとこれからもデータの種類が増えそうだし拡張子がいろいろ増えるのは避けたいかな～と。
なので、中身が json なら .json でいきたい。

って、ことで作って見た。

```coffeescript:JsonWrapper.coffee
# JsonWrapper クラス
# asset の Jsonファイル対応
tm.define 'tm.asset.JsonWrapper',
	superClass: tm.event.EventDispatcher

	# 初期化
	init: (path) ->
		@superInit()

		@loaded = false

		if typeof path == 'string'
			self = @
			tm.util.Ajax.load
				url: path
				dataType: 'json'
				success: (o) ->
					self.$extend o
					self.loaded = true
					self.dispatchEvent tm.event.Event('load')
		else
			@$extend path
			@loaded = true

# AssetManager に json ファイル追加
tm.asset.AssetManager.register 'json', (path) -> tm.asset.JsonWrapper(path)
```

これで、json ファイルのロード処理は、書かなくてすむ！

ってことで

Windowクラスの素材は、いろいろあるのだけど、素材の仕様はさまざまに変更できるように、これを使って json にしました。

json ファイルを用意すればなんでもできるわ～って思って、やってたんだけど…
実際に json ファイルを作る段階になって、とある問題が…

json ファイル作るのめんどくさい＞＜

まぁ～、coffee script で JavaObject を json ファイルに出力するのを作れば良いだけなんだけど
そのファイルを管理したりね？開発中は中身もいろいろかわるし、面倒だな～ってことで

```js
tm.asset.AssetManager.load('windowskin', {image: 'windowskin.vxace', borderWidth: 16 .....});
```

と、やると、json ファイルを指定したのと同じ様に、json が取れれば、コード内に書いて置けるし、あとで、json ファイルにもできるな～っておもったのです。
使うほうは、get メソッドを使うだけなので、影響ないし。

なのでちょっと改造

```coffeescript:AssetManager.coffee
# 元の _load を保存
tm.asset.AssetManager._original_load = tm.asset.AssetManager._load

# _load メソッドの書き直し
tm.asset.AssetManager._load = (key, path) ->
	return if @contains(key)
	if typeof path == 'string'
		# path が string の場合は、元の _load を実行
		@_original_load(key, path)
	else
		# string 以外は、hadh として、_type のキーを持つ関数を実行する
		@assets[key] = @_funcs[path._type](path)
		# 消してもいいよね。
		delete path._type
		# ロード処理が無いので、load イベントのつじつま合わせ、これでいいのかな？
		@_checkLoadedFunc()
```

こんなんでどでしょ、動いているから、とりあえずこれで作業中…
（prototype 使うべきなんかな～？）


で、ついでに jsdo.it をつかってみたよ。
http://jsdo.it/YFukuyama/ucRu

jsdo.it も面白い。
async void 回避策？

neue cc さんの記事を拝見して思いついたことのメモ。
[asyncの落とし穴Part3, async voidを避けるべき100億の理由](http://neue.cc/2013/10/10_429.html)

(※思い付きですので、見当違いだったりするかもしれません。ご意見を頂けると助かりす。)

## イベントハンドラ内では Observable.Create(With async) を使う

引数に、戻り値がTaskのデリゲートを渡すObservable.Createのオーバーロードを使用します。

```csharp
public static IObservable<T> Create<T>(Func<IObserver<T>, CancellationToken, Task> subscribeAsync)
```

中身はこんな感じ
※参考: http://go4answers.webhost4life.com/Example/observablecreate-async-166592.aspx

```csharp
public static IObservable<T> Create<T>(Func<IObserver<T>, CancellationToken, Task> subscribeAsync)
{
    return Observable.Create<T>(observer =>
        {
            var cts = new CancellationTokenSource();
            var task = subscribeAsync(observer, cts.Token);
            var subscription = task.ToObservable().Subscribe(_ => { }, observer.OnError, observer.OnCompleted);
            return new CompositeDisposable(subscription, new CancellationDisposable(cts));
        });
}
```

引数のデリケート内で、とある非同期のメソッドを記述します。

```csharp
public static async Task ToaruAsyncMethod()
{
    await Task.Delay(2000);
}

private void NanikanoEventHandler(Object sender, EventArgs e)
{
     var io = ObservableExt.Create<Unit>(async (observer, ct) =>
            {
                await ToaruMethod();
            });
    disposable = io.Subscribe(
            _ => { }, 
            error => logger.WriteLine("error! " + error.Message), 
            () => logger.WriteLine("completed!"));
}
```

- イベントハンドラにasync を書かなくて済みます
- OnErrorでエラーのハンドリングができます
- OnCompletedで完了通知も受け取れます
Cubeの各面に異なるマテリアルを使うときはTHREE.jsのバージョンに注意!

各面が異なる色のCubeを作成することを考えます。

#バージョンr53以前
```js:test.js
    //Cube
    var materials = [];

    for(var i = 0;i < 6;i++){
        materials.push(new THREE.MeshBasicMaterial( { color: Math.random() * 0xffffff } ) );
    }

    var CUBE_WIDTH = 200;
    var CUBE_HEIGHT = 200;
    var CUBE_DEPTH = 200;
    var CUBE_WIDTH_SEGMENTS = null;
    var CUBE_HEIGHT_SEGMENTS = null;
    var CUBE_DEPTH_SEGMENTS = null;

    var cube_geo = new THREE.CubeGeometry(
        CUBE_WIDTH,
        CUBE_HEIGHT,
        CUBE_DEPTH,
        CUBE_WIDTH_SEGMENTS,
        CUBE_HEIGHT_SEGMENTS,
        CUBE_DEPTH_SEGMENTS,
        materials
    );
    //空のマテリアル
    var cube_material = new THREE.MeshFaceMaterial();

    cube = new THREE.Mesh(cube_geo,cube_material);

    scene.add(cube);
```
Geometryの最後の引数に各面のマテリアルが入った配列を指定しています。MeshはGeometryと空のマテリアルを入れています。

#バージョンr53で仕様変更
・THREE.jsの仕様変更履歴
https://github.com/mrdoob/three.js/wiki/Migration

>r52→r53
>Geometry no longer has a materials property. MeshFaceMaterials usage is now like this: new >THREE.Mesh( geometry, new THREE.MeshFaceMaterials( [ material1, material2 ] ) ). Meaning that >face.materialIndex will map the array passed to MeshFaceMaterials.


#バージョンr53以降
```js:test_r53.js
    var cube_geo = new THREE.CubeGeometry(
        CUBE_WIDTH,
        CUBE_HEIGHT,
        CUBE_DEPTH,
        CUBE_WIDTH_SEGMENTS,
        CUBE_HEIGHT_SEGMENTS,
        CUBE_DEPTH_SEGMENTS
    );
    //空のマテリアル
    var cube_material = new THREE.MeshFaceMaterial(materials);
```
バージョンr53以降ではGeometryの引数にマテリアルを指定することはできません。代わりにMeshFaceMaterialの引数にマテリアルの配列を入れます。
${name-word}と${name:-word}の違い

`${name-word}` と `${name:-word}` は両方変数 `$name` にデフォルト値を設定するのに使います。 `$name` が未定義の場合、両方とも `word` を返します。

```zsh
% echo ${null-foo}  # $null は未定義だとする
foo
% echo ${null:-foo}
foo
```

違いは `$name` が空文字列の場合 `${name:-word}` が `word` を返す一方 `${name-word}` が空文字を返すことです。

```zsh
% empty=''
% echo ${empty-foo}

% echo ${empty:-foo}
foo
```

似たものに `${name+word}` と `${name:+word}` があります。こちらは変数 `$name` に値がある場合に、その値を上書きするものです。

```zsh
% hoge=hoge
% echo ${hoge+foo}
foo
% echo ${hoge:+foo}
foo
```

違いは `$name` が空文字列だった場合の挙動です。

```zsh
% empty=''
% echo ${empty+foo}
foo
% echo ${empty:+foo}

```

`$name` が未定義の場合は、両方空になります。

```zsh
% echo ${null+foo}

% echo ${null:+foo}

```


## 参考

- zshexpn(1) PARAMETER EXPANSION
cssでpost-meta-top, post-meta-bottomなどのように接頭語の同じクラスを同時に選択する

```html
<div class="post-meta-top"></div>
<div class="main-text"></div>
<div class="post-meta-bottom"></div>
```

な時に2つともに同じスタイルを適用したかったら

```css
.post-meta-top, .post-meta-bottom{font-size:12px;}
```
みたいに書いてたんですが、重複部分が多くて気に食わない。


scss なら何か方法があるかと思って質問したら css の基本機能として備わっているようです。

```css
 [class^='post-meta-']{font-size:12px;}
```

ちょっとややこしいけど、見た目がスッキリするのでこれからはこの書き方で行こうと思います。

## 参考

sass - Select several class in scss or in other css extended language by asterisk - Stack Overflow
http://stackoverflow.com/questions/19292860/select-several-class-in-scss-or-in-other-css-extended-language-by-asterisk/19292942?noredirect=1#19292942
tarでまとめつつ、glacierにput/get

まとめたほうが安いようなので...

#### put

```put_from_stdin.rb
#!/usr/bin/env ruby
require 'fog'

glacier = Fog::AWS::Glacier.new(
  :aws_access_key_id => YOUR_KEY_ID,
  :aws_secret_access_key => YOUR_SECRET_KEY,
  :region => YOUR_REGION
  )
vault = glacier.vaults.get('VOLT_NAME')
$stdin.instance_eval { undef :rewind }
p vault.archives.create(
  :body => $stdin,
  :multipart_chunk_size => 1024 * 1024 * 5,
  :description => 'archive-key'
)
```

作成されたarchive情報は保存しておくと、後のインベントリのジョブが省けてちょっと楽

```
tar -cO target_dir - | ./put_from_stdin.rb
```

#### get

``` get_to_stdout.rb
#!/usr/bin/env ruby
require 'fog'

glacier = Fog::AWS::Glacier.new(
  :aws_access_key_id => YOUR_KEY_ID,
  :aws_secret_access_key => YOUR_SECRET_KEY,
  :region => YOUR_REGION
  )
vault = glacier.vaults.get(VOLT_NAME)

## archive情報保存してたら、直接archive_idを指定出来るので、このjobいらない。
archive = job_inventory.get_output.body["ArchiveList"].find{|archive| archive['ArchiveDescription'] == 'archive-key'}

job_archive = vault.jobs.create(:type => Fog::AWS::Glacier::Job::ARCHIVE, :archive_id => archive['ArchiveId'])
job_archive.get_output :io => STDOUT
```

あとは

```
./get_to_stdout.rb | tar xvfi -
```
tarのstreamをFogを使ってRiakCSにアップロードする

`xtrabackup`のオプションの`--stream-tar`のようにtarで固めたものを
diskに書かず、全体をメモリに読み込んだりせずに`RiakCS(S3)`にuploadする


### アップロード

```put_from_stdin.rb
#!/usr/bin/env ruby

require 'fog'

YOUR_KEY_ID = 'aws_access_key_id'
YOUR_SECRET_KEY = 'aws_secret_access_key'
YOUR_HOST = 'riakcs.localdomain'
YOUR_BUCKET = 'test_bucket'
YOUR_OBJECT_KEY = 'object_key'
MULTIPART_CHUNK_SIZE = 1024 * 1024 * 20

storage = Fog::Storage.new(
  :provider => 'AWS',
  :aws_access_key_id     => 'YOUR_KEY_ID',
  :aws_secret_access_key => 'YOUR_SECRET_KEY',
  :host                  => YOUR_HOST,    # 今回はローカルのriakcsだったため
  :scheme                => 'http'                  # defaultはhttps
)

bucket = storage.directories.get(YOUR_BUCKET)
$stdin.instance_eval { undef :rewind }
file = bucket.files.new(
  :key  => 'YOUR_OBJECT_KEY',
  :body => $stdin
)
file.multipart_chunk_size = MULTIPART_CHUNK_SIZE
file.save()
```

あとは

```
tar -cO ./directory - | ./upload_from_stdin.rb
```

みたいな感じでtarに固めてアップロード完了

### ダウンロード

ダウンロードするときも一回tarをとってきてとくとか面倒なので、

```get_to_stdout.rb
#!/usr/bin/env ruby

require 'fog'

YOUR_KEY_ID = 'aws_access_key_id'
YOUR_SECRET_KEY = 'aws_secret_access_key'
YOUR_HOST = 'riakcs.localdomain'
YOUR_BUCKET = 'test_bucket'
YOUR_OBJECT_KEY = 'object_key'

storage = Fog::Storage.new(
  :provider => 'AWS',
  :aws_access_key_id     => AWS_KEY_ID,
  :aws_secret_access_key => AWS_SECRET_KEY,
  :host                  => YOUR_HOST,
  :scheme                => 'http'
)

bucket = storage.directories.get(YOUR_BUCKET)
bucket.files.get(YOUR_OBJECT_KEY) do |chunk, remaining_bytes, total_bytes|
  print chunk
end
```

これで標準出力にはかれるので、

```
bundle exec ./riak_stdout_get.rb | tar xvfi -
```

みたいな感じでダウンロードしつつ、展開。

間に暗号を挟んだりはCPUと相談。ただし、ファイル全体が必要になる圧縮は...
iOSデバイスの向きを角度で取得

iOS端末の現在の向きを取得するためのメモです。現在の向きと言っても縦横などの簡単な回転方向ではなく、どの向きにどの程度傾いているかを角度で取得します。

サンプルのプロジェクトをgithubにpushしときました(Xcode5+iOS7)
https://github.com/yimajo/DeviceMotionAttitudeDemo

サンプルの画面はこんな感じ

![IMG_0622.PNG](https://qiita-image-store.s3.amazonaws.com/0/16400/71dbb88e-a6b6-7f77-7f38-e277217c2005.png "IMG_0622.PNG")



## モーションデータ取得イベント

モーションデータの取得タイミングは自前のプル型と自動のプッシュ型があります。それぞれの説明は次のとおりです。

+ プル型
 + 自前で取得しに行くタイミングを設定します。例えばゲームアプリでループの画面更新処理を作った場合などに無駄がないのではないかと思います。センサーに対してpullするからプル型と覚えるとスッキリします。
+ プッシュ型
 + 自動的に取得できます。センサーからpushされるからプッシュだと覚えるとスッキリします。

## デバイスの回転方向

デバイスの向きはオイラー角としてデバイスの3次元空間上の姿勢から取得できます。軸はPitch、Roll、Yawで、それぞれ次の図ではX,Y,Zとなります

![スクリーンショット 2013-10-10 18.39.37.png](https://qiita-image-store.s3.amazonaws.com/0/16400/8fd21004-3f1b-35cf-7a0a-a7ace4ea0e06.png "スクリーンショット 2013-10-10 18.39.37.png")

## コード

イベントハンドラの部分的なコードのみ抜粋するとこんな感じ。エラー処理はいれてません。

```
- (void)attiude
{
    if (self.motionManager.deviceMotionAvailable) {
        
        __weak MasterViewController *viewController = self;
        
        // 向きの更新通知を開始する
        [self.motionManager startDeviceMotionUpdatesToQueue:[NSOperationQueue currentQueue]
                                                withHandler:^(CMDeviceMotion *motion, NSError *error)
         {
             viewController.pitchLabel.text
                = [NSString stringWithFormat:@"%f", motion.attitude.pitch * 180 / M_PI];

             viewController.rollLabel.text
                = [NSString stringWithFormat:@"%f", motion.attitude.roll * 180 / M_PI];

             viewController.yawLabel.text
                = [NSString stringWithFormat:@"%f", motion.attitude.yaw * 180 / M_PI];

         }];
    }
}
```

重要なのはCMMotionManagerのメソッドで取得できるCMDeviceMotionのプロパティCMAttiudeが現在の回転角度を保持している点です。CMGyroDataを取得してしまうとジャイロデータにそのままアクセスしてしまい、回転した方向とその速度が都度取得できます（それが必要になることもあるんでしょうが今回の趣旨とはズレていました）。

## 参考

Apple公式 「iOSイベント処理ガイド」PDF
https://developer.apple.com/jp/devcenter/ios/library/documentation/EventHandlingiPhoneOS.pdf
cuda-memcheck でcudaLaunch Error code X

自分が出たのは Error 7 だった。
で、7って言われても…って感じだったが、このへん（
http://stackoverflow.com/questions/14525015/how-to-decipher-error-code-from-cuda-memcheck
）を参考に、cudaLaunchのAPIリファレンスを読めとのこと。

もちろんリンクが切れてる。
http://docs.nvidia.com/cuda/cuda-runtime-api/group__CUDART__EXECUTION.html#group__CUDART__EXECUTION_1gf4f3215d06b6d90849a3d977f9440002
（2013/10/10 確認）
これみてもわかんないのが、結局enum cudaError に説明があった。

http://docs.nvidia.com/cuda/cuda-runtime-api/group__CUDART__TYPES.html#group__CUDART__TYPES_1gg3f51e3575c2178246db0a94a430e0038d3934977826b2e1488dfeb7e0614e776

ちなみに7は、

 cudaErrorLaunchOutOfResources = 7
 This indicates that a launch did not occur because it did not have appropriate resources. 
 Although this error is similar to cudaErrorInvalidConfiguration,
 this error usually indicates that the user has attempted to pass too many arguments to the device kernel, 
 or the kernel launch specifies too many threads for the kernel's register count. 

引数が多すぎたらしい。。。
a tag のデフォルトの色を無くしたい。

例えばこんなHTMLがあったときに

```html
<style>
 .foo{color:red;}
 .bar{color:green;}
</style>
<div class="foo">
  <p>normal text1</p>
  <a href="foo.html">link1</a>
</div>
<div class="bar">
  <p>normal text2</p>
  <a href="bar.html">link2</a>
</div>
```

リンクの色をdivの色で統一したかったら
`.foo a{color:red;} .bar a{color: green;}` とか今までしてたんですが、そんなことせずとも初めに

```css
a{color:inherit;}
```

と書いとけばOKだったようです。これで少しはstyle.cssが短くなるといいな。
redmineでGitHubのMarkdown記法を利用する


Redmine textileのフォーマットはいやだという人のために、いま流行りのGithub Markdown形式でredmineのwiki, チケットを編集するプラグインRedmine Redcarpet Markdown Formatterを紹介する。他にも似たプラグインはあるらしいけど、Githubとの互換性と高速性が特徴とのこと。

## インストール

Redcarpet Formatterの動作にはRedcarpet 2.0.0b5以降のバージョンが必要とのことなので、バージョン指定でgemを使ってインストールする。

```
$ sudo gem install --version 2.0.0b5 redcarpet
```

次に以下のサイトから、アクセスurlをコピーしてプラグインディレクトリにコピーする．

* https://github.com/alminium/redmine_redcarpet_formatter

注意：Redmine Markdown Formatterプラグインが既にインストールされている場合、正しく動作しません。Redmine Markdown Formatterプラグインをアンインストール(プラグインディレクトリを削除)してから利用してください。

redmineのプラグインディレクトリに移動し、git cloneする。

```
$ cd <redmine>
$ cd plugins
$ sudo git clone https://github.com/alminium/redmine_redcarpet_formatter.git
($ sudo chmod -R www-data.www-data redmine_redcarpet_formatter)
$ cd ..
$ sudo rake redmine:plugins:migrate RAILS_ENV=production
```

\<redmine>にはそれぞれのredmineのルートディレクトリを代入すること。また、上記はubuntu環境を想定しているので、sudoが必要なかったり、chmodのユーザ・グループ名は各自読み替えたりする必要があります。（rakeのコマンドはredmine2.0以降のコマンドになります）

展開が終了したら、apacheを再起動します（redmineがapache+passengerで運用されている場合に限ります）

```
$ sudo apache2ctl restart
```

## 設定

基本的に設定はありません。アドミニストレータ権限のあるユーザが

「管理」→「設定」→「テキスト書式」

の部分をtextileから、markdownに変更するだけです。

注意：変更するとこれまで編集してきたwikiのフォーマットをすべて入れ替える必要があります。

## その他、Tips

redmine固有と思われる記法への対応を挙げておきます。

### アップロードした画像へのリンク

* 元の記法

```
!imagefile.png!
```

* Markdown記法

```
![title](imagefile.png)
```

##　参考文献

* http://www.r-labs.org/projects/r-labs/wiki/Redcarpet_Formatter
`get_header()` と `get_template_part('header')` の違い。

get_header()は

```php
function get_header() {
  if ( file_exists( TEMPLATEPATH . '/header.php') )
    load_template( TEMPLATEPATH . '/header.php');
  else
  load_template( ABSPATH . 'wp-content/themes/default/header.php');
}
```
という意味で、まずカレントディレクトリに`header.php`があるか探して、なかったらテーマのデフォルトの`header.php`を使います。

なので常に `get_header()` を使っていればOK。
Wordpressでテンプレートファイルをロードする5つの方法とその違い

Wordpressはテンプレートファイルを読み込む関数が複数あって、どのような違いがあるかわからなかったので調べてみた。

## 1. include

まずはPHP自体の機能として備わっている外部ファイルの読み込みを行う `include` を使う方法。

```php
include(TEMPLATEPATH . '/template-name.php');
```

長所：最も高速
短所：ファイルの存在の有無をチェックしない

## 2. load_template()

次は `load_template()`、ここからはWordpressの関数

```php
load_template(TEMPLATEPATH . '/template-name.php');
```

長所：高速
短所：やっぱりファイルの有無のチェックはしない。フルパスで記述しないといけない。

## 3. locate_template()

続いては `locate_template()` を使う方法

```php
locate_template($template_names, $load);
```

長所：
ファイルの探索をしてくれるので絶対パスじゃなくて良い.
ファイルを include することもできる。 $load が `true` ならよみこんで `false` ならパスを追加するだけ。

$template_names はテンプレート名が入った配列。既にここに存在していたらincludeはされないようにしてくれる。

## 4. get_query_template()

書くのめんどくさくなってきた。

…次は `get_query_template()`を使う方法！

```php
include(get_query_template('template-name'));
```

拡張子なしで読み込んでくれるよ、やったー！

## 5 get_template_part()

Wordpress3.0から使える関数。とてもパワフル、というか多分これしか基本的に使わない。なんだったんだ、今までの説明は…。

```
get_template_part('loop'); // general loop, file 'loop.php'
get_template_part('loop', 'index'); // loop for index, file 'loop-index.php'
get_template_part('loop', 'single'); // loop for single post, file 'loop-single.php'
```

な感じで読み込めます。


## 参考

5 Ways To Include Template Files In WordPress - Deluxe Blog Tips
http://www.deluxeblogtips.com/2010/06/wordpress-include-template-files.html
Ubuntu Linux 13.04でのインテルチップセットでのS/PDIF出力のポップノイズ対策

症状：IntelチップセットのマザーボードのオンボードS/PDIF出力をUbuntu Linux 13.04で使用した際、アプリケーションから音声を鳴らすときにポップノイズが発生する。

原因 : サウンドデバイスのパワーセーブが働き、一定時間の無音状態でサウンドがパワーオフになるため。

対応 : 以下の3つの手順を行うこと。

手順1。/etc/modprobe.d/alsa-base.conf に以下を追記。

```
options snd_hda_intel power_save=0
options snd_hda_intel power_save_controller=N
```

手順2。 alsamixiser で "Line" の出力を0より大きい適当な値に設定する。

手順3。/etc/pulse/default.pa を修正。

```
# from
# load-module module-udev-detect use_ucm=0
# to
load-module module-udev-detect tsched=0
```

参考 : 
[Advanced Linux Sound Architecture (日本語)](https://wiki.archlinux.org/index.php/Advanced_Linux_Sound_Architecture_(%E6%97%A5%E6%9C%AC%E8%AA%9E))
[PulseAudio](https://wiki.archlinux.org/index.php/PulseAudio)

っていうか、上記ページの抜粋。Ubuntuに限らないけれども etc 以下の構成がちょっと違うので書いておいた。手順2を忘れると解決しないので注意。

ポップノイズ。動画視聴など音声が途切れない利用の場合は気にならないけどSkypeの効果音などではプチプチ鳴るのでかなりうざったかった。特にオーディオインターフェースで他の機器とミックスしている場合、LinuxのS/PDIF出力のオンオフで他の機器の音楽が途切れるため作業ストレスが激増。解決してよかった。
template class の　インスタンス呼び出し

``` callTemplateClassConstractor.cpp
#include <vector>
#include <iostream>

template <class T>
class Hoge {
    public:
        Hoge();
        ~Hoge(){};
        void print();
    private: std::vector<T> t_vector;
};

class Fuga {
    public:
        Fuga():a_(3){};
        int a_;
    private:
};

template<class T>
Hoge<T>::Hoge(){
    int size = 50;
    t_vector.resize(size);
    for(int i = 0; i < t_vector.size();++i){
        t_vector[i] = T();
    }
};

template<class T>
void Hoge<T>::print(){
    std::cout << t_vector.size() << std::endl;
}

int main() {
    Hoge<Fuga> h;
    h.print();
    return 1;
}
```

T();で呼び出しできる
パスワードなしのssh設定方法

1.passwprdなしの鍵生成
ssh-keygen -N "" -t rsa

2.id_rsa.pub->authorized_keysにリネーム
mv  ~/.ssh/id_rsa.pub ~/.ssh/authorized_keys

3.id_rsa,authorize_keysを600にする
chmod 600 ${HOME}/.ssh/id_rsa ${HOME}/.ssh/authorized_keys

4.接続先サーバにscpで配置
scp -r -p 　[local]:${HOME}/.ssh [remote]:

5.ssh接続で確認
ssh [remote]

☆接続できない場合は・・
-パーミッションが原因かも -> 緩すぎるとNG
※↓を確認
--id_rsa,authorized_keysは600以下
--${HOME}が755以下

★鍵生成についての参考サイト
http://morizyun.github.io/blog/ssh-key-bitbucket-github/
コマンドラインからpipでPyPIパッケージのソースコードだけ取得

今までブラウザのダウンロードリンクかプロジェクトのリポジトリチェックアウトしてたけど以下でいいみたい

```bash:
pip install libsass --no-install --no-deps --build build
```

## 追記

msmhrt さんのコメントを受けて、コマンドを少し修正。
--build build で指定したディレクトリにダウンロード済みの依存モジュールがあるとインストールに失敗してしまう為、新規ディレクトリにした方が無難。
特定のディレクトリ以下にあるファイルの特定文字列を一括置換する方法やファイル名を一括置換する方法とかをググってみた


# ※注意: これは単なるまとめであってまともな記事ではないのであしからず

単にググって出てきた記事を貼り付けてるだけです。findとかgrepとかxargsとかsedを使って便利作業していない自分のためのメモなので。

というかここら辺りのコマンドを使って行う皆さんの便利作業のやり方を体系的に知りたい所です。

- [
sed一括置換術(Gitにも対応)](http://qiita.com/wnoguchi/items/1b5d18118728b62e50fb)
- [find／xargsを使ったファイル・ディレクトリ名の一括置換／一括作成コマンド一覧](http://uguisu.skr.jp/Windows/find_xargs2.html)
- [sedとxargsで特定文字列を一括置換](http://d.hatena.ne.jp/dkfj/20080221/1203552993)
- [いまさらxargsの便利さを主張してみる](http://openlab.dino.co.jp/2008/02/20/133431188.html)
- [findとPerlワンライナーで複数ファイルの文字列を一括置換](http://d.hatena.ne.jp/mrgoofy33/20100820/1282321271)
- [findとPerlを使った一括置換で作業効率をあげよう](http://d.hatena.ne.jp/sho-yamasaki/20111118/1321634828)
- [ファイル・ディレクトリ名の一括置換／一括作成
業務で楽するためのUNIXテクニック集](http://codezine.jp/article/detail/2954)
- [find + sed で一斉置換](http://qiita.com/somat/items/b775f7e082f1559707e2)

情報の精査とかしていないけど、世の中そんなもんだと思います。

…使いこなして楽したいなあ…
sublimeでutf8以外の文字コードのファイルを編集する



ConvertToUTF8というパッケージが存在する。Sublime自体は、utf8の文字コードで動作するが、ファイルのコンテンツをutfに変換表示し、保存するときにそのファイルの文字コードで書き戻してくれるらしい。これは便利だ。

インストール手順は以下のとおり。

* Command+Ctrl+P
* Install PackegeでPackage Controlを呼び出す
* ConvertToUTF8を指定する

以上。細かい設定をやったら、また書き込むことにする。
redmineのチケットの使い方


何回か質問されているので、まとめてみました。簡単に使い方をまとめているページはいっぱいあるので、そのリンク集にします。

##全体の概念
チケットは、ToDo管理の進化版です。登録する→やったで終わるのではなく、書いた人が「誰に」「いつまで」やってほしいのか、その進捗はどうなのか（New->On going->Done->Closeといったような）という一つのワークフローを「チケット」という単位で管理します。
メールのやりとりでもこのような流れを返信でつなげて、数十件になっているメール案件を見たことがあると思います。これをもう少し賢くやりましょうというのが、redmineのチケットです。ソフトウェア開発のために開発されたので、以下の資料もソフトウェア寄りですが、資料作成だろうが、イベント運営だろうが基本的なフローは一緒なので、redmineのチケットシステムは実は大体のグループタスクに使えるGeneralなものであると言えます。

   * http://fr.slideshare.net/akipii.oga/redmine-presentation-846109

##チケットの作り方

チケットは、redmineのプロジェクトサイトのタブの「新しいチケット」というページから作ります。題名・説明を書けば、作れてしまうのですが、それだけを記入して作られたチケットはあまり活用されません。プロジェクトのメンバの「誰に」作業を振り、「いつまで」にやって欲しいかを登録することでそのメンバにメールで通知が送られます。そのメンバがそのチケットに応えることで、コミュニケーションが生まれるというのが、チケット運用の基本的な概念です。一見、パッシブなシステムですが、メール通知機能を持つことでインタラクティブ性をもったシステムになっています。具体的な作り方は以下を参照のこと

   * http://redmine.jp/tech_note/first-step/user/create-issue/

##チケットの更新

チケットをアサインされた人は、チケットを更新することで仕事を進めます。プロジェクトのチケットタブから、いつでもそのプロジェクトのチケット一覧は確認できますが、慣れてくるとこのページからチケットの確認をするのはリーダーさんだけになります。それより「マイページ」の自分のチケット一覧、もしくはメール通知のリンクから、辿って更新することが多くなります。

大事なことは、更新するときに、「担当者」をしっかりとアサインすることです。例えば、仕事をする上で疑問点がでてきて質問を書き込んだのに、担当者が自分のままだと質問にこたえるべき人がその内容に気づかないことがあります。メーリングリストで全体に質問を投げても返ってこないことがあるように、メッセージのキャッチボールを意識して、担当者の変更は適切にしましょう。

   * http://redmine.jp/tech_note/first-step/user/issue/
   * http://redmine.jp/tech_note/first-step/user/update-issue/


##終わったチケットは必ずクローズしよう

チケットシステムは、作成者（仕事をそもそも振ったリーダー）が存在します。担当者の仕事が終わっても、誰かがチケットをクローズしないとそのチケットはずっとアクティブな状態で残ります。これは、進捗確認をするときの一覧性を著しく下げるとともに、ToDoがごちゃごちゃになって、チケットで仕事を進める意欲を低下させます。

仕事でも、結局、作業確認がおこなわれず「あれ、どうなったんだっけ」「たしかhogeさんがやってたんですが、どうなったんでしょうね」という無責任なやりとりを一度ならず聞いたことがあると思いますが、チケットの仕組みでは、このような確認作業が必ず行われるように、ワークフローのDoneとCloseが明確に区別されています。なので、チケットを作成した人、もしくは担当者は確認作業をした後、しっかりとチケットをCloseしてとむらいましょう。

##メールでいうとCcに当たるWatcher

チケットの担当者はこの人なんだけど、他の人にも見てもらいたい。メールでいうとCcに当たるようなことをチケットでもしたいことは良くあります。そのニーズを満たすために、ウォッチャーという機能がチケットに用意されています。ウォッチャーを登録すると、そのチケットの通知は作成者、担当者だけでなく、ウォッチャーとして登録された人にも届きます。必須ではないけど、コメントがあったらしてほしいといったようなニーズがあるときにはその人をウォッチャーとして登録しましょう。

   * http://redmine.jp/glossary/i/issue-watcher/

##親チケット・子チケット

チケットの中にも、大枠のToDoと、その中の細分化されたToDoを登録したい場合があります。このようなニーズを満たすために、redmineでは、チケットに子チケットを作る機能があります。

   * http://blog.redmine.jp/articles/redmine-1_0-subtasking/

以上。ここまで知っていれば、大抵のことはチケットで管理できると思います。頑張ってください！
sublimeから、ssh経由で別のマシンのソースを編集する



##はじめに

前に後輩と、vi, emacs, sublimeの比較話をしていたときに、ssh経由でファイル編集する方法がemacsであるよという話をし、そういえば、sublimeではできないのかと思い出した。
もちろんできます。ということでやってみよう。


##インストール

今回使うのは、SFTP Packageというもの、これはssh経由、ftp経由で指定したディレクトリをローカルとシンクし、アップロードできるというパッケージ。
Package Control: Install Packageから、SFTPで検索すればでてくるので、インストール。コマーシャル版だそうだけど、扱いはsublimeと同等で基本的にFreeで使える模様。

##使い方

まずローカルのディレクトリに、シンクさせるためのディレクトリを用意します。

```
$ mkdir sftpsync
```

サイドバーのプロジェクトフォルダを右クリックし、「SFTP/FTP」→「Map to Remote」を選択します。

すると、「sftp-config.json」という設定ファイルがプロジェクトフォルダのルートにできるので、このファイルを編集してサーバ情報などを設定していきます。

```
  1. {
  2. // The tab key will cycle through the settings when first created
  3. // Visit http://wbond.net/sublime_packages/sftp/settings for help
  4. // sftp, ftp or ftps
  5. "type": "sftp",
  6.  
  7. "save_before_upload": true,
  8. "upload_on_save": false,
  9. "sync_down_on_open": false,
  10. "sync_skip_deletes": false,
  11. "confirm_downloads": false,
  12. "confirm_sync": true,
  13. "confirm_overwrite_newer": false,
  14. "host": "example.com",
  15. "user": "username",
  16. //"password": "password",
  17. //"port": "22",
  18. "remote_path": "/example/path/",
  19. "ignore_regexes": [
  20. "\\.sublime-(project|workspace)", "sftp-config(-alt\\d?)?\\.json",
  21. "sftp-settings\\.json", "/venv/", "\\.svn", "\\.hg", "\\.git",
  22. "\\.bzr", "_darcs", "CVS", "\\.DS_Store", "Thumbs\\.db", "desktop\\.ini"
  23. ],
  24. //"file_permissions": "664",
  25. //"dir_permissions": "775",
  26. //"extra_list_connections": 0,
  27.  
  28. "connect_timeout": 30,
  29. //"keepalive": 120,
  30. //"ftp_passive_mode": true,
  31. //"ssh_key_file": "~/.ssh/id_rsa",
  32. //"sftp_flags": ["-F", "/path/to/ssh_config"],
  33. //"preserve_modification_times": false,
  34. //"remote_time_offset_in_hours": 0,
  35. //"remote_encoding": "utf-8",
  36. //"remote_locale": "C",
  37. }
```

上記のhost, user, remote_pathを自分の設定にして保存します。

注意：remote_pathはsyncしたサーバ側のディレクトリの絶対パスを指定してください。また、指定したディレクトリ下をすべてsyncするので、大量のデータが入っているディレクトリを扱う場合は注意が必要です。



次に、remoteにあるディレクトリをローカルに持ってきます。サイドバーにあるディレクトリを右クリック。SFTP/FTPのタブを開き、Sync Remote -> Local… を実行します。syncプロセスの後、サーバサイドのソースがローカルにsyncされます。後は編集し、上記、画面のUpload FolderやファイルごとにUpload Fileを行うことで、編集したデータをサーバサイドに反映することができます。
macにおけるpythonのハンドリング


ずっとActivePythonにお世話になってきたけど、いろいろなマイクロプロジェクトが出来上がってきたので、より柔軟にpythonのバージョンやパッケージ管理がしたくなって、pythonbrewと、virtualenvを利用した環境に移行しました。
ここではその覚書を書いて、リマインダとしておきます。なお、全部ターミナルで実行するので、guiでやりたい人は読んでも意味ありません。
（なので、指摘は歓迎ですが、この通りにやったけど、うまくいかなかったと文句言われても困ります）

追記(2013/10/02)：
pythonbrewは作者が開発を続けないことをアナウンスしているので、時代遅れになりつつある。とはいえ、後継で開発が続いているpythonzは思想が異なることと、macでの仕様では
pythonbrewの方が使いやすいことから、この事実を知った後でも、pythonbrewにする価値はあるように思う。

##0. これまでの環境とのお別れ
これまでお世話になったActivePythonの弔いをします。

   * http://docs.activestate.com/activepython/2.6/installnotes.html#osxpkg_uninstall

上記のページに基づいて、以下のコマンドを実行して、ActivePythonをアンインストールします。

```
$ sudo /Library/Frameworks/Python.framework/Versions/2.6/Resources/Scripts/uninstall
```

2.7の場合は、パスの真ん中くらいにある2.6の部分を2.7にすればOK.



1. pythonbrewのインストール

ここからは、以下のページを参考に進めました。

   * http://d.hatena.ne.jp/pasela/20110704/pythonbrew

サクサクっと入れます。

```
$ curl -kLO https://github.com/utahta/pythonbrew/raw/master/pythonbrew-install
$ chmod +x pythonbrew-install
```

./pythonbrew-installパスを通すために、以下の一行を~/.bashrcに加えます。
csh, tcsh, zshの人はそれぞれのrcファイルに加えましょう。

```
source ~/.pythonbrew/etc/bashrc
```

そのまま進む場合は、~/.bashrcをリロードしましょう。

```
$ source ~/.bashrc
```

## 2. pythonbrewによるPythonのインストール

ここでは、一つのpythonのバージョンしかインストールしませんが、pythonbrewによって、いろいろなバージョンのpythonのインストールと、アクティブなpythonのバージョンの切り替えができます。リンクページに載っているので興味ある人は参照してください。

```
$ pythonbrew install 2.7.2 --framework
$ pythonbrew switch 2.7.2
```

※macユーザの場合は、--frameworkのオプションを付けておいた方が良いと思われます（このオプションmacしかないはず）。つけてないと、バリデーションなどでひっかかってパッケージが使えなくなることがあります。
※ビルド時にビルドが失敗することがある。原因を探っていくと、xcodeのライセンスAgreementをしていないことが原因だと言われているので、以下のコマンドで、xcodeのライセンスの承認をして上げる必要がある場合がある。

```
$ sudo xcodebuild -license
```

##3. virtualenvの導入

virtualenvはpythonを実行するときのパッケージ群などの環境を仮想的に用意することができるソフトです。

ピンと来ないかもしれませんが、pythonのバージョン管理や、パッケージの依存関係解決って割とラフにできているので、このパッケージのこのバージョンの組み合わせでは動くけど、他では動かないっていうことが時々あります。そのたびに、パッケージの再インストールをしていたのではたまらないので、ヘビーユーザにとっては必須なソフトです。

```
$ pip install virtualenv
$ pip install virtualenvwrapper
```

##4. 実践編

これで、終わりですが、最後に簡単なvirtualenvの使い方をば

```
$ virtualenv sandbox
$ cd sandbox
$ source bin/activate
(sandbox) $ pip install numpy
(sandbox) $ python
Python 2.7.2 (default, Sep 26 2013, 15:18:47) 
[GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> import numpy

(sandbox) $ deactivate
$ python
>>> import numpy
Traceback (most recent call last):File "<stdin>", line 1, in <module>ImportError: No module named numpy
```

上記では、sandboxというディレクトリに仮想環境を構築しています。構築した仮想環境を使用するためには、仮想環境の中のbin/activateというファイルを(sourceで)読み込みます。読み込んだ後は(環境名)というプレフィックスがついた状態になります。この状態でインストールしたパッケージはその仮想環境ではインストールされますが、仮想環境中で使えるdeactivateというコマンドでもとに戻った環境においてはインストールされていません。

このように仮想環境を使い分けることでより柔軟なソフト開発が可能になります。pythonヘビーユーザさんは是非どうぞ。ソフトウェアのテスト時の依存関係チェックにも便利です。


とはいっても、大抵のヘビーユーザは使っていると思うので、遅れているのは私だけでしょうね・・
ubuntuにおけるpythonzの運用


<h2>1. はじめに</h2>

macでは有効に作用したpythonbrewですが、ubuntuでは、pipなどがデフォルトでインストールされておらず、あまり役に立たないので、現在も開発中のpythonzをインストール手順をまとめる。ただ、こちらは下記のリンクの写しがほとんど

※pythonbrew本体の開発はほとんど止まっています。

<h2>2. インストール </h2>

まず、必要なパッケージをインストールする。

> sudo apt-get install build-essential python-dev curl
> sudo apt-get install libncurses-dev libreadline6-dev libbz2-dev liblzma-dev libsqlite3-dev libgbm-dev 


次に、pythonzのインストールを行う。

> curl -kL https://raw.github.com/saghul/pythonz/master/pythonz-install | bash

.bashrcに以下の一行を追加し、パスの設定を行う。

> [[ -s $HOME/.pythonz/etc/bashrc ]] && source $HOME/.pythonz/etc/bashrc

んで、pythonzでpythonのインストールをする。

> source ~/.bashrc
> pythonz install 2.7.3

ここからが、pythonbrewとの違い、switchコマンドがないため、普通にパスの設定を行わなければならない。~/.bashrcに以下の一行を追加しよう。

> export PATH=$HOME/.pythonz/pythons/CPython-2.7.3/bin:$PATH
> source ~/.bashrc

続いて、pipのインストール

> curl http://peak.telecommunity.com/dist/ez_setup.py | python
> easy_install pip

最後に、virtualenvのインストール

> pip install virtualenv
> pip install virtualenvwrapper

これで、pythonbrewとほぼ同等の使い方ができる。


##3. 実践編

これで、終わりですが、最後に簡単なvirtualenvの使い方をば

> $ virtualenv sandbox
> $ cd sandbox
> $ source bin/activate
> (sandbox) $ pip install numpy
> (sandbox) $ python
> Python 2.7.2 (default, Sep 26 2013, 15:18:47) 
> [GCC 4.2.1 (Based on Apple Inc. build 5658) (LLVM build 2336.11.00)] on darwin
> Type "help", "copyright", "credits" or "license" for more information.
> import numpy
> (sandbox) $ deactivate
> $ python
> import numpy
> Traceback (most recent call last):File "<stdin>", line 1, in 
> <module>ImportError: No module named numpy

上記では、sandboxというディレクトリに仮想環境を構築しています。構築した仮想環境を使用するためには、仮想環境の中のbin/activateというファイルを(sourceで)読み込みます。読み込んだ後は(環境名)というプレフィックスがついた状態になります。この状態でインストールしたパッケージはその仮想環境ではインストールされますが、仮想環境中で使えるdeactivateというコマンドでもとに戻った環境においてはインストールされていません。

このように仮想環境を使い分けることでより柔軟なソフト開発が可能になります。pythonヘビーユーザさんは是非どうぞ。ソフトウェアのテスト時の依存関係チェックにも便利です。
英語コミットコメントに使えるオシャレフレーズ集

英語コミットコメントに使えそうなオシャレフレーズを聞いたので、これを使ってドヤ顔コミットをしたくてやれるチャンスを虎視眈々と狙う毎日です :shipit:

v, x, g, z とかこのへんが入ってる単語だとなんかカッコ良さ増す。  
tweak とかデザイナーにはだいぶ便利。

|単語|意味|
----|----
|undesirable|好ましくない|
|avoid, circumvent|回避する|
|retrieve| 取りに行く(fetch / 「受け取る」よりもっと能動的に「取りに行く」ニュアンスを示す)|
|revise|= fix|
|tweak|微調整する|
|in the sight of 〜| 〜の視点で (point of view をわざと仰々しく言った感じ)|
|refer|参照する|
|disambiguate|曖昧さをなくす|
|quite|とても（veryのかわりにつかえる|
|literally|文字通り|
|exactly|まさに、確かに、イグザクトリー|
|resurrect|よみがえらせる|
|in favor of|〜に賛成して, 何かに沿って|
|get rid of|好ましくないものを取り除く|
|kick out| get rid of の強いバージョン、腹立たしさある|
|introduce|導入する|
|extract|抽出する|
|no longer used|もはや使われてない|
|R.I.P.|安らかに眠れ（もう使ってないコードを消す時などに。「Removeでは語りきれない思いがあるんだ」 by @idesaku ）|
|defeat|倒す、打ち負かす|
|:put_litter_in_its_place:```:put_litter_in_its_place:```|ゴミはゴミ箱へ（不要なコメントやwhitespaceを消したときなど）|
|cosmetic change, cosme|インデントを美しくした時など|
|fruitful|みのりの多い〜, fruitful discussion など| 
|:golf:```:golf:```|コードをより短くした（code golf）|
|Take a cup of coffee|JS を CoffeeScript 化した, またはCoffeeをよりCoffeeらしく書いた|
|kick in|効きはじめる, 適用される など（DHHが使っていたらしい。）|
|A in B out|Bの変わりにAを導入（サッカー的な感じ。Gemの差し替えなどに使う）|
|enable to work|動くようにした|
|wipe out|拭い去る（get rid of, kick out の亜種）|
|stop rendering 〜|〜を表示しない|
|aesthetic|cosmetic の亜種（多分）|
|Ooops! :scream: |しょうもないミスした時などに。 :scream_cat:  ```:scream_cat:``` 使うとかわいみでる。|

随時追加しています :baby_chick:  
あと、ぷるりくとかもお待ちしてます :bird:

### あわせて読みたい
コミットコメントに対する心得がわかりやすく書いてありました。当記事の補完としてお読みいただけるとイイカンジ。
[初心者から一歩抜け出すためのGitの業 Vol.3](http://qiita.com/tbaba/items/77224ad2046c918d061b)
SketchUpで、Rubyの標準ライブラリを使う(OSX版)

SketchUpに組み込まれているRubyエンジンは標準ライブラリのサブセットのため、標準ライブラリをrequireすると、no such file errorが発生します。

それを解消するためのスクリプトを紹介します。

```　loadpaths.rb
    #  file: '!loadpaths.rb'
    #  for mac OS X
    #
    #  Version 3.0.1   -  Public Domain
    #
    #  Authored by  :  Dan Rathbun
    #  Contributors :  Satrex
    #
    begin
      #
      # TWEEKER variables
      #
      # may change 'ver' to a literal string
      if RUBY_VERSION < '1.9.0'
        ver=RUBY_VERSION.split('.')[0..1].join('.')
      else
        ver=RUBY_VERSION
      end
      #
      # 'pre' is the rubylib path prefix
      pre='/usr/local/bin/ruby'<<RUBY_VERSION.split('.').join<<'/lib/ruby'
      #
      plat=RUBY_PLATFORM
      #
      # add the standard lib path
      $LOAD_PATH << "#{pre}/#{ver}"
      # add the standard platform sub lib path
      $LOAD_PATH << "#{pre}/#{ver}/#{plat}"
      #
      # optionally add paths to vendor_ruby libs
      # only apply if there are things installed there
      #$LOAD_PATH << "#{pre}/vendor_ruby/#{ver}"
      #$LOAD_PATH << "#{pre}/vendor_ruby/#{ver}/#{plat}"
      #
      # optionally add paths to site_ruby libs
      # only apply if there are things installed there
      #$LOAD_PATH << "#{pre}/site_ruby/#{ver}"
      #$LOAD_PATH << "#{pre}/site_ruby/#{ver}/#{plat}"
      #
      $LOAD_PATH.uniq!
      #
      # print LOAD PATHS to console
      # (May not print during Sketchup startup!)
      Sketchup.send_action('showRubyPanel:')
      UI.start_timer(1,false) {
        puts "\nLOAD PATHS:\n"
        $LOAD_PATH.each {|x| puts "#{x}\n"}
        puts "\n\n"
      }
      #
    end
    # cleanup
    ver=nil
    pre=nil
    plat=nil
    GC.start
    #
    # end of '!loadpaths.rb'
```

このコードの出典は、以下の通りです。
http://sketchucation.com/forums/viewtopic.php?t=29412#p257058

著作権はパブリックドメインと書いてあります。
記事執筆時点(2012/12/13)で、v3.0.1です。
使用される方は、最新版を確認される事をおすすめします。

テスト環境：
OS X(10.8.2)
Rubyバージョン：1.9.3