OmniAICreator/Qiita-1.07M huggingface dataset:
サクッとレスポンシブなWebページを作る話


手っ取り早くWebサイトを構築したい欲が高まったため、レスポンシブデザインを如何に楽に製作開始できるかやってみた。

## 使用したフレームワーク
* compass
	* sassで書くため、というのと、細々した機能が嬉しいCSSフレームワーク
* susy
	* Gridデザイン用のcompassのプラグイン
* HTML5-Boilerplate
	* HTML5で開発する時のベストプラクティスを寄せ集めたひな形

## 開発手順
とりあえずこれらを全部インストールします。
	
	gem install compass
	gem install susy
	gem install html5-boilerplate

次に、作業するディレクトリに移動して、compassプロジェクトを立ち上げます。

	cd /path/to/project
	compass create --syntax sass --css-dir "css" --javascripts-dir "js" --images-dir "img" -r compass-h5bp -r html5-boilerplate -u html5-boilerplate

長々としたコマンドの中では、プラグインの指定などを行なっています。
こうすると、必要な物は大抵揃います。

susyのみ主導で追加します。

``` Ruby:config.rb
require 'compass-h5bp'
require 'html5-boilerplate'
# Require any additional compass plugins here.
require 'susy' #追加
```

作業中は自動でsassがコンパイルされるように、
	
	compass watch .

としておきましょう。

あとは、susyの基本設定をsass/partials/_base.sassに追記。

	$total-columns  : 12
	$column-width   : 5em
	$gutter-width   : 1em
	$grid-padding   : $gutter-width

あとは、各部品に対してgridの値を適当な値で設定します。

また、sass/partials/_media.sassを見ると、レスポンシブにするための色々が準備されているので、あとは必要な画面サイズに応じて、各部品のgridの値を書き換えるなどするだけで、画面が小さい端末に対してはこっちのデザイン、大きい端末に対してはこっち、というのが簡単に設定されます。

例：

	@media only screen and (min-width: 320px)
	  nav
		@include span-columns(12 omega, 12)
	  article
		@include span-columns(12 omega, 12)

	@media only screen and (min-width: 480px)
	  nav
		@include span-columns(3, 12)
	  article
		@include span-columns(9 omega, 12)


やり方は荒いかもしれませんが非常に楽でした。
ちなみにboilerplateで作ったhtmlに読み込まれるjquery、バージョンが1.6.2だったので、適宜書き換えましょう。

あと、Hamlで開発し、Coffeescriptにするともっとはかどります。

今回の手法で作ったWebページは**12/24**に公開するかもしれません。

参考：
[Compass](http://compass-style.org/)
[Susy](http://susy.oddbird.net/)
[Compass-HTML5-Boilerplate](https://github.com/sporkd/compass-html5-boilerplate)
Titanium.Platform.idの値はアプリに保存される（端末変更しても変わらない）

iOSの場合。Ti.Platform.idの値は、NSUserDefaultsに保存されていない場合にのみ、CFUUIDCreateによって生成される。そしてNSUserDefaultsに保存される。（SDKのソースより）

そのため以下の状態の場合、端末を変更してもTi.Platform.idが変わらない。

1. 端末OLDでアプリAを実行する。アプリA内でTi.Platform.idを取得している。
2. 端末NEWを購入し、端末OLDのバックアップをリストアする。当然アプリAもリストアされる。
3. 端末NEWでアプリAを実行する。ただしアプリA内のTi.Platform.idの値は、リストアされたNSUserDefaultの値を利用するため、端末OLDと同じ値になる。

実験してもこの結果だったので、たぶんこの動きで正しい。分かってしまえば対処できるけど、UDIDの代替としてはちょっと？という動きだった。
Qiitaで下書き機能を使いたかった

# 下書き機能実装されてました
http://blog.qiita.com/post/51287829317/draft-items-now-available

# これは下書き機能が実装される前の記事です
そんな機能ないんだけど擬似的に出来る気がしたからシェアしてみる。

Qiitaには限定共有機能があって、これで投稿するとフィードに流れないし検索もされない。URLを誰かに教えない限り誰も見ない。
http://qiita.com/items/5ee9dc09555d0bed3302

というわけで、

下書きの保存→限定共有機能で投稿
下書きの編集→投稿したエントリを編集
投稿→投稿したエントリを再投稿して元エントリを削除

と言う感じに擬似的に下書き機能を実現できる。
ちなみに限定共有したエントリを全体公開にも出来るけど、そうすると

>6分前に投稿 (1分以内に編集)

みたいに表示されるから下書き機能として使うなら微妙。
Rails3.2.9 development環境でリクエストの度にプライベートGemをリロードする方法


Rails用のgemを手元で作っている時にコードを書きなおす度にWebrickを再起動してgemを読みなおすのは非常に手間。なのでこれを回避する方法

例えばexampleという名前のgemを作っていてExample::MyClassをリクエストの度にリロードをしたい場合enviroments/development.rbに以下を追加

```ruby:enviroments/development.rb
  # requestが来た場合のcallbackを定義
  ActionDispatch::Callbacks.before do
    # Example::MyClassが定義されている場合は削除する
    if Object.const_defined?(:Example)
      if Example.const_defined?(:MyClass)
        Example.send(:remove_const, :MyClass)
	   end
    end
    # example/my_classがrequireされている場合は削除して再度requireする
    $LOADED_FEATURES.delete_if {|s| s.include? "example/my_class"}
    require 'example/my_class'
  end
```
Ember.js 相互依存するフィールドの定義

相互に依存するフィールドを定義したいことがあります。
n個のフィールドのうち、n-1個のフィールドが決定すれば、残り1個も自動的に算出される場合などです。
例として、BMIを計算するプログラムを考えてみましょう。身長、体重、BMIの3つのフィールドがあり、うち2つを入力すると残り1個が決定されます。

理想としては、以下のようなクラスを定義すると、よしなに計算してくれると便利なところです。

```coffeescript
App.bmi = Ember.Controller.create
  height: (->
    weight = @get('weight')
    bmi = @get('bmi')
    return Math.sqrt(weight / bmi) * 100
  ).property('bmi', 'weight'),
  weight: (->
    meter = @get('height') / 100.0
    bmi = @get('bmi')
    return bmi * (meter * meter)
  ).property('height', 'bmi')
  bmi: (->
    meter = @get('height') / 100.0
    return @get('weight') / (meter * meter)
  ).property('height', 'weight')
```

しかし、このプログラムはうまく動きません。プログラムを読み込んだ段階でstack over flowが起こってしまいます。
Ember.jsのpropertyは、循環参照があると、処理できません。
この挙動はEmber.jsに限らず、データバインディング機能を備えているフレームワークに共通する動作です。

経験上、今回のような挙動をさせたい時には、テキストフィールドが設定されたタイミングで、計算可能なら値をセットするという処理を走らせるのが良いようです。
propertyは今回のケースでは使えません。

具体的な実装を見ていきます。テキストフィールドが設定されたタイミングを取るために、focusOutイベントをキャッチして計算を行うようにします。
focusOutを捉えるために、Ember.TextFieldの子クラスを定義します。

```coffeescript
App.CalcTextField = Ember.TextField.extend
  init: (->
    @_super()
    @on("focusOut", this, this.recalc)
  ),
  recalc: (->
    App.bmi.tryToCalcRemain()
  )
```

テンプレート定義は以下のとおりです。

```html
体重{{view App.CalcTextField valueBinding="weight"}}kg /
(身長{{view App.CalcTextField valueBinding="height"}}cm ** 2)
=
BMI{{view App.CalcTextField valueBinding="bmi"}}
```

tryToCalcRemainのコードも掲載します。もし1つだけフィールドが設定されてなければ、そのフィールドを設定します。

```coffeescript
App.bmi = Ember.Controller.create
  height: null,
  weight: null,
  bmi: null,
  calcHeight: (->
    weight = @get('weight')
    bmi = @get('bmi')
    @set('height', Math.sqrt(weight / bmi) * 100)
  ),
  calcWeight: (->
    meter = @get('height') / 100.0
    bmi = @get('bmi')
    @set('weight', bmi * (meter * meter))
  ),
  calcBmi: (->
    meter = @get('height') / 100.0
    @set('bmi', @get('weight') / (meter * meter))
  ),
  tryToCalcRemain: (->
    height = @get('height')
    weight = @get('weight')
    bmi = @get('bmi')

    if (@isPresent(height) && @isPresent(weight) && !@isPresent(bmi))
      @calcBmi()
    else if (@isPresent(height) && !@isPresent(weight) && @isPresent(bmi))
      @calcWeight()
    else if (!@isPresent(height) && @isPresent(weight) && @isPresent(bmi))
      @calcHeight()
  ),
  isPresent: ((v) ->
    v && v.length > 0
  )

```

実際の動作を以下のページで確認できます。

http://kmdsbng.github.com/emberjs_bmi_calculator/


以上です。
今回のような、いつも自動で計算する、というわけではないケースは、データバインディング機能を使って自動計算するのは意外と相性が悪い気がします。
このケースに関しては、慣れないうちはうまく処理を組むのが難しいと思います。
Excel VBA から、クリップボードにテキストをセットする

Excel VBA から、クリップボードにテキストをセットするには、DataObject を使います。

```vb.net:SetText.vb
Dim CB as Object
Set CB = new DataObject
With CB
  .SetText "セットしたい文字列"
  .PutInClipboard  'クリップボードに反映する
End With
```

# 参考

* [Office TANAKA - Excel VBA Tips[クリップボードを操作する(1)]](http://officetanaka.net/excel/vba/tips/tips20.htm)
Postfixで中継サーバ(転送)を噛ます時の設定

# Postfixの転送設定

最初の設定内容。
最悪これだけ設定しておけば動く。
第三者中継テストなどを実施してセキュリティのチェックを忘れない。

**[Mail送信] => [フォワード元(スルー)] => [フォワード先(受信)]**

## フォワード元

```forward_main.cf
# localhostだと自分自信のメールだけ許可
# allだと外部からのメールも受けとる
inet_interfaces = all

# ipv6も有効にしているとエラーが出るので
# ipv4固定で
inet_protocols = ipv4

# 色々と許可するセグメント。
# 信頼するインターナルやグローバルIPセグメントなどを記述
mynetworks = 127.0.0.1, 192.168.0.0/24

### メールを受信したら全て転送する先
relayhost = [192.168.0.100]

```

## フォワード先

```recieve_main.cf
# localhostだと自分自信のメールだけ許可
# allだと外部からのメールも受けとる
inet_interfaces = all

# ipv6も有効にしているとエラーが出るので
# ipv4固定で
inet_protocols = ipv4

# 自分のドメイン
mydomain = example.com

# 自分が受信するドメイン
mydestination = $myhostname, $mydomain, localhost

# 色々と許可するセグメント。
# 信頼するインターナルやグローバルIPセグメントなどを記述
mynetworks = 127.0.0.1, 192.168.0.0/24
```

Relay噛ます際に注意しなければならないのは
mynetworksが信頼できない場合、Relayするドメインを制限しないと
例えばグローバルIPからNATで受けとるとか、FromのIPアドレスが
内部のIPアドレスに置換されていたりすると、外部からの接続なのに
全て許可したりして、オープンリレーサーバという最高に最低な状態に陥る。

その場合は

```forward_main.cf
# smtpd_recipient_restrictions = permit_mynetworks, reject_unauth_destination
smtpd_recipient_restrictions = reject_unauth_destination
relay_domains = $mydomain
```
として、mynetworksを許可リストから外す必要がある。

reject_unknown_clientについては余裕でDNS引けないクライアントあるので
よしなに設定する。その辺のセキュリティの設定は柔軟に対応しないと
メールの送受信などで揉めることになる(SMTP滅びろ)。

また、mynetworksが信頼できなくて、かつRelayする
ドメインも一意でない場合があるとしたら、設計を考えなおした方が良いと思う。
Emacsを使いこなすために

Emacsを使いこなすための tipsを示します。
人それぞれのものがあると思いますので 1つの意見として
受け取っていただければいいかなと思います。

## 1つの Emacsは終了しないようにしよう
使いこなすためにはやはり長く触っていなくてはいけないと思います. そのためにもなるべく
終了しないようにしましょう. 特にカスタマイズをしだして, いろいろ拡張をインストール
しだすとどうしても起動が遅くなります. それを何回を起動するとなると毎回毎回いらいら
しますし, それを避けるために貴重な機能を削除するなんて発想になってしまうことは
大変もったいないことです.

終了しないためのノウハウを示します.

### 終了コマンドを無効化しよう
何で Emacsを閉じてしまうかというと, 終了コマンドが押しやすいバインドだからです.
`C-x C-c`は保存のコマンドなんかに近いですし, うっかり押してしまう度合いが高すぎ
ます. なんでそんなキーバインドには違うコマンドを割り振ってしまいましょう.

````lisp
;; 好きなコマンドを割り振ろう
(global-set-key (kbd "C-x C-c") 'helm-M-x) ;; 私は helm-M-xにしています

;; C-x C-z(suspend)も変更するのもありでしょう.
(global-set-key (kbd "C-x C-z") 'your-favorite-command)
````

でもさすがに終了できないというのも困ります. `M-x save-buffers-kill-emacs`とすれば
いいんですが, コマンドが長ったらしいので aliasをつけておきましょう.

````lisp
;; I never use C-x C-c
(defalias 'exit 'save-buffers-kill-emacs)
````

これで `M-x exit`で終了できます. `C-x C-x`と比べるとだいぶ面倒になったので,
終了する回数が減ることでしょう.


### emacsclientの活用
1つ Mainとなる Emacsを使おうと言っても, すべてMain Emacsからファイルを開いたり
するのは面倒です. emacsclientを使えば、シェルで操作しているときこのファイルを
mainの Emacsで開くということが簡単にできます。また Main Emacsの設定を引き継ぐ
別 Emacsも起動することができます。


#### サーバ側の設定
serverの設定

````lisp
(require 'server)

(unless (server-running-p) ;; 複数サーバ起動を防ぐ
  (server-start))
````

#### 環境変数 EDITORを emacsclientにする
(Windowsでは違うと思いますが), いろいろな場面でエディタが起動し,
編集を迫られることがあります. Unix系の環境では, だいたいの場合,
環境変数 EDITORに設定されたものが最終的に使われます(GIT用とか
Subversion用とか特化したものを指定していなければ).

````sh
export EDITOR="emacsclient"
````

これで gitのコミットログを書く等で使われるエディタが emacsclientに
なります. ようはそれらがサーバを起動する Mainの Emacsで編集できるように
なるということです.

#### emacsclientに aliasをつけよう
emacsclientなんて打つのが面倒なので, もう 'e'にしちゃいましょう

````sh
alias e='emacsclient'
````

これでとりあえず Emacsで開きたいときは

````sh
 % e ファイル名    # 編集終了を待つ場合
 % e -n ファイル名 # 編集終了を待たない
````

でいけるようになります.

Mainの Emacsで開くだけでなく, 新規にウインドウ(GUI, 非GUI両方)を開いて使うことも
できます. このとき設定等の情報は Mainの Emacsのものを利用するので起動にはほとんど
時間がかかりません. 個人的にあまり使いませんが, 覚えておいて損はないでしょう.

````sh
 % emacsclient -nw ファイル名 # 現在の端末でファイルを開く
 % emacsclient -c  ファイル名 # 新たにフレームを作ってファイルを開く
````


## 'C-M-'のキーに慣れよう
'C-M-'というキーバインドは主に S式の移動・操作に割当たっています. Lisp系の言語を
書いている人であれば, よく利用することでしょう. しかしこれらは Lisp専用のキーバインドでは
ありません. C-M-a, C-M-eは大抵の言語で関数単位の移動に使えますし, C-M-f, C-M-bを
使えばアンダースコアで連結された変数でも一度で移動することができます.
C-M-kはアンダースコアつなぎの変数も消せますし, Lisp系以外の言語でも役立つこと
間違いなしです.


あと `C-M-`バインドは GUI Emacsでなくても使えるキーバインドです. GUI版であれば,
ファンクションキーや Controlキーと特殊なキーの組み合わせが使えますが,
非 GUI環境ではそれらは基本的に使えません. ただでさえキーバインドが少ない
Emacsなので, バインド候補を増やすためにも使い慣れておくとよいでしょう.


## 良いプログラマになることを心がける
個人的に心がけていることです. 三流へぼプログラマである私が言ってもあまり説得力は
ありませんが・・・.

良いプログラマというものは良い道具にこだわり, 良い道具を使っていると思いますが,
良い道具を使ったからって良いプログラマってわけではありません. 結局道具だと
思いますので, そこにだけこだわってしまってはいけないと思います.

他人が絶賛する拡張をインストールしまくるよりは, 自分でたくさんコードを書いて
「これは改善すべきだ」っていう機会をたくさん増やしてそれに応じて, カスタマイズ
していった方が確実に良い Emacsができあがると思います. なんであんまりエディタを
カスタマイズすることに熱を上げず, 良いプログラマになることをまず考えてください.

Enjoy Emacs Life!!
AssetStoreの3Dキャラを改造してみた(ネタ)

Unityの[AssetStore](http://unity3d.com/asset-store/)にある3Dモデルを利用してる人って意外と周りに少ないなと思って、
前に衝動買いした[OldMan](https://www.assetstore.unity3d.com/#/content/3707)([紹介動画](http://www.youtube.com/watch?v=7IyQdlTL8hk&feature=youtu.be))を使って3DキャラAssetの可能性を
広げられたらなって思い、色々いじってみました。

![](http://www.virtualys.fr/preview/540/l194r133m/15_humanoide/55_Buste.jpg)
この老人に生け贄になってもらいます。


#"__[今回改造したおじいさんのデモのリンク](http://dl.dropbox.com/u/26238578/AdventOldMan/AdventOldMan.html)__"

---------------

#やったこと

####__1.GIMPで元Textureの色調彩度を変えた__
![](http://gyazo.com/4a1a2797b2dcd616bb0349e2ecb19340.png?1356002309)
_\ゾンビっぽくなりましたね/_

これを、適用するとこんな感じになります
![](http://gyazo.com/a47f907dd9a4f2ace68177cdb21a0054.png?1356005940)
腕に関しては、肩から下のパーツのScaleを2倍にしてるだけです。


####__2.Animationを自作して追加した__
どのFree,有料の3Dモデルも殆どが共通して以下の箇所にボーンが用意されていますので、
それらボディパーツをUnityのAnimationEditorでちょんちょんしたら割と簡単にキャラのAnimationを追加出来ます。
![](http://gyazo.com/91eda20e7a2a09afb828787d66394970.png?1356003336)
そこをUnityのAnimationEditorで自作します。
デモで再生出来る死ぬアニメーションの様な単純な動きなら容易く作れます。
(idle,walk,run,jump,dieあたりのアニメーションは既に用意されているAssetが多いです)


####__3.身体のパーツを追加した__
キャラを爆弾人間にする為に身体に球体、頭に導火線と火を付けました。
![](http://gyazo.com/e8a5e7f3715a58471e82ba2d472c6cdd.png?1356004795)
球体は胴の子にし、導火線などは頭の子にするなどと、
動きを連動させたい身体のGameObjectの子に配置するといいです。

---------------

#AssetStore産のAsset使用についての補足
AssetStoreのAssetにはLicenseが付いてます。
以下のAssetのDownload画面で、特にLisenceに付いての記述が無ければ
![](http://gyazo.com/c6a3f5df67add5fdfedb94a25b88b94d.png?1356007435)
AssetStoreの[EULA(End User Lisence Agreement)](http://unity3d.com/company/legal/as_terms)ライセンスが適用されます。
英文ですがgoogle翻訳でもニュアンスは解釈できます。
('-')...「あれ、今回の記事はこれの翻訳でよかったんじゃ(ry　でもいいや」

---------------
#さいごに
どうでしょう。
3Dモデリング技術が無くてもゴリ押しではありますが、
既存のモノをこのように自分だけのキャラクターに変化させる事で出来ます。
本当はHashTableやらDictionaryをInspectorに表示させるEditor拡張の記事にするつもりで準備してたら、急に「そんな機能いらなくね？」と気づいて急遽内容を変更しました。
ちなみにこのOldManのAssetは、デフォルトで服の着脱が可能です。
裸体をご覧頂けます。
Cronである処理が終了したら次の処理を実行する


command1が終わった後，command2を実行したい

・ * * * * * command1 && command2

command1とcommand2を並列で走らせた後，command3を実行したい

・ * * * * * (command1 & comand2 & wait) && command3

ワイルドカードのとこは適当に設定
Symfony2でデフォルトの例外ハンドラを追加して管理者にメールを送信する方法


Symfony2でデフォルトの例外ハンドラを追加して、アクションの中で毎回いちいち例外ハンドリング処理を記述しないようにします。

config.yml, parameters.yml, ExceptionListenerクラスを作成します。

## app/config/config.yml
```yaml
acme.exception_listener:
        class: Acme\AppBundle\EventListener\ExceptionListener
        arguments:
            - %admin_emails%
            - @mailer
            - @logger
        tags:
            - { name: kernel.event_listener, event: kernel.exception, method: onKernelException, priority: +255 }
```

## app/config/paramerters.yml
```yaml
parameters:
    mailer_transport:  sendmail
    mailer_host:       localhost
    mailer_user:       ~
    mailer_password:   ~

    admin_emails: ['foo@example.org', 'bar@example.org']
```

## src\Acme\AppBundle\EventListener\ExceptionListener.php

```php
<?php

namespace Acme\AppBundle\EventListener;

use Symfony\Component\HttpKernel\Event\GetResponseForExceptionEvent;
use Symfony\Component\HttpKernel\KernelEvents;
use Symfony\Component\EventDispatcher\EventSubscriberInterface;
use Symfony\Component\HttpFoundation\Response;

use Monolog\Logger;

class ExceptionListener implements EventSubscriberInterface
{
    /**
     * @var array
     */
    private $recipients;

    /**
     * @var \Swift_Mailer
     */
    private $mailer;

    /**
     * @var \Monolog\Logger
     */
    private $logger;

    public function __construct(Array $recipients, \Swift_Mailer $mailer, Logger $logger)
    {
        $this->recipients = $recipients;

        $this->mailer = $mailer;
        $this->logger = $logger;
    }

    public function onKernelException(GetResponseForExceptionEvent $event)
    {
        $e = $event->getException();

        $message = \Swift_Message::newInstance()
          ->setSubject($e->getMessage())
          ->setBody($e->__toString())
          ->setTo($this->recipients)
          ->setFrom("error@example.com");

        try {
            $this->mailer->send($message);
            $this->logger->crit("send exception to administrator");
        } catch (\Exception $e) {
            // oops.. mail send won't work... (in japanese says 万策尽きた! 切腹(seppuku) !)
            $this->logger->crit("!!! EMERGENCY HELP ME !!! We can't notify to a human administrator!");
        }

        $event->setResponse(new Response());

        return false;
    }

    public static function getSubscribedEvents()
    {
        return array(
            KernelEvents::EXCEPTION => array('onKernelException', +255),
        );
    }
}
```


## 参考
http://symfony.com/doc/2.0/cookbook/email/email.html
http://symfony.com/doc/current/cookbook/service_container/event_listener.html
http://symfony.com/doc/2.0/reference/dic_tags.html#kernel-exception
requireJSでの依存関係の書き方

やりたい事：ライブラリ「jquery」を読み込んだ後で「tmpl」を読み込む（依存関係）

リファクタ前
--------
今までは、requireでネストしてた。
問題：依存が深くなるにつれて、名前で依存関係を解消したいと思ってくる。

```require_before.js

require([
    "http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min.js"
],
function() {
    require([
        "http://ajax.aspnetcdn.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js"
        ,"../javascripts/libs/mylib.js"
    ],function(){
       //loaded();
    });
}
);
```

リファクタ後
--------
requireJS pluginがそれに相当するらしい。

**嬉しさ**

1. pathsで名前を付けられて、それで読み込み定義出来ること（define)
2. shimによりその名前で依存関係を書ける事(shim)
3. baseUrlを基底として、pathsのライブラリがロードされること。地味に便利

```require_after.js

requirejs.config({
    shim: {
     'jquery.tmpl': ['jquery']
    },
    baseUrl : '../javascripts/libs',
    paths : {
        jquery : 'http://ajax.googleapis.com/ajax/libs/jquery/1.8.3/jquery.min'
        ,'jquery.tmpl' : 'http://ajax.aspnetcdn.com/ajax/jquery.templates/beta1/jquery.tmpl.min.js'
        mylibs : 'mylib'  // load "../javascripts/libs/mylib.js"
    }
});

define([ 'jquery','jquery.tmpl'], function() {
    alert($);
});

```
xml builderを利用したテンプレートをrenderで指定する方法



xml.builder用のテンプレートを用意していて
次のように指定していると....

```
render 'create.xml.builder'
```

次みたいにdeprecationが表示される

```
DEPRECATION WARNING: Passing a template handler in the template name is deprecated. You can simply remove the handler name or pass render :handlers => [:builder] instead.
```

こういうふうに書き換える

```
 render :handlers => :builder, :formats => :xml
```

アクション名と異なっているとき

```
 render :create_xml , :handlers => :builder, :formats => :xml
```
package.json の scripts


start, test など決められたものは `npm start` などで実行できます。詳細は [npm のドキュメント](https://npmjs.org/doc/scripts.html) を参照のこと。

その他のものを定義した場合は `npm run foo` で実行します。

この際 dependencies や devDependencies に入っているモジュールの bin は、自動的に PATH に入ります。

そのため

```json:package.json
{
  "scripts": {
    "test": "node_modules/.bin/mocha"
  },
  "devDependencies": {
    "mocha": "~1.7.4"
  }
}
```

でなく

```json:
{
  "scripts": {
    "test": "mocha"
  },
  "devDependencies": {
    "mocha": "~1.7.4"
  }
}
```

と書けます。
特定のクラスが別のクラスを継承しているか判定する方法


例えばAクラスがBクラスを継承しているかどうかを調べるには、Class moduleのマニュアルにあるように比較演算子が使える。

http://doc.ruby-lang.org/ja/1.9.3/class/Module.html

### 継承している場合 => trueが返ってくる
trueが返ってくる

```ruby
A < B # => true
```

### 逆にBをAクラスが継承している場合、AとBが同じクラスの場合 => falseが返ってくる

```ruby
A < B # => true
```

### AとBが全く継承関係にない場合 => nilが返る

```ruby:
A < B # => nil
```

### 追記

でも同じ事するならこっちの方が意図が伝わりやすいよね。っと@nappaからツッコミがあったのでメモ。

```ruby:
Integer.ancestors.include?(Numeric)
```
FakerとFFakerの比較


Rubyのテスト時に使ったりする偽データ生成ライブラリにfakerというのがあるのですが、このfaker、じつはfast fakerという実装があり、こちらの方が高速と言われています。

気になったので雑に計測してみました。

	def bench1000
      start = Time.now  
      1000.times{yield}
      finish = Time.now  
      puts "Time: #{(finish - start).to_f}"  
	end

とりあえず1000回で計測してみた。
	
	require 'faker'
	bench1000{Faker::Name.name}
	# => Time: 0.186539

ffaker
	
	require 'ffaker'
	bench1000{Faker::Name.name}
	# => Time: 0.009986

雑な計測ですが、明らかに早いですね、ffaker。
plistファイルをバイナリ化して読み込みを高速化する

Objective-cと相性の良いplistですが、大きなサイズのplist（たとえばバイナリデータが入っている）
等の場合、バイナリ化を行うと読み込み速度・ファイルサイズに劇的な向上が見られる場合があります。
私のケースの場合はファイルサイズは半分・速度は３倍くらいになりました。

変換はターミナルから
plutil -convert binary1 [ファイル名]

一気にやるには、
find . -regex ".*\.plist$"  -exec plutil -convert binary1 {} \;
※plistの拡張子を持つファイルをすべてバイナリ化
OSX+tmux+vim環境でクリップボードを使う


## tmuxの設定

```~/.tmux.conf
#### CLIPBORD ####
bind y run-shell 'tmux save-buffer - | reattach-to-user-namespace pbcopy'
```

## vim

### システム標準のvimをmacvimのバイナリに置き換える

brew コマンドで `--override-system-vim` オプション付きでインストールする

```bash:
brew install macvim --override-system-vim
```

するとvimが/usr/local/binにインストールされるので、PATH環境変数が /usr/bin より先に /usr/local/bin を参照するようになっていれば、macvim のバイナリが使用される。

### .vimrcの修正

```
set clipboard=unnamed
```

を追加

と、やったが `"*Y`でコピーできていないっぽい… あとで調べる。
CoffeeScript（またはJavaScript）で、なんか関数が動いてないなーというときに疑うべき点 

### クラスのメソッドの書き方が間違っている？

#### まちがい

普通の関数表記になっている

![](http://farm9.staticflickr.com/8504/8290244600_18e7de12ec.jpg)

クラスのメソッドの書き方にする

#### 正しい

![](http://farm9.staticflickr.com/8503/8290244538_b81094852b.jpg)

### 関数名に「()」が付いていない？

#### まちがい

「putImage」は関数名なのでダメ

![](http://farm9.staticflickr.com/8496/8289184917_cac6763abb.jpg)

#### 正しい

![](http://farm9.staticflickr.com/8363/8289184829_6d795676b6.jpg)

### 途中で処理が異常終了している？

#### まちがい

実はjQuery UIが入っていないため「.button」で処理が止まっている
![](http://farm9.staticflickr.com/8075/8290328054_0efcb34ea3.jpg)

#### 正しい

![](http://farm9.staticflickr.com/8501/8289268655_7ce813ce32.jpg)

### @（this）がすり替わってしまっている？

#### まちがい

`AppViewModel`クラスの`@trigger`メンバの中で@（this）を参照している。このままでは、これは`AppViewModel`オブジェクトをささない。
![](http://farm9.staticflickr.com/8352/8292703197_86a86ec4f2.jpg)

#### 正しい

`->`を`=>`にしてやると動く。
![](http://farm9.staticflickr.com/8223/8293758202_7eaa8587ac.jpg)

### クラスをexportしていない？

#### まちがい

![](http://farm9.staticflickr.com/8501/8306482270_db5832d160.jpg)

#### 正しい

![](http://farm9.staticflickr.com/8080/8305446265_e71b2a597d.jpg)


-----
ブログやってます：[PAPA-tronix !](http://weed.cocolog-nifty.com/wzero3es/)
git での改行コード


まず、前提としてレポジトリに 入れるのは LF のみが良いようです。

`core.autocrlf` という git の global オプションで改行コードの自動変換を設定できます。

- `true`: コミット時に CRLF -> LF。チェックアウト時に LF -> CRLF。
- `input`: コミット時にのみ CRLF -> LF に変換。[Windows の場合のみ `true` と同じ。](http://git-scm.com/book/ja/ch7-1.html)
- `false`: 変換しない。

では、自動変換をするべきか？

## する派

Windows, Mac, Linux で以下の設定。

```bash:設定を追加
git config --global core.autocrlf input
git config --global core.safecrlf true
```

`core.safecrlf` は、改行コードが混在している場合は変換しないというオプション。

## しない派

ツールの設定をすれば、自動変換は必要ない。バイナリ等、いろいろな問題の原因になるため。

## ファイルの種類ごと派

.gitattributes で設定する。共同開発者の global 設定に左右されない。

## その他

たまに改行コードが `^M`（CR のみ）になり、diff で全てのコードが一行になってしまうことがあります。これは自動変換してくれないので、手動で直しましょう。

## 参考
- [git-config(1) Manual Page](http://www.kernel.org/pub/software/scm/git/docs/git-config.html)
- [Dealing with line endings &middot; github:help](https://help.github.com/articles/dealing-with-line-endings)
RVM で Ruby をインストール@Linux Mint 14

Linux Mint 14 (Ubuntu 12.10相当)で RVM をインストールしようとしたところ、また色々ハマったので覚え書き。

1年前にも[同じようにハマった記憶](https://github.com/wayneeseguin/rvm/issues/614#issuecomment-3173126)があったんですが、Linux や RVM のバージョンが新しくなるたびに最適解が変わるようなので、今回は Qiita に書き置きしておきます。

```sh:まずはaptでネイティブライブラリの環境を整える
$ sudo apt-get install curl openssl automake zlib1g-dev libxml2-dev libxslt1-dev libyaml-dev libreadline-dev libncurses5-dev
```

```sh:普通にRVMをインストール
$ curl -L https://get.rvm.io | bash -s stable
```

```sh:Ruby本体の前にパッケージを入れておく
$ rvm pkg install openssl
$ rvm pkg install autoconf --verify-downloads 1
$ rvm pkg install zlib --verify-downloads 1
$ rvm pkg install libxml2 --verify-downloads 1
$ rvm pkg install libyaml
$ rvm pkg install iconv
```

```sh:Rubyのインストール
$ rvm install 1.9.3 -C "--with-readline=/usr/lib/x86_64-linux-gnu,--enable-shared=true,--with-opt-dir=$HOME/.rvm/usr"
$ rvm use 1.9.3 --default
```

パッケージで Readline を入れてダイナミックリンクにすると、なぜかどうやってもコンパイル中に「‘username_completion_function’ undeclared」と怒られて失敗してしまうので、Readline だけは Linux 標準のものを静的にリンクするようにします。
invalid contextの場所を特定する

<Error>: CGContextSaveGState: invalid context 0x0
<Error>: CGContextSetCompositeOperation: invalid context 0x0
<Error>: CGContextFillRects: invalid context 0x0
<Error>: CGContextRestoreGState: invalid context 0x0
<Error>: CGContextSetBlendMode: invalid context 0x0
<Error>: CGContextDrawImage: invalid context 0x0
<Error>: CGBitmapContextCreateImage: invalid context 0x0
<Error>: CGContextSaveGState: invalid context 0x0
<Error>: CGContextSetCompositeOperation: invalid context 0x0
<Error>: CGContextFillRects: invalid context 0x0
<Error>: CGContextRestoreGState: invalid context 0x0
<Error>: CGContextSetBlendMode: invalid context 0x0
<Error>: CGContextSetInterpolationQuality: invalid context 0x0
<Error>: CGContextDrawImage: invalid context 0x0
・・・
とずら〜とでてきて、その場所が特定できずに途方に暮れた経験はありませんか？
私はあります。

どうやらこれはブレークポイントを仕掛けることが可能のようです。
xCode左のナビゲーションエディタを、ブレークポイントのタブに切り替えて、
左下の+ボタンを押して、add symbolic breakpointを選びます
そしてSymbolに、CGPostErrorと入力してdone.
これだけです。

あと実行すればきっとエラー個所でブレークします。

今回の例では、
あとはpoデバッガコマンドを使って、コンテキストのwidth,heightを調べたら0になってましたとさ。めでたしめでたし。
Amazon S3のクライアント

=======================

Node.jsでAmazon [S3](http://aws.amazon.com/s3/)のクライアントを作りました。
Pythonの[s3cmd](https://github.com/s3tools/s3cmd)でも[RiakCS](http://basho.co.jp/products/riakcs/)などの互換サービスに使えますが
S3の色が強いので、`Location`や`Bucket`などの入出力を調整してスッキリとさせています。


* [s3cli on GitHub](https://github.com/ogom/node-s3cli)


# 特徴
`s3cmd`とコマンドは類似していますが一部で動きが違います。
また、S3の基本的な機能のみを実装しています。
(RiakCSがサポートしている機能は実装する予定です。)

S3はバケットにオブジェクトがあると削除できないのでバケット内の
オブジェクトを削除してからバケットを削除する`rb -R`のオプションが便利です。


# インストール

```
$ npm install s3cli -g
```


# 使い方

## コンフィグレーション
接続に成功すると`Successful configuration`が表示されます。

```
$ s3cli init
```


## バケットの作成
バケットがサブドメインになります。
Amazon S3でバケットが`bucket001`だと
`bucket001.s3.amazonaws.com`がドメインです。

```
$ s3cli mb bucket001
Bucket 'bucket001' created
$ s3cli use bucket001
use bucket001
```

## オブジェクトの作成
S3はKVS(キーバリューストア)の形式で格納されます。
このコマンドではキーに`key001`がバリューに`value001`で登録されます。

```
$ s3cli set key001 value001
Object 'bucket001/key001' created
```

## オブジェクトの確認
キーを指定すると登録されたバリューが表示されます。

```
$ s3cli get key001
value001
```


## バケットとオブジェクトの一覧
バケットの一覧は`lb`(リストバケット)です。
オブジェクトの一覧は`ls`(リスト)です。
**(ここはs`3cmd`と違うので注意してください)**

デフォルトではテーブルスタイルで表示されます。
(オプションに`-e`でJSON、`-r`はXMLで表示されます。)

```
$ s3cli lb
┌───────────┬──────────────────────────┐
│ name      │ creationdate             │
├───────────┼──────────────────────────┤
│ bucket001 │ 2012-12-12T12:12:12.000Z │
└───────────┴──────────────────────────┘
$ s3cli ls
┌────────┬──────────────────────────┬──────┬──────────────┐
│ key    │ lastmodified             │ size │ storageclass │
├────────┼──────────────────────────┼──────┼──────────────┤
│ key001 │ 2012-12-12T12:12:12.000Z │ 8    │ STANDARD     │
└────────┴──────────────────────────┴──────┴──────────────┘
```


# Tips
S3はDropboxでも使われているように
ファイルをインターネットで公開することができます。

## ファイルのアップロード
画像もテキストもアップロードできます。
(オプションの`-P`でパブリックに公開されます。)

```
$ s3cli push -P file001.jpg ./file.jpg
File 'bucket001/file001.jpg' created
```

## ファイルのダウンロード
ダウンロードしても内容は同じです。

```
$ s3cli pull file001.jpg ./file001.jpg
File 'bucket001/file001.jpg' saved
$ ls -l file*
-rw-r--r--  1 user  staff  2140 12 12 12:12 file.jpg
-rw-r--r--  1 user  staff  2140 12 12 12:22 file001.jpg
$ openssl md5 file.jpg 
MD5(file.jpg)= 93aa8514b480b21c2f8c2535ccf33f0c
$ openssl md5 file001.jpg
MD5(file001.jpg)= 93aa8514b480b21c2f8c2535ccf33f0c
```

## ブラウザで確認
パブリックのオプションを付けているので画像が公開されています。

```
$ s3cli info file001.jpg
URL: http://bucket001.s3.amazonaws.com/file001
$ open http://bucket001.s3.amazonaws.com/file001
```


# Node Module

Node.jsで`require`するとプログラムからクライアントを利用できます。
DropboxのようなサービスをNode.jsで作ることができます。
ボタンのクリックをエミュレートする

## Vimperatorでボタンクリックをエミュレートする

もっと直接的な方法が用意されてる気もするけど・・・

#### 2012.12.21 追記
buffer.followLinkでできるよって教えてもらいました。
あと、node.click()よりもDOMEvent使うべきってつっこみももらいました。
ありがとうございます。

### (追記) buffer.followLinkを使うパターン
教えてもらった、buffer.followLinkを使うパターンです。
これならjquery-loaderをインストールする必要もないですね。

```vim:.vimperatorrc
map ;te :js buffer.followLink(content.document.querySelector("form#modifypage").querySelector("input[type=submit]"), liberator.CURRENT_TAB)<CR>
```

### 1. jquery-loaderプラグインをインストールする
https://github.com/vimpr/vimperator-plugins/blob/master/jquery-loader.js
このjquery-loader.js を ./vimperator/plugin に置いて、.vimperatorrcにjquery.js へのパスを指定する。

```vim:.vimperatorrc
let g:jquery_filepath = "jquery.jsのパス"
```

### 2. 押したいボタンに応じて、.vimperatorrc に定義を追加する

mapでjavascriptコマンド呼ぶか

```vim:.vimperatorrc
map ;te :javascript jQuery.core("form#modifypage").find("input[type=submit]")[0].click()<CR>
```

もうちょっと丁寧にコマンドを定義するか

[2012.12.21 編集]
DOMEvent使うべきってつっこみをもらったので、 書きなおしました。

```vim:.vimperatorrc
javascript << EOS
commands.addUserCommand(['trace[dit]'], '[Trac] Enter wiki editor', 
    function () {
        let nodes = jQuery.core("form#modifypage").find("input[type=submit]");
        if (nodes.length != 1)
            return;
        let evt = document.createEvent("MouseEvents");
        evt.initMouseEvent("click", true, true, window, 0, 0, 0, 0, 0,
                           false, false, false, false, 0, null);
        nodes[0].dispatchEvent(evt);
    }
);
EOS
```
ちなみにこれはTracのWikiで「このページを編集」ボタンを押すための設定。

### 3. サイトを制限する
これだと対象じゃないサイトでも動いてしまうけど、ちゃんと目的のサイトでだけ動くようにしたいなら `autocmd LocatioChange` と組み合わせればいいかな。

```vim:.vimperatorc
" 127.0.0.1:5000/trac にいるときだけ is_tracをtrueにする
autocmd LocationChange .* :js var is_trac = false
autocmd LocationChange 127\.0\.0\.1\:5000\/trac.* :js var is_trac = true

javascript << EOS
commands.addUserCommand(['trace[dit]'], '[Trac] Enter wiki editor', 
    function () {
        if (!is_trac) return;
        // 以下略                  
    }
);
EOS
```
Windows のコマンドプロンプトでメタ文字のエスケープ

Windows のコマンドプロンプトで例えば `<winresrc.h>` という文字を echo したい場合・・・

	echo "#include <winresrc.h>"

としたのでは `"#include <winresrc.h>"` と表示されてしまい意図通りになりません。
次のようにすると意図した通りに echo されます。

	echo #include ^<winresrc.h^>

キャレット `^` がメタ文字のエスケープになっているようです。

同様に、次のように行の終端にキャレットを置けば複数行で１つのコマンド行にすることが出来ます。

	configure --enable-snapshot-build ^
	  --enable-debug-pack ^
	  --disable-zts ^
	  --disable-calendar ^
	  --enable-object-out-dir=~obj

## 気づいたきっかけ

コマンドプロンプトで `git reset --hard HEAD^` と打った時に `More?` とか出てきたので。

普段 Windows でも bash を使っていたので全く気づきませんでした。
線形反復でエラトステネスのふるい

```

#include <stdio.h>

#define N 1000

void init_buffer(int buffer[], int iteration)
{
    if(iteration < N)
    {
        buffer[iteration] = iteration;
        init_buffer(buffer, iteration + 1);
    }
}
void remove_mul(int buffer[], int iteration, int n)
{
    if(iteration < N)
    {
        buffer[iteration] = -1;
        remove_mul(buffer, iteration + n, n);
    }
}
void remove_prime(int buffer[], int iteration)
{
    if(iteration <= (int)sqrt(N))
    {
        remove_mul(buffer, iteration * 2, iteration);
        remove_prime(buffer, iteration + 1);
    }
}
void print_prime(int buffer[], int iteration)
{
    if(iteration < N)
    {
        if(buffer[iteration] != -1)
        {
            printf("%d\n", buffer[iteration]);
        }
        print_prime(buffer, iteration + 1);
    }
}
int main(int argc, const char * argv[])
{
    int buffer[N];
    init_buffer(buffer, 0);
    remove_prime(buffer, 2);
    print_prime(buffer, 2);
    
    return 0;
}

```
脳がまだ慣れていません。sqrtの呼び出し回数とか減らしたいですね
rbenv & ruby-build の使い方メモ


複数バージョンのRubyを管理をするためのツールとして``rbenv + ruby-build``の組み合わせは大分ポピュラーになってきました。

備忘録としてよく使うコマンドをまとめてみました。

## セットアップ

OSX + homebrew だったら以下の記事がおすすめ。

* [OS X で rbenv を使って ruby 1.9.3 の環境を作る](http://qiita.com/items/9dd797f42e7bea674705)

## よく使うコマンド(インストール編)

OSXに入れる時は``CONFIGURE_OPTS``の設定を忘れないようにしましょう。

```shell
# インストール可能な一覧セットを得る
$ rbenv install
1.9.2-p290
1.9.3-p327
.
.

# インストール

## 基本
$ rbenv install 1.9.3-p327

## OSX向け、readlineやopensslをhomebrew経由で入れたものを使う
$ brew install readline openssl
$ CONFIGURE_OPTS="--with-readline-dir=$(brew --prefix readline) --with-openssl-dir=$(brew --prefix openssl)" rbenv install 1.9.3-p286
```

## Rubyの切り替え

```shell
# 1.9.3-p327に切り替え
$ rbenv global 1.9.3-p327

# システムのデフォルトrubyに戻す
$ rbenv global system

# 特定のディレクトリ以下のRubyバージョンを切り替え
$ rbenv local 1.9.3-p327

# ローカル設定を解除
$ rbenv local --unset

```

## メンテナンス

特に ``rbenv rehash`` はよく使うので覚えておきましょう。
``rvm``では不要なコマンドなので忘れがちです。

```shelll
# インストールしたrubyやgemのパスを通す
$ rbenv rehash

# インストール済みのRuby一覧を見る
$ rbenv versions

```

## アップデート

```shell
# rbenv install の一覧を更新する
$ brew upgrade ruby-build
```

他にもよく使う物があればコメント等でご指摘下さい！
Ember.js データバインディング機能付きのカスタムヘルパの作り方

[先日](http://qiita.com/items/041a3d598182c3fad13a)カスタムヘルパの作り方を説明したんですが、書いてる時に気づいたことがあって、

「あれ、カスタムヘルパってデータバインディング使えなくね？」

と。
でもまあEmber.jsだし、中でうまいことやってるんじゃないか、と根拠無く考えてたんですが、先日 [データバインディング機能付きのカスタムヘルパ作成メソッドがPull Request取り込まれてました](https://github.com/emberjs/ember.js/pull/1274#issuecomment-11361120)。これ使えばデータバインディング機能付きのカスタムヘルパを作れます。

1.0.0-pre.2ではまだ使えないのですが、次のリリースでは使えるようになっていると思います。

以下、カスタムヘルパの実装方法です。

```coffeescript
Ember.Handlebars.registerBoundHelper('highlight', ((value) ->
  return new Handlebars.SafeString('<span class="highlight">' + value + '</span>')
))
```

先日は Handlebars.registerHelperを使ったんですが、Ember.Handlebars.registerBoundHelperは、コールバック関数の引数が違うみたいなので注意してください。

以下のように使います。

```html
{{highlight name}}
```

このカスタムヘルパは、nameの値が更新されると、表示も自動で更新されます。

```html
<span class="highlight">Peter</span>
```

Ember.Handlebars.registerBoundHelper便利！

![Great](https://f.cloud.github.com/assets/707005/13614/92326b44-460c-11e2-9841-b8fbe5af6d88.gif)
historyコマンドの履歴を増やし、実行時刻を表示する


~/.bash_profile に、以下の記述を追記します。

```bash
export HISTSIZE=1000
export HISTTIMEFORMAT="%Y-%m-%d %T "
```

あとは、ログインしなおすか、以下のコマンドを実行します。

```bash
. .bash_profile
```

history コマンドを叩くと、実施時刻が表示されます。
zaw-cdrで helm.el(anything.el)っぽくにディレクトリ移動をする

ディレクトリ移動って当然頻繁に行うので簡単に行いたいですよね。
長いパスなんていちいち打っていられません。zshではそれらを簡潔に
行うための仕組みが何個もあり、この advent calendarでも多々紹介
されています。

私が紹介するのは zaw-cdrです。これは cdrコマンドを zawインタフェースで
利用するもので、対象の絞り込みが簡単に行えるようになります。若干癖は
ありますが、Emacsの anything.elや helm.elに慣れている人であればすぐに
慣れることでしょう。

またディレクトリ移動に関する拙作の zaw pluginも紹介しています。
ぜひご覧ください

[http://d.hatena.ne.jp/syohex/20121219/1355925874](http://d.hatena.ne.jp/syohex/20121219/1355925874)
Chosen-railsで、初期状態（デフォルト）を設定する方法



[Chosen](http://harvesthq.github.com/chosen/)はセレクトボックスをかっこよくしてくれる。

Railsのために[chosen-rails](https://github.com/tsechingho/chosen-rails)というgemもある。[Railscasts](http://railscasts.com/episodes/258-token-fields-revised)にわかりやすいスクリーンキャストがある。

## 問題

current_user.storiesの中からstoryを選択し、そのidをnext_story_idに入れるというセレクトボックスを作ろうとして、_form.html.erbに

``` _form.html.erb
<%= f.collection_select :next_story_id, current_user.stories, :id, :title %>
```

というviewのhtml.erbを書いたのだが、chosenはデフォルトで、最初に登場する選択肢（current_user.storiesで一番idが小さいやつ）を選んだ状態になってしまう。さらに、編集して保存したあと、もういちど編集しようとすると、editページに来たとき、selectはデフォルトで、やはり最初に登場する選択肢を選んだ状態になってしまう。


## 解決策

collection_selectメソッドを使わずに、options_from_collection_for_selectメソッドを使って、

```_form.html.erb
<select name="story[next_story_id]" id="story_next_story_id">
    <option value="">なし</option>
    <%= options_from_collection_for_select current_user.stories, :id, :title, @story.next_story_id || ""  %>
</select>
```
としたらうまくいった。デフォルトではvalue=""の「なし」を選択した状態だし、もしすでに@story.next_story_idがある場合、それを選択した状態になる。ちなみにCoffeeScriptは

```coffeescript:story.js.coffee
  $('#story_next_story_id').chosen()
```
と書いておいた。
コントローラーからヘルパーメソッドを呼ぶ

`view_context` を使えば呼べるらしい。知らなかった。

```
view_context.helper_method
```


コントローラーからhelperメソッド呼びたいときは今まで
`self.class.helpers.helper_method`って書いていた。

でもこの方法だと、ヘルパーメソッドの中で
「コントローラーをレシーバとするメソッド（`params`とか`*_path`とか）」
を呼んでいた場合にエラーになる。

今までは泣く泣くhelperをインクルードしたり、DRYを崩したりしていたので解決して嬉しい。

参考: http://qa.atmarkit.co.jp/q/96
1行で iOS バージョン判定できる便利マクロ

下記のようにマクロを定義しておけば、

    #define SYSTEM_VERSION_LESS_THAN(v) ([[[UIDevice currentDevice] systemVersion] \
    compare:v options:NSNumericSearch] == NSOrderedAscending)

こんな感じで1行でバージョン判定できて便利です。

    if (SYSTEM_VERSION_LESS_THAN(@"6.0"))
    {
        // ios 5.x and below
    }
    else
    {
        // ios 6.0 and above
    }

普通の実装をマクロで定義しただけですが・・・
Google Map API  KMLデータの読み込み

```html
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false&hl=ja"></script>
<script type="text/javascript">
  function initialize() {
    var initPos = new google.maps.LatLng(36.3219088, 139.0032936);
    var myOptions = {
      noClear : true,
      center : initPos,
      zoom : 12,
      mapTypeId : google.maps.MapTypeId.ROADMAP
    };
    var map_canvas = new google.maps.Map(document.getElementById("map_canvas"), myOptions);
     
    var kmlUrl = "http://<ホスト名>/hoge.kml"; //KMLファイルの読み込み
    var kmlLayer = new google.maps.KmlLayer(kmlUrl, {preserveViewport:true});
    kmlLayer.setMap(map_canvas);
         
  }
</script>
</head>
<body onload="initialize()">
  <div id="map_canvas" style="width:100%; height:100%"></div>
</body>
</html>
```
[Google Map上に学校区情報（国土数値情報）を表示する](http://shimz.me/blog/map/2135)
Objective-C で Tween とイージング

iOS SDK でアニメーションする場合は UIView animation 系メソッドを使うとか、
Mac でも CALayer を使うとか、色々選択肢があると思います。

始まりの値と終わりの値から途中の値を自動的に算出する Tween を使ってみませんか？
1/60 秒ごとに一回呼び出されるコールバックで、その時その時の値を取り出し、UIView.frame に代入したり、 CATransform に使ったり、alpha にしたり、NSString へ変換してスロットっぽい演出に使ったり、3D 座標空間での値の計算に使ったり、何にでも使えます。


####というわけで Flasher にはおなじみの Tween 系ライブラリです。
イージングも一通り用意してあります。

普段使っているオレオレ Tween ライブラリを、
Objective-C プログラマーの皆様へクリスマスプレゼントにしようと思います。


[github](https://github.com/feb19/Value-Tween-Library-for-Objective-C) にプロジェクト一式をアップしました。

ただ書き方がイマイチスマートじゃなくて、
`NSInvocation` とか使ったらもっとコードを綺麗にと出来ないかなとかありますね。
PushRequest とか頂けたらと思います。（それが僕へのクリスマスプレゼント！）

P.S. 個人ブログにもこのライブラリについての内容を書きました。
こことは違うことを書いていますのでよろしければご覧下さい。
[feb19.jp blog - Objective-C で Tween ライブラリ作ったよ！](http://feb19.jp/blog/archives/000254.php)


## 使い方

####1. ご自身のプロジェクトに `QuartzCore.framework` をリンクしてください。

####2. ご自身のプロジェクトに `Tween.h/.m TweenObject.h/m` をコピーしてください。 

####3. Tween を実行するクラスに `Tween.h と TweenObject.h` をインポートしてください。

```objective-c
#import "Tween.h"
#import "TweenObject.h"
```

####4. Tween を実行するタイミングで以下のメソッドを叩いてください。

```objective-c
[Tween addTween:self tweenId:0  startValue:10 endValue:290 time:2 delay:0 easing:@"easeNone" startSEL:nil updateSEL:@selector(update:) endSEL:@selector(end:)];
```

startValue が開始時の値、endValue が終了時の値、time が Tween にかかる時間、delay が Tween が始まるまでの待機時間です。
easing の部分を `@"easeInOutQuint"` や `@"easeOutBack"` とかに変えると楽しいかもしれません。
Tween が開始されると、それぞれセレクターが呼び出され、開始時は startSEL、実行中は updateSEL、終了時は endSEL が呼び出されます。

####5. コールバックを実装してください。

4 と同じ書き方であれば、`update:(TweenObject *)tween` や、`end:(TweenObject *)tween` が呼び出されるので、そこで `tween.currentValue` を拾って何か値にしてやってください。

```objective-c
self.view.frame  = CGRectMake(tween.currentValue,  0,20,20);
```

4 で `tweenId` を指定していれば、コールバックで Tween を見分けることが出来ます。詳しくは github の ViewController.m をご覧ください。


## Merry Christmas!

あまりにも些細ですが・・・こんなクリスマスプレゼントはいかがでしょうか。w
メリークリスマス！
LLVM+ClangをmakeするときデフォルトではRelease modeにならない

メモとして残しておく。
デフォルトではDebug+Asserts modeになっている。
configureする時に --enable-optimized オプションを付けるとRelease modeになる。
Debug+Asserts modeは動作が遅いように感じるので特に問題なければRelease modeでmakeすることをすすめる。
UIButton の setImage: forState: は論理和で指定できる

```objc

[button setImage:[UIImage imageNamed:@"normal.png"] forState:UIControlStateNormal];
[button setImage:[UIImage imageNamed:@"highlighted.png"] forState:UIControlStateHighlighted];
[button setImage:[UIImage imageNamed:@"selected.png"] forState:UIControlStateSelected];
[button setImage:[UIImage imageNamed:@"selected-highlighted.png"] forState:UIControlStateSelected | UIControlStateHighlighted];

```

Selected - Highlighted
を指定したいときに使える
session store に Redis を使う


あらかじめ`brew install redis` などで Redis をインストールしておく。

### Gemfile

```
gem 'redis-rails'
```

### config/initializers/session_store.rb

以下のような記述に変更する

```
RailsGameServer::Application.config.session_store :redis_store, :servers => { :host => "localhost", :port => 6379, :namespace => "sessions" }
```

ホスト名、ポートは適宜変更する。

### 保存されている内容の確認

`redis-cli` を起動して

```
> keys sessions*
```

とすると、保存されているキーが確認できる。さらに、

```
> get sessions:xxxxxxxxx <-上記で確認したキーの値とする
```

とすると、その内容を確認できる。

## 参考
- [redis-store/redis-rails at master · jodosha/redis-store · GitHub](https://github.com/jodosha/redis-store/tree/master/redis-rails)
- [Frameworks Configuration · jodosha/redis-store Wiki · GitHub](https://github.com/jodosha/redis-store/wiki/Frameworks-Configuration)
カスタムUIActivityの実装手順

カスタムUIActivityの実装手順です。

##サンプルコード
サンプルコードのリポジトリはこちら。  

[SHNakamapActivity](https://github.com/shu223/SHNakamapActivity)

グループチャットサービス『ナカマップ』の UIActivity です。


##実装手順
###1. アイコンを用意する
周囲を透過にする必要があります。透過にしないとどうなるか、どんな画像を用意すればよいかは、[こちらの記事](http://hirakiuc.blogspot.jp/2012/09/uiactivity.html)が画像付きでわかりやすいです。

サイズは

- 43x43
- 86x86
- 55x55
- 110x110

の4種類入れておきます。

###2. UIActivity を継承したクラスを新規作成
UIActivity を継承したクラスを新規作成します。今回はヘッダファイルは新規作成時のままとくにいじりません。


###3. UIActivityのメソッドをオーバーライド
下記を参考に、サービス／アプリに合わせてよしなにオーバーライドします。

    - (NSString *)activityType {
        return @"com.kayac.nakamap";
    }
    
    - (UIImage *)activityImage {
        return [UIImage imageNamed:@"NakamapActivityIcon.png"];
    }
    
    - (NSString *)activityTitle {
        return @"Nakamap";
    }
    
    - (BOOL)canPerformWithActivityItems:(NSArray *)activityItems {
        for (id activityItem in activityItems) {
            if ([activityItem isKindOfClass:[NSString class]]) {
                return YES;
            }
        }
        return NO;
    }
    
    - (void)prepareWithActivityItems:(NSArray *)activityItems {
        for (id activityItem in activityItems) {
            if ([self openNakamapWithItem:activityItem]) {
                break;
            }
        }
    }


###4. 連携処理を実装
サービス／アプリとの連携処理を実装します。サービスならAPI、アプリならURL Schemeを呼びます。（アプリ内のフレームワークとかを呼び出すUIActivityもあります）

SHNakamapActivity では、prepareWithActivityItems: で呼んでいる openNakamapWithItem: のところで、ナカマップのチャット用 URL Schemeをたたいています。

    - (BOOL)openNakamapWithItem:(id)item {
        NSURL *url = [NSURL URLWithString:@"nakamap://chat"];
        NSString *urlStrWithItem = [NSString stringWithFormat:@"nakamap://chat?message=%@", item];
        NSURL *urlWithItem = [NSURL URLWithString:urlStrWithItem];
        [[UIApplication sharedApplication] openURL:urlWithItem];
        return YES;
    }

（上記コードは簡単化のため各種チェック処理は省いています）

以上でできあがり！

##呼び出し側の実装
参考までに、呼び出し側のコードはこんな感じです。

    SHNakamapActivity *nakamapActivity = [[SHNakamapActivity alloc] init];
    UIActivityViewController *activityView = [[UIActivityViewController alloc] initWithActivityItems:@[@"投稿テキスト"]
                                                                               applicationActivities:@[nakamapActivity]];
    [self presentViewController:activityView animated:YES completion:nil];

##カスタムUIActivityをまとめたリポジトリ
Dropbox、Instagram、LINEといった著名サービスの UIActivity は、すでにちらほら Github で公開されはじめているので、それらを集めたリポジトリをつくりました。詳細は下記記事をご覧ください。

[たった1行でWebサービスと連携！UIActivity のまとめリポジトリをつくりました](http://d.hatena.ne.jp/shu223/20121127/1354017518)


##その他のiOS6の機能
iOS 6 には UIActivity 以外にもイノベーティブな新機能がたくさんあります。そんな iOS6新機能のサンプルコード／ライブラリをまとめた記事がこちら。

[iOS 6 新機能のサンプルコード／ライブラリのまとめ22個](http://d.hatena.ne.jp/shu223/20120923/1348355900)
OpenCVで処理時間を計測する


開発中は処理時間を意識するかと思いますが、OpenCVを使っている場合に処理時間を計測する方法をメモ。

以下のようにしていつも測定しています。

	double cvstart = static_cast<double>(cvGetTickCount());
	
	/* Do something you would like to measure*/
	
	double cvend = static_cast<double>(cvGetTickCount());
    printf("processing time %f sec \n", (cvend - cvstart)/(1000000*cvGetTickFrequency()));
apt で unpacked なパッケージを正常にインストールする

`aptitude search libc6` とかすると、左側に flag がついて検索結果が表示されます。たいてい `i` (installed) か `p` (purged) になっています。

```shell
uda@host$ aptitude search libc6
i   libc6           - 組込用 GNU C ライブラリ: 共有ライブラリ
p   libc6-dbg       - 組込用 GNU C ライブラリ: 分離したデバッグシンボル
i A libc6-dev       - 組込用 GNU C ライブラリ: 開発用ライブラリおよびヘッダファイル
p   libc6-dev-i386  - Embedded GNU C Library: 32-bit development libraries for AMD64
c   libc6-i386      - 組込用 GNU C ライブラリ: AMD64 用 32 ビット共有ライブラリ
p   libc6-pic       - Embedded GNU C Library: PIC archive library
p   libc6-prof      - Embedded GNU C Library: Profiling Libraries
```

さて、とある計算機で、`libc6` に `u` の flag がついていて、インストールされていませんでした。超超超基本的なパッケージである `libc6` は他のパッケージから依存されまくりなので、これを解消して `i` にしないことには支障出まくりです。しかし purge や reinstall を試みてもエラーが出て失敗します。調べてみると `u` は unpacked の意味らしいですが、`man apt-get` を読んでもそれ以上のことは分かりません。

まぁ経過はどうでもいいので結論を言うと、`u` は unpack までされたけれどまだ configure されていない状態 (Cf. `man dpkg`) のようで、次のようにすると解決しました:

```shell
uda@host$ sudo dpkg --configure libc6
```

すごく基本的なことだと思うのですが。よく分からないままパッケージ管理を使っているので結構手間取りました。

----

余談。これに関連して少し調べものをしていたら、なかなかに cool なスライドを見つけました。flag についても書かれています。

- [aptitude: Package Management for Console Geeks](http://luv.asn.au/overheads/aptitude/aptitude-intro.html "aptitude: Package Management for Console Geeks")
git stash した内容をさっくり確認したい

`git stash list` でなにがスタックにあるか確認。

```bash
git stash list
stash@{0}: WIP on hogehoge: cb48239 ....
stash@{1}: WIP on (no branch): f5eb07d ....
stash@{2}: WIP on (no branch): aaa7ee1 ....
stash@{3}: WIP on master: 9d02691 ....
stash@{4}: WIP on master: 9d02691 ....
```

この `stash@{N}` はオブジェクトの名前になるので参照可能。 diff で目視確認。

```bash
git diff HEAD..stash@{0}
```

もっと詳しく

```bash
tig stash@{2}
```
FlashアプリからRailsにPOSTする場合には authenticity_token が必要


authenticity_token が無くても例外は吐かず、セッションがリセットされるという挙動のため、はまりやすいので注意。
（Flashに限らないけど、RailsのFormヘルパなどを使わずに作成されらクライアントの場合）

Cookie にセットされる _session_id は Flash から発行するリクエストにも反映されるので特に意識する必要はない。 

## 参考

- [Rails 3.0.4と2.3.11からXHRリクエストの際もCSRFトークンの検証が必須になったので注意 - memo.yomukaku.net](http://memo.yomukaku.net/entries/235)

- [Rails3でFlashからデータをPOSTする際に、CSRFトークンを渡す » RainbowDevilsLand](http://rainbowdevil.jp/?p=1064)
インスタンス変数を参照するヘルパーメソッドのSpecを書く



`assign`メソッドを使ってインスタンス変数に値をセットすることができる。

以下、`some_instance_variable`という名前のインスタンス変数に`'FooBar'`という値をセットしている例。

```
describe '#helper_method'
  subject { helper.helper_method }
  before do
    assign(:some_instance_variable, 'FooBar')
  end
  it { … }
end
```

参考：
[helper spec - Helper specs - RSpec Rails - RSpec - Relish](https://www.relishapp.com/rspec/rspec-rails/v/2-4/docs/helper-specs/helper-spec#helper-method-that-accesses-an-instance-variable "helper spec - Helper specs - RSpec Rails - RSpec - Relish")
Cygwinにruby 1.9.3-p327がインストールできない

ruby1.9.3-p327をインストールしようとすると、下記のようなエラーになる。
p327以外を入れればOKっぽい。

```
file.o:file.c:(.text+0x41af): undefined reference to `_wcsicmp'
```

http://www.ruby-forum.com/topic/4408149
ctrlp で選択したファイルをウインドウを縦に分割して開く


ファイルを選択後、`ctrl+v`を入力することで、ウインドウを縦に分割して開いてくれる。

ctrlp自体の解説はこちら↓
[Big Sky :: 意外と知られていない便利なvimプラグイン「ctrlp.vim」](http://mattn.kaoriya.net/software/vim/20111228013428.htm "Big Sky :: 意外と知られていない便利なvimプラグイン「ctrlp.vim」")
tarコマンドを少し便利にする


RubyやNodejsを使う機会が多くなりましたがコマンドを組み合わせて
簡単な処理を書くのにPerlは軽量で好きです。

tarのアーカイブにインクルードのリストを参照するコマンドを作りました。

* [tari on GitHub](https://github.com/ogom/perl-tari)


# インストール

```
$ git clone https://github.com/ogom/perl-tari.git
$ cd perl-tari
$ chmod +x ./bin/tari.pl
$ sudo ln ./bin/tari.pl /usr/bin/tari
```


# 使い方

## アーカイブリスト
アーカイブするリストを準備します。

```
$ cat list.txt 
/tmp/001.txt
/tmp/002.txt
/tmp/003.txt
```

## コマンド実行
tarのアーカイブを作成します。

```
$ tari list.txt
```

## アーカイブ確認
引数の拡張を`.tar`に変更したファイルが作成されています。

```
$ tar tf list.tar 
./tmp/001.txt
./tmp/002.txt
./tmp/003.txt
```

# Tips

アーカイブするファイルのmd5などのリストを作っておくと
正しく展開されたかの確認に利用できて便利です。
(`-d`でファイルの情報をJSONで出力します。)
外のsvnリポジトリからforkして追随しつつgitで開発する．

なんどやっても忘れる鶏頭なのでメモ．

```
$ mkdir foo && cd foo
$ git init .
$ git remote add origin {gitリポジトリ}
```

ここまでは普通にgit．

```
$ git branch -b tmp master
````

やらなくてもよいけれど，master をまっさらな状態で始めたければ，↑これがコツ．

```
$ git svn init {svnリポジトリ} --prefix=svn/
```

--prefix が重要．コレ忘れると，のちのち git のブランチ名と混ざって混乱したり，名前が衝突して哀しい思いをする．

```
$ git svn fetch 
```

svn の update は遅い．しばしコーヒーブレイク．

git svn は fetch の名前のくせして，master を汚してしまう．
( git-svn version 1.7.11.3 (svn 1.6.17) 固有の問題?)

```
$ git branch -D master
$ git branch -m tmp master
```
↑これで master はまっさらになる．

終わったら，```git branch -r``` などして，svn の trunk/tags/branches を確認．好きなものを master ブランチにマージして開発開始．

あとは，ときどき ```git svn fetch```を実行して，master ブランチに再マージ．
Google Closure LibraryでEvent周りの処理


## goog.events.EventTargetクラスを継承する

```javascript
function Hoge(){}

goog.inherits(Hoge, goog.events.EventTarget);

Hoge.prototype.hoge = function () {
	this.dispatchEvent({
		type: 'event type',
		data: 'some data',
		…
		…
	});
}
```

dispatchEventの引数にオブジェクトを渡す。
Tclで複数の変数に同じ値を設定する

変数xとyの両方に、同じ値を設定したいときに一行で書く方法。あまりサンプルなどで見かけないので確認しました。
set コマンドが、設定した値を戻り値として返すのでそれを使う。

```tcl
set x [set y 3]
```

参考
http://www.tcl.tk/man/tcl8.5/TclCmd/set.htm
KeyRemap4MacBookでアンダースコアとバッククォートを入れ替える。

どうしてもアンダースコアが遠かった

## 設定ファイルを開く
リンゴマーク > システム環境設定 > KeyRemap4MacBook > Misc & Uninstall(タブ) > Open private.xml

## 編集
```private.xml:
<?xml version="1.0"?>
<root>
  <item>
    <name>mame settings</name>
    <item>
      <name>swap ` for _</name>
      <identifier>private.swap_under_score</identifier>
      <autogen>--KeyToKey-- KeyCode::JIS_ATMARK, ModifierFlag::SHIFT_L, KeyCode::JIS_UNDERSCORE</autogen>
      <autogen>--KeyToKey-- KeyCode::JIS_UNDERSCORE, ModifierFlag::SHIFT_L, KeyCode::BACKQUOTE</autogen>
    </item>
  </item>
</root>

```

## 参考
マニュアル
http://pqrs.org/macosx/keyremap4macbook/xml.html.ja

定数を定義しているファイル
https://github.com/tekezo/KeyRemap4MacBook/blob/master/src/bridge/generator/keycode/data/KeyCode.data
Google Closure LibraryでAjaxする


```javascript
goog.net.XhrIo.send(this._url, function(e) {
    var xhr = e.target,
        obj = xhr.getResponseJson();

    d.callback(obj.feed.entry);
});
```

## Instance化して使う方法

```javascript
var xhr = new goog.net.XhrIo();

goog.events.listen(xhr, 'complete', function (e) {
	if (xhr.isSueccess()) {
		console.log(xhr.getResponseJson(); //getResponseText()も。
	}
	else {
		console.log(xhr.getLastError());
	}
});

xhr.send(url, 'POST', data);
```
gnuplotで破線を描く

以下のコマンドで破線が設定できるようになる。これは aquaterm の場合。

```gnuplot
set terminal aqua dashed
```

`lt`(`linetype`)で破線のタイプを指定。
色も同時に変わってしまうが、 `lc` (`linecolor`)で色だけ変更できるようになる。

たとえば。

```gnuplot
set terminal aqua dashed
plot sin(x) lt 2 lc 1
```

![sinx-s.png](https://qiita-image-store.s3.amazonaws.com/0/6520/a2d78282-c645-ac0b-14c7-41eed72b181a.png)