OmniAICreator/Qiita-1.07M huggingface dataset:
Solr でレスポンスタイムをログに出力する


logLatencyを設定すると、ログ行の最後にミリ秒単位でレスポンスタイムが記録されるようになる。

``` etc/jetty.xml
<!-- =========================================================== -->
<!-- Configure Request Log                                       -->
<!-- =========================================================== -->
<Ref id="Handlers">
  <Call name="addHandler">
    <Arg>
      <New id="RequestLog" class="org.eclipse.jetty.server.handler.RequestLogHandler">
        <Set name="requestLog">
          <New id="RequestLogImpl" class="org.eclipse.jetty.server.NCSARequestLog">
            <Set name="filename">
               logs/request.yyyy_mm_dd.log
            </Set>
            <Set name="filenameDateFormat">yyyy_mm_dd</Set>
            <Set name="retainDays">90</Set>
            <Set name="append">true</Set>
            <Set name="extended">false</Set>
            <Set name="logCookies">false</Set>
            <Set name="LogTimeZone">UTC</Set>
            <Set name="LogLatency">true</Set>
          </New>
        </Set>
      </New>
    </Arg>
  </Call>
</Ref>
```

``` request.log
127.0.0.1 -  -  [13/11/2012:01:37:24 +0000] "GET /solr/admin/cores?wt=json HTTP/1.1" 200 942  2
127.0.0.1 -  -  [13/11/2012:01:37:24 +0000] "GET /solr/collection1/admin/system?wt=json HTTP/1.1" 200 3226  32
127.0.0.1 -  -  [13/11/2012:01:37:35 +0000] "GET /solr/collection1/admin/logging?wt=json&since=0 HTTP/1.1" 200 7689  4
127.0.0.1 -  -  [13/11/2012:01:37:45 +0000] "GET /solr/collection1/admin/logging?wt=json&since=1352770631285 HTTP/1.1" 200 282  1
127.0.0.1 -  -  [13/11/2012:01:37:55 +0000] "GET /solr/collection1/admin/logging?wt=json&since=1352770631285 HTTP/1.1" 200 282  1
AngularJSアプリからJSONP呼出を利用する(v1.0.2 )

外部リソースをJSONPで読み込む為だけにjQueryとか追加しようとしていたけれど(※AnglarJSが内包しているjQLiteは最低限のjQuery APIを提供するもの。DOMセレクタなどもない)、
コントローラーに$httpモジュールを渡して呼び出せばいいらしい。

コールバック関数にJSON_CALLBACKの定数っぽい文字列を渡すとよしなに処理してくれる。

Demo: http://jsfiddle.net/laiso/RvDNU/
Reference: http://docs.angularjs.org/api/ng.$http#jsonp

``` javascript:app.js
function LoctouchAPI($http){
    this.loadStations = function(callback){
        $http.jsonp('https://api.loctouch.com/v1/railway/stations?line_cd=11302&callback=JSON_CALLBACK')
            .success(function(response){
                callback(response.stations);
            });
    };
}

function AppController($scope, $http){
    $scope.stations = [];

    $scope.onLoadButton = function(){
        var api = new LoctouchAPI($http);
        api.loadStations(function(stations){
            $scope.stations = stations;
        });
    };

    $scope.clear = function(){
        $scope.stations = [];
    };

    $scope.jsonDump = function(json){
        return JSON.stringify(json);
    };
}
```
alias_methodやaliasを使うと、visibilityもコピーされる

常識なんでしょうけど、なぜか毎回失念してしまうので・・・
aliasする場所がどこであっても関係なく、alias元のvisibilityがそのままコピーされるみたいです。

```ruby
class Foo
  private
  def foo; end
  public
  alias_method :bar, :foo
end

class Bar < Foo
  alias baz foo
end

Bar.new.bar #=> NoMethodError: private method `bar' called...
Bar.new.baz #=> NoMethodError: private method `baz' called...
```

親でprivateなメソッド作っておいて子供で別名にaliasとかしたとき、
publicメソッドに戻し忘れそうになったことが何回かあります。
Sublime Text2 入れたメモ


何かこれいいよ、と言われたので入れて見たメモ。

1. まぁ、普通にインストール
	
2. パッケージコントローラーインストール
	http://wbond.net/sublime_packages/package_control/installation に書いてるのをおもむろに実行。
	これで `cmd-shift-P` で出てくるコマンドに `Pac` と入れたらパッケージコントロールのタブが出てくる。

3. 設定変更
	文法は、Python の dict っぽいけど、コメントは「//」なので注意

	できることは、`Preferences`→`Settings - Default` に書いてること。
	`Settings - Default` は基本弄らないと思う、代わりに `Settings - User` の方をイジる。
	
	僕の考えた設定例

	```python
{
	"color_scheme": "Packages/Color Scheme - Default/Monokai.tmTheme",
	"dictionary": "Packages/Language - Japanese/ja_JP.dic",
	"font_face": "Source Code Pro",
    "font_size": 12,
	"tab_size": 4,
    // Valid options are "no_bold", "no_italic", "no_antialias", "gray_antialias",
    // "subpixel_antialias", "no_round" (OS X only) and "directwrite" (Windows only)
    "font_options": ["no_italic", "no_round", "subpixel_antialias"],
	"translate_tabs_to_spaces": true
}
	```
	
	1. `dictionary`はなけりゃ英語のが。多分日本語のはない。
	2. `font_face` 使うフォント。ライセンスとかで他の環境でも使えるようなのがいいので、個人的に `Source Code Pro` http://sourceforge.net/projects/sourcecodepro.adobe/ 使ってます。
	3. `font_options` はフォントのオプションっぽい。基本、イタリック体は見づらいので嫌だったんだけど、それをオフ、ついでにちょっと見やすくアンチエイリアス、no_round はイマイチわからん。
	4. `translate_tabs_to_spaces ` を `true` にする事で、タブがスペースに置き換わります。タブは基本使わず、全てスペースでやってます。何となくですが。
	5. `tab_size` タブ幅

4. shell

	シェル使っていると open -a Sublime\ Text \2 . とか打ってられませんのでエイリアスを追加

	```zsh
if [ `uname` = 'Darwin' ]; then
	alias sublime='open -a Sublime\ Text\ 2'
fi
	```

取り急ぎこんな感じ。


パッケージでインストールしたのは

- CakePHP
- Zencoding

そんな感じ。
シミュレータでも実機でも動く、なんちゃってUniversal Framework

どもです。
おでんです。

現行のXcodeにはiOS用のFrameworkテンプレートが用意されていません。
でもiOS-Universal-Frameworkを使えば、それっぽいことができます。

https://github.com/kstenerud/iOS-Universal-Framework

```bash:ターミナル.app
git clone git://github.com/kstenerud/iOS-Universal-Framework.git
cd iOS-Universal-Framework/Fake\ Framework/
./install.sh
```

12/2現在だとこのテンプレートをそのまま使ってもこけるので、
初期の操作の様子を画像を使って説明しようと思ったのですが、
qiitaってどっかに画像あげないと使えないんすね(´・ω・`)

あとで編集します(´・ω・`)
CoronaSDKで死ぬ程ハマった落とし穴たち

CoronaSDK Advent Calendar 2日目です。
…残念ながら2日で終了しそうな気配なので続けてもらえる人が居たら幸いです。是非に。ホントに。お願いだから。

CoronaSDKでゲーム開発始めて約半年で遭遇した選りすぐりのハマりポイントをいくつか紹介します。

### iOS用にビルドしたappが実機に転送できない。
**「resources」という名前のディレクトリをプロジェクト直下に作っていた**
CoronaSDKのプロジェクト直下のディレクトリ構造を安直にapp内に再現するので、「resources」に限らずiOSやAndroidのプロジェクトにとって特別な名前のファイルを作ると同様の現象になると思われる。
ぶつからない構造にできなかったのは仕方無いかもしれんけど、せめてビルド時にエラー出して欲しい…

### ダウンロードしてローカルに保存、利用している画像が、サーバ側を更新してもローカルに保存されてるファイルを削除しても更新されない…
**Coronaのシミュレータ自身がキャッシュを持っていた**
Coronaシミュレータを完全終了させれば良い。GUIで落としてもプロセス残ってるとクリアされないので注意。
メニューにキャッシュクリアとかあればもうちょっとわかりやすいんだけど…

### network.downloadでダウンロードした画像ファイルが表示されない事がある。
**エラーページが画像の代わりに保存されていた**
上記通りキャッシュを全部消して正常にダウンロードできるようにして再開する。
corona標準のnetwork.downloadが失敗してもエラーページをそのまま保存するという斬新な仕様の為。ファイルサイズ違うのに気づいて中身見てみたときの脱力感は忘れられません。downloadの終了callbackで正常時以外は保存したファイルを消すという対症療法で凌いでます。こんな感じ。

```lua:download.lua
  local function networkListener(e)
    if e.status ~= 200 then
      os.remove(system.pathForFile( "path/to/file.jpg", baseDirectory))
    end
  end
  network.download(
    'http://hoge/fuga.jpg',
    "GET",
    networkListener,
    params,
    "path/to/file.jpg",
    baseDirectory
  )

```

### postリクエストしてるのにサーバ側で受け取れない！
**Content-Length,Content-Typeヘッダが無いから自分でつける**
こんな事やったの久々です。7年振りぐらいじゃなかろうか…

### さっきまでビルドできてたのにソース一行も変えてないのに失敗するよ！
**ほっとくと勝手に解決。CoronaLabs側のトラブルだったっぽい…**
CoronaLabs側にソース送信してビルドする為たまにあるのは仕方無い。
ただ長時間ビルドできなかったのは約半年で一回だけと思ったより少ないのでご安心を。
もちろん毎日実機用ビルドするわけでは無いし、応答無くてもう一回やったら大丈夫だったことは何回もあるのですが本気で困ったのは一回だけという事です。


でもCoronaSDK良いトコロもありますよ！皆さんお気をつけて。
Sublime Text 2 で GLSL を書こう


CSS Shaders とかエラーも出てこないので、せめてシンタックスチェックできるといいな、ということで Sublime Text 2 のパッケージをインストールします。

[OpenGL Shading Language (GLSL)](https://github.com/euler0/sublime-glsl) と [GL Shader Validator](https://github.com/WebGLTools/GL-Shader-Validator) をインストールします。

[GL Shader Validator](https://github.com/WebGLTools/GL-Shader-Validator) にも書いてありますが、シンタックスチェックのモードを WebGL, OpenGL ES 2.0, CSS Shaders から選ぶことができます。

基本の設定は `Preferences > Package Settings > GL Shader Validator > Settings - Default` で。ファイル毎の場合は、ファイルに `/* spec: webgl */`, `/* spec: ec2 */` または `/* spec: css */` と書くとよいようです。
Kobitoのファイル連携機能をつかって書き捨てコードをドキュメントっぽく残す


## 概要
これまで、一度しか使用しない(とおもわれる)コードは一度だけ使って削除したり、そのコードを実行する場所だけに書き散らかしたりして、再利用することは全く考えていませんでした。
しかしながら、そういうコードに限ってまた使うことがあったり、他人から欲しいという要望があったりして…地味に困ります。今回はそういった状態を回避するために、手前味噌ですがKobitoをつかってできるだけ簡単に書き捨てコードを管理する方法をご紹介します。

## 目的
書き捨てコードをちゃんと整理し、再利用可能な状態で残しておく。できるだけ楽な方法で。

## 方法
1. 適当なフォルダを用意する。このときDropbox内に作ったりしておくとバックアップ&複数マシンから参照しやすいから便利。

2. 普段使っているエディタで書き捨てコードを書いたら、コード部分の前後をコードブロック(バッククオート3つ)で囲み、`ファイル名.md`という名前で1で用意したフォルダに保存する。

3. Kobitoを開き、メニューバーの「アイテム」のところから「ファイルと連携」を選択、先ほど保存したファイルを選択する。
![](http://kobito.qiita.com/en/images/file-connect.png)

4. ファイルが連携され、Kobito上からファイルが編集可能になるので適切なタイトルを付け、場合に応じて注釈等をつけておく。（あとで検索できるよう、適切なキーワードを用いておくと便利)

自分はこんな感じのスニペットとかをどんどん残しています。
![](http://dl.dropbox.com/u/138736/screenshots/20121202_215713_a7c0169c3a3e643b678b322d10d12d4458911d3f.png)

書いたときは「これ絶対使わんやろ」と思ってたものが、後から意外と役立つことは多いので書き捨てコードもできるだけKobitoに残しておくと便利です。

## おまけ
ファイル連携の特徴として、ファイルを連携した状態で元ファイルを編集するとどうなるのかを録画してみました。元ファイルを編集して保存すると随時Kobitoにも連携されているのが分かるかと思います。これは逆もしかりで、Kobitoで編集・保存した内容は随時ファイルにも反映されるため、一度Kobitoに連携しておけば基本的に編集はKobitoから行うことができるので非常に便利です。

http://youtu.be/0Vwh-mh7ucw?hd=1
Ethnaで困ったときの5つの心がまえ

アドベントカレンダー２日目です。

本日は精神論ｗになります。

Ethnaを使っていて壁にぶち当たったときはどうすればよいか。

## ずばり、人に頼ろうと思わないこと

これ、ものすごく大事です。

Ethnaぐらいコミュニティが小さいと、TwitterでつぶやいたりMLで質問したとしても誰かにアドバイスをもらえることは期待できません。

## ソースコードを読もう

Ethnaの挙動についての疑問であれば、ソースコードを読んで自分で解決するしかない。

## 他のフレームワークを触ってみよう

設計についての悩みとかでEthnaの中に答えがなければ、RailsとかSymfonyとか他のフレームワークを試してみて自分で考えるしかない。

## 問題をしばらく寝かせてみる

もし緊急でない悩みなら、その問題はしばらく寝かせて他のことをやりましょう。
数か月後に同じ問題に取り組んだとき、違った角度から見えるので新たな解決策がうかぶかもしれません。

## Ethnaそのものを直してしまおう

どのフレームワークでもそうですが、完全なソフトウェアはありません。
どこかしら欠点があったりかゆいところに手が届かなかったりするものです。
挙動が自分の思い通りではないときは、ささっと自分で改造してしまいましょう。
きっとその過程でたくさんのことを学べるはずです。

改造したら、本家レポジトリにプルリクエストを送るもよし、自分で派生プロジェクトをたてるもよし、どこかに公開すると、他の人の役にたつかもしれません。

以上、５つの心構えでした。
Emacs で自動的にキーバインドをポップアップする guide-key

Emacs で自動的にキーバインドをポップアップするライブラリ，[guide-key.el] を自作したので紹介したいと思います．[one-key.el] の代替ライブラリのつもりです．詳しくは[自分のブログ](http://www.kaichan.info/blog/2012-12-03-emacs-advent-calendar-2012-03.html)に書いたので，こちらでは軽く導入と設定を書いておきます．

  [guide-key.el]: https://github.com/kai2nenobu/guide-key
  [one-key.el]: http://emacswiki.org/emacs/one-key.el

## guide-key.el の導入
guide-key.el は [MELPA] に登録しているので，package.el を使ってインストールできます．[popwin] に依存しているので，package.el でインストールすれば自動的に popwin もインストールされます．

package.el がない人は [m2ym/popwin-el] と [kai2nenobu/guide-key] から popwin.el と guide-key.el を直接ダウンロードしてきて，適当に `load-path` が通っているところに保存してください．

[MELPA]: http://melpa.milkbox.net/
[popwin]: https://github.com/m2ym/popwin-el
[m2ym/popwin-el]: https://github.com/m2ym/popwin-el
[kai2nenobu/guide-key]: https://github.com/kai2nenobu/guide-key


## 使い方
`guide-key/guide-key-sequence` にポップアップして欲しいキーシーケンス（プレフィックスキー）を登録してください．`guide-key/highlight-command-regexp` に一致するコマンドはハイライトされます．

```common-lisp:init.el
(require 'guide-key)
(setq guide-key/guide-key-sequence '("C-x r" "C-x 4"))
(setq guide-key/highlight-command-regexp "rectangle")
(guide-key-mode 1)  ; guide-key-mode を有効にする
```

これで `C-x r` や `C-x 4` を押した時に，次に続くキーを表示するウィンドウが自動的にポップアップされます．実際に `C-x r` を押した様子はこのようになります．

![C-x r を押した様子](https://raw.github.com/kai2nenobu/guide-key/master/img/guide-key-example2.png "guide-key.el 動作例2")

## 特定のモードで設定を追加

`guide-key/add-local-guide-key-sequence` と
`guide-key/add-local-highlight-command-regexp` に特定のモードのフックと組み合
わせれば，特定のモードに対して設定を追加できます．例えば org-mode を例にとって
見ると，以下のような設定になります．

```common-lisp:init.el
(defun guide-key/my-hook-function-for-org-mode ()
  (guide-key/add-local-guide-key-sequence "C-c")
  (guide-key/add-local-guide-key-sequence "C-c C-x")
  (guide-key/add-local-highlight-command-regexp "org-"))
(add-hook 'org-mode-hook 'guide-key/my-hook-function-for-org-mode)
```

この設定をした後，org-mode のバッファで `C-c C-x p` を押して `org-set-property` が実行される様子が以下の図です．

![C-c C-x p を押した様子](https://raw.github.com/kai2nenobu/guide-key/master/img/guide-key-example-org-anime.gif "guide-key.el 動作例3")

## まとめ
guide-key の特徴をまとめておきます．

* 現在入力しているキーシケンスに続くキーを自動的にポップアップします．ポップアップさせたいプレフィックスを設定するだけで使えます．また動的にキーバインドを調べているので，キーバインドが変更されても動的に追随できます．

* 特定のコマンドを色付けすることできます．いま注目している機能に関するコマンドだけを色付けすることにより，キーバインドを探しやすくなり体で覚えることができます．

* 既存のコマンドを上書きしないので，`describe-key` や `describe-bindings` などに影響が出ません．
github for macのここが便利

**github for macのアップデートによりこの記事は情報が古くなってます**

基本的にCUI派なのですが、gitはgithub for macがとても便利なのでCUIとGUIどちらも使っています。

皆さんgithubのPull Requestを使用してコードレビューを行なって開発を行なっていると思われるのですが、その一連の流れがgithub for macだと手軽に出来ます。

それでは順を追って説明していきたいと思います。


## 0. Download/Installation

[ここ](http://mac.github.com/)でできます(･∀･)

## 1. Create Branch

作業をはじめるときは、まずブランチを切りますよね、github for macだと簡単にlocal、remoteブランチ作成ができます。

![](http://f.cl.ly/items/2V070Z0M0g010T0X083V/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202012-12-02%2018.52.07.png)

ブランチ一覧で元となるブランチの右上の + から、ブランチを作ることができます。

![](http://cl.ly/image/0T3K0l011X2Q/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202012:12:02%2018:58.png)

ブランチが作成できたら、localブランチしかできていないので、右のPublishボタンを押せば、remoteにもブランチが作成されます。

## 2. Add Commit Push

さて、次はCodeを書いて、先ほどつくったbranchにadd commit pushしましょう

と、その前にCommand Line Utilityを入れておきましょう。

![](http://f.cl.ly/items/1I05450942281x302g2G/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202012-12-02%2019.01.58.png)


コミットしたくなったら、エディターから先ほどのgithubアプリに切り替え、ではなく、ターミナルで`github`と叩きましょう

そしたら以下のようにアプリが自動切り替えして、commit messageを入れるところにフォーカスされます

![](http://f.cl.ly/items/3h1i3K1T2h2v422O3O2y/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202012-12-02%2019.07.48.png)

diffを実際に右側で確認しながらcommitできるので、addのし忘れ等が減ります。

addする必要は無く、コミットメッセージの右上のボタンを押せばcommitできます（commitボタンの左の矢印ボタンを押しておけば、commit & sync（pull --rebase & push）してくれます）

remote branchはlocal branchと同じ状態にしておいたほうが他に人もコードレビューを簡単にできるのでいいと思います。


## 3. Delete Branch

そしてWebの方でPull Requestを送り、mergeしおわったら、branchを削除しなければなりません。CUIだとremoteとlocal、両方共消すのに2回コマンドを叩かなければいけませんが、github for macだと、一回ボタンを押すだけで両方とも削除されます。

![](http://f.cl.ly/items/3C0f0B3S3z460q0m1Z1B/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202012-12-02%2019.14.08.png)

### 4. Omake

#### shortcuts

ちなみにChangesタブとBranchesタブを行き来するのはめんどいという方は、Commmand + Bをすれば以下のようにbranch切り替え/作成ができるので便利です。

![](http://f.cl.ly/items/1v2i31473W1H0o3l2Q12/%E3%82%B9%E3%82%AF%E3%83%AA%E3%83%BC%E3%83%B3%E3%82%B7%E3%83%A7%E3%83%83%E3%83%88%202012-12-02%2019.16.16.png)

他にも色々、Shift + Command + O等の便利なショートカットキーがあるので是非！

#### magic stash

github for macにはmagic stashという機能が追加されています。

これは何かというと、commitしていないものがあってブランチを移動したい場合、通常は`git stash`し、ブランチ移動してから、再び戻った時に`git stash pop`をしなければいけませんが、それをgithub for macは自動的に行なってくれます。

なのでブランチ移動がとても楽にできます。
Spotlight検索時のデベロッパー項目を消す

みなさんSpotlight使ってますか？
Rubyistとしては辞書を頻繁に引く癖を付けるため、Spotlightでよく単語を引いてます。
頻繁にアクセスするフォルダ名を入力して飛んだり、結構便利だなぁと思っているのですが、デベロッパー項目としてずらりと羅列されるファイルが鬱陶しいです。（使いこなせば便利なのかも知れませんが…）
そしてSpotlightの項目から設定で消せません。なので直接弄って消しましょう。

## with text editor
Terminal
ファイルの形式をxmlに変換
`plutil -convert xml1 ~/Library/Preferences/com.apple.spotlight.plist`
vimか何かでファイルを編集
`vim ~/Library/Preferences/com.apple.spotlight.plist`
以下を`</source>`前に追記

```
		<dict>
			<key>enabled</key>
			<false/>
			<key>name</key>
			<string>SOURCE</string>
		</dict>
```

変換したファイルを元に戻す
`plutil -convert binary1 ~/Library/Preferences/com.apple.spotlight.plist`

ログアウトして再度ログイン

## with Xcode
Terminal
`open ~/Library/Preferences/com.apple.spotlight.plist`
Xcode
`orderdItems`にあるItem 0 - 14に加えて、一つ追加します。
1. `orderdItem`の横に出る+で項目を追加
2. `Item 0` が出来たのを確認しTypeに `Dictionary`を選択
3. `Item 0` の小項目に以下の2つを追加
 + Key: `enabled`, Type: `boolean`, Value: `NO`
 + Key: `name`, Type: `String`, Value: `SOURCE`
4. 保存して終了、ログアウトして、再度ログイン

-----
どっちもやってることは同じなんですが、Xcode経由で編集すると重い…ので。
以上でSpotlight検索時にデベロッパー項目が消えているかと思います。

問題点としてはSpotlightの設定を開くとその時点でSourceの項目が上書きされるか元の状態に復元されるらしく、またデベロッパー項目が復活します。
なんかいい対応方法ないのかなぁ…。と言うかSpotlightにちゃんと設定項目として表示してくんないかなぁ…。

-----
参考：
[10.7: Remove the Developer category from Spotlight results ](http://hints.macworld.com/article.php?story=20110805192212447)
[Spotlight 'developer' and 'Web searches' can't be disabled?](http://forums.macrumors.com/showpost.php?p=13172900&postcount=15)
深いディレクトリに移動するとき楽する方法

例えば`foooo/barrr/bazzz`というディレクトリに移動するとき，`cd f[TAB]b[TAB]b[TAB][ENTER]`とか面倒.

```sh:~/.zshrc
autoload -U compinit && compinit
```

上記の設定をしておけば，`cd f/b/b[TAB]`で`cd foooo/barrr/bazzz`と展開される(もちろんuniqueに決定できるとき)．
しかし大体の人は補完を有効にするため既に設定しているはず．
3Dモデルアセット Blade Girl NPC の紹介

紹介しようとしてたTidyTileMapperがProjectにインポートしたらエラーがでて落ちる問題があった為最近出てきた日本人好みそうな3Dのモデルアセット紹介
http://u3d.as/content/cross-road-kimys2848/blade-girl-npc-v-1-2/3Bg
デモはこちら
http://kimys2848.nayana.com/npc/blade/blade.html

ひと通りのアニメーションが揃っている且つ$10と安価なため比較的扱いやすそう

何か3Dゲームを作りたくて配管工じゃなく女の子がいい！って人におすすめ

また、同じ作者の村人モデルは無料だったり…

特にテクニックとかではないですが今回はこんな感じで
Sublime Text 2 で拡張子とファイルの種類を関連づける


1. ウィンドウ右下のファイルタイプをクリック。（不明なものだと "Plain Text" となっています。）
2. "Open all with current extension as…" の中から、関連づけたいファイルの種類をクリック。
3. これで OK。

（ShaderLanguages パッケージを入れても [Introducing CSS shaders: Cinematic effects for the web](http://www.adobe.com/devnet/html5/articles/css-shaders.html) で CSS custom filter に使われてる vs や fs がハイライトされなかったので。GLSL の拡張子は vert や frag が普通らしいです。）
XOOPSはPHPなんか分からなくとも何とかなるさあ（１）

⇒　[アドベントカレンダーの参加者リスト](http://qiita.com/advent-calendar/2012/xoops-themes-templates/participants)
⇒　前日の投稿 [XOOPS Cube の管理画面から使うCMS Theme Finderの紹介。  by nouphet](http://qiita.com/items/c91663790af8bf9ca7d9)
⇒　翌日の投稿 [文字を大きくすることもできる！iphoneテーマの内容と使い方 by mika](http://ryus.co.jp/modules/d3blog/details.php?bid=365)

　いやまあ何というか今年も師走ですか。歳とともに何だか時間の進むスピードがえらい勢いで加速していきますな。ついこないだおせちを食べたと思ったらもうクリスマス。昨年家族に好評だったローストチキンをまた今年も作らねばいけないらしいのですが、こんなんじゃあっという間に寿命が尽きてしまいそうですが、その前になんか書いとけって事らしいので久しぶりにXOOPS関連の文章を書いてみますか。
　とは言っても私は非プログラマー。しがないデザイン系ウェブ屋（ウェブデザイナーと言うと嫁が嫌な顔をするのねん）の私としてはたいした事を書けるはずもなく、しかも他の執筆者の皆さんがそうそうたる実力派揃いなので、私は暇ネタに徹することにしますねー。

　XOOPSに関わるようになって早８年が過ぎようとしてるわけですが、その間、XOOPSおよびその発展系であるXOOPS Cubeのテーマ・テンプレートの「仕組み」に関してはほぼ何ら変わっていません。つまりは昔のテクニックが今でも有効に利用できるわけで、そういった意味では非常に「枯れた」システムで、多くのノウハウが蓄積しているのにも関わらず、「XOOPSはもう終わった」とか「あれって古くさいじゃないですか〜」とか、多分ろくに使ったこともないだろう連中が訳知り顔で言うのですが、おいらとしては「いやいや、このテクニックの集積を使わない手はないんじゃないの」と思うわけです。
　CMS業界（というものがあるならば）では日夜新しいCMSシステムがリリースされているのですが、いくつか使った経験では、斬新なことが出来る事と引き替えにカスタマイズの自由度が低いシステムが多い気がします。「気がします」と書いたのは本当にそんな気がして実は違うかもしれないって訳じゃなくて、実際にやりたいことが出来なくて「バカヤローコンナシステムツクリヤガッテ！」といった経験に裏付けられている実話ですが、他システムに気を遣って「気がしますね〜」と書いただけなので念のため。
　何が言いたいかというと、「使わないのはもったいないよね、タダで途中まで出来上がってるライセンスフリーな（GPLじゃねーかって突っ込みは無しで）システムが、ノウハウたくさん付いて配られてるのに」な訳です。

　なんか話がとっちらかってきましたが、えーと「テーマとテンプレート」ね、お題は。
　さっきも書いたようにPHPのsmartyエンジンを利用するようになったXOOPS2.0から基本的に仕組みが変わっていません。意外とこの仕組みを理解できてない人も多いので、簡単に書くと「テーマ(theme)」という静的なHTMLによってデザインされたページのあちこちにブロック状の穴が空いていて、そこに各モジュールのテンプレートに従ってPHPから吐き出された「ブロック」または「コンテンツ」がすっぽり入るという説明が分かりやすいと思います。
　その吐き出されたを受け取る物が「smarty変数」と呼ばれる物で、頭に「＄」記号が付いています。XOOPSではさらにそれを<{}>という変則二重括弧で囲むというお約束になっているわけですが、この理屈を理解していればテーマやテンプレートのカスタマイズも自由自在になるはず。

例えば：

```
<html>
<head>
・・・
</head>
<body>
・・・
<div id="sample">
<{$contents}>
</div>
・・・
</body>
</html>
```

というテーマがあったとして、
$contentsには

```
<h1 class="pageTitle"><{$title}></h1>
<div class="description"><{$bodytext}></div>
```

というモジュールテンプレートが入ることになっているとします。

XOOPSの管理画面、または入力画面で、
$titleには「おはよう、みなさん！」
$bodytextには「今日もいい天気ですね。」
と入力した場合、最終的にブラウザに出力されるソースを想像できますか？

```
<html>
<head>
・・・
</head>
<body>
・・・
<div id="sample">
<!--ここからがシステム吐き出し部分-->
<h1 class="pageTitle">おはよう、みなさん！</h1>
<div class="description">今日もいい天気ですね。</div>
<!--ここでシステム吐き出し終わり-->
</div>
・・・
</body>
</html>
```

が正解です。（コメントは差っ引いて見てくださいね）

　この理解さえ出来ていれば、XOOPSの自由度はものすご〜く増します。
元が最近のCMSに比べてある意味原始的な仕組みなので、テーマやテンプレートのHTML部分をどんどん書き換えちゃってもシステム自体に影響は与えません。
　全てのモジュールで同じデザインを適用したいなら、#sample(id="sample")に対して何らかのCSSスタイルを適用すればいいですし、もっと複雑なことをしたいのであればさらにその外側や内側に別のdivを挟んでidやclassを適用するとか。
　またモジュール個別に何かのデザインを適用するのであれば、テンプレートにそれを適用する仕組みを入れます。例えば、

```
<div class="hogehoge">
<h1 class="pageTitle"><{$title}></h1>
<div class="description"><{$bodytext}></div>
<div>
```

なんてテンプレートに変更し、style.cssに.hogehogeのCSSスタイルを書き込めば、そのテンプレートが適用された時だけに反映されるでしょう。

ただし、システムに影響を与えないと言っても、タグの閉じ忘れや変数名のスペルミスがあったりすると、ページが真っ白になるのでそのつもりで。

てな訳で、今日の私は基礎中の基礎編でおしまい。また来週。ﾉｼ

※この投稿はXOOPS Themes and Templates Advent Calendar 2012 ( http://qiita.com/advent-calendar/2012/xoops-themes-templates ) の12/3分だよ！
UIToolBarのボタンを等間隔に置く方法


各UIBarButtonItemを作ったら、最後にスペース用のUIBarButton作成のために下記を記述。

```
UIBarButtonItem *gap = [[UIBarButtonItem alloc] initWithBarButtonSystemItem:UIBarButtonSystemItemFlexibleSpace target:nil action:nil];
```

そして、配置の際に各UIBarButtonItemの前後にこのスペース用のUIBarButtonItemを置けばOK！

```
NSArray *items = @[gap, _backButton, gap, _forwardButton, gap, _reloadButton, gap, _shareButton, gap];
    self.toolbarItems = items;
```

参考URL:http://torus.tumblr.com/post/4966442542/uitoolbar
DOM 要素の実際に使用されているスタイルを取得


`element.style` から取得できるのは JavaScript で動的に設定したスタイルだけですが、`window.getComputedStyle()` を使うと親要素からの継承なども含めて DOM 要素の実際に使用されているスタイルを確認することができます。

```js
var styles = getComputedStyle(document.body);
console.log(styles.marginTop);
// 0px
```

`:before`, `:after` など疑似要素のスタイルを知りたい場合は第二引数を使います。

```js
var styles = getComputedStyle(document.body, ':before');
```

これまで jQuery ばかり使っていたので、DOM の API は知らないことばかりですね・・・。
IE8 以前で Date.now()


Internet Explorer では 9 からしか `Date.now()` がありません。8 以前用の polyfill です。

```js
if (Date.now === undefind) {
  Date.now = function () {
    return new Date().valueOf();
  };
}
```

参考
http://blog.yjl.im/2012/01/datenow-in-ie8-or-before-ie9.html
JavaScript でベンダープレフィックスつきの CSS プロパティを設定する


Chrome 23, Safari 6, Firefox 17, Opera 12 で試してみました。

ベンダープレフィックスのところは、例として webkit にしています。適宜読み替えてください。

以下はどのブラウザでも OK。

```js
document.body.style.setProperty('-webkit-transform', 'rotate(180deg)');
document.body.style.WebkitTransform = 'rotate(180deg)';
```

以下は Webkit ブラウザ（Chrome, Safari）でだけ動きました。

```js
document.body.style['-webkit-transform'] = 'rotate(180deg)';
document.body.style.webkitTransform = 'rotate(180deg)';
```

以下はどのブラウザでも動かず。

```js
document.body.style.webkittransform = 'rotate(180deg)';
document.body.style.setProperty('webkitTransform', 'rotate(180deg)');
document.body.style.setProperty('WebkitTransform', 'rotate(180deg)');
```

どうやら `setProperty()` で CSS のプロパティ名（例 `-webkit-transform`）で指定するか、JavaScript のプロパティ名（例 `WebkitTransform`）で直接指定する方法があるようです。

## JavaScript で使えるプロパティ名を取得する

では適切なプロパティ名を取得するには？

JavaScript のプロパティ名の方（例 `WebkitTransform`）は、`element.style` に設定されていない場合でも `""` が入っているので、これを使って判断できます。（Opera は CSS プロパティ名の方でも `""` が入っているようです。）

現在手元に Windows がないので IE は確認できませんが、だいたいこんな感じだと思います。

```js
function capitalize(str) {
  return str.charAt(0).toUpperCase() + str.substring(1);
}
function toCamelCase(hyphenated, isLower) {
  var components = hyphenated.split('-');
  for (var i = 0; i < components.length; i++) {
    if (!(isLower && i === 0)) {
      components[i] = capitalize(components[i]);
    }
  }
  return components.join('');
}
function getPropertyName(propertyName, elem) {
  elem = elem || document.body;
  // Check without prefix
  var lowerCamel = toCamelCase(propertyName, true);
  if (typeof elem.style[lowerCamel] === 'string') {
    return lowerCamel;
  }
  // Check prefixes
  var upperCamel = toCamelCase(propertyName);
  var prefixes = ['', 'Webkit', 'Moz', 'O', 'ms']; // Not sure about 'ms'. 'Ms'?
  for (var i = 0; i < prefixes.length; i++) {
    var candidate= prefixes[i] + upperCamel;
    if (typeof elem.style[candidate] === 'string') {
      return candidate;
    }
  }
}

console.log(getPropertyName('transform'));
// WebkitTransform etc.
```

または `getComputedStyle()` の返り値を使えば CSS のプロパティ名を調べることもできそうです。こっちは設定されていないプロパティでも `"none"` や `""`（ブラウザによる）が入っています。
これからBackbone.jsを始めるならこれ読んどけばOKという記事たち

Backbone.jsで書き始めたら「Backboneどう？」と聞かれることがあったので、自分ではあんま語れるほど知らないけど「ここらへんの記事は素晴らしいよ！」というものをまとめておいたヽ(・ω・´)ゝ

## まずは読んでおくべきもの
### [Backbone.js Advent Calendar 2011](http://qiita.com/advent-calendar/2011/backbone)
なにはともあれまずは[Backbone.js Advent Calendar 2011](http://qiita.com/advent-calendar/2011/backbone)
ある程度まで書けるようになる情報は総ざらいで書いてあると思う。
中でも[Backbone.js入門](http://qiita.com/items/16b799d0ec0a0ae3f78e)はありがたい。読んでおけば基本の仕組みを知ることが出来る。

Backbone.jsが依存している[underscore.jsの情報](http://qiita.com/items/78b81fb50f0ce995ed7d)なんかもあったりしてありがたい。

ちなみに今年(2012)のAdvent Calendarは[こちら](http://www.adventar.org/calendars/15)。今はまだ始まったばかりだから情報少ないけどこれから充実してくるだろうし楽しみ（*´ω｀*）

### [Backbone 入門](http://www.ibm.com/developerworks/jp/web/library/wa-backbonejs/index.html)
うっかり忘れていたものを追記(2012-12-09)
ibmのdeveloperworksの記事。SyncやRouterなどの解説も細かくしてあって基本としてはかなり大事かと。
とても骨太な内容なのでこれも読んでおくとより深くしっかりと身につくと思う。

### [Backbone.js Tutorials](http://backbonetutorials.com)
[Backbone.js Tutorials](http://backbonetutorials.com)はAdvent Calendar 2011とほどじゃないけどありがたい。
ここは初歩的な情報が多めかな。ビデオチュートリアルもあるみたいだけど有料っぽいのでまだ観てない。

## とにかくまずは動くものを書きたいなら
### [Hello Backbone.js Tutorial](http://jasongiedymin.github.com/hello-backbonejs/)

初めてのBackbone.jsアプリを書いてみようと思ったらなんといっても[Hello Backbone.js Tutorial](http://jasongiedymin.github.com/hello-backbonejs/)

[こんな感じ](http://jasongiedymin.github.com/hello-backbonejs/js/docs/1.html)に5段階のステップを踏んでとりあえず画面を表示するところからモデルを別にしてビューを部分によって分けたりしていく。これに沿って書いていけば「ああ、こうなると便利な気がする」と思える。
なんと今見たら[coffee sctiptでのチュートリアル](http://jasongiedymin.github.com/hello-backbonejs/coffeescript/docs/1.html)もあった。ここから一気にBackbone.jsを学びながらcoffee scriptも学べちゃいそう。

### [todo.js](http://documentcloud.github.com/backbone/docs/todos.html)
あとはこの[todo.js](http://documentcloud.github.com/backbone/docs/todos.html)。
こっちはもっと本格的なTODOアプリを実際に作ってみている。LocalStorageも使ってたりしてHTML5な雰囲気を感じますなぁ。

ちなみにBackbone.js以外にも様々なMVCフレームワークで書かれたTODOアプリのサンプルを集めている[TodoMVC](http://todomvc.com/)は「同じアプリを違うフレームワークで書くとこうなるのかー」と見てて楽しい。[Angular.js](http://angularjs.org)とか心惹かれちゃう。

## 実際に書き始めたら
### [Backbone patterns](http://ricostacruz.com/backbone-patterns/)
チュートリアルや入門の情報だけだと実際に作り始めた時に「こういう場合どうすんの？」ってことがある。
そういう時にありがたいのが[Backbone patterns](http://ricostacruz.com/backbone-patterns/)。
「アプリケーション読み込み時にこう書いたらいいよ」という初歩的なものからビューのデレゲートやアンチパターンまで含まれる。
まだちょっとパターンが少ないけど充分ありがたいヾ(｀・ω・´)ノ

### [Backbonification: migrating a large JavaScript project from DOM spaghetti to Backbone.js](http://www.ofbrooklyn.com/2012/11/13/backbonification-migrating-javascript-to-backbone/)
タイトルの通り、でかいJavaScriptで書かれたプロジェクトをこんな風にBackbone.js化したよという記事。
これは苦労しただろうなと思いつつ、こんなきれいに書けたら素敵だなーと思った(｀・ω・´)

### [The client-side templating throwdown: mustache, handlebars, dust.js, and more](http://engineering.linkedin.com/frontend/client-side-templating-throwdown-mustache-handlebars-dustjs-and-more)
これはちょっと番外編。
実際に書いてるとビューのテンプレートエンジン使った方がいいよねということになるのでここの記事を見て参考にした。
ずいぶん詳細に比べてて骨が折れただろうなーと思わせる記事。この中ではdust.jsの勝ちと結論付いてるけど僕はhandlebarsにしました。
Ember.jsでも組み込まれてる？みたいだしdust.jsより情報が多そうでいいなと思ったので。


## その他
その他Backbone.jsに関する英語ドキュメントのまとめもあるので良かったらどうぞ
[【あえて英語記事オンリー】Backbone.jsを学べるページまとめ](http://qiita.com/items/9724455eeca505dedfc3)
テンプレート・テンプレート

C++ に於いて任意のコンテナ型のオブジェクトを受取り、そのなかの要素のひとつを返すようなテンプレート関数はどのように書けばよいでしょうか？
まず思い付くのは任意のコンテナ型がその中に格納している型を value_type という名前でメンバに持っていると仮定する方法です。

```scheme:
template<class T>
typename T::value_type point_up(const T &c) { /* 省略 */ }
```

コンテナというのが STL で用意されているものという前提であればこれで問題なく通用します。
ですが、ここで value_type というメンバを持っていると仮定できない場合にはどうすればよいでしょうか。
テンプレート・テンプレートを使う方法があります。
テンプレートを受取るテンプレートであることからテンプレート・テンプレートといいます。

```scheme:
template<template <class,class> class T, class V, class A>
V point_up(const T<V,A> &c) { /* 省略 */ }
```

ここでは詳細まで書くことはしませんが、テンプレートがテンプレートを受取れるというのは面白い機能でありメタプログラミングへの多彩な応用が可能であることを知っておくとよいでしょう。
C++でプログラミングコンテストをする時用のflymakeの設定


出来るようになること

- タイプしている途中にエラーを表示してハイライトしてくれる(flymakeの機能)
- flymakeに通常必要なMakefileを用意しなくて良くなる
- next-error(`\C-e`にバインド), prev-error(`\M-e`にバインド)でミニバッファにエラーを表示

```
;;;flymake
(require 'flymake)

;;エラーメッセージをミニバッファで表示させる
(global-set-key "\C-e" 'flymake-goto-next-error)
(global-set-key "\M-e" 'flymake-goto-prev-error)

;; gotoした際にエラーメッセージをminibufferに表示する
(defun display-error-message ()
  (message (get-char-property (point) 'help-echo)))
(defadvice flymake-goto-prev-error (after flymake-goto-prev-error-display-message)
  (display-error-message))
(defadvice flymake-goto-next-error (after flymake-goto-next-error-display-message)
  (display-error-message))
(ad-activate 'flymake-goto-prev-error 'flymake-goto-prev-error-display-message)
(ad-activate 'flymake-goto-next-error 'flymake-goto-next-error-display-message)

;;c++のflymakeでmakefileを不要にする
(defun flymake-cc-init ()
  (let* ((temp-file   (flymake-init-create-temp-buffer-copy
		       'flymake-create-temp-inplace))
         (local-file  (file-relative-name
		       temp-file
		       (file-name-directory buffer-file-name))))
    (list "g++" (list "-Wall" "-Wextra" "-fsyntax-only" local-file))))

(push '("\\.cc$" flymake-cc-init) flymake-allowed-file-name-masks)
(push '("\\.cpp$" flymake-cc-init) flymake-allowed-file-name-masks)
(push '("\\.h$" flymake-cc-init) flymake-allowed-file-name-masks)
(push '("\\.hpp$" flymake-cc-init) flymake-allowed-file-name-masks)

(add-hook 'c++-mode-hook '(lambda ()
  (flymake-mode t)
))
```

昔2箇所ぐらいからとってきて合体したんだけどソースがわからない。ごめんなさい。。。


## おまけ

Flymake以外のC++の記述の際に関係する部分の設定

```
;;; 各種キーバインド
(global-unset-key "\C-l")
(global-set-key "\C-l" 'goto-line)  ;; \C-lは元来'recenter
(global-unset-key "\C-t")  ;; 文字のトグルは押し間違えしかないのでoffに
(global-set-key "\C-m" 'newline-and-indent)  ;; Returnキーを押したあとindentもするように

;;; 表示まわり
(transient-mark-mode t)
(show-paren-mode t)
(line-number-mode t)
(column-number-mode t)

;;; インデントポリシー
(setq c-default-style "stroustrup")
(setq-default indent-tabs-mode nil)  ;; タブを使わずにスペースを使う
(setq-default tab-width 2)

;;; 保存時の設定
(add-hook 'before-save-hook 'delete-trailing-whitespace)

;;; その他基本設定
(setq kill-whole-line t)  ;; 行頭でのC-kで行全体を削除
(setq backup-inhibited t)  ;; バックアップファイルを作らない
(setq delete-auto-save-files t)  ;; 終了時にオートセーブファイルを消す

;;; c-mode-common
(add-hook 'c-mode-common-hook
          '(lambda ()
             (progn
               (setq c-basic-offset 2)
             )))
```
いつから dup すれば安全だと思ってた？

```ruby
ha = {foo: "hoge"}
ha2 = ha.dup
ha2[:foo].reverse!
#=> "egoh"
ha
#=> {:foo=>"egoh"}
```

`clone` も同じ。

そこで、 `AnzenHash` ですよ。

```ruby
class AnzenHash < Hash
  def [](key)
    immutable?(value = super) ? value : value.dup
  end

  undef []=

  private
  def immutable?(value)
    value.frozen? || [Fixnum, Symbol, TrueClass, FalseClass, NilClass].any?{|k| value.is_a? k }
  end
end

ha = {foo: "hoge"}
ha2 = AnzenHash[ha]
ha2[:foo]
#=> "hoge"
ha2[:foo].reverse!
#=> "egoh"
ha2[:foo]
#=> "hoge"
ha
#=> {:foo=>"hoge"}

ha2[:foo] = "poyo"
NoMethodError: undefined method `[]=' for {:foo=>"hoge"}:AnzenHash
```

`AnzenHash` は元の `Hash` の内容を断固として改変できませんが……ここまでする必要がある場面ってそんなにあるのかどうか自体は謎。

`immutable?` の判定について反論は受け付けます。…

## 参考 URL

* [#deep_clone and #deep_dup for Objects](https://bugs.ruby-lang.org/issues/4514)
MacPortsでs3cmdをインストール


Amazon S3のCUIクライアント「s3cmd」をMacPortsを使ってインストールする方法。
http://s3tools.org/s3cmd


まず、以下のコマンドを実行してs3cmdをインストールする。

```
$ sudo port install s3cmd
```

次に、以下のコマンドを実行して、対話的にs3cmdの設定をおこなう。

```
$ s3cmd --configure                                                                                                                                            

（略）

Access key and Secret key are your identifiers for Amazon S3
Access Key: ＜AWSのAccess Key＞
Secret Key: ＜AWSのSeqret Key＞

Encryption password is used to protect your files from reading
by unauthorized persons while in transfer to S3
Encryption password: ＜空Enter＞
Path to GPG program: ＜空Enter＞

When using secure HTTPS protocol all communication with Amazon S3
servers is protected from 3rd party eavesdropping. This method is
slower than plain HTTP and can't be used if you're behind a proxy
Use HTTPS protocol [No]: ＜空Enter＞

On some networks all internet access must go through a HTTP proxy.
Try setting it here if you can't conect to S3 directly
HTTP Proxy server name: ＜空Enter＞

（略）

Test access with supplied credentials? [Y/n] y
Please wait...
Success. Your access key and secret key worked fine :-)

Now verifying that encryption works...
Not configured. Never mind.

Save settings? [y/N] y
（略）
```
neosnippet+snipmate-snippetsでFilenameが見つからないエラー

- [Vimのsnippetについてあまり知らなかったので設定してみたら便利過ぎてつらい](http://kazuph.hateblo.jp/entry/2012/11/28/105633)

最近ちょっと話題になった上記エントリを読んで [honza/snipmate-snippets · GitHub](https://honza/snipmate-snippets) を導入したら 

> E117: Unknown function: Filename
> E116: Invalid arguments for function substitute(Filename('', 'Page Title'), '^.', '\u&', '')

というエラーが出た。調べてみると `g:neosnippet#enable_snipmate_compatibility` を設定すると snipMate 互換の関数が使えるようになるらしい。

snipmate-snippetsという名前からしてこのオプションが必要だったというわけだ。.vimrcに下記を追加したらエラーは無事に消えた。

```vim:.vimrc
let g:neosnippet#enable_snipmate_compatibility = 1
```
画面遷移後にUITabBarを隠す方法



```
nextController* NextViewController;
nextController = [[NextViewController alloc] init];
nextController.hidesBottomBarWhenPushed = YES; // 遷移後にUITabBarを隠すための処理

[self.navigationController pushViewController:nextController animated:YES];
```

参考:http://iphone-app-developer.seesaa.net/article/283728905.html#more
♥Enumerator を使ったシンプルな FizzBuzz♥

`Enumerator` を使ったシンプルな **FizzBuzz** です。

```ruby
fizzer = [nil, nil, 'Fizz'].cycle
buzzer = [nil, nil, nil, nil, 'Buzz'].cycle
1.upto(100) { |i|
  fizz, buzz = fizzer.next, buzzer.next
  puts fizz || buzz ? "#{fizz}#{buzz}" : i
}
```

`Array#cycle` がクールですね♥
Emacsで1行の文字数が指定値をオーバーしていたらハイライトする


具体的なコード例を示します。

```lisp:.emacs
;;; C系統,Pythonにて1行80文字を超えるとハイライト
(add-hook 'c-mode-hook
  (lambda ()
    (font-lock-add-keywords nil
      '(("^[^\n]\\{80\\}\\(.*\\)$" 1 font-lock-warning-face t)))))
(add-hook 'c++-mode-hook
  (lambda ()
    (font-lock-add-keywords nil
      '(("^[^\n]\\{80\\}\\(.*\\)$" 1 font-lock-warning-face t)))))
(add-hook 'python-mode-hook
  (lambda ()
    (font-lock-add-keywords nil
      '(("^[^\n]\\{80\\}\\(.*\\)$" 1 font-lock-warning-face t)))))

;;; Javaで1行100文字を超えるとハイライト
(add-hook 'java-mode-hook
  (lambda ()
    (font-lock-add-keywords nil
      '(("^[^\n]\\{100\\}\\(.*\\)$" 1 font-lock-warning-face t)))))
```

ちなみに、C++, Pythonで1行80文字、Javaで1行100文字までというのはGoogleで使われているスタイルガイドに即しています。

- http://code.google.com/p/google-styleguide/
- http://source.android.com/source/code-style.html
Play&Sbt&Scalaのバージョン対応表

##Advent Calnedarのネタがない人に個人的に書いて欲しいこと
1.Playのコードリーディング入門用記事
2.websocketに関する記事
3.Playを使う上で多くの人がはまりそうなポイントのまとめ
4.中学生でもわかる各種モナドの解説
5.Scalaの関数型プログラミングとオブジェクト指向の絡みに関する解説

##Play&Scalaについて思ったこと
1.英語も日本語もドキュメントが少ない
2.scala使いはjava(オブジェクト指向)とhaskell(関数型プログラミング)をよく知ってる人が多く、話を聞くと色々ためになる。

##Playとsbtとscalaの対応表
###結論:Play2.0から2.0.4までは、sbt0.11.3使っとけばとりあえずデフォルトのプロジェクトは動く
いつもこのあたりのバージョンの整合性がよくわからなくてハマったり動かすのにビビったりしていたので、随時下記の表に動作確認表をまとめていく。
現状で検証した範囲では、play2.0〜2.0.4は、sbtが0.11.3、scalaが2.9.1ならば動く。他の組み合わせでも動くかもしれないが調べていない。何かの用事で動かすことがあったらついでに検証して追記する。


|Play|Sbt|Scala|Result|
|:--|:-:|:-:|:-:|
|2.0.4|0.11.3|2.9.1|OK
|2.0.3|0.11.3|2.9.1|OK
|2.0.2|0.11.3|2.9.1|OK
|2.0.1|0.11.3|2.9.1|OK
|2.0|0.11.3|2.9.1|OK
タグごとの S/N 比の私見


いろいろ興味のあるトピックがあるけれど、S/N 比が悪くてフォローしないタグ・フォローしているがあまり役立っていないタグもある。

## S (Signal) の定義

 * __読んだことがない__
 * ドキュメントにない
 * 実用した人の知見

## N (Noise) の定義

 * __読んだことがある__
 * 使わないツールやライブラリに関する内容

## 各タグ所感

### ○ Git

 * [変更したファイルは全部テストorチェックにかける（git add、commit、push前に）](http://qiita.com/items/9c4ab0c2e87b54bc7c17)
   * 紹介されている個々のコードはそれほど見かけないというほどではない
   * 応用例、背景がよくわかる

### △ Ruby

 * [Ruby で中置関数](http://qiita.com/items/2d83768cc84995fea67b)
   * コンセプト・プルーフ
 * [本番機などで外部と余計な通信をしたくない時にbundlerを使う場合](http://qiita.com/items/8d90a0b965e310a5ca40)
   * 実際に使ってみた人の知見

こういった投稿がおもしろい。

特に「Ruby で中置関数」のような内容は能動的に探すのがむずかしい (自分が思いつかなかった発想をどうやって検索するというのだ?) ので、購読モデルの醍醐味といえる。

### × JavaScript

ライブラリの比較とかチュートリアル的な内容が多く、読みたい内容はあまり出てこない。

興味はあるけれどフォローしていないタグのひとつ。

## 感想

効率的にエキスパートの知見を読みたいのかもしれない。

JavaScript の話題はエキスパートっぽい人のブログを購読するほうが圧倒的に S/N 比が高いし、JavaScript のエキスパートっぽい人を既に見つけられているというのも大きい。

逆に Git のような分野や言語を越えて使われている道具は、エキスパートと呼べるような人たちのブログがあってもなにか別の話題が混じることが多い。これは Git が道具であるというのも関係しているかもしれない。

自分自身の習熟度や興味・関心の強さも関係するのかもしれない。

これは Qiita に限った話ではなくて、ソーシャルブックマークや、ひいてはインターネットにおける情報収集全般にいえることかもしれない。

発信側と受信側の間に存在するミドルウェアのようなもので間引くことができれば便利かもしれない。

受信側がスコアリングのための式をミドルウェアに登録して、発信側は登録されたスコアリングのための式で間引いて発信する、みたいな。
Ember.jsが他のJavaScript MVCフレームワークに比べて優れてるっぽいポイント

今日は、他のJavaScript MVCフレームワークに対するEmber.jsの優位点を
説明します。

まず、なぜJavaScript MVCフレームワークが必要なのか、jQueryでは
不足なのかという点について説明します。

jQueryについては、ここをご覧になっているほとんどの人が
ご存知だと思います。jQueryは、DOMイベントと処理のバインディング、
要素への値のセットを簡潔に書けるシンタックスシュガーとして
扱うことができますが、jQueryだけを用いて処理を記述すると、
どこに何の処理が書いてあるのかわかりにくい、整理されていない
コードを書いてしまいがちです。
心当たりのある方も多いのではないでしょうか。

これは、プログラムが構造を持っていないのが原因です。
プログラムの構造とは、処理の種類ごとにコードをまとめることを
指します。
jQueryは便利な簡潔記法を提供しますが、イベントハンドラ、
データの処理、表示への適用を一箇所に書くことになり、
プログラムの構造化ができません。

この問題を解決し、プログラムに構造を与えるのが、
JavaScript MVCフレームワークです。
JavaScript MVCフレームワークは現在数多くあり、それぞれ
モジュールの切り分け方の考え方も違ったりするのですが、
大きな目標として、JavaScriptプログラムに構造を与えることを
目指している点は共通しています。

どういう構造を与えるのかというと、大まかにビジネスロジック層と、
プレゼンテーション層(入力/表示を行う処理)を別のモジュールとして
定義できるようにします。
ここで、ビジネスロジックとはデータの操作と、外部との
通信を指すものとします。
ここでの一番のポイントは、ビジネスロジック層を、プレゼンテーション層に
依存しないように記述できるようになっているということです。
これにより、ビジネスロジック層を、目的の処理だけに
集中させることができます。

次に、JavaScript MVCフレームワークの差別化要因となってきた、
データバインディング機能について説明します。

データバインディング機能は、最近のフレームワークが目玉として
取り入れてきている機能です。knockout.js, Ember.js, Angular.js,
Batman.jsなどがこの機能を提供しています。
データバインディング機能とは何かというと、データの値が
変更されたら、勝手に表示(や、依存している他のデータ)を
更新してくれる機能のことです。
GUIプログラミングでは大分昔から使われている機能ですが、
JavaScript MVCフレームワークの世界では最近になってようやく
実装が進んできました。
データバインディング機能は、あるならあったほうが全然楽です。
表示更新漏れなどのバグをほとんどのケースでなくすことができるため、
大変強力です。

これらのデータバインディング機能を実装しているフレームワークのうち、
Ember.jsを除くものは、すべてhtmlの要素に専用のdata属性値をセットする
形を取ります。(Angular.jsは、値の埋め込みにはテンプレートエンジンによる
値の埋め込みをサポートしますが、イベントハンドラの指定はdata属性値を
利用します。)

これらのフレームワークは、バインディング情報をhtmlに直接記述していくため、
表示要素のモジュール化ができず、部品の再利用が難しいという問題があります。
JavaScriptフレームワークの機能ではなく、サーバ側のテンプレートエンジンの
機能で部品化する必要があります。

Ember.jsはこの問題への解決策として、表示要素(View)をモジュール化し、
Viewモジュールを組み合わせて大きなViewを作れるように設計されています。
また、Handlebarsテンプレートエンジンを利用したバインディング記述により、
他のフレームワークに比べてテンプレートを簡潔に書ける利点もあります。

また、他のデータを参照するデータ(プロパティ)を定義する機能もあります。
参照先が変更されたら自動でプロパティが更新されます。
たとえば fullName は firstName, lastName を参照する、というケースで
利用できます。

その他、イベントハンドラの定義をhtmlの要素でなくJavaScriptのViewクラスに
書けるのも、コードの凝集度を高めて良い感じです。

ここまで述べたように、Ember.jsはデータバインディング機能を備えた
JavaScript MVCフレームワークであり、かつこれまでのデータバインディング機能を
持ったフレームワークが問題としていた、ビューのモジュール化ができる
点で優れており、期待しています。
スクリーンショット撮影時の影をなくす


ウインドウのスクリーンショットを撮影した時に、ウインドウの影を自動的に追加しないようにする方法。

以下のコマンドを実行すれば良い。

```
$ defaults write com.apple.screencapture disable-shadow -boolean true                                                                                                                $ killall SystemUIServer
```
iTerm2でCommand+R（Reset）を無効にする


ブラウザを更新したりするときの癖で、間違えてiTerm2に対して「Command+R」ショートカットを実行してしまう場合がある。

このショートカットには「Reset」という機能が割り当てられていて、シェルの現在の入力位置がウインドウの一番上の行にくるよう自動的にスクロールしてくれる。

ただこの機能、Vimを起動している時は非常に迷惑。

そこで、Command+RでResetが実行されないようにする方法をメモ。

1. iTerm2のメニューから「iTerm→Preferences…」を選ぶ
2. 「Keys」タブを選択
3. 左側「Global Shortcut Keys」の一番下にある「+」ボタンを入力
4. 「Keyboard Shortcut」にフォーカスが当たっている状態で「Command+R」入力
5. Actionを「Ignore」に設定し「OK」

これで、Command+Rを入力してもResetが実行されないようになる。

他のショートカットを無効にしたい場合も同じ方法でできる。
CreateObject('Excel.Application')で使用されるExcelのバージョンについて


ちょっとハマったのでアウトプットしておきます。

問題点
------

VBで`Microsoft.Office.Interop.Excel.Application`または`CreateObject('Excel.Application')`を使ってExcelを起動する際に使用されるExcelのバージョンが2003で起動されてしまって、xlsmファイルが認識できずExcelの起動に失敗する。
（このファイルの形式を認識できません）

なぜ、こんな状況になったか？
----------------------------

Office2010をインストール後にOffice2003をインストールすると、レジストリの設定がExcel2003をデフォルトとして設定してしまう。

対処方法
--------

regedit.exeにて、
`HKEY_CLASSES_ROOT\CLSID\{00024500-0000-0000-C000-000000000046}\LocalServer32`
の`(既定)`と`LocalServer32`の値を`C:\Program Files\Microsoft Office\Office14\EXCEL.EXE  /automation`という感じに起動させたいExcelのパスに変更してあげる。
Yiiの本はKindleで買おう


注目度ナンバーワンのフレームワークYiiですが、日本語の書籍が全くないんですよね。というわけで洋書を買うしかないんですが、なんせ高い、とか、英語読めるのかな、とか、自分が英語で1冊読破できるかわかんないのに高いよ、とか… ありますよね。

さてそこでKindle版ですよ。

[Yii 1.1 Application Development Cookbook](http://www.amazon.co.jp/Yii-1-1-Application-Development-Cookbook/dp/1849515484/ref=sr_1_1?ie=UTF8&qid=1354249590&sr=8-1)

![http://ecx.images-amazon.com/images/I/511x5piL7pL._AA160_.jpg](http://ec2.images-amazon.com/images/I/511x5piL7pL._SS500_.jpg)

|   | Amazon 価格 | 新品 | 中古品 |
|:--|-----------:|-----:|-----:|
| Kindle 版 | ￥1,527 | -- | -- |
| ペーパーバック	| ￥3,703 | ￥3,475 | ￥4,656 |

脅威の**60%OFF**です。中古のほうが値段が高いあたり、ベース値下げ、更にドン、60%引きガキーンって感じですね。もともとがそういう価格帯のレベルの書籍なのがこのお値段。

買いました。で、これがホントに読みやすい英語です。説明が長すぎず、コードサンプルが頻繁に出てくるので、説明された内容を理解できてるか確認しながら読み進めていける感じでした。

読みやすいだけじゃないですよ。これ、執筆者が Alexander Makarov  さんです。あの samdark 氏ですよ。現在の Yii のリード開発者じゃないですか。あとちなみに、3人いるレビュアーのうち1人が日本人です。mocapapaさん。

Yii の学習っていうと、まず[日本語のユーザガイド](http://www.yiiframework.com/doc/guide/1.1/ja/index)をオンラインで読みますよね。で、それで概要はわかるけど、ちょっと情報量がまだ少ない。書いてない裏仕様も多々あるし、イベントとかコンポーネントプロパティとかの、もっとも基本的な仕組みである CComponent の説明が少ないまま進んじゃいます。アプリ作って動きはするけど、この設計ってどういう基本コンセプトなんだろう、って。

そんなもやもやした状態でこの本見たら、すごく明快になると思います。少なくとも僕は、なぜもっと早く買わなかったかと思いました。オンラインドキュメントに載ってないことがすべて、ここにあると感じました。

しかも、実はサンプル版でそのへんの基本メカニズムが読めるので、そこだけでも理解しておくと、ぜんぜん違いますよ。けどお値段

**￥1,527**

どうせマニュアルで英語読まなきゃいけないんだから、これマジでお買い得。

同じ出版社でこういうのも出てるんですが、

[Agile Web Application Development With Yii1.1 and PHP5](http://www.amazon.co.jp/Agile-Application-Development-With-Yii1-1/dp/1847199585/ref=sr_1_6?ie=UTF8&qid=1354249590&sr=8-6)

こっちは余裕があったらでいいかもです。Web 開発の基礎理論が多くて説明が長いので、そういうのはもう日本語の本で知ってるからもっと Yii に特化した内容がいいなぁ、というのと、目次を見た限りでは、ところでこれアジャイルとはあまり関係ないんじゃないかなと感じちゃったのと。

とりあえず、洋書の値下げっぷりがすごいので、洋書しかない場合はバリバリ Kindle を活用すればいいと思いますね。

PaperWhite がまだ届かない? あ、僕も iPad アプリですよ、まだ。
zsh で cd ../ したときにカレントディレクトリを補完候補から除く

例えば今 /home/mollifier/work/ にいるとする。
別のディレクトリに移動したくて cd ../ としてタブを打ったとする。

そこで普通ならこんな風に補完候補がでてくる。

```sh
% cd ../
Desktop/ Dropbox/ tmp/ work/
```

でも、今 work にいてわざわざ ../ と打ったってことは work に行きたいわけはなくて、補完候補に出てきても意味がない。

そんなときは .zshrc にこれを書いておけば OK。

```sh
# 今いるディレクトリを補完候補から外す
zstyle ':completion:*' ignore-parents parent pwd ..
```

そうすると、今いるディレクトリは補完候補に出てこなくなる。

```sh
% cd ../
Desktop/ Dropbox/ tmp/

# work/ が無い
```

便利。

最後の `..` は、../ と打ったときだけこの設定を有効にするという意味になる。
つまり、 /home/mollifier/ とフルパスで指定したときは今いるディレクトリも補完候補に出てくる。

これをやめて `..` をなくすと、フルパスのときでも今いるディレクトリは出てこなくなる。

```sh
# フルパスの時でも今のディレクトリを外す場合の設定
zstyle ':completion:*' ignore-parents parent pwd
```

```sh
% cd /home/mollifier/
Desktop/ Dropbox/ tmp/
```

好みで好きな方を設定しておこう。
Ethnaなう (Ethnaの2012年最新事情)

こんにちわ！
Ethnaだいすき@DQNEOです。

第１日目になります。よろしくお願いします。

今日はEthnaの最新事情についてお話します。

Ethnaのバージョンは、大きく分けて2.5と2.6系に分けられます。
これらのバージョンの違いについて説明します。

結論を先に言うと、ver2.6.3以上を強くオススメします。

## Ethnaソースコードの入手方法

開発はGithub上で行われています。
インストールするときはpearで入れると楽です。

* https://github.com/ethna/ethna
* http://pear.ethna.jp/

## ver2.5(2009/10/18)

Ethnaの安定板です。
pearコマンドでインストールするとこれが入ります。
(おそらく)世の中的に最も普及したのはこのバージョンだと思われます。
利用実績も豊富にあるので安定しています。

### メリット
* 安定しています。
* PHP4でも使えます。
* ドキュメントが充実している。
* 検索すればブログ記事やTipsなどが多数ヒットする

### デメリット

* PHP4互換なので文法が古いです。
* PHP5.3環境やE_STRICTな環境で動かすと、わらわらと警告が出る。
* Ethna2.6にバージョンアップする際にかなりの改修が必要になる場合も。

## ver2.6beta1 (2010/12/27)

説明はしょります＞＜

## ver2.6beta2 (2011/10/25)

pearのベータ版として配布されているバージョンです。
ver2.6になって大きく変わったことは、PHP5.3対応、class/以下のクラクラスファイル名の変更です。

一見これが最新版のように思えるのですが、後述するようにvar/protected問題があるのでこのバージョンは個人的におすすめしません。

### メリット
* PHP5.3対応
* JSON出力に対応
* レイアウトテンプレート

### デメリット
* PHP5.2.6以下は非対応
* 利用実績をあまりきかない
* ドキュメントがまだ作成中

## ver2.6beta3

現在のGithubのmasterです。

プロパティ・メソッドのアクセス修飾子が大きく変わりました。
* var(=public)プロパティの大部分がprotectedに
* functionだったものの大部分がprotectedに

アプリ側でこれらををpublicとして扱っていた場合、追従するには大改修が必要になりますので気をつけましょう。

```php
-    var $form = array();
+    protected $form = array();
```
### メリット

* 2.6系の中でAPIがやっと固まった感じ

### デメリット

* 利用実績が・・・
* ドキュメントが・・・

## ver2.6beta4

Github上のreleaseブランチ(リリース候補版)という位置づけです。
2.6beta3にあった細かなバグがいろいろと修正されています。
ある意味、2.6系で一番安定しているのはこれかもしれません。

新しいもの好きな人にはこちらがよいでしょう。

# まとめ

これから始めるなら2.6beta3または2.6beta4をおすすまします！
UILabelを角丸にする


まずは、ヘッダーファイルに下記を追記し、QuartzCore.frameworkを読み込む。

```
#import <QuartzCore/QuartzCore.h>
```

そして、下記を追記。labelのところに使用するUILabel名を入れるとOK！

```
[[label layer] setCornerRadius:5.0];
[label setClipsToBounds:YES];
```

なお、5.0のところで丸みを調整する。値を小さくすれば丸みも小さくするという感じ。

参考URL：http://d.hatena.ne.jp/corrupt/20110413/1302686140
Methodの処理を差し替える - MethodSwizzling

はじめまして、おでんです。
なんかAdvent Calendarってのが流行ってるらしいので、乗っかってみました。

MethodSwizzlingは、Methodで行われる処理を差し替える手段のひとつです。
iOS向けの単純なサンプルを載せておきますので、実行してみて頂けると幸いです。

```objective-c:main.m
#import <objc/runtime.h>

@interface Test : NSObject

-(void)instanceMethod;

@end

@implementation Test

-(void)instanceMethod
{
    NSLog(@"instanceMethod");
}

@end

int main(int argc, char *argv[])
{
    @autoreleasepool
    {
        id block = ^{ NSLog(@"block"); };
        id class = [Test class];
        SEL sel = @selector(instanceMethod);
        IMP imp = imp_implementationWithBlock(block);
        Method method = class_getInstanceMethod(class, sel);
        char* types = method_getDescription(method)->types;
        
        id test = [[[Test alloc] init] autorelease];
        [test instanceMethod]; // NSLog(@"instanceMethod");
        class_replaceMethod(class, sel, imp, types);
        [test instanceMethod]; // NSLog(@"block);

        return 0;
    }
}
```

MethodSwizzlingについて調べると長い説明から入ることが多く、
取っ付きにくい印象を受けている人が多いように感じられます。
なので取りあえずどうすれば動くのかだけを書いてみました。

説明なんてもんは飾りです。
エライ人にはそれがわからんのですよ。
Ember.jsの紹介

今日から[Ember.js Advent Calendar 2012](http://qiita.com/advent-calendar/2012/emberjs)を始めます。よろしくお願いします。

Ember.jsは、Javascript MVCフレームワークの一種です。
Javascript MVCフレームワークの中でも新しめのもので、
その分野心的な機能が取り入れられています。

http://emberjs.com/

上記サイトからEmber.jsをダウンロードできます。
Startar Kitには、Ember.js本体に加えて、雛形となるHTMLもついているので、サンプルプログラムの作成に役立ちます。

Ember.jsの大きな特長は、Handlebarsをテンプレートエンジンに使いながら、
かつデータバインディング機能を提供することです。
これにより、強力なデータバインディング機能を、簡潔に記述することができます。

今日は具体的にEmber.jsでどういうことが実現できるのかをわかりやすく見ることができるサンプルアプリケーションを作りましたので、こちらをごらんください。

http://kmdsbng.github.com/hello_emberjs/

もし興味を持ったなら、[Ember.js Advent Calendar 2012](http://qiita.com/advent-calendar/2012/emberjs) に参加しましょう！

では。
git checkoutでよくやる操作

## リモートブランチをチェックアウト+追跡する
```bash
git checkout foo # ローカルにfooブランチが無い場合
```

ローカルにfooブランチがある場合は

```bash
git checkout -b new-foo --track origin/foo
```

など．

## 特定リビジョンの1ファイルをcheckoutする
```bash
git checkout sha1_or_branch_name -- path/to/file.sh
```

ブランチは切り替えない．`-p`オプションを付けると`git add -p`のように各hunkを適用するか選択できる．

## indexに追加していない変更を消す
既にgit addしたものは残し，カレントディレクトリ以下のaddしていない変更を全部消す．よく使う．

```bash
git checkout .
```

一部のみ取り消すなら-pオプションを付ければよい([gitで変更の一部のみコミット対象とする/変更を取り消す](http://qiita.com/items/98fbc42faedc02492397))．
addしているものも含めるなら普通に`git reset --hard`する．


## `git chekcout -`
他にも[gitのブランチ移動](http://qiita.com/items/bb81fe699b833ae20d4a)はよく使う．

```bash
# topic branchで実装を終えた
git checkout master
git merge --no-ff -
```

みたいな形．
Zshでrbenv使おうとしたらrbenv:10: command not found:となる問題

RVMがいろいろおかしくなってきたのでrbenvに乗り換えようと思って http://qiita.com/items/9dd797f42e7bea674705 を読みながら設定していたのだが、

```
rbenv
```
と叩いても

```
rbenv:10: command not found:
```
としか出てこない。
本家のGithub https://github.com/sstephenson/rbenv#section_2.1 読んでもこの症状について書いてないので困っていたが、最終的に解決した。

.zshrcの最後に

```
PATH=/Users/katryo/bin:/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources:……以下パスの通した場所が延々と続く
```
としていたのだが、$PATHを書いていなかった。
ので、

```
PATH=/Users/katryo/bin:/Users/katryo/bin/osx:/opt/local/bin:………（中略）……/opt/local/sbin:$PATH
```
と、最後に

```
:$PATH
```
を書き加えたら、rbenvが動くようになった。
まさかの罠だった。

## 追記

rbenvでrbenv global 1.9.3-p327と最新のRubyを使おうとしても


```
ruby -v
```
としても、1.8.7 のままになる事態がこのあと発生した。
軽くハマったのですが、

.zshrcの中にあった

```
PATH=/Users/katryo/bin:/System/Library/PrivateFrameworks/Apple80211.framework/Versions/A/Resources:……以下パスの通した場所が延々と続く
```
の部分を消すと、ちゃんと

```
ruby -v
ruby 1.9.3p327 (2012-11-10 revision 37606) [x86_64-darwin11.4.2]
```
と言ってくれるようになりました。
パスの優先順位を変えていたのがまずかったみたいです。

## さらに追記
powを使おうとしたら

LoadError: no such file to load -- bundler/setup
と言われたのでアイエエエ調べました。
https://github.com/37signals/pow/issues/202
に書いてあるとおり、.powenvか.powconfigに

```.powenv
export PATH="$HOME/.rbenv/shims:$HOME/.rbenv/bin:$PATH"
```
と書けばうまくいきました。