OmniAICreator/Qiita-1.07M huggingface dataset:
Proxy使ってsuperを実装

メタプログラミングは素晴らしいですね!
demo: http://jsfiddle.net/qGYVd/1/

```js
//実装その1。Python風にsuper
var __super = function(self) {
    return Proxy.create({
        get: function(rcvr, name) {
            return self.__proto__.__proto__[name].bind(self);
        }
    });
};

//その2。this.superで。・・・怒られなかった、いいのか？
Object.defineProperty(Object.prototype, 'super', {
    get: function() {
        var get = function(rcvr, name) {
            return this.__proto__.__proto__[name].bind(this);
        };
        return Proxy.create({get: get.bind(this)});
    }
});

var A = function() {
    this.message = 'world';
};
A.prototype.foo = function() {
    this.print('hello ' + this.message);
};
A.prototype.print = function(text) {
    console.log(text);
};

var B = function() {
    this.message = '世界';
};
B.prototype = new A;
B.prototype.foo = function() {
    __super(this).foo();
    this.super.foo();
    this.print('override!');
};

var a = new A;
a.foo();

var b = new B;
b.foo();
```
Coda 2 の mode メモ

Coda 2 は旧バージョンと mode の互換性がないので、移行するための Tips。

## 設置場所
style: ~/Library/Application Support/Coda 2/Styles
mode: ~/Library/Application Support/Coda 2/Modes

## SSS
sss の 要素は各 mode パッケージの中にある、SyntaxDefinition.xml の各ノード `scope` 属性に対応している

```xml:XML_SyntaxDefinition.xml
<keywords id="Tags" useforautocomplete="no" scope="markup.tag">
```

```css:CodaClassic.sss
markup.tag {
  color:#881280;
  font-weight:normal;
}
```

また、dot で区切った scope の上位から継承されるようになっている。以下の場合 `scope="markup.tag.attribute.name"` のシンタックスは bold で表示される。

```css:sample.sss
markup.tag {
  color:#881280;
  font-weight:bold;
}

markup.tag.attribute.name {
  color:#994500;
}
```


SyntaxDefinition.xml に記述されていた `color`, `background-color`, `font-weight` ... などのスタイルに関する属性は無視される。

1.x の mode ファイルを ~/Library/Application Support/Coda 2/Modes に設置して、Preferences で選択できても、シンタックスハイライトが行われないのは、これが理由。

```diff:Arduino_SyntaxDefinition.xml.patch
16c16
<             <keywords id="Arduino Functions" color="#FF8000" casesensitive="no" useforautocomplete="yes">
---
>             <keywords id="Arduino Functions" scope="language.function" casesensitive="no" useforautocomplete="yes">
```
List 操作メモ書き


list 操作のメモ書き

## ２つのリストからDict作成

```python
>>> a = ["a", "b", "c"]
>>> b = [1,   2,   3]
>>> dict(zip(a,b))
{'a': 1, 'c': 3, 'b': 2}
```


## List の中から必要な要素のみ残す

```python
>>> # 5 以上の要素のみ残す
>>> a = [3, 6, 4, 7, 2, 10]
>>> filter(lambda x: x >= 5, a)
[6, 7, 10]
>>>
>>> # 以下のブラケットと同じ
>>> fn = lambda x: x >= 5
>>> [i for i in a if fn(i)]
[6, 7, 10]
```

## 順次実行

```python
>>> # 全ての数値に 5 を足す
>>> a = [3, 6, 4, 7, 2, 10]
>>> map(lambda x: x + 5, a)
[8, 11, 9, 12, 7, 15]
>>>
>>> # 下記のブラケットと同じ
>>> fn = lambda x: x + 5
>>> [fn(i) for i in a]
[8, 11, 9, 12, 7, 15]
```

## リストの内部を全て合わせる

```python
>>> # 全て足す
>>> a = [3, 6, 4, 7, 2, 10]
>>> reduce(lambda x,y: x+y, a)
32
```

## ソート

```python
>>> # 昇順
>>> a = [3, 6, 4, 7, 2, 10]
>>> sorted(a)
[2, 3, 4, 6, 7, 10]
```
リストの分類と集計

何度も似たようなの書いては失くしちゃうので、メモ。
というか、標準のData.List.groupってあれ使い道あるのか？

```haskell:Data/List/Missing.hs
module Data.List.Missing where
import Data.Maybe (fromMaybe)

{- | 分類関数と加算器をつかってリストを集計する

    分類のみ
>>> groupBy' (`mod` 2) (flip (:)) [] [0..10]
[(0,[10,8,6,4,2,0]),(1,[9,7,5,3,1])]

    集計のみ
>>> groupBy' id (\x _ -> x + 1) 0 [0,0,2,3,1,2,6]
[(6,1),(2,2),(1,1),(3,1),(0,2)]

    投票から得票数を求める例
>>> groupBy' snd (\x _ -> x + 1) 0 [(0,1),(1,0),(2,3),(3,0),(4,0)]
[(0,3),(3,1),(1,1)]

  NOTE: bの値域は[a]に比べて十分小さく、比較コストも少ないと仮定している
 -}
groupBy' :: Eq b => (a -> b) -> (c -> a -> c) -> c -> [a] -> [(b, c)]
groupBy' kf acc z = foldl go []
  where
    go ans x = (k, acc (fromMaybe z $ lookup k ans) x):filter ((/= k) . fst) ans
      where
        k = kf x
```

こういうのも

```haskell:Random/Missing.hs
{-# LANGUAGE RecordWildCards #-}
module Random.Missing (Rating (..), rollDie, rollDie') where

import Control.Monad.Random (MonadRandom, getRandomRs)
--import Control.Monad.Random (evalRandIO)
import Data.List (find)
import Data.Maybe (fromMaybe)
import Control.Monad (liftM2)


{-| レーティング表はダイスの数と種類、それと確率テーブルを持つ -}
data Rating a = Rating { ratingNumDies :: Int, ratingDie :: Int, ratingTable :: [(Int, Int, a)] }

{-| ダイスを振って結果判定する。結果が出なかった場合はNothingになる -}
rollDie' :: (MonadRandom m) => Rating a -> m (Maybe a)
rollDie' Rating {..} = do
  n <- getRandomRs (1, ratingDie) >>= return . sum . take ratingNumDies
  return $ find (\(x,y,_) -> x <= n && y >= n) ratingTable >>= (\(_,_,x) -> return x)

{-| 結果が出るまで繰り返し結果判定する
  NOTE: 終わらない可能性あり。エントロピープールの欠乏に注意 
-}
rollDie :: (MonadRandom m) => Rating a -> m a
rollDie r = rollDie' r >>= maybe (rollDie r) return


--testRoll :: IO ()
--testRoll = print =<< (evalRandIO $ rollDie' $ Rating 2 6 [(2, 2, "Critical!!"),(3, 6, "Success"), (7,11,"Failed"), (12,12, "Famble!!")])
```
Devise Controller をテストする RSpec


普通にテストを書いて実行しても以下のようなエラーが出ます。

```
Failure/Error: post :create, user: { username: @user.username }     AbstractController::ActionNotFound:
  Could not find devise mapping for path "/users/confirmation?user[username]=user-2".
  Maybe you forgot to wrap your route inside the scope block? For example:
       
  devise_scope :user do
    match "/some/route" => "some_devise_controller"
  end
```

これを回避するには以下のような記述が必要です。

```ruby
@request.env["devise.mapping"] = Devise.mappings[:user]
```

config/routes.rb で `devise_for :user` と記述しているなら、↑のように書けばテストが実行できるはずです。

### 参考
[ruby on rails - testing devise and cancan in controller specs (rspec) - Stack Overflow](http://stackoverflow.com/questions/5973339/testing-devise-and-cancan-in-controller-specs-rspec "ruby on rails - testing devise and cancan in controller specs (rspec) - Stack Overflow")
Obj-C で正規表現


動作環境による制限があるけど、標準でも正規表現を使えるようになってたのでメモ

iOS 4.2 以上
Mac OS X 10.7 以上



## NSRegularExpression

```objective-c

NSError* err = nil;
NSRegularExpression* regex = nil;

// 検索する文字列
NSString* string = @"abc-defg";

// 正規表現オブジェクト作成
regex = [NSRegularExpression regularExpressionWithPattern:@"\w+-(\w)"
			options:NSRegularExpressionCaseInsensitive
			error:&error];

// 比較
NSTextCheckingResult *match = [regex firstMatchInString:string
                                                options:0
                                                  range:NSMakeRange(0, string.length)];

if (match) {
	// マッチした時の処理
   NSRange matchRange = [match range]; // マッチした個数
   NSRange firstHalfRange = [match rangeAtIndex:1];
}

// Block を使う方法
__block NSUInteger count = 0;
[regex enumerateMatchesInString:string
						   options:0
							 range:NSMakeRange(0, [string length])
						usingBlock:^(NSTextCheckingResult *match, NSMatchingFlags flags, BOOL *stop)
{
     NSRange matchRange = [match range];
     NSRange firstHalfRange = [match rangeAtIndex:1];
     NSRange secondHalfRange = [match rangeAtIndex:2];
     if (++count >= 100) *stop = YES;
}];

```



## 参考

https://developer.apple.com/library/mac/#documentation/Foundation/Reference/NSRegularExpression_Class/Reference/Reference.html
zshのviキーバインドでコマンドラインスタック＋α


* デフォルトのviキーバインドだとEsc-qで動作しない
* スタックしたものが見えない
* Esc-qは押しにくい（個人的に）

というわけで、viキーバインドでC-qでスタックし、その内容を表示しておくようにしてみた。

```~/.zshrc
show_buffer_stack() {
  POSTDISPLAY="
stack: $LBUFFER"
  zle push-line-or-edit
}
zle -N show_buffer_stack
setopt noflowcontrol
bindkey '^Q' show_buffer_stack
```

`noflowcontrol`はC-s/C-qを使ったflowcontrolを無効にするものらしい。使ってないのでここではオフにした上でC-qにマッピングしている。

参考にしたもの：

* http://scrawlpad.blogspot.jp/2008/11/zshvi.html
* http://d.hatena.ne.jp/kei_q/20110308/1299594629
Sqaleファーストインプレッション

paperboy&co.が新しくサービスを開始した「手軽に Webアプリケーションを公開するためのホスティングサービス」[Sqale]( https://sqale.jp/)をさわってみたので、ファーストインプレッションをまとめたいと思います。

## Herokuとの比較

同じようなサービスであるHerokuと比較してここらへんが惹かれます。

* 管理画面、ドキュメント類、サポートが日本語！
* MySQLが使える(逆にPostgreSQLが使えない)
* コンソールの反応が早い！

あと、Herokuの場合は基本`heroku`コマンドを多用するのですが、Sqaleの場合はmigrationなどはsshでログインして実行します。独自の進化を遂げたHerokuに比べて、サーバの設定を少しでもしたことのある人だとなじみやすいのかなと思いました。

## まとめ

うまく表現できないのですがPaaSというよりも、いろいろな設定が施されているVPSって感じがします。いままで、Herokuが何かしらの理由で使えない場合は、さくらVPSが候補になっていたのですが、さくらVPSで一から設定するよりは断然楽なのでSqaleがいいですね。
facebook-ios-sdk にて locale考慮したプロフィールを取得する

[意外と知られていない、Facebook API の使い方](http://engineering.crocos.jp/post/23524668816/facebook-api)を読んで、なるほどと思ったのでiOSで試しました。

```objc:addParams
NSMutableDictionary* params = [NSMutableDictionary dictionaryWithObjectsAndKeys:
         @"ja",  @"locale", nil];
[self.facebook requestWithGraphPath:@"me" andParams:params andDelegate:self];
```

ちなみに、以下では上手くいかなかった。

```objc:include_params_to_path
[self.facebook requestWithGraphPath:@"me/?locale=ja" andDelegate:self];
```
ec2でバーチャルホストの設定をした


■準備
elastic ipの取得
お名前.comでのDNS取得（他サービスを使う場合は読み替え）
バーチャルホストするドメイン全てにAレコード追加(elastic ipを指定)




```/etc/httpd/conf/httpd.conf
#コメント解除
NameVirtualHost *:80

# 元ドメイン用追記
<VirtualHost *:80>
   DocumentRoot /var/www/html
   ServerName お名前.comドメイン１
</VirtualHost>
# 追加ドメイン用追記
<VirtualHost *:80>
   DocumentRoot /var/www/virtual
   ServerName お名前.comドメイン２
</VirtualHost>
```

設定するなら下記も追加
ServerAdmin
ErrorLog logs
CustomLog logs


■注意点
・バーチャルホスト設定時はcode欄の様に元ドメインも定義する
・/etc/init.d/httpd restartして設定を反映

参考になったHP
http://d.hatena.ne.jp/ichhi/20110425/1303739017
gemのディレクトリに一瞬で移動する

`bundle show [gem]`で指定したgemの絶対パスを取得できる。ので、以下のようにすれば、一瞬でgemのホームディレクトリに移動できる。

```
$ bundle show rails
/Users/naoty/workspace/sampleapp/vendor/bundle/ruby/1.9.1/gems/rails-3.1.0
$ cd `bundle show rails`
```

ちなみに、`bundle open [gem]`で指定したgemのディレクトリをエディタで開ける。こっちの方が使うかもしれない。事前に環境変数`EDITOR`を設定しておく必要がある。

```
$ echo $EDITOR
/usr/bin/vi
$ bundle open rails
```
Capistrano + Asset Pipeline + Rails sub app

Rails Application をルートではなく、サブディレクトリに複数並べて動作させている場合の設定の仕方。

Rails 側は、環境ごとの設定になるはずなので、environments 側に書く(ここでは、Production)。

```ruby:production.rb
ENV['RAILS_RELATIVE_URL_ROOT'] = "/hoge"
```

これだけでもある程度はうまくいくが、Asset を Precompile してできたもの(CSS とか JavaScript とか) に image-url などを利用している場合、そこにサブディレクトリの設定が適用されない。

ここを動作させるためには、deploy.rb を変更する。

```ruby:deploy.rb
set :asset_env, "RAILS_GROUPS=assets RAILS_RELATIVE_URL_ROOT='/hoge'"
```
filter_var関数でメールアドレスをバリデーションする


メールアドレスを入力させるフォームを作るときなどで、
入力されたアドレスが正しいメールアドレス(RFCに準拠しているという意味で)であるかどうかを
チェックしたい時は、正規表現を使ってチェックすることができる。

```php
if(preg_match('/^([a-z0-9\+_\-]+)(\.[a-z0-9\+_\-]+)*@([a-z0-9\-]+\.)+[a-z]{2,6}$/iD', $mailaddress)){
     return '正しいメールアドレスです'
}else{
     return '正しくないメールアドレスです'
}
```

あるいは、filter_var関数を使うこともできる

```php
if(filter_var($mailaddress, FILTER_VALIDATE_EMAIL)){
     return '正しいメールアドレスです'
}else{
     return '正しくないメールアドレスです'
}
```


filter_var関数でチェックできるデータは下記で確認できる。
http://www.php.net/manual/ja/filter.filters.php

filter_var関数は便利だが、チェックを柔軟にしたい場合は正規表現を使用したほうがいいかもしれない。
例えば、DoCoMoの携帯メールアドレスは2009年頃までドメインの直前にドットを入れたり、
ドットを連続して使用したりすることができた(2010年以降はできない模様)。
これはRFCに準拠しないのでfilter_var関数では弾かれてしまうが、
このようなメールアドレスを現在も使用している人は意外といたりするので、注意が必要だ。
配列でも可変長引数でもOKな書き方

そういえばできるなぁと思って

```javascript
function add(args) {
  if (Array.isArray(args)) return add.apply(null, args);
  var i = 0, n = arguments.length, sum = 0;
  for(;i < n; ++i) sum += arguments[i];
  return sum;
|
```
.gitignore で、git のバージョン管理から無視するファイルを設定する

git initとしたフォルダーに.gitignore ファイルを作れば、そこに書かれたファイルは git のバージョン管理から無視されます。

![.gitignoreの配置場所](https://lh3.googleusercontent.com/-rRaM7qLSmCU/T7vCMaburII/AAAAAAAAEGs/M5lb2k2skM8/s800/2012-05-23%252001h38_34.jpg)

# C# で使う場合の例：

```.gitignore
# .gitignore
# 		git initとしたフォルダーに.gitignore ファイルを作れば、
# 		そこに書かれたファイルは git のバージョン管理から無視されます。

# [書き方]
# 		行頭に # を書くとその行はコメントとみなされ、無視されます
# 		*.a			# .a ファイルは無視
# 		!lib.a			# しかし、lib.a ファイルだけは .a であっても追跡対象とします
# 		/TODO		# ルートディレクトリの TODO ファイルだけを無視し、サブディレクトリの TODO は無視しません
# 		build/		# build/ ディレクトリのすべてのファイルを無視します
# 		doc/*.txt	# doc/notes.txt は無視しますが、doc/server/arch.txt は無視しません
bin/
obj/
**/tags

# .gitignore ファイル自体は管理したい
# 		! は、無視の打ち消し、すなわち無視しない
!.gitignore
```

[先週紹介した Milkode](http://qiita.com/items/5eae5c581dc37b6efbe4) も、.gitignore ファイルを解析してくれるらしいので、設定しておいて損はないかと。
エクスプローラからドラッグ＆ドロップされたファイルパスを取得する

C# で作成したフォームアプリケーションに、
エクスプローラからドロップされたファイルパスを取得する機能を付加するには、
例えばフォームに配置したlistBox1に対して以下の実装を行えば良い。

1. AllowDrop プロパティを true に設定する 
2. DragEnter イベントハンドラを実装し、ドラッグドロップを受け付けることを表明する
3. DragDrop  イベントハンドラを実装し、ドラッグドロップされたファイルパスを受け取って処理する

```csharp:SampleDragDrop.cs
        void MainForm_Load(object sender, EventArgs e)
        {
            // ドラッグドロップを受け付ける
            listBox1.AllowDrop = true;
        }
        
        void ListBox1_DragEnter(object sender, DragEventArgs e)
        {
            // ドラッグドロップ時にカーソルの形状を変更
            e.Effect = DragDropEffects.All;
        }

        void ListBox1_DragDrop(object sender, DragEventArgs e)
        {
            // ファイルが渡されていなければ、何もしない
            if ( ! e.Data.GetDataPresent(DataFormats.FileDrop)) return;
            
            // 渡されたファイルに対して処理を行う
            foreach (var filePath in (string[])e.Data.GetData(DataFormats.FileDrop)) {
                listBox1.Items.Add(filePath);
            }
        }
```
query_posts, get_postsでカスタムフィールド（meta_key）の値でソートする



忘れがちなのでメモ。orderbyでmeta_valueを指定して、ソートの対象をmeta_keyで指定

```php
query_posts(array(
	// ソート対象にカスタムフィールドを指定
	'orderby' => 'meta_value',
	// 対象となるカスタムフィールド（hoge）を指定
	'meta_key' => 'hoge',
	// 並び順（ASC, DESC）
	'order' => 'ASC'
));

// get_postsも同じ
get_posts(array(
	'orderby' => 'meta_value',
	'meta_key' => 'hoge',
	'order' => 'ASC'
));
```
Android主な画面サイズと解像度

国内端末の主な画面サイズと解像度の一覧。
エミュレーターでこれくらい確認しておけばよさそう。
240dpi=xdpi/320dpi=xhdpi/480dpi=xxhdpiです。

W / H / dpi 

1080 / 1920 / 480(Nexus7, XperiaSOL34など) (*2014/10/31追加)
720 / 1280 / 320(GalaxyNexus, IS12S など)
640 /  960 / 320(IS03のみ, iPhone4と同じ?dpiが不明)
480 /  800 / 240(GALAXY Sなど)
480 /  854 / 240(IS05など)
540 /  960 / 240(INFOBAR A01など)

H / W / dpi
480 /  960 / 240(IS01のみ)

#720x1280, 640x960以外はすべてLong(layout-longがあるとそちらが採用される)
＃＃＃480x800と480x854なんてaspect比全然違うのにね＞＿＜

参考にしたサイト：
http://d.hatena.ne.jp/itog/20111001/1317438659
http://genmaicha460.blog27.fc2.com/blog-entry-56.html

あと、Avdマネージャーでスキンのサイズを変えるとハードウェアキーボードが表示されなくなるが、PCのキーボードのショートカットで操作は可能。
主なショートカットはこちら(Windows)。

メニュー：F2
Back : Esc

参考：
http://android.roof-balcony.com/debug/shortcutkey/
例外のスタックトレースが出力されない・・・？

【事象】
以下のようなとき、例外のスタックトレースがまったく出力されないことがある。

```java:
try{

	// ・・・
	
} catch(NullPointerException e) {
	log.error("error!", e);
}
```

e.getStackTrace().lengthで、
例外のスタックトレースサイズを見ると、0になっている。


【原因】
JVMは、同じような箇所で組み込み例外が繰り返しthrowされると、
メソッドを再コンパイルして最適化することがある。

この最適化されたメソッドでは、
JVMが事前に用意した例外インスタンスがthrowされ、
その例外インスタンスにはスタックトレースが提供されない。
これが原因。

-XX:-OmitStackTraceInFastThrowオプションでJVMを起動することで、
この最適化を無効にすることができる。

http://java.sun.com/j2se/1.5.0/ja/relnotes.html
（HotSpot VM 参照）
GPUを使って画像のリサイズ


CIImageのimageByApplyingTransform:を使うと、GPUを利用した画像のリサイズ処理ができます。CIContextを作るときのオプションで、CPUかGPUか処理を選べます。CoreImage.frameworkが必要。

```objc
// ソース画像を準備
UIImage *sourceA = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"IMG_0001" ofType:@"png"]];
CIImage *sourceImage = [[CIImage alloc] initWithCGImage:sourceA.CGImage];

// 新しい画像サイズ
CGSize newSize = CGSizeMake(320, 480);

// ソーズ画像のサイズと、新しいサイズの比率計算
CGRect imageRect = [sourceImage extent];
CGPoint scale = CGPointMake(newSize.width/imageRect.size.width,
							newSize.height/imageRect.size.height);

// AffineTransformでサイズを変更し、切り抜く
CIImage *filteredImage = [sourceImage imageByApplyingTransform:CGAffineTransformMakeScale(scale.x,scale.y)];
filteredImage = [filteredImage imageByCroppingToRect:CGRectMake(0, 0, newSize.width,newSize.height)];

// UIImageに変換する
CIContext *ciContext = [CIContext contextWithOptions:[NSDictionary dictionaryWithObject:[NSNumber numberWithBool:NO]
										 forKey:kCIContextUseSoftwareRenderer]];

CGImageRef imageRef = [ciContext createCGImage:filteredImage fromRect:[filteredImage extent]];
UIImage *outputImage  = [UIImage imageWithCGImage:imageRef scale:1.0f orientation:UIImageOrientationUp];
CGImageRelease(imageRef);
```
Sprockets/Rails 3.2でslimを使う


eco＋slimでテンプレートを書きたい場合とか。

Gemfile :

	gem "slim-rails"

これでコントローラを作った時などに生成されるビューのテンプレートがslim記法になる。

config/application.rb :

	module Sprockets
	  register_engine '.slim', Slim::Template
	end

config/initializers/*に書いてもダメだった。

なお、キャッシュが残っているかもしれない場合には

	$ RAILS_ENV=development rake assets:clean

でクリアできる。
見やすいprint


Rubyのirbとかpryとかでオブジェクトの操作をやってみるとき、うろ覚えのメソッドを調べるためにいちいちリファレンスマニュアルを見なくてもオブジェクトに直接聞くことができます。

```ruby
hash = Hash.new
puts hash.methods
rehash
to_hash
to_a
inspect
 :
```

これだとイマイチわかり辛いのですが、オブジェクトの表示を分かりやすくしてくれるモジュール`awesome_print`を使うと感激の見やすさになります。

```ruby
require 'awesome_print'
ap hash.methods
[
    [  0]                          !()                 Hash (BasicObject)
    [  1]                         !=(arg1)             Hash (BasicObject)
    [  2]                         !~(arg1)             Hash (Kernel)
    [  3]                        <=>(arg1)             Hash (Kernel)
    [  4]                         ==(arg1)             Hash
    [  5]                        ===(arg1)             Hash (Kernel)
 :
```

並び順もステキな上に、どこで定義されているメソッドかまで一目瞭然ヽ(´ー｀)ノ
実際にコンソールで実行すると色も付いていて惚れます。
Vimのキーボードマクロ


いつも忘れるのでメモ。

1. qaで記録開始
2. 適当に操作する
  * $で移動、a、,して末尾にカンマを追加して次の行へ、など
3. qで記録終了
4. @aで実行。
  * 5@aなどで繰り返し可能
OpenGL ES でのログ出力設定方法

OpenGL ESに対する呼び出しのログ出力、またはエラーチェックを行えます。
設定するには、GLSurfaceViewまたはそのサブクラスのコンストラクタで、setRenderer()を呼び出す前に下記メソッドをコールします。

```
public SubGLSurfaceView(Context context) {
    super(context);
    setDebugFlags(DEBUG_CHECK_GL_ERROR | DEBUG_LOG_GL_CALLS);
    mRenderer = new MyRenderer(this);
    setRenderer(mRenderer);
}
```
command line toolsのみインストールしたときのpathの設定

command line toolsのみ入れてXcode入れないとき、`brew doctor`すると、以下のような警告が出ます。

```
$ brew doctor
Error: Your Xcode is configured with an invalid path.
You should change it to the correct path. Please note that there is no correct
path at this time if you have *only* installed the Command Line Tools for Xcode.
If your Xcode is pre-4.3 or you installed the whole of Xcode 4.3 then one of
these is (probably) what you want:

    sudo xcode-select -switch /Developer
    sudo xcode-select -switch /Applications/Xcode.app/Contents/Developer

DO NOT SET / OR EVERYTHING BREAKS!
```

これまでdoctorの忠告は無視してたのですが、Homebrewでmacvimを入れようとしたとき、「xcodebuildが見つからない」エラーに直面したので、とりかかることに。

とりあえずこうしたら、doctorがOK出してくれた。

```
$ sudo xcode-select -switch /
$ brew doctor
Your system is raring to brew.
```

「あなたのシステムはbrewしたくてウズウズしている！」だってさ。
でも、これでいいのかちょっと微妙…(´･ω･`)
「戻る」ボタンの作り方


```html:
<!-- ヘッダー -->
<div data-role="header"> 
	<h1>リスト表示</h1> 
	<a href="" data-rel="back">戻る</a>
</div>
```

href属性は空でよい。data-relをbackに指定する事で
一つ前のページに戻る動作になってくれる。
Play2をIntelliJで使う


sbtを使ってsbt-ideaをインストールして、sbt-ideaでIntelliJの設定ファイルを作成すればいい。

``` sh
$ play new App
$ cd App
$ vi project/plugins.sbt
```

以下を追加

```plugins.sbt
resolvers += "sbt-idea-repo" at "http://mpeltonen.github.com/maven/"

addSbtPlugin("com.github.mpeltonen" % "sbt-idea" % "1.0.0")
```

再びコマンド

``` sh
$ sbt
$ update
$ idea
$ gen-idea
```

あとはIntelliJ側でプロジェクト追加するか、IntelliJで作ったideaコマンドを使えばOK。
Active Directory で LDAP API を使った操作をログに記録する

Active Directory は MS 製 LDAP サーバといえるもので、OpenLDAP の ldapsearch コマンドとかでディレクトリ検索できますが、デフォルトではそのログが記録されません。

LDAP インターフェイスを介したイベントを記録するにはレジストリを変更します。
Windows Server2008 なら↓をコピペした .reg ファイルを読み込みます。

    Windows Registry Editor Version 5.00
    
    [HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\Services\NTDS\Diagnostics]
    "1 Knowledge Consistency Checker"=dword:00000000
    "2 Security Events"=dword:00000000
    "3 ExDS Interface Events"=dword:00000000
    "4 MAPI Interface Events"=dword:00000000
    "5 Replication Events"=dword:00000000
    "6 Garbage Collection"=dword:00000000
    "7 Internal Configuration"=dword:00000000
    "8 Directory Access"=dword:00000000
    "9 Internal Processing"=dword:00000000
    "10 Performance Counters"=dword:00000000
    "11 Initialization/Termination"=dword:00000000
    "12 Service Control"=dword:00000000
    "13 Name Resolution"=dword:00000000
    "14 Backup"=dword:00000000
    "15 Field Engineering"=dword:00000000
    "16 LDAP Interface Events"=dword:00000003
    "17 Setup"=dword:00000000
    "18 Global Catalog"=dword:00000000
    "19 Inter-site Messaging"=dword:00000000
    "20 Group Caching"=dword:00000000
    "21 Linked-Value Replication"=dword:00000000
    "22 DS RPC Client"=dword:00000000
    "23 DS RPC Server"=dword:00000000
    "24 DS Schema"=dword:00000000

`"16 LDAP Interface Events"=dword:00000003` の右辺を書き換えることでログに出力される情報の粒度を変更できます。

dword:00000005 -> どーでもいい情報まで出力されます
dword:00000000 -> MS 曰く「クリティカルなイベントのみ記録」

参考: http://technet.microsoft.com/library/Cc961809
アクセス権を失ってしまったCygwinを削除する

Cygwin をインストールした Vista を 7 Enterprise にアップグレードすると、Cygwin のオーナー権を失い C:/cygwin 以下を削除できなくなって困った。その時の対処法を http://www13.atwiki.jp/uhaku/pages/11.html から引用。

1. http://sourceforge.net/projects/setacl/ のコマンドラインバージョンを適当なディレクトリに配置
2. コマンドプロンプトで「SetACL.exe -on "c:\cygwin" -ot file -rec cont_obj -actn setowner -ownr "n:ユーザ名"」を実行
3. 続けて「cacls c:\cygwin /T /C /G ユーザ名:F」を実行
4. c\cygwin を削除

2でオーナー権を取得、3でアクセス権をフルに変更しているらしい。
再帰的な検索をgrepで簡単に出来るようにする


プロジェクトのサイズが大きくなってくるとディレクトリ構成が複雑になります。

```
$ find . 
src
src/a.c
src/a.h
test
test/foo
test/foo/foo_test.c
test/hoge
test/hoge/hoge_test.c
```

全ファイルを検索するには以下のようなgrepコマンドを入力しなければなりません。

```
$ grep hoge */*.[ch] */*/*.[ch]
.
.
```

複雑ですぐに間違えそうですね。もっとシンプルに**「指定したフォルダ以下をまとめて検索」**したい所です。

## 環境変数GREP_OPTIONSの設定
.bashrc等に以下の設定を書き加えます

```
export GREP_OPTIONS="-r -I --exclude-dir=.svn --exclude-dir=.git --exclude-dir=CVS --exclude=*~ --exclude=*.d --exclude=*.o -n"
```

``grep キーワード ディレクトリ`` だけで検索出来るようになります。

```
$ grep hoge .
./src/a.c:3:  printf("hoge..");
./test/hoge/hoge_test.c:1:void hoge_test()
```

``exclude-dir``や``exclude``の設定は各自の環境に合わせて調整して下さい。
URLに使える文字列で可逆暗号化（というより難読化か…）

* 要[MIME::Base32](http://search.cpan.org/dist/MIME-Base32/)

#### コマンド

```sh:
perl -MMIME::Base32 -le "print(lc(MIME::Base32::encode('hoge')))"
```

#### 出力結果

```
d1nmep8
```

* 全小文字利用（Base32には大文字小文字の区別がない）
 * 大文字小文字の区別をするなら、Base64URLだろうけど、1行でいけるのかな…。
* URLからID名などの情報を推測されたくない、というような機能の実装にも利用可能かと…。
* BaseNについては、以下のページが詳しい
 * [uuencode, base64, base64url, base32, base32hex, base16, hex, Q-Encoding FAQ](http://seclan.dll.jp/ccuubq.htm)
Redisでデータファイルを作って適当に遊ぶ

一時的にredis DBのデータを読み書きしたいけどシステムのDBは触りたくないとき．
`redis-server`コマンドの引数に`-`を渡すと設定を標準入力から読むので，以下のようにすれば適当に設定したサーバーを立ち上げられる．設定入力を終えたらctrl-dを押すとサーバーが立ち上がる．

```bash
$ redis-server -
port 12345
logfile stdout
dir .
dbfilename test.rdb
save 1 1
# press ctrl-D
# log ...
```

別プロンプトでDBを触る．

```bash
$ redis-cli -p 12345
redis 127.0.0.1:12345> KEYS *
(empty list or set)
redis 127.0.0.1:12345> SET A 1
OK
redis 127.0.0.1:12345> GET A
"1"
```
CIDRとIP Rangeの変換

* 要[Net::CIDR](http://search.cpan.org/dist/Net-CIDR/)

### CIDR(192.168.0.0/16)->IP範囲の変換

#### コマンド

```sh:
perl -MNet::CIDR -le 'print(join("\n", Net::CIDR::cidr2range("192.68.0.0/16")))'
```
#### 出力結果

```
192.168.0.0-192.168.255.255
```



### IP範囲(192.168.0.0-192.168.255.225)->CIDRの変換

#### コマンド

```sh:
perl -MNet::CIDR -le 'print(join("\n", Net::CIDR::range2cidr("192.168.0.0-192.168.255.225")))'
```

#### 出力結果

```
192.168.255.0/25
192.168.255.128/26
192.168.255.192/27
192.168.255.224/31
192.168.0.0/17
192.168.128.0/18
192.168.192.0/19
192.168.224.0/20
192.168.240.0/21
192.168.248.0/22
192.168.252.0/23
192.168.254.0/24
```

* 複数のCIDRに渡る場合も計算してくれる。
* 順番の法則性はちょっと謎…。
setlocaleはpopenまで面倒みてくんない

// いや、分かってみれば当たり前なんだけどね。

NamazuコマンドをPHPから実行して検索結果を取得するにあたって、
PHPはUTF-8なのでescapeshellarg関数をする前にsetlocale(LC_ALL, 'ja_JP.UTF-8');していたのね。

↓こんな感じ。

```
// $str = 検索条件;
// コマンドインジェクション対策
setlocale(LC_ALL, 'ja_JP.UTF-8');
$str = escapeshellarg($str);
// euc化
$str = mb_convert_encoding($str, 'EUC', 'UTF8');
```

んじゃ、Namazuコマンドを実行する時もsetlocaleしとけばOKかと思って、

```
// 失敗例：
setlocale(LC_ALL, 'ja_JP.eucjp');
$fp = popen("namazu $str /hoge/nmz_index | nkf -w");
```

としてたんだけど、ヒットしない。

正解はpopenする時にコマンド内で指定せなアカン。

```
// 成功例：
$fp = popen("env LANG=ja_JP.eucjp namazu $str /hoge/nmz_index | nkf -w");
```
型変換メモ


byte配列⇒文字列

```byte配列⇒文字列
	byte[] xml;
	String str = new String(xml);
```

文字列⇒byte配列

```文字列⇒byte配列
	String str;
	byte[] xml = str.getBytes();
```

StringBufferクラス
http://akademeia.info/index.php?Java%2F%C9%B8%BD%E0%A5%AF%A5%E9%A5%B9%2FStringBuffer%A5%AF%A5%E9%A5%B9#nf511c14
RubyからPDFを生成 - prawnを使って


## gemをインストール

```ruby:Gemfile
gem 'prawn'
```

## フォントの設定

http://ossipedia.ipa.go.jp/ipafont/index.html
からフォントをダウンロードしアプリからアクセス可能な適当なディレクトリに置く

今回はとりあえずvendor/fontsにしたに下記のファイルを置いた

```
vendor/fonts/
├── ipaexg.ttf
└── ipaexm.ttf
```

## rubyのサンプル

sinatraを使ってPDFを表示するサンプル

```ruby:app.rb
require 'prawn'
require 'open-uri'
require 'sinatra'

get '/' do
  pdf = Prawn::Document.new do
    font "Helvetica"
    text "Test PDF"
    stroke_horizontal_rule
    move_down 30
    font "vendor/fonts/ipaexm.ttf"
    font_size 12
    text "これで日本語が使えるようになる"

    move_down 20
    image open("http://exsample.com/foo.jpg")
    text "画像はローカルからでもopen-uriを使ってurlからでも指定できる"
  end

  content_type "pdf"
  response["Content-Disposition"] = "inline"
  pdf.render
end
```

## 参考

https://github.com/prawnpdf/prawn
Skeltonの描画に関して


Skelton情報描画の入り口は

```
void ofxUserGenerator::draw(const int width, const int height)
```

となっているが、実際の描画は`ofxTrackedUser.h`のなかで宣言されている'struct ofxLimb'で

```
	void debugDraw() {
		if(!found)
			return;
		glPushMatrix();
		glLineWidth(5);
		//glColor3f(1,0,0);
        glColor3f(0,0,1);
		glBegin(GL_LINES);
		glVertex2i(position[0].X, position[0].Y);
		glVertex2i(position[1].X, position[1].Y);
		glEnd();
		glPopMatrix();
	}
```

で行われている。描画座標を変更したい場合、もしくは、Skeltonの色を調整したい場合は個々をいじくる必要がある。
irb内でviを起動する

本とかに載っているサンプルを実行するのに、いままでいちいちファイルを新規に作成して、`ruby test.rb`とかしていたのですが、`interactive_editor`というgemを使えばとても楽になることいまさら知りました。

イントール:

```
$ gem install interactive_editor
```

インストールできたらirbを起動して、お好みのエディタを立ち上げます。ここでは、viですがemacsでも大丈夫です。

```
$ irb
> vi
```

rubyのコードを記述してファイルを保存して、viを終了します。そうするとirbに戻って、エディタで記述したコードが実行されます。再度コードを編集するには、`vi`を実行します。同じセッションであれば同じテンポラリのファイルが使用されます。irbを終了して、irbを立ち上げれば新しいテンポラリファイルが作成されます。
ignore ファイルを正規表現


Bazaar のリポジトリに入れたくないファイルを ignore ファイルに追加しますが、そこで正規表現を使う
恐らく v2.5.x 以上。


## .o ファイルを無視する
```
RE:\.+\.o
```

## templates_c 以下のファイルを無視する
```
RE:templates_c/.+
```

## SVN ディレクトリを無視する
```
RE:.*\.svn
```

よくわからないオプション

```
!.*\.git
```
ActiveRecord::Railtieのイニシャライザを上書きする

Rails上でActiveRecordを使うとconfig/database.ymlを読み取ってよしなに`establish_connetion`をしてくれるけど、
そこら辺の処理を自分でやりたい場合にはRailtieのイニシャライザを上書きする必要がある。

ActiveRecord 3.2.3だと active_record/railtie.rb のなかに次のようなコードがある。

```ruby
initializer "active_record.initialize_database" do |app|
  ActiveSupport.on_load(:active_record) do
    self.configurations = app.config.database_configuration
    establish_connection
  end
end
```

この`active_record.initialize_database`というイニシャライザを config/application.rb のあたりで置き換えてやる。
場所は`if defined?(Bundler)`の下あたり（で動いてる）。

```ruby
ActiveRecord::Railtie.initializers.delete_if do |i|
  i.name == "active_record.initialize_database"
end
module ActiveRecord
  class Railtie < Rails::Railtie
    initializer "active_record.initialize_database", after: "active_record.set_configs" do |app|
      ActiveSupport.on_load(:active_record) do
        # ここにやりたいことを書く
      end
    end
  end
end
```

ちなみにこのように置き換える場合は`initializer`メソッドの`:before`もしくは`:after`が必要っぽい。
これがないと`topological sort failed`という例外が投げられる。
なのでバージョンによって`active_record/railtie.rb`を読んで、前後のイニシャライザからここの値を指定してやる。
圧縮/解凍と同時にOracleのexp/impを行う

```sh:export.sh
#!/bin/bash -
# 圧縮と同時にexpを行う

temp_dir=$(mktemp -d /tmp/expdat.XXXXXXXXX)

cleanup="rm -rf $temp_dir"
trap "$cleanup" ABRT EXIT HUP INT QUIT

mkfifo ${temp_dir}/expdat.pipe
gzip < ${temp_dir}/expdat.pipe > expdat.dmp.gz &

exp scott/tiger FILE=${temp_dir}/expdat.pipe LOG=expdat.log TABLES=(EMP,DEPT)
```

```sh:import.sh
#!/bin/bash -
# 解凍と同時にimpを行う

temp_dir=$(mktemp -d /tmp/impdat.XXXXXXXXX)

cleanup="rm -rf $temp_dir"
trap "$cleanup" ABRT EXIT HUP INT QUIT

mkfifo ${temp_dir}/impdat.pipe
gzip -d < expdat.dmp.gz > ${temp_dir}/impdat.pipe &

imp scott/tiger FILE=${temp_dir}/impdat.pipe LOG=impdat.log IGNORE=Y TABLES=(EMP,DEPT)
```
Fedora16でmongodをservice化するにはpidfileとしてmongod.lockを指定


Fedora16でmongodをserviceとして扱いたかったのだが、

~~~~~cs:/var/log/messages
May 21 09:37:42 mongoB1 systemd[1]: PID file /var/run/mongo/mongo.pid not readable (yet?) after start.
~~~~~

こんなエラーを吐いて「プロセスは起動してるけどsystemctlから再起動/停止できない」状態で走り始めて困っていた。

[GoogleGroups mongodb-userの1スレッド](http://groups.google.com/group/mongodb-user/tree/browse_frm/thread/f0fe28d14b66ca7a/87b812377b0dab75?rnum=1&_done=/group/mongodb-user/browse_frm/thread/f0fe28d14b66ca7a/87b812377b0dab75?tvc=1&&pli=1)によれば、init scriptを以下のように修正すれば良いらしい。


~~~~diff:/etc/init.d/mongod
-# pidfile: /var/run/mongo/mongo.pid
+# pidfile: /data/db/mongod.lock
~~~~

`sudo systemctl --system demon-reload`で読み込ませてやると…確かに動いた。なんだこれ。
クリックしても何も起こらないダミーのa要素

制作途中など、リンクを張る予定だけどURLは決まっていないという時に、ダミーのa要素を作っておきたいことがある。というわけで、クリックしても何も起こらないダミーのa要素を3パターン書いてみた。

#HTML5のプレースホルダー・リンク

HTML5ではJavaScriptなどによって動的にリンク先を設定するケースを考慮し、a要素にhref属性が必須とされていないので、以下のような書き方ができる。href属性がないa要素を「プレースホルダー・リンク」と言う。ただし、ブラウザの標準スタイルでは文字色も下線もマウスポインタもデフォルトのままになるので、必要に応じて別途スタイル指定をする必要がある。

```html
<a>リンク文字列</a>
```

#javascirpt:void(0);を使う

```html
<a href="javascript:void(0);">リンク文字列</a>
```

#return false;を使う

clickイベント時にreturn falseすることでhref属性で指定したリンク先を無効にするというやり方。下の書き方だとjQuery必須だが、ピュアなJavaScriptで代替もできる。

```html
<a href="./" class="dummy">リンク文字列</a>
```

```js
$('.dummy').click(function(){
	return false;
}
```
AudioUnit Sample On cocos2d


```
#import <Foundation/Foundation.h>
#import "cocos2d.h"
#import <AudioUnit/AudioUnit.h>

@interface SoundBox : CCLayer {

    AudioUnit audioUnit;
    
    float phase;
    float samplingRate;
    float sineWaveFrequency;
    float fraquency;
            
}

+(id)soundBox;
-(id)initSoundBox;

-(void)start;
-(void)stop;

@property (nonatomic) float phase;
@property (nonatomic) float samplingRate;
@property (nonatomic) float sineWaveFrequency;
@property (nonatomic) float frequency;


@end
```

```
#import "SoundBox.h"

@implementation SoundBox

@synthesize phase;
@synthesize samplingRate;
@synthesize sineWaveFrequency;
@synthesize frequency;

+(id)soundBox
{
    return [[self alloc]initSoundBox];
}

-(id)initSoundBox
{
    if((self = [super init]))
    {
        self.samplingRate = 44100;
        self.sineWaveFrequency = 440;
        self.frequency = self.sineWaveFrequency * 2 * M_PI / self.samplingRate;
        
        [self prepareAudioUnit];
    }
    return self;
}

-(void)start
{
    AudioOutputUnitStart(audioUnit);
}

-(void)stop
{
    AudioOutputUnitStop(audioUnit);
}

OSStatus AURenderCallBack(void *inRefcon,
                        AudioUnitRenderActionFlags *ioActionFlags,
                        const AudioTimeStamp *inTimeStamp,
                        UInt32 inBusNumber,
                        UInt32 inNumberFrames,
                        AudioBufferList *ioData)
{
    SoundBox *soundBox = (__bridge SoundBox *)inRefcon;
    soundBox.frequency = soundBox.sineWaveFrequency * 2 * M_PI / soundBox.samplingRate;
    
    //float *outL = ioData->mBuffers[1].mData;
    float *outR = ioData->mBuffers[0].mData;
    
    for(int i = 0;i < (int)inNumberFrames;i++)
    {
        float wave = sin(soundBox.phase);
        //*outL++ = wave;
        *outR++ = wave;
        soundBox.phase += soundBox.frequency;
    }
    return noErr;
}
   

-(void)prepareAudioUnit
{
    AudioComponentDescription cd;
    cd.componentType = kAudioUnitType_Output;
    cd.componentSubType = kAudioUnitSubType_RemoteIO;
    cd.componentManufacturer = kAudioUnitManufacturer_Apple;
    cd.componentFlagsMask = 0;
    cd.componentFlags = 0;
    
    AudioComponent component = AudioComponentFindNext(NULL, &cd);
    AudioComponentInstanceNew(component, &audioUnit);
    AudioUnitInitialize(audioUnit);
    AURenderCallbackStruct callBackStruct;
    callBackStruct.inputProc = AURenderCallBack;
    callBackStruct.inputProcRefCon = (__bridge void*)self;
    AudioUnitSetProperty(audioUnit, kAudioUnitProperty_SetRenderCallback, kAudioUnitScope_Input, 0, &callBackStruct, sizeof(callBackStruct));
    
    //AudioOutputUnitStart(audioUnit);
    
}


@end
```
alpha を弄ると、Meshが勝手に除去される罠


原因は追ってないが、
addchildした直後にalphaを弄ると、Renderされなくなる問題がある。

alpha弄るような操作は、addChildして、数フレームしてから弄ったほうがよいっぽい。

というか、なにこの挙動…
いみわかんないよ Σ(´□｀;)
RMagickのインストールでエラー


`bundle install`でRMagickをインストール中にエラーが発生したのでそれの解決法についてメモっておきます．

以下が`bundle install`中のエラーメッセージ．

```
Installing rmagick (2.13.1) with native extensions 
Gem::Installer::ExtensionBuildError: ERROR: Failed to build gem native extension.

        /Users/ユーザ名/.rbenv/versions/1.9.3-p194/bin/ruby extconf.rb 
checking for Ruby version >= 1.8.5... yes
extconf.rb:128: Use RbConfig instead of obsolete and deprecated Config.
checking for gcc... yes
checking for Magick-config... yes
checking for ImageMagick version >= 6.4.9... yes
checking for HDRI disabled version of ImageMagick... yes
Package MagickCore was not found in the pkg-config search path.
Perhaps you should add the directory containing `MagickCore.pc'
to the PKG_CONFIG_PATH environment variable
No package 'MagickCore' found
Package MagickCore was not found in the pkg-config search path.
Perhaps you should add the directory containing `MagickCore.pc'
to the PKG_CONFIG_PATH environment variable
No package 'MagickCore' found
Package MagickCore was not found in the pkg-config search path.
Perhaps you should add the directory containing `MagickCore.pc'
to the PKG_CONFIG_PATH environment variable
No package 'MagickCore' found
Package MagickCore was not found in the pkg-config search path.
Perhaps you should add the directory containing `MagickCore.pc'
to the PKG_CONFIG_PATH environment variable
No package 'MagickCore' found
checking for stdint.h... yes
checking for sys/types.h... yes
checking for wand/MagickWand.h... no

Can't install RMagick 2.13.1. Can't find MagickWand.h.
*** extconf.rb failed ***
Could not create Makefile due to some reason, probably lack of
necessary libraries and/or headers.  Check the mkmf.log file for more
details.  You may need configuration options.

Provided configuration options:
	--with-opt-dir
	--without-opt-dir
	--with-opt-include
	--without-opt-include=${opt-dir}/include
	--with-opt-lib
	--without-opt-lib=${opt-dir}/lib
	--with-make-prog
	--without-make-prog
	--srcdir=.
	--curdir
	--ruby=/Users/ユーザ名/.rbenv/versions/1.9.3-p194/bin/ruby


Gem files will remain installed in /somewhere/vendor/bundle/ruby/1.9.1/gems/rmagick-2.13.1 for inspection.
Results logged to /somewhere/vendor/bundle/ruby/1.9.1/gems/rmagick-2.13.1/ext/RMagick/gem_make.out
An error occured while installing rmagick (2.13.1), and Bundler cannot continue.
Make sure that `gem install rmagick -v '2.13.1'` succeeds before bundling.
```

色々書かれていますが，要するにwand/MagickWand.hが見つからないっていうことだと判断．ImageMagick自体はインストールされているはずなので，`locate wand/MagickWand.h`で該当ファイルがあるかどうかを確認．

```
/usr/local/include/ImageMagick/wand/MagickWand.h
/usr/local/src/ImageMagick-6.7.4-4/wand/MagickWand.h
```

ものはあるらしい，ということでこの場所を参照していないんだろうと推測．

と，ここまで来てエラーメッセージを見返すと

```
Perhaps you should add the directory containing `MagickCore.pc'
to the PKG_CONFIG_PATH environment variable
```

とのこと．なんだ書いてあるじゃないか！ということで`locate MagickCore.pc`をするとどうやら`/usr/local/lib/pkgconfig/`にあるらしい．
更に`env | grep PKG_CONFIG_PATH`をするとPKG_CONFIG_PATHに何も設定されていないことがわかったので，`export PKG_CONFIG_PATH=/usr/local/lib/pkgconfig`で設定．

これで改めて`bundle install`をしてみたらちゃんと入ってくれました．
SequelでSELECTするメソッドの微妙な違い

取得レコードが０件だとすると

```ruby
DB[:reference][:from => page.id]        #=> nil
DB[:reference].filter(:from => page.id) #=> []
```

となるので、状況によって使い分ける必要がある。

* 条件判定に使うのであれば（「もしレコードが存在するなら」） `[]` を使う
* 取得したレコードを更にフィルタリングやHTMLへの変換に使うのであれば（`records.collect {|record| ...}`） `filter` を使う
Capistrano で cap deploy:setup がエラー

deploy:setup を実行すると sudo しているところで、以下のエラーがでることがある。

    sorry, you must have a tty to run sudo

この場合、Capfile に以下の記述を追加することで防げる。

```ruby:Capfile
default_run_options[:pty] = true
```

sudoers をいじる手もあるようだけど、Capistrano で解決できるのであれば、これがよいのかな〜
Capistrano でマシン上のソースコードをそのまま Deploy

deploy_via に :copy を設定することで、Deploy 先サーバから SCM にアクセスするのではなく、Capistrano を実行しているマシン上のソースコードを Deploy 先に送ることができる。

```ruby:deploy.rb
# SCM は使わない。
set :scm, :none

# local_repository が重要。. = Rails Application のルートディレクトリ。repository の設定がないと怒られるので、とりあえず設定。どう使われているのかがよくわかっていない。。。
set :repository, "."
set :local_repository, "."

# 今回のポイント
set :deploy_via, :copy
```
Gitリポジトリ内の特定の語を全て置換する

FooをBarにする場合、先にfoo->barをしてしまうと、Fooまでbarになってしまうので注意（FooはBarになって欲しいはず)

# BSD (Mac)

BSDでは`--in-place`がバックアップファイルの拡張子を受け取るので、バックアップファイルが要らない場合は''を指定する

```
git grep -l Foo | xargs sed -i '' -e 's/Foo/Bar/g'
git grep -l foo | xargs sed -i '' -e 's/foo/bar/g'
```

''を忘れると`-e`というのが末尾に追加されたバックアップファイルが作成される（置換はちゃんと行われる。この動作はバグなんじゃないかと思うけど、よく分からない）

# GNU

GNUのsed若干実装が違うため、''を渡す必要がない。

```
git grep -l Foo | xargs sed -i -e 's/Foo/Bar/g'
git grep -l foo | xargs sed -i -e 's/foo/bar/g'
```

逆に、バックアップファイルが欲しい場合（拡張子.bakをつける)

```
git grep -l Foo | xargs sed -i.bak -e 's/Foo/Bar/g'
git grep -l foo | xargs sed -i.bak -e 's/foo/bar/g'
```

iと.bakが連続している点に注意
RubyMotionでGCDを使う


![GCD](https://lh6.googleusercontent.com/-nEOFLDxo0SE/T7cKmnkUM3I/AAAAAAAAAac/F_9TagXzXTE/s300/gcd.png)

今日はRubyMotionでGCD(Grand Central Dispatch)を使う話です．

## GCD とは
GCDというのは，

> 非常に効率的なシステム機能と使い勝手のよいプログラミングモデルを併用して，マルチプロセッサを最大限に活用するために必要なコードを徹底的に簡素化

するものらしいです
（AppleのGrand Central Dispatchの説明より）

UITableViewとかそういうのはMainThreadでちょっと重い処理をすると，すぐにパフォーマンスが悪くなってなんだこのアプリ糞だな！とか言われるので，そういう時には別Threadを立ててMainThreadの処理を邪魔しないように処理を行う必要があります．
それを楽にしてくれるのがGCD．

## Objective-C
Obj-Cのコードだと，

```objectivec
    dispatch_queue_t queue = dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0);
    dispatch_async(queue, ^{
        // 処理
    });
```
こんな感じになります．

## RubyMotion
RubyMotionでは，GCD関連は`Dispatch`クラスを使います．

[RubyMotion Runtime Guid](http://www.rubymotion.com/developer-center/guides/runtime/#_grand_central_dispatch) にも書いてます．

上で書いたObj-CのコードをRubyMotionで書きなおすと，

```ruby
    Dispatch::Queue.concurrent.async{
        # 処理
    }
```
こうなります．超簡単．

## UIの更新に関して
さて，実際にはConcurrent Dispatch Queueで時間のかかる処理を行い，
処理を行った結果をUIに反映させることがよくあります．
その場合に直接UIへ値を代入とかすると落ちます．
UIはMainThreadから更新しなければなりません．
その場合は，

```ruby
    Dispatch::Queue.concurrent.async{
        # 処理
        Dispatch::Queue.main.async{
            #UI更新
        }
    }
```
このように`Dispatch::Queue.main`でMain Dispatch Queueに更新処理を入れることで実現できます．

## 実戦
実際に少し書いてみます．

    $ motion create gcd
    $ cd gcd

### app/app_delegate.rb
```ruby:app/app_delegate.rb
    class AppDelegate
      def application(application, didFinishLaunchingWithOptions:launchOptions)
        @window = UIWindow.alloc.initWithFrame UIScreen.mainScreen.bounds
        @window.rootViewController = NSBundle.mainBundle.loadNibNamed(
            'RootViewController', 
            owner: self,
            options: nil).first
        @window.rootViewController.wantsFullScreenLayout = true
        @window.makeKeyAndVisible
        true
      end
    end
```
### InterfaceBuilder
`resouces/RootViewController.xib` という形でUIButton(Tag 2)，UILabel(Tag 1)を追加しておいて下さい．
（参考：[[RUBYMOTION] INTERFACEBUILDERと合わせて使って楽をしよう](http://pochixpochi.blogspot.jp/2012/05/rubymotion-interfacebuilder.html)）

### app/root_view_controller.rb
```ruby:app/root_view_controller.rb
    class RootViewController < UIViewController
        def viewDidLoad
            @label = view.viewWithTag 1
            @button = view.viewWithTag 2
            @button.addTarget(
                self,
                action: 'onClicked:',
                forControlEvents:UIControlEventTouchUpInside)
        end

        def onClicked(sender)
            p "onClicked"

            Dispatch::Queue.concurrent.async {
                NSThread.sleepForTimeInterval 5
                Dispatch::Queue.main.async {
                    @label.text = ["hoge", "fuga", "moge"].sample
                }
            }
        end
    end
```
### 実行
    $ rake
シミュレータが立ち上がり，Buttonを押すとLabelの文字列がちょっと待ったあとに変わります．
連打すると次々変わると思います．
その間Buttonが押せないとかそういうことが起こらないのが分かると思います．
知名度の割に優秀なCSSフレームワーク

教えてください。
自分が使っているのはメジャーなtwitter bootstarapですが、他にも色々ありそうなので、おすすめのものがあれば簡単な解説をお願いします。複数の視点があるといいので、かぶっても気にせず書いて頂けると嬉しいです。
qjail で Ports を使う


`qjail update -p` を実行したところ、下記のようなエラーが発生した。

```
Error: Portsnap extract/update failed.
```

調べてみると、`portsnap extract` が実行されていなかったようなので、下記のように対処した。

```
# portsnap -p "/usr/jails/basejail/usr/ports/" extract
# sudo qjail update -p
```
後始末用のコードの実行を ensure 節で保証する

「一般ユーザー権限で chroot 環境下で外部コマンドを実行する」というコードを脳に優しく書けるようにするために、 `ensure` 節を使って後始末のことを心配しないメソッドをつくる。

## run_with_chroot - chroot 環境下で外部コマンドを実行する

「一般ユーザー権限で chroot 環境下で外部コマンドを実行する」用。なお、 `mount`, `umount`, `chroot` は sudoers で使用を許可されているものとする。

```run_with_chroot.rb
def run_with_chroot(root, command)
  dirs_for_chroot = %w[bin dev etc lib lib64 proc tmp usr var]
  begin
    Dir.mkdir(root) unless Dir.exists?(root)
    dirs_for_chroot.each do |dir|
      Dir.mkdir("#{root}/#{dir}") unless Dir.exists?("#{root}/#{dir}")
      system("sudo mount -o bind #{dir} #{root}/#{dir}")
    end

    system("sudo chroot #{root} #{command}")
  ensure
    dirs_for_chroot.each do |dir|
      system("sudo umount #{root}/#{dir}")
    end
  end
end

# chroot 環境下で /hoge というファイルを作成すると、
# chroot 環境外では /var/root/hoge というファイルができる
run_with_chroot('/var/root', 'touch /hoge')
```

`chroot` 環境をお膳立てするために、事前に `mount` しておいて事後に `umount` する必要があるが、これを毎回書くのはしんどいし、途中でプログラムが例外を投げて `umount` しないまま落ちたりすると面倒なことになる。そこで `umount` するコードを `ensure` 節に置くことで、後始末用のコードが確実に実行されるようにする。

プログラムを `root` 権限で動かせるなら `system("chroot /path/to/root command")` の代わりに `Dir.chroot` を使うとなお良い。そうすれば `with_chroot` というブロック付きメソッドを定義して、より読みやすいコードが書けるだろう。
ブロック付きメソッドで with-* マクロっぽい構文をつくる


「特定の環境変数を上書きして複数の外部コマンドを実行する」というコードを脳に優しく書けるようにするために、ブロック付きメソッドを活用して Lisp の with-* マクロのような構文をつくる。

## with_env - 環境変数を上書きしてブロックを実行する

「特定の環境変数を上書きして複数の外部コマンドを実行する」用のユーティリティメソッド。ブロックの中でだけ環境変数を変更できる。

```with_env.rb
def with_env(env, &block)
  original_env = ENV.to_hash
  ENV.update(env)

  yield if block_given?
ensure
  ENV.replace(original_env)
end

env = {'GEM_HOME' => nil, 'BUNDLE_GEMFILE' => nil}

with_env(env) do
  system('bundle install --path=vendor/bundle')
  system('bundle exec rake spec')
end
```

`system(env, command)` としても良いのだけど、毎回同じ変数を渡すのは DRY ではないし、ブロックの中のコードを単独のメソッドに切り出したときいちいち `env` を渡すのはうれしくない。影響がブロック内に限定されているほうが理解しやすい。

なお、この実装は [Bundler.with_original_env](https://github.com/carlhuda/bundler/blob/master/lib/bundler.rb#L192) を参考にした。
cocos2d relative to touch


```
#pragma marks -- relative to touch --
-(void)registerWithTouchDispatcher
{
	CCDirector *director = [CCDirector sharedDirector];
    [[director touchDispatcher] addTargetedDelegate:self priority:kCCMenuHandlerPriority swallowsTouches:YES];
}

-(BOOL)ccTouchBegan:(UITouch *)touch withEvent:(UIEvent *)event
{
    CGPoint location = [[CCDirector sharedDirector] convertToGL:[touch locationInView:[touch view]]];
	location = [self convertToNodeSpace:location]; 
    return YES;
}

-(void)ccTouchMoved:(UITouch *)touch withEvent:(UIEvent *)event
{
    CGPoint location = [[CCDirector sharedDirector] convertToGL:[touch locationInView:[touch view]]];
	location = [self convertToNodeSpace:location];
}

-(void)ccTouchEnded:(UITouch *)touch withEvent:(UIEvent *)event
{
}
```
Twitterのショートカットを日本語IMEがOnの時も動作させたい（未完）

https://twitter.com/ のキーボードショートカットは，日本語入力がOnの際は動作しません．
これは，keyDownイベントのkeyCodeの値が，日本語入力時と英語入力時で異なるためであると考えられます．
一方で，keyUpイベントのkeyCodeの値は，日本語入力・英語入力時で同じです．
従って，keyUpイベントの値を利用して，keyDownイベントをシミュレートすればと良いと考え，以下のようなコードを書きました．

	// Chromeのkeyboardイベントクラス実装では，keyCodeはreadOnlyとなっているため，以下のような方法を用いています．
	// 参照： https://groups.google.com/forum/#!msg/chrome-api-developers-jp/nZgW_c61dvs/YO5dvpk8iREJ
	function dispatchKeyDown(receivedEvent) {
		var createdEvent = document.createEvent('Event');
		var options = {
			type:'keydown',
			canBubble: true,
			cancelable: true,
		};
		createdEvent.initEvent(options.type, options.canBubble, options.cancelable);
	
		Object.keys(receivedEvent).forEach(function(key) {
			if (!options.key)
				createdEvent[key] = receivedEvent[key];
		});
	
		createdEvent.__proto__ = document.createEvent('KeyboardEvent').__proto__;
		document.dispatchEvent(createdEvent);
	}
	
	document.addEventListener('keyup', dispatchKeyDown);
	document.addEventListener('keydown', function(e) {console.log(e.keyCode);});

ログを見るとkeyCodeの値は正しく設定されているようですが，Twitterのショートカットは起動できません．
keypressイベントでショートカットが起動するのかと思い，適当なkeyCodeを与えてkeypressでもやってみましたが（keyupのkeyCodeとkeypressのkeyCodeは異なるため），うまくいきませんでした．
考えられる理由，TwitterのJavaScriptを読んでいる人のブログなどご存じの方がいらっしゃいましたら，ご教示いただけないでしょうか．
Yesodをnginxで動かす。書いてあるとおりにやったら動いた。

http://www.yesodweb.com/book/deploying-your-webapp


    http {
    　　server {
            listen 80;
            server_name myserver.com;
            rewrite ^/(.*) http://www.myserver.com/$1 permanent;
        }
    
        server {
            listen 80; # Incoming port for Nginx
            server_name www.myserver.com;
            location / {
                proxy_pass http://127.0.0.1:4321; # Reverse proxy to your Yesod app
            }
        }
    }
リリースビルドついでにログコードを自動削除する方法

Proguardを利用すれば、リリースビルドついでにログコードを削除できます。
下記のようなログクラスを作成している場合・・・

```java:qiita.rb
package yuki.proguard;
public abstract class Logger {
    public static void v(String log) { ... }
    public static void d(String log) { ... }
```

下記のProguardConfigを設定することで、リリースビルド時にProguard機能が働き、
ログコードを削除してくれます。

```text:qiita.rb
-assumenosideeffects class yuki.proguard.Logger {
    public static *** v(...);
    public static *** d(...);
}
```

参考：http://yuki312.blogspot.jp/2012/03/androidproguard_09.html

こちらも合わせてご覧ください. [`-assumenosideeffects class android.util.Log { <methods>; }` は使っちゃダメ](http://qiita.com/gfx/items/e412dab7f127b7ae44d8)
最初のActivityに戻る

A→B→C→Dなどと複数のアクティビティを遷移した後、最初のAに戻る実装。

```java:DActivity.java
Intent intent = new Intent(DActivity.this, AActivity.class);
intent.addFlags(Intent.FLAG_ACTIVITY_CLEAR_TOP);
intent.addFlags(Intent.FLAG_ACTIVITY_SINGLE_TOP);
startActivity(intent);
```

- `FLAG_ACTIVITY_CLEAR_TOP`は、遷移先のアクティビティが既に動いていればそのアクティビティより上にある（この場合はB, C, D）アクティビティを消す、という挙動を設定する。これによって、A→B→C→D→Aと遷移した後にbackボタンを押してもDに戻ることはなくなる。
- `FLAG_ACTIVITY_SINGLE_TOP`は、既に動いているアクティビティに遷移するとそのアクティビティを閉じてもう一度作りなおすデフォルトの挙動（multiple mode）から、作りなおさずに再利用する挙動に変更する。これによって、D→Aへの遷移のときのアニメーションが戻る動きになる。

### 参考
- http://developer.android.com/reference/android/content/Intent.html#FLAG_ACTIVITY_CLEAR_TOP
よく使うRouting設定

詳しいルート定義の確認は

```bash
rake routes
```

## ControllerやHelperの変更
### Controller

```ruby:routes.rb
resources :users, :controller => 'members'
```

### Helper
```ruby:routes.rb
resources :reviews, :as => 'comments'
```

## モジュール配下のController

### controllers/admin/videos_controller.rb
まずはgenerate

```bash:
$ rails g controller Admin::Videos
```

これでAdmin::VideosControllerがcontrollers/adminにvideos_controller.rbという名前で生成される。
あとは、そのrouting設定

```ruby:routes.rb
namespace 'admin' do
  resources :videos
end
```

/admin/videosや /admin/videos/:id といったURLパターンと、
admin_videos_pathやadmin_video_path(id)のようなUrlヘルパーが生成される。
viewsのファイルも、views/admin/videosに移動しておく。

### URLパターンやUrlヘルパーに影響を与えない場合
（今回の例では、URLパターンやUrlヘルパーにadminを挿入ない場合）

```ruby:routes.rb
scope :module => 'admin' do
  resources :videos
end
```

controllerはadmin/videos_controller.rbを参照するが、UrlヘルパーとURLパターンには影響が無くなる。（つまり、普通に"resources :videos"とした場合と一緒）

### Adminモジュールに属さないものにadminが付いたURLを割り当てたい場合
（今回の例では、Videosコントローラに対して、"/admin/videos"のようなURLを割り当てる場合）

```ruby:routes.rb
scope 'admin' do
  resources :videos
end
```

さらに

```ruby:routes.rb
scope ':admin' do
  resources :videos
end
```

とすることで、

/:admin/videos
のような"ルートパラメータ"を含ませることが出来る。

## アクションを追加する

```ruby:routes.rb
resources :users do
  collection do
    get 'action_x'
  end
  member do
    get 'action_y'
  end
end
```

とする。アクションが1つなら

```ruby:routes.rb
resources :users do
  get 'action_x', :on => :collection
  get 'action_y', :on => :member
end
```

とも書ける。

collectionによって
/users/action_x(.:format)
action_x_users_path, action_x_users_url

memberによって
/users/:id/action_y(.:format)
action_y_users_path, action_y_users_url

が生成される。

## アクションの無効化
### except

```ruby:routes.rb
resources :users, :except => ['show', 'destroy']
```

とすることで、show, destroyアクションに関するルート定義は行われなくなる。

### only

```ruby:routes.rb
resources :users, :only => ['index', 'show']
```

とすることで、index, showアクションに関するルート定義だけしか行われなくなる。

## アクションに関連づいたURLを変更する

```ruby:routes.rb
resources :users, :path_names => { :new => 'atarashino', :edit => 'henko' }
```

とすることで、
"/users/atarashino"と"/users/:id/henko"というURLから、それぞれnew, editアクションを呼び出せる

## ネスト

videosリソースがその配下にcommentsリソースを伴うとき（has_manyやbelongs_toで、アソシエーションが設定されているとき）"/videos/3/comments"のようなURLを作る。

```ruby:routes.rb
resources :videos do
  resources :reviews
end
```

## match

```ruby:routes.rb
match ':controller(/:action(/:id(.:format)))'
```

（初めて手で打った。。。）
java の正規表現で「.」は改行コードにマッチしない

".*def.*" は "hoge_def\nfuga_def\n" にマッチしない。

```java
"hoge_def".matches(".*def.*");  // true
"hoge_def\nfuga_def\n".matches(".*def.*");  //false
"hoge_def".matches("(.|\n)*def(.|\n)*");  // true
```

行末にもマッチしない。

```java
"hoge_def\nfuga_def\n".matches("(.|$)*def(.|$)*");  //false
```