OmniAICreator/Qiita-1.07M huggingface dataset:
macでvim準備


# vim +clipboardにする

```
brew install https://raw.github.com/gist/721952/e99293dc36c9b5c27aec0a4024b848ce50b9b126/vim.rb --big
```

# dotfiles

```
cd ~
mkdir -p ~/repository/github.com/$USER
git clone git@github.com:$USER/dotfiles.git ~/repository/github.com/$USER/dotfiles
ln -nsf ~/repository/github.com/$USER/dotfiles/.vim .vim
ln -nsf ~/repository/github.com/$USER/dotfiles/.vimrc .vimrc
```


# vundle

```
git clone http://github.com/gmarik/vundle.git ~/.vim/bundle/vundle
```
GoogleAppEngineのデータストアでStringPropertyに日本語で保存する

先頭に

```python:save.py
# -*- coding: utf-8 -*-
```

を入れる。
（ファイルもUTF-8で保存する。Shift-JISでは×）

```python:save.py
saveEntity.SaveStr = unicode( insertstr , "utf-8")
saveEntity.put()
```
letとsubjectのメモ

```ruby:let_spec.rb

# -*- coding: utf-8 -*-

require 'rubygems'
require 'rspec'

# テスト用のクラス
class Hoge
  attr_accessor :name
  def initialize(name)
    @name = name
  end
end

describe Hoge do
  # letの動作確認をする
  let(:init) {Hoge.new('hoge')}

  # 成功
  it {init.name.should  == 'hoge'}

  # 成功
  it {
    init.name = 'hogehoge'
    init.name.should  == 'hogehoge'
  }

  # 失敗
  # 上記までの状態は保持していない
  # ブロック内で実行された際に初めて実行される感じ？
  # 別のブロックになったら再度、実行されるから
  # 状態が元に戻るような感じ
  it { init.name.should == 'hogehoge'}

  # これはダメ、エラーになる
  # init.name = 'aaaa'

  # これもダメ
  # letで定義したものを触れるのはit内だけ？
  # context 'hogehoge' do
    # init.name = 'huga-'
  # end

  # subjectについて
  # 以降、subjectが再度、出現するまで
  # shouldのレシーバは省略が可能
  subject { init }
  it {should_not be_nil}

  # subjectが保持するメソッドを評価したい場合は
  # こんな感じ
  its(:name) {should  == 'hoge'}

  # これでもいい
  # 引数が必要な場合はこの方法だけ？
  it {subject.name.should  == 'hoge'}

  describe 'Fuga' do
    # このブロック内の記述をdescribeの外に出すとエラー
    # なぜだ？
    subject {'fuga'}
    it {should_not be_empty}
    it {should  == 'fuga'}
  end

end
```

実行。

```sh
rspec -cfs let_spec.rb
```

結果。

```

Hoge
  should == "hoge"
  should == "hogehoge"
  should == "hogehoge" (FAILED - 1)
  should not be nil
  should == "hoge"
  name
    should == "hoge"
  Fuga
    should not be empty
    should == "fuga"

Failures:

  1) Hoge 
     Failure/Error: it { init.name.should == 'hogehoge'}
       expected: "hogehoge"
            got: "hoge" (using ==)
     # ./let_spec.rb:32:in `block (2 levels) in <top (required)>'

Finished in 0.00588 seconds
8 examples, 1 failure

Failed examples:

rspec ./let_spec.rb:32 # Hoge 

```
configファイルの設定tips


```config.rb
module M
    class C
        attr_reader :a, :b, :c
        def initialize
         # 初期化処理
        end
        
        class << self
            def load(file)
                c = self.new
                c.instance_eval(File.read(file))
                c
            end
        end
    end
end
```

```
呼び元
config = C.load("hoge.conf.rb")
```

```
hoge.conf.rb の中身
@a = …
@b = …
@c = …
```
Herokuのnode.jsのバージョン指定

https://devcenter.heroku.com/articles/nodejs-versions
を見て、package.jsonを書き換えると良い。

--buildpackの指定はいらなかったのかもしれないが、既にアップグレードしてしまったので検証できない。誰かがやったときに教えてもらおうと思う。自分の場合は以下のようにした。

```sh
heroku config:add --app [application名] BUILDPACK_URL=git://github.com/heroku/heroku-buildpack-nodejs.git
```
テストサーバー用のアカウント作成方法

1.サーバーログイン後、スーパーユーザーに。

```:
su -
```

2.HTMLデータを格納するフォルダを作成

```:
cd /var/www/html/
mkdir "フォルダ名"
cd "作成したフォルダ名"
mkdir htdocs
```

3.シェルが使えず、ホームディレクトリが /var/www/html/hoge のユーザー[hoge]を作る方法。警告がでるが次に進む

```
adduser --shell /sbin/nologin --home /var/www/html/hoge/ hoge
```

4.パスワードを設定

```:
passwd hoge
```

5.ユーザーを記載する

```
vi /etc/vsftpd/user_list
```

6.上位ディレクトリにアクセス許可するユーザを/etc/vsftpd/chroot_listに設定しますどのユーザーにも許可させないので、そのまま保存して、空のファイルを作ります。

```
vi /etc/vsftpd/chroot_list
```

7.vsftpdを再起動

```
/etc/rc.d/init.d/vsftpd restart
```

8.バーチャルホストの設定

```
vi /etc/httpd/conf/httpd.conf
```
```html:httpd.conf
<VirtualHost "ipアドレス":80>
    ServerAdmin メールアドレス
    DocumentRoot /var/www/html/homefolder/htdocs
    ServerName domain.com
    ErrorLog domain.com-error_log
        ServerName domain.com
    ErrorLog domain.com-error_log
    CustomLog domain.com-access_log common
</VirtualHost>
```

9.httpdを再起動

```
/etc/rc.d/init.d/httpd restart
```
Nginxでgzip圧縮をかける設定例


```Nginx:gzip
gzip on;
gzip_proxied     any;
gzip_min_length  1000;

# text/html は設定如何に関わらず入る
gzip_types       text/css text/javascript application/javascript application/x-javascript;

# ie5.5 ie6 SV1,2の場合は無視
gzip_disable     "msie6";

# varyヘッダを有効にする
gzip_vary        on;
```
写真共有サービスのサムネイルURLを取得

サムネイルサイズはスマホ用にしておきました。

```javascript:photoSNSThumbNailSrc.js
var photoSNSThumbNail = {
    plist:[
        [/http:\/\/twitpic[.]com\/(\w+)/,       'http://twitpic.com/show/thumb/$1'], // 150px
        [/(http:\/\/plixi[.]com\/p\/\d+)/,      'http://api.plixi.com/api/TPAPI.svc/imagefromurl?size=mobile&url=$1'], // 320px
        [/http:\/\/p[.]twipple[.]jp\/(\w+)/,    'http://p.twipple.jp/show/thumb/$1'], // 160px
        [/http:\/\/yfrog[.]com\/(\w+)/,     	'http://yfrog.com/$1:iphone'], // 480px
        [/(http:\/\/lockerz[.]com\/s\/\d+)/,    'http://api.plixi.com/api/TPAPI.svc/imagefromurl?size=mobile&url=$1'], // 320px
        [/http:\/\/instagr[.]am\/p\/(\w+)\//,   'http://instagr.am/p/$1/media/?size=m'], // 306px
        [/(http:\/\/p[.]twimg[.]com\/[a-zA-Z0-9_.\-]+)/,'$1:thumb']
    ],
    getImgSrc:function(str){
		var pl = this.plist,rStr,i=0,l=pl.length;
		for(;i<l;++i){
            if(pl[i][0].test(str)){
				rStr = str.replace(pl[i][0],pl[i][1]);
				break;
            }
		}
		return rStr;
    }
};

// サンプル
//var sampleSrc = photoSNSThumbNail.getImgSrc('http://p.twipple.jp/wKXyU');
//document.write(sampleSrc);

```
Railsのルーティングとフォーマット

APIのルーティングでサブドメインをapiにする制約をつけてみました。

```routes.rb
constrains subdomain: 'api' do
  resources :users
end
```

これで、`api.domain.com/users/1`とかで取得できるのですが、そのままだとhtmlが返ってきちゃいます。
もちろん`api.domain.com/users/1.json`とかすればいいんですが、オープンなAPIにするならフォーマット指定しなきゃhtmlが返ってきてしまうAPIというのも罠臭いなーと。

constrainsはformatの制約も課せるので、

```routes.rb
constrains subdomain: 'api', format: :json do
  resources :users
end
```

とすれば、`api.domain.com/users/1.html`のルーティングにヒットしなくなります。
あとはApplicationControllerに

```application_controller.rb
  before_filter :set_api_format

private
  def set_api_format
    if request.subdomain == 'api' and request.format == :html
      request.format = :json
    end
  end
```

とすれば、`api.domain.com/users/1.html`はルーティングにヒットされなくなり、
`api.domain.com/users/1`は`api.domain.com/users/1.json`として処理されます。

jsonだけでなくxmlもサポートしたいのならば、constrainsのformatにxmlを増やして、各アクションで対応するだけです。
jsonだけなら基本的にアクションは書き換え無しで動きます。

また、サブドメインがapiでないURLで.jsonがヒットするのはややこしいので、
一般のルーティングを`constrains format: :html`の中に置けばOKです。
splat での Array 式展開


    [*0...5] #=> [0, 1, 2, 3, 4]

スター (*) での式展開はよく知られてるけど、この式展開は to_a が定義されているオブジェクトならなんにでも使えることを知った。

```ruby
[23] pry(main)> String.class_eval { def to_a; self.split(''); end }
=> nil
[24] pry(main)> [*'abcde']
=> ["a", "b", "c", "d", "e"]
```
フォルダ内のSQLファイルを全て実行する

タイトルの件を行う必要があったのでとりあえず作成。
もう少し綺麗な書き方があるはず。

```groovy
import groovy.sql.Sql

println "start".center(30,"-")

def sql = Sql.newInstance("jdbc:mysql://localhost:3309/test", "yamap", "yamap", "com.mysql.jdbc.Driver")
def folder = /C:\work\sql/
new File(folder).eachFile{
  // 拡張子でsqlファイルを判別
  if (!it.name.split("\\.").last().equals("sql")) {
    return
  }
  try {
    // ファイル内を見てselectかどうか判別
    if (it.text.substring(0,10).contains("select")) {
      sql.rows(it.text)
    } else {
      sql.executeUpdate(it.text)
    }
  } catch(e) {
    println "エラー発生".center(30,"-")
    println it
    println e
    println "-"*40
  }
}
println "end".center(30,"-")
```
SVN情報を切り離したい場合


eclipseだと「チーム＞切り離し＞svnメタ情報も削除」でできるが、xcodeやorganizerからは出来ないようなので、
.svnフォルダを地道に全部削除するしかない?
`find . -name .svn -exec rm -fr {} \;`
ローカライズが適用されない、またはローカライズファイル関連の読み込みで実行時エラーになる場合

English.lprojなどXcode3形式のローカライズ用フォルダを、en.lprojなどのXcode4.2以降の命名に合わせる。
混在しているとエラーになる模様。なお、一度でもこのエラーが起こると、en.lprojなど新命名規則の方のファイル参照を削除しても出続けてしまう。

やり安い方法＞
1. ワークスペース/プロジェクトを一旦閉じる
2. Finder上でフォルダ名を全て適切に変更する
3. プロジェクト名.xcodeproj のパッケージ内容を表示して、project.pbxprojをテキストエディタで開く
4. 上記フォルダ名を全て適切に一括置換する

スクリプトにしておくと便利かな。

```Bash:スクリプトの例
#!/bin/sh

#このへんはプロジェクトのフォルダ構成に合わせて要変更----
mv Resources/strings/English.lproj/ Resources/strings/en.lproj
mv Resources/Pictures/English.lproj/ Resources/Pictures/en.lproj
mv Resources/Pictures/icons/English.lproj/ Resources/Pictures/icons/en.lproj
mv Resources/html/help/English.lproj/ Resources/html/help/en.lproj
#このへんはプロジェクトのフォルダ構成に合わせて要変更----

#プロジェクト参照の変更
sed -e 's/English.lproj/en.lproj/g' < sample.xcodeproj/project.pbxproj > temp.txt
cp temp.txt sample.xcodeproj/project.pbxproj
rm temp.txt

# 言語分やる
mv Resources/strings/Japanese.lproj/ Resources/strings/ja.lproj
mv Resources/Pictures/Japanese.lproj/ Resources/Pictures/ja.lproj
mv Resources/Pictures/icons/Japanese.lproj/ Resources/Pictures/icons/ja.lproj
mv Resources/html/help/Japanese.lproj/ Resources/html/help/ja.lproj

sed -e 's/Japanese.lproj/ja.lproj/g' < sample.xcodeproj/project.pbxproj > temp.txt
cp temp.txt sample.xcodeproj/project.pbxproj
rm temp.txt

```
C言語でお手軽にユニットテストを導入する．

私が知る中では，MinUnit を超えて軽いものはない．

````
 /* file: minunit.h */
 #define mu_assert(message, test) do { if (!(test)) return message; } while (0)
 #define mu_run_test(test) do { char *message = test(); tests_run++; \
                                if (message) return message; } while (0)
 extern int tests_run;
````

http://www.jera.com/techinfo/jtns/jtn002.html
ソースからインストール,アンインストールのメモ

# vim7.2をインストールとアンインストールする例
- 誰もが知っているようなメモです。
* 権限の有するユーザーで作業を行なって下さい。(sudo)

## インストール

```shell:install
# 基本的にソースからインストールする場合、 /usr/local/src を使う
cd /usr/local/src
wget wget ftp://ftp.jp.vim.org/pub/vim/unix/vim-7.2.tar.bz2
tar jxvf vim-7.2.tar.bz2 
cd ./vim72/
./configure --enable-multibyte --disable-selinux --prefix='/usr/local/vim-7.2'
make 
make test
make install
ln -s /usr/local/vim-7.2/bin/vim /usr/local/bin/vim
```

## アンインストール
```shell:uninstall
cd /usr/local/src
cd ./vim72/
make uninstall
cd ../
rm -rf ./vim72/
rm -f vim-7.2.tar.bz2
```

## ソースを消してしまった場合
```shell:uninstall2
cd /usr/local/src
wget wget ftp://ftp.jp.vim.org/pub/vim/unix/vim-7.2.tar.bz2
tar jxvf vim-7.2.tar.bz2 
cd ./vim72/
./configure --enable-multibyte --disable-selinux --prefix='/usr/local/vim-7.2'
make
make uninstall
```

間違っていたり、こうした方がいいなどあれば教えて下さい。
UIWebView内のクリックイベントを取る(Loadではない)

```ObjectiveC:example.m

- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType {

// クリックしたリンクのURLを取得
	if (navigationType == UIWebViewNavigationTypeLinkClicked) {
		NSString *pattern = @"http://hoge.jp/";
        NSString *url = [NSString stringWithFormat:@"%@",[request URL]]; // [request URL]でクリック先のURLが取得できる
		
		if ([url hasPrefix:pattern]) {
			[UIApplication sharedApplication] openURL:[NSURL URLWithString:url]];
		}
    }
}

```
NginxでWebDavの設定例


注) モジュールを一緒にコンパイルしておく必要あり

```Nginx:dav.conf
location / {
    # 許可するメソッド
    dav_methods PUT DELETE MKCOL MOVE;

    # 必要なディレクトリも作成する
    create_full_put_path on;
    
    # PUTする際のパーミッション
    dav_access  user:rw group:rw all:r;

    # アクセス制限
    limit_except PUT DELETE MKCOL MOVE {
        allow   192.168.0.0/24;
        deny    all;
    }
}
```
CSRFトークンの検証プロセス

# actionpack-3.2.2/lib/action_controller/metal/request_forgery_protection.rb

## line:67

	def protect_from_forgery(options = {})
  	  self.request_forgery_protection_token ||= :authenticity_token
  	  prepend_before_filter :verify_authenticity_token, options
	end

- `protect_from_forgery`はデフォルトで`ApplicationController`で宣言されている。
- `verify_authenticity_token`をすべてのアクションの前に実行するようになる。

## line:72

	def verify_authenticity_token
	  unless verified_request?
        logger.warn "WARNING: Can't verify CSRF token authenticity" if logger
        handle_unverified_request
  	  end
  	end

## line:84

	def handle_unverified_request
	  reset_session
	end

- `verified_request?`が`false`の場合はセッションがリセットされる。

## line:93

	def verified_request?
	  !protect_against_forgery? || request.get? ||
	    form_authenticity_token == params[request_forgery_protection_token] ||
	    form_authenticity_token == request.headers['X-CSRF-Token']
	end

- `params[request_forgery_protection_token]`は`protect_from_forgery`の中で定義されている通り`params[:authenticity_token]`になる。
- `params[:authenticity_token]`はformヘルパーが自動生成するhiddenフィールドから送信される。
- `params[:authenticity_token]`がない場合でも、HTTPヘッダーの`X-CSRF-Token`を設定すればいい。

## line:100

	def form_authenticity_token
	  session[:_csrf_token] ||= SecureRandom.base64(32)
	end

- `params[:authenticity_token]`または`request.headers['X-CSRF-Token']`が`session[:_csrf_token]`と一致しているかどうかが、CSRFトークンの検証の本体である。
fdrtool メモ

```r:fdrsample.R
  library("fdrtool");
  p.adj <- p.adjust(p.values, "fdr");
  fdr <- fdrtool(p.values, statistic = "pvalue", plot = TRUE);
  fdrs <- cbind(p.adj, fdr$qval, fdr$lfdr);
  colnames(fdrs) <- c("adjusted p(BH)", "tail area-based Fdr", "density-based fdr(local fdr)");
  write.table(fdrs, "fdrDemo.txt", quote = FALSE, row.names = FALSE, sep = "\t");
```

参考：
http://cran.r-project.org/web/packages/fdrtool/index.html
http://mametalk.blog32.fc2.com/blog-entry-28.html
複数バージョンのRubyをWindowsで使うためのpik


rvmはWindowsでは使えない、そこでpikですよ。

[vertiginous/pik](https://github.com/vertiginous/pik)

```bash:pik_install
# pikをインストールする前にRubyInstallerでデフォルトのRubyをインストールしておく

# pikのインストール
gem install pik
mkdir C:\bin
# pik_installの前にシステム環境変数の【先頭に】C:\binを追加
pik_install

# Rubyのインストール先をC:\pikに
pik config install_dir=C:\pik

# ruby 1.8.7 のインストール
pik install ruby 1.8.7-p358

# 確認
pik list

# 1.8.7に切り替え
pik use 187

# 元に戻す
pik default
```

cygwin bash上だと上手く動かなかったので、pikを使う時だけコマンドプロンプトを開いて使っています。

## 追加情報: ActiveScriptRubyでも使えるみたい
[Techno Pocket - Technical Memo - RSpec/Cucumber学習環境構築](http://technopocket.sakura.ne.jp/tips/ruby_cucumber.html)
D 言語入門環境を整える on Linux

http://dlang.org/download.html

Ubuntu で試してみたんだけど，dmd-2.058_amd64.deb を dpkg でインストールしようとしてこけたので別の方法を．インストールする場所は個人的に $HOME/local/bin 以下にしましたが /usr/local/bin でも /opt でもいいんじゃないでしょうか？ (この辺が何年経っても覚えられない)

```
mkdir -p ~/local/bin # 無ければ作る

wget https://github.com/downloads/D-Programming-Language/dmd/dmd.2.058.zip
unzip dmd.2.058.zip # unzip は sudo aptitude install unzip でおｋ
mv dmd2 ~/local/bin

echo 'export PATH="$HOME/local/bin/dmd2/linux/bin64:$PATH"' >> .zshenv
source ~/.zshenv
# ここは別に .zshrc とか .bashrc とかでもいいよ
```

32 bit 環境の人は bin64 を bin32 にすればきっと大丈夫だと思います (調査してません)．

そしたら

```unk.d
import std.stdio;
void main() {
  writeln("Hello World");
}
```

でも作って

```
dmd unk.d
./unk
#=> Hello World
```

文法の入門は http://d.hatena.ne.jp/repeatedly/20100201/1264972016 でも見れば良いと思います．
別タブを選択しても精度の落ちないタイマー

JavaScriptで定期的な処理を行う場合、window.setIntervalを使いますが、ChromeやFirefoxのwindow.setIntervalは別タブを選択すると精度（実行間隔）が落ち、例えばゲームや音声処理などで精度を保ちたい場合に問題になることがあります。

WebWorkersを使ってバックグラウンドでタイマーを動作させると、別タブを選択しても精度の落ちないタイマーを作ることができます。

```js:mutekitimer.js
    var MutekiTimer = (function() {
        var MutekiTimer = function() {
            initialize.apply(this, arguments);
        }, $this = MutekiTimer.prototype;
        
        var TIMER_PATH = (function() {
            var BlobBuilder, URL, builder;
            BlobBuilder = self.WebKitBlobBuilder || self.MozBlobBuilder;
            URL = self.URL || self.webkitURL;
            if (BlobBuilder && URL) {
                builder = new BlobBuilder();
                builder.append("var timerId = 0;");
                builder.append("this.onmessage = function(e) {");
                builder.append("  if (timerId !== 0) {");
                builder.append("    clearInterval(timerId);");
                builder.append("    timerId = 0;");
                builder.append("  }");
                builder.append("  if (e.data > 0) {");
                builder.append("    timerId = setInterval(function() {");
                builder.append("        postMessage(null);");
                builder.append("    }, e.data);");
                builder.append("  }");
                builder.append("};");
                return URL.createObjectURL(builder.getBlob());
            }
            return null;
        }());
        
        var initialize = function() {
            if (TIMER_PATH) {
                this._timer = new Worker(TIMER_PATH);
                this.isMuteki = true;
            } else {
                this._timer = null;
                this.isMuteki = false;
            }
            
            this._timerId = 0;
        };
        
        $this.setInterval = function(func, interval) {
            if (this._timer !== null) {
                this._timer.onmessage = func;
                this._timer.postMessage(interval);
            } else {
                if (this._timerId !== 0) {
                    clearInterval(this._timerId);
                }
                this._timerId = setInterval(func, interval);
            }
        };
        
        $this.clearInterval = function() {
            if (this._timer !== null) {
                this._timer.postMessage(0);
            } else if (this._timerId !== 0) {
                clearInterval(this._timerId);
                this._timerId = 0;
            }
        };
        
        return MutekiTimer;
    }());
```

```js:usage.js
var div1 = document.createElement("div");
var div2 = document.createElement("div");

var counter1 = 0;
var counter2 = 0;

var timer = new MutekiTimer();
console.log("MutekiTimer is " + (timer.isMuteki ? "availabled" : "disabled") +".");

timer.setInterval(function() {
    div1.innerHTML = counter1++;
}, 50); // 別タブを選択して戻ってきても精度が落ちない
window.setInterval(function() {
    div2.innerHTML = counter2++;
}, 50); // 別タブを選択して戻ってくると精度が落ちている

document.body.appendChild(div1);
document.body.appendChild(div2);
```


## 2012/04/30追記
Mac版Firefox12.0にバグがあるっぽいので対策について書きました。
http://qiita.com/items/32fbf90bf545de8df768
Macの標準機能で画像を透過処理する

1.画像を開く⇒プレビュー.appが起動
2.『インスタントアルファ』をボタンから探して選択
3.透過したい部分をドラッグして選択
4.ピンク色になって選択出来たらキーボードのdeleteキーを押すと消えます。
HTMLイベント要素を画面遷移に伴って変更する時に留意すること

僕はJavaScriptで開発を行うときにjQueryを使っています。
書き方が好きだからです。それをともかく、画面遷移などに伴いHTMLの要素を変更する場合があります。ボタンを表したり、文字を変えたり。イベント駆動するようになっている要素を変更する場合もあるでしょう。例えば以下のボタンクリックの場合、BeforeがAfterButtonとなります。

```main.html
<input id="someButton" type="button"/>

<div id="someText">Before</div>

```


```event.js
$(function(){
	$("#someButton").click(clicked);
	$("#afterButton").click(afterClicked);
});

function clicked(){
    /*ボタンクリックで起きる動作*/
	$("#someText").html("<input id='afterButton' type='button' value='AfterButton'/>");
}

function afterClicked(){
	alert("I am AfterButton");
}
```

someButtonを押しますとAfterButtonが出現します。じつはここでAfterButtonと押してもAfterButtonとは表示されませんでした。恐らく$();内で設定されたコールバックはHTMLロード時に一度呼ばれるだけで、その時に存在しなかったAfterButtonにはコールバックが設定されなかったのだと思います。コールバックはあくまでも設定されるときに存在している要素だけが得られるのですね。
そのためこの場合はもう一度


```event.js
function clicked(){
    /*ボタンクリックで起きる動作*/
	$("#someText").html("<input id='afterButton' type='button' value='AfterButton'/>");
	$("#afterButton").click(afterClicked);
}
```

と設定する必要があります。
SCPでサーバーにファイルを転送する

MACでアップロードするためのだけに、Filezilla等のFTPソフト起動するのが嫌なので（少しでも軽くしたい
そして、いつも忘れてしまうのでメモ

```sh
scp -P ポート ファイル名 ユーザー名@サーバーアドレス:保存先

# ファイルの場合
scp -P 10122 /tmp/test.png srea@xxxx.jp:/tmp/

# ディレクトリの場合
scp -r ./tmp srea@xxxx.jp:/tmp/
```
Ruby1.9でひらがなやカタカナにマッチする正規表現

1.9からは鬼車が採用されているので`\{hiragana}`などが使用できる。
「ー」やスペースはマッチしないので必要に応じて加える

```ruby
ruby-1.9.2-p290 :025 > /^[\p{hiragana}ー－]+$/ =~ "ひらがな"
 => 0 
ruby-1.9.2-p290 :026 > /^[\p{katakana}ー－]+$/ =~ "カタカナー"
 => 0 
```
（返り値はマッチしたオフセットなので0）
Activerecord のカラムへアクセスする


いつもはこう ```ar.name``` だが
シンボルでも ```ar[:name]```
文字列でも ```ar['name']```
send にシンボルでも ```ar.send(:name)```
send に文字列でも ```ar.send('name')```
いけるのですごいと思った。

正しいことなのかはわからない。
Rails + Mysql(utf8mb4) on Amazon RDS


## まえがき

Mysql5.5以前だと4バイト以上のutf8の文字が入らない。
言い換えると３バイトまでなら入る。

Mysql5.5以降でも意識しないで使うと残念ながら入らない。。
なんじゃこりゃと思ったのでまとめておく。

ちなみにRailsから使う場合で、
MysqlはAmazon RDS上で動いている。

## Amazon RDS
これがちょっと厄介で、
Amazon RDSのAPI（もしくはCLI Toolkit）が
utf8mb4に対応していない。

なので、Paramater Groupに設定して、、、ってことは出来ない。
DB作るときに指定しておけばいいんだけど、忘れると悲惨。

## Rails

### mysql2
大変お世話になっているmysql2ですが、
この時点でutf8mb4に対応していない。

どういうことかというと、database.ymlで

``` yaml
production:
  adapter: mysql2
  database: hogehoge
  encoding: utf8mb4
```

って書くと怒られる。
unknown charsetとかだったかな？

対応が必要なファイルは、
mysql2/lib/mysql2/client.rb 
なんだけど、github見に行くと既にutf8mb4のための更新がされてる。
[そのcommit log](https://github.com/brianmario/mysql2/commit/f535df862ccbb098d99bf4fc722c037be688dcc6)

なので、bundlerでgit指定してやってもいいし、
乱暴な話、client.rbの該当箇所だけ修正しても良い。

### ActiveSupport::JSON::Encoding

レスポンスをJSONで返したくて。
そのまんま返すんであれば読み飛ばして大丈夫。

マルチバイト文字の場合、
ActiveSupport::JSONは律儀にUnicode Escape Sequenceに変換してくれる。

[github 該当箇所](https://github.com/rails/rails/blob/master/activesupport/lib/active_support/json/encoding.rb#L119)

一見格好いいけど、これ、\u1234みたいなごく一般的なEscape Sequenceは変換できるけど、
\u{123}とか\u{12345}みたいなEscape Sequenceはミスる。

なのでこんな感じにoverrideした。

```Ruby
module ActiveSupport::JSON::Encoding
  class << self
    def escape(string)
      string = string.encode(::Encoding::UTF_8, :undef => :replace).force_encoding(::Encoding::BINARY)
      json = string.gsub(escape_regex) { |s| ESCAPED_CHARS[s] }


      json = json.gsub(/([\xC0-\xDF][\x80-\xBF]|
             [\xE0-\xEF][\x80-\xBF]{2}|
             [\xF0-\xF7][\x80-\xBF]{3})+/nx) do |s|
        s.unpack("U*").pack("N*").unpack("H*")[0].gsub(/.{8}/n) do |u|
          /^0+(.+)$/ =~ u
          ($1.size == 4) ? "\\u#{$1}" : "\\u{#{$1}}"
        end
      end

      json = %("#{json}")
      json.force_encoding(::Encoding::UTF_8)
      json
    end
  end
end
```

危ないので良い子の皆さんは真似せず、
pull request送りましょう。

## まとめ

こんな感じで動いた。
ただ、Stackoverflowの記事読んだりしていて、
そもそもJSONでレスポンス返すときにEscapeする必要あるの？って議論もあって、なるほどなるほどーって思いました。
[PHP]AWS PHP SDKのDynamoDBでTokyoリージョンを使う方法

`$dynamoDb->set_region(…)`で、`'dynamodb.ap-northeast-1.amazonaws.com'`を設定します。

```php:dynamodb.php
$dynamoDb = new AmazonDynamoDb();
$dynamoDb->set_region('dynamodb.ap-northeast-1.amazonaws.com');
```

多分合っている。
Kobitoのアイコンを変更する

Kobitoのアイコンは黒いので、ドックにしまった時に、黒くて見えにくい。
![before](http://art52.photozou.jp/pub/327/2521327/photo/130153520.png)

なので、変更する。
![after](http://art56.photozou.jp/pub/327/2521327/photo/130153500.png)

やり方は、
/Applications/Kobito.app/Contents/Resources/Kobito.icns
を修正する。

しかし、これは勝手に変更して良いのだろうか？
全角英数　スペースを半角にする　S-JIS 、UTF-8対応

require 'nkf'
str="　unko うんこ！？ｌｑｒｔｖ"

#sjisの場合

res=NKF::nkf('-SsZ0',str)

#utf-8の場合

res=NKF::nkf('-WwZ1',str)

--------------------
output
res =>" unko うんこ!?lqrtv"
参考サイト
http://doc.ruby-lang.org/ja/1.9.2/class/NKF.html
ランダムなレコードを取得する

SQLiteにおいてランダムにレコードを取得する方法は

```SQL
SELECT * FROM entry ORDER BY RANDOM();

```

この関数はDBMSによって変わるので適宜変更が必要。
一般的な所ではPostgresではRANDOM()、MySQLではRAND()となっている。

それでRails上からは

```Ruby
@entries = Entry.all :order => "RANDOM()"

```

となる。
[参考にしたページ](http://d.hatena.ne.jp/shunsuk/20090822/1250937311)
Linux OSのバージョンを確認するいろいろ


#カーネルのバージョンを調べる

```shell
$ cat /proc/version
Linux version 2.6.32-33-generic-pae (buildd@zirconium) (gcc version 4.4.3 (Ubuntu 4.4.3-4ubuntu5) ) #72-Ubuntu SMP Fri Jul 29 22:06:29 UTC 2011
```

```shell
$ uname -a
Linux pcname 2.6.32-33-generic-pae #72-Ubuntu SMP Fri Jul 29 22:06:29 UTC 2011 i686 GNU/Linux
```

#Debian GNU/Linux
```shell
$ cat /etc/debian_version
4.0
```

#Ubuntu
```shell
$ cat /etc/lsb-release 
DISTRIB_ID=Ubuntu
DISTRIB_RELEASE=8.04
DISTRIB_CODENAME=hardy
DISTRIB_DESCRIPTION="Ubuntu 8.04.1"
```

#CentOS / RedHat Enterprise Linux

```shell
$ cat /etc/redhat-release 
CentOS release 5.2 (Final)
```

#Fedora
```
$ cat /etc/fedora-release
Fedora release 9 (Sulphur)
```

#SUSE Linux
```shell
$ cat /etc/SuSE-release
SUSE Linux Enterprise Server 10 (x86_64)
VERSION=10
PATCHLEVEL=1
```

http://d.hatena.ne.jp/rx7/20081010/p2
TRAMPを使ってリモートのファイルを弄る

TRAMPなるリモートのものも透過的に扱えるようにしてくれるすばらしいソフトがあるらしい。[TRAMPの日本語マニュアル](http://tramp.sourceforge.net/tramp_ja.html)
で、これをemacsから使えるelispがあるらしいと本で見つけ、早速つかってみた。
最近のemacs23.4.1では標準でそのelispが入ってる模様で私の環境ではそのままうごいた。[日本語解説ページ](http://www.bookshelf.jp/texi/tramp/tramp_ja_5.html)

##使い方
###基本的な使い方
C-x C-fでファイルを開くときに
/ssh:username@hostname:path/to/file
こうしてやればリモートのファイルを開くことができる。
また、リモートファイルのパスを指定せずにhostname後の:でRETをおしてDiredを表示することもできる。
また、.ssh/configの設定がそのまま反映さえるのでaliasを設定してあったりするとかなり楽めに開ける。

基本的な使い方は以上。

###一般ユーザでしかログインできないサーバーでroot権限でファイルを編集する方法。
リモートのサーバーがrootでのログインを許可してない場合、このままでは利用することができない。どうしたら、sshでログイン後root権限でファイルを編集できるようになるだろうか？
いくつかの前のバージョンまで多段階にプロトコルをチェーンできるmultiプロトコルが使えたらしいが、使おうとするとdepricatedになったよとメッセージがでて使えない。

tramp-default-proxies-alist に (HOST USER PROXY) というエントリを追加する．こいつは，USER@HOST にあるファイルにアクセスするには PROXY を経由しろということを意味する．

````lisp:~/.emacs
(add-to-list 'tramp-default-proxies-alist
             '("host1" "user2" "/ssh:user1@host1:"))
````

しかし、この方法だと複数のサーバーを扱っているとすべてのものに対してエントリを書かなければならなくなりかなり面倒になってしまう。

そこで以下の様にしてやると汎用的に使えるようにできる。

````lisp:~/.emacs
(add-to-list 'tramp-default-proxies-alist
             '(nil "\\`root\\'" "/ssh:%h:"))
(add-to-list 'tramp-default-proxies-alist
             '("localhost" nil nil))
(add-to-list 'tramp-default-proxies-alist
             '((regexp-quote (system-name)) nil nil))
````

これで
/sudo:hostnameとすることでリモートでログインできるようになる。

[参考にしたページ]("http://dukeiizu.blogspot.jp/2011/05/emacs-tramp-sudo.html")
なんでdivつかうの

昔から疑問だったけど、自作タグがダメな理由がよくわからない
ブラウザがうまいことやってくれないから？
具体的にどこをうまいことやってくれないの？

```html:一般的なdivの使い方
<div id="foo"></div>
<div id="bar"></div>
```

```html:こっちの方がすっきりする
<foo></foo>
<bar></bar>
```


```html:(参考)facebookのログインボタン
<fb:login-button autologoutlink="true" scope="email"></fb:login-button>
```
ブランチに説明を書く

```bash
git branch --edit-description [BRANCHNAME]
```

のようにするとブランチの説明を書くことができる．データは.git/configの中に

```
[branch "foo"]
    description = This is for foo!
```

のように入っているため，

```sh
git config branch.foo.description
# => This is for foo!
```

と取り出すことができる．
Fakerでダミーデータを作成

```ruby:GemFile
group :development, :test do
  gem 'faker'
  gem 'faker-japanese'
end
```

```sh
bundle install
```

```ruby
require 'faker/japanese'

# 名前
p Faker::Japanese::Name.name
# 姓
p Faker::Japanese::Name.last_name
# 名
p Faker::Japanese::Name.first_name
# メールアドレス
p Faker::Internet.email
# ユーザ名
p Faker::Internet.user_name

# 住所、社名なんかもあるけど英語のみ
```
ちゃんとAjaxしてレスポンスを向上させる

GET系は正確な意味でAjaxするとレスポンスが向上する。"Ajax"の発想は、css spriteに似てる。
POST系のレスポンスの向上は[こちら](http://qiita.com/items/876fc951866001fb7f83)をどうぞ。

####なんちゃってAjax
イベントのたびに通信して結果を反映
####ちゃんとしたAjax
1.裏側で多めにデータをローカルに落としておく
2.イベントのたびにローカルにあるデータにアクセスして結果を反映

####レスポンス向上以外でうれしいこと
通信を部分を減らした方が開発も楽になるし、ローカルでJSでいじるだけならデバッグもしやすくなるので生産性も上がる。
Twitter検索からtweetパーマリンクをさっと抜き出す方法

プログラムを書かずにざっと集めたいとき @ Chrome
1. Twitter検索ページで検索する https://twitter.com/#!/search/realtime/kobito
2. 辿れるだけページを下に辿っていく
3. JS consoleをcmd+opt+jで表示する
4. `$('.tweet-timestamp').map(function(i, tweet) { return tweet.href });`を実行する
5. 結果をコピペ
cakePHP導入メモ

cakePHPの導入時に、apacheのmod_rewriteにつまずいたのでメモ。

- なぜか.htaccessがない場合があるので、アップされているか確認する
- apacheのhttpd.confで.htaccessのオーバライドを許可している必要がある

```html:httpd.conf
<Directory />
    Options FollowSymLinks
    AllowOverride All
#    Order deny,allow
#    Deny from all
</Directory>
```
- mod_rewriteが読み込まれている

```html:httpd.conf
LoadModule rewrite_module libexec/apache2/mod_rewrite.so
```
複数のOfficeのバージョンを共存した際の優先順位指定方法


例: excel
Windows: スタート > ファイル名を指定して実行 > cmd > OKボタン押下 > cmd.exe起動

Office 2010を優先にしたい場合: 

>"C:\Program Files\Microsoft Office\OFFICE14\excel.exe" /regserver

Office 2007を優先にしたい場合: 

>"C:\Program Files\Microsoft Office\OFFICE12\excel.exe" /regserver

Office 2003を優先にしたい場合: 

>"C:\Program Files\Microsoft Office\OFFICE11\excel.exe" /regserver
ImageMagickコマンドメモ

全てのPDFファイルをjpgに変換

```
mogrify -format jpg *.pdf
```

全てのjpgを幅を固定指定、縦はなりでリサイズ

```
mogrify -resize 300 *.jpg
```

ファイルのサイズを調べる

```
identify -format "%w %h" a.jpg
```
ImportError: cannot import nameを解消する


####コピペ
http://d.hatena.ne.jp/machua/20101026/1288099599


####事象
以下のようなモジュール構造で、互いにモジュールを呼び合う場合に発生。

```sh:ファイル構成
view\
    __init__.py
    form1.py
    form2.py
```


```python:form1.py
from veiw.fom2 import frm2
class frm1 ():
    ....
```

```python:form2.py
from veiw.fom1 import frm1
class frm2 ():
    ....
```

####原因
インポート時に、自分自身をインポートしているためにエラーとなっている（と思う）
ちなみに、組み込みモジュールと同じ名前のモジュールを作成した時も発生する。

####解決策
グローバルな箇所でインポートをするのではなく、クラス内でインポートする。
例えば、コンストラクタ内や画面を呼び出す直前のファンクション内など。

```form1.py
class frm1 ():
    def __init__(self):
        from veiw.fom2 import frm2
        self.fm = frm2()
```
UIDeviceOrientation警告への対処

Implicit conversion from enumeration type "UIInterfaceOrientation" to different enumeration type "UIDeviceOrientation"
↑こんな警告が出たときの対処

```ObjectiveC:example.m

// Before
UIDeviceOrientation o = [[UIApplication sharedApplication] statusBarOrientation];

// After
UIDeviceOrientation o = (UIDeviceOrientation)[[UIApplication sharedApplication] statusBarOrientation];

```
find で複数の or を and でつなげる連想配列

頭の中が SQL モードになっている場合によくミスる

こういうSQL文を発行したい場合

``` sql
SELECT * FROM users 
WHERE (users.name = 'hoge' OR users.age = 20) 
AND (users.name = 'foo' OR users.age = 30);
```

find の引数となる連想配列は次のようになる

``` php
// 正しい連想配列
$conditions = array(
  array( 'or' => array('name'=>'hoge', 'age'=>'20')),
  array( 'or' => array('name'=>'foo', 'age'=>'30')),
);
```

連想配列の仕組み上、下のような連想配列では、キー：ORが上書きされる。
脳内がSQL モードになっていると意外に気が付かない。

``` php
// 誤った連想配列
$conditions = array(
  'or' => array('name'=>'hoge', 'age'=>'20'),
  'or' => array('name'=>'foo', 'age'=>'30'),
);
```
ListViewでセクションを付ける


```sample.java
public class SampleAdapter extends BaseAdapter{

	private ArrayList<Object> items;
	private Context context;
	private LayoutInflater inflater;
	
	
	public TagSelectAdapter(Context context,ArrayList<Object> items){
		this.context = context;
		this.items = items;
		this.inflater = LayoutInflater.from(context);
	}
	
	
	@Override
	public View getView(int position, View convertView, ViewGroup parent) {
		if(items.get(position).getClass().equals(String.class)){
			convertView = inflater.inflate(R.layout.sample_section, null);
			TextView section = (TextView) convertView.findViewById(R.id.section);
			section.setText((String) items.get(position));
		}
		else{
			convertView = inflater.inflate(R.layout.custom_cell, null);
			//ここにオリジナルのcellをいろいろ書く
			/**
			*itemsをセットするとき	
			*section.setText((String) items.get(position));のように
			*itemsの前に変換するクラスのキャストをすることでArrayList<Object>に
			*いろいろ突っ込んだクラスごとにViewを生成することが出来る
			*/
		}

		
		
		
		return convertView;
	}
	
	
	
	@Override
	public int getCount() {
		return items.size();
	}

	@Override
	public Object getItem(int position) {
		return items.get(position);
	}

	@Override
	public long getItemId(int position) {
		return position;
	}


	

}
```
以上のコメントアウトにも書いたようにArrayList<Object>の中身を
items.getClass().equals()で振り分けすることで一つのListViewに
複数の種類のオリジナルのセルを作ることが出来る。
Guard と Travis CI ってすごいね


[寿司じゃないブログ](http://makimoto.hatenablog.com/entry/2012/04/08/120632)読んで感動した。

すごく簡単に言うと・・・

* [guard/guard](https://github.com/guard/guard)
  * ファイル変更時のイベントを簡単に制御するためのコマンドラインツール

* [Travis CI](http://travis-ci.org/)
  * クラウドで動かせるJenkins, Githubにあるレポジトリなら簡単に対応可能(らしい)

書いたコードはほとんどGithubで管理しているので、Travis CIは近いうちに試してみたい。
phpbrewでPHP5.3+Xdebug


```bash
$ phpbrew -d install --no-test php-5.3.10 +gd +openssl +mysql +apxs2=/usr/local/Cellar/httpd/2.2.22/sbin/apxs -- --enable-mbstring --with-ldap=/usr/local/Cellar/openldap/2.4.24 --with-png-dir=/usr/X11
$ phpbrew switch php-5.3.10
$ phpbrew install-ext ldap
$ pecl install xdebug-2.1.4
```

```bash
$ vi .phpbrew/php/php-5.3.10/etc/php.ini
```

```
[XDebug]
zend_extension="/Users/dataich/.phpbrew/php/php-5.3.10/lib/php/extensions/no-debug-non-zts-20090626/xdebug.so"
xdebug.remote_enable=1
```
Gitで初期コミットのメッセージを変更


git commit --amendやgit rebase -iでもできないので。

```bash
# 初期コミットをチェックアウトする
git checkout <root sha1>

# コミットメッセージを書き換える
git commit --amend

# masterの全コミットを修正された初期コミットの下流に持っていく
git rebase --onto HEAD HEAD master
```
bashでiniファイルを読む


```ini:setting.ini
[product]
a=123
[test]
a=456
```

```bash:bash_ini_parser.sh

# ini setting
INI_FILE=sample.ini
INI_SECTION=test

# ini parser
eval `sed -e 's/[[:space:]]*\=[[:space:]]*/=/g' \
    -e 's/;.*$//' \
    -e 's/[[:space:]]*$//' \
    -e 's/^[[:space:]]*//' \
    -e "s/^\(.*\)=\([^\"']*\)$/\1=\"\2\"/" \
   < $INI_FILE \
    | sed -n -e "/^\[$INI_SECTION\]/,/^\s*\[/{/^[^;].*\=.*/p;}"`

echo $a # 456
```
tap 

 	
#配列を変更する

```ruby
p [].tap{|arr|
  5.times.each do|i|
    arr << i
  end 
} 
# 出力
# [0, 1, 2, 3, 4]
```

#文字列を変更する

```ruby
p 'a'.tap{|str|
  str << 'b' 
}
# 出力 
# ab
```

#ActiveRecord を覗く
便利！

```ruby
a = Foo.where(bar:'a').tap{|a| p a.to_sql}.all
```

#配列の中身を見る

```ruby
[1, 2, 3].tap{|a| p a }.push(4).tap{|a| p a }
# 出力
# [1, 2, 3]
# [1, 2, 3, 4]
```

#ちょっとかっこいい

```ruby
def foo
  a = []
  5.times.each{|i|
    a << i
  }
  a
end
```

上が下のように書ける。初期化とリターンがいらないけれど特に読みやすくないのでやっぱりあまりかっこよくないかもしれない。

```ruby
def foo
  [].tap{|a|
    5.times.each{|i|
      a << i
    }
  }
end
```
MySQLでDROP DATABASEしたらデッドロック

スクリプトでデータベースを自動生成するシステムで、CREATE DATABASEはトランザクションが効かないクエリなので例外でrollbackする時自力でrollbackします。その時、防御的措置として、メインのテーブルにレコードが無いものだけを削除できるように以下のように実装しました。

```php:
public function dropDatabase()
{
  $db = $this->getConnection();
  $rec = $db->fetchOne('SELECT id FROM item LIMIT 1');
  if($rec)
  {
  	throw new Sdx_Exception("You can't drop database having any item record.");
  }
  
  $rootdb = Fc_Db::getRootConnection();
  $rootdb->query(sprintf('DROP DATABASE %s', $this->getDatabaseName()));
}
```

するとデッドロックが発生。SHOW PROCESSLISTで確認すると

```sql:
Waiting for table metadata lock
```

とのこと。connectしたDBをそのままドロップすると発生するらしい。

```php:
  //接続を閉じないとデッドロック
  $db->closeConnection();
  
  $rootdb = Fc_Db::getRootConnection();
  $rootdb->query(sprintf('DROP DATABASE %s', $this->getDatabaseName()));
}
```

明示的にconnectを切れば発生しません。MySQL5.5/Autocomit OFFで試しました。
# Block文法


皆でよく忘れる Block の文法メモ

メモっつーかコピペ

## 無名コール

```objectivec
int
main (void)
{
	@autorelease {
		^{ NSLog("None labeling."); }(); // 変数に入れず実行
	}
}
```

## 変数にいれて呼び出す

```objectivec
int
main (void)
{
	@autorelease {
		// 一度変数に入れて実行
		void (^labeling)(NSObject*) = ^(NSObject* obj){
			NSLog(@"Labeling: %@", obj);
		};
		labeling(@"おっぱい");
	}
}
```

## 関数の引数にBlockを渡す

一部、簡略化するために未実装の文法(XCode 4.3)の文法使ってます
1. @10 は [NSNumber numberWithInto:10] と等価
2. @[~..] は [NSArray arrayWithObjects:~..,nil] と等価 (ただこれ、+[NSArray arrayWithObjects:] なんだろうか、それとも +[NSArray arrayWithObjects:count:] なんだろうか…)


ex: [Objective-C Literals](http://clang.llvm.org/docs/ObjectiveCLiterals.html)


```objectivec
#include <Block.h>

void intforeach(NSArray *array, void(^callback)(int))
{
	for (NSNumber n in array)
		callback([n intValue]);
}

int main (int argc, const char * argv[]) {
	@autorelease {
		intforeach(@[@10, @20, @30],
			^ (int number) {
				NSLog(@"%d", number);
			});
	}
	return 0;
}
```


## Block を返す関数

（何かここから下の表示が太文字になってバグってるけど気にしない…）


```objectivec
#include <Block.h>
typedef int (^IntBlock)();

IntBlock
counter (int start, int increment)
{
	__block int i = start;
	
	return Block_copy( ^ {
		int ret = i;
		i += increment;
		return ret;
	});
}

int
main (void)
{
	@autorelease {
		IntBlock mycounter = counter(5, 2);
		printf("First call: %d\n", mycounter());
		printf("Second call: %d\n", mycounter());
		printf("Third call: %d\n", mycounter());
	
		Block_release(mycounter);
	
	}
	return 0;
}
```




参考:
- http://thirdcog.eu/pwcblocks/
- [おっぱいの人のサイト](http://d.hatena.ne.jp/trashsuite/20100414/1271252150)
NSButtonのタイトルの色を変更

```Objective-C:
NSButton *button = [[NSButton alloc] initWithFrame:CGRectMake(0.0f, 0.0f, 30.0f, 20.0f)];

NSMutableDictionary *attributes = [NSMutableDictionary dictionary]; 
// 色の設定
[attributes setObject:[NSColor redColor] forKey:NSForegroundColorAttributeName];
// アラインメントの設定        
 NSMutableParagraphStyle *style = [[[NSParagraphStyle defaultParagraphStyle] mutableCopy];
 [style setAlignment:NSCenterTextAlignment];
 [attributes setObject:style forKey:NSParagraphStyleAttributeName];

NSAttributedString *attributedTitle = [[NSAttributedString alloc] initWithString:@"button" attributes:attributes];
[button setAttributedTitle:attributedTitle];
[self.view addSubview:button];
```
NSAttributedStringでタイトルを設定すると、Button Cellのアラインメントが無効になるので
NSParagraphStyleでアラインメントを設定する。
Macアプリでmodalなシートを表示する


```obc:sheetの表示
  [NSApp beginSheet:self.sheetWindow
     modalForWindow:self.window
      modalDelegate:self
didEndSelector:@selector(didEndSheet:returnCode:contextInfo:)
        contextInfo:nil];
```

```objc:sheetを非表示にする
- (void)didEndSheet:(NSWindow *)sheet returnCode:(NSInteger)returnCode contextInfo:(void *)contextInfo {
  [self.sheetWindow orderOut:self];
}
```

```objectivec:モーダルセッション終了
[NSApp endSheet:self.sheetWindow];
```
Retina DisplayでのCALayerのラスタライズ(setRasterizationScale:)

layer.shouldRasterize = YES にしたときにRetinaディスプレイで画像がぼやけてしまうときなど。

```objc
// Retina対応のラスタライズ
// layer = CALayer
[layer setRasterizationScale:[[UIScreen mainScreen] scale]];
[layer setShouldRasterize:YES];
```
画像をトリミングしてUIImageViewにセットする

CGImageCreateWithImageInRectを使うと、CGImageから任意のCGRectの範囲の画像が作れる。CGImageからUIImageを作るときは、imageWithCGImage:scale:orientation:を使い倍率を設定することで、高解像度のUIImageを作ることができる。

```objc
- (void)setImage:(UIImage *)image rect:(CGRect)rect {


	// self は UIImageView

	[self setImage:nil];

	// 画像のクリッピング iPad3 Retina対応
	float scale = [[UIScreen mainScreen] scale];
	CGRect scaledRect = CGRectMake(rect.origin.x * scale,
									   rect.origin.y * scale,
									   rect.size.width * scale,
									   rect.size.height * scale);

    CGImageRef clip = CGImageCreateWithImageInRect(image.CGImage,scaledRect);
	UIImage *clipedImage = [UIImage imageWithCGImage:clip
												    scale:scale 
											  orientation:UIImageOrientationUp];
    [self setImage:clipedImage];
    CGImageRelease(clip);
}
```
【管理画面カスタマイズ】タクソノミーの選択をラジオにする。


```php
function my_print_footer_scripts() {
echo '<script type="text/javascript">
  //<![CDATA[
  jQuery(document).ready(function($){
    $(".categorychecklist input[type=checkbox]").each(function(){
      $check = $(this);
      var checked = $check.attr("checked") ? \' checked="checked"\' : \'\';
      $(\'<input type="radio" id="\' + $check.attr("id")
        + \'" name="\' + $check.attr("name") + \'"\'
  	+ checked
	+ \' value="\' + $check.val()
	+ \'"/>\'
      ).insertBefore($check);
      $check.remove();
    });
  });
  //]]>
  </script>';
}
add_action('admin_print_footer_scripts', 'my_print_footer_scripts', 21);
```
【管理画面非表示】力技でパスワード保護やステータスを消す

僕には、こんなやり方しか思いつかなかったよ。
functions.phpに書き足して使います。
記事の編集ページで、公開のpostboxの項目「パスワード保護」と「ステータス」を非表示にしています。

```php
function my_head() {
  echo '<script type="text/javascript">
jQuery(document).ready(function($){
	$("#minor-publishing .misc-pub-section").each(function(i){
		if(i == 0){
			$(this).css("display","none");
		} else if(i == 1){
			$("#post-visibility-select #visibility-radio-password").css("display","none").next().css("display","none").next().remove();
		}
	});
	$("#the-list .editinline").click(function(){
		$(this).find(".inline-edit-col").css("display","none");
	});
	
});
  </script>';
}
add_action('admin_head', 'my_head', 11);
```
ImageMagick高速化まとめ

# ImageMagick高速化まとめ

## 最新版を使う。

> imagemagickをOpenMPを無効にして最新にバージョンアップ
> デフォルトでOpenMPオプションは有効になっています。
> OpenMPオプションが有効のままだと、メモリを多く消費するようです。

  ` --disable-openmp `

## convertコマンドによるリサイズ処理に、下記オプションを設定
  ` -define jpeg:size=リサイズ幅xリサイズ高さ `

> このオプションが有効なのはjpeg画像のみですが、
> リサイズ処理の時間の削減、メモリ消費を抑えることができるようです。
> 一説では、このオプションの有無で10倍の速度の差が発生するといわれていました。
> jpeg画像をリサイズする際には上記オプションを必ずつけるようにしましょう。
> [本当は速いImageMagick: サムネイル画像生成を10倍速くする方法](http://d.hatena.ne.jp/mirakui/20110123/1295795409#20110123f1 "本当は速いImageMagick: サムネイル画像生成を10倍速くする方法")


## 8bit
> QuantumDepth=8バージョン（Q8）は業界基準の24/32ビットピクセルを提供します。
> 通常はこのQ8バージョンで十分です。 もう一方のQuantumDepth=16バージョン（Q16）は、
> 48/64ビットピクセルの高画質カラーを提供します。 Q8はQ16に対してメモリ使用量は約半分、
> CPU消費量は30%程度少ないです。
> 学術・医学的な目的で使用する場合、高精度のQ16を選択すれば良いでしょう。

   `--with-quantum-depth=8`

## libjpeg-turboを入れる (書き途中)
### 更にこれ使えば爆速？
> libjpeg-turboはMMX、SSE、SSE2 SIMD命令を使用して、
> x86および64ビットx86プラットフォームでの
> ベースラインJPEG圧縮/伸張処理を2倍から4倍程度に高速化します。
> libjpeg/SIMDをベースにしていますが、数多くの改良が施されています。
http://sourceforge.jp/projects/sfnet_libjpeg-turbo/
libjpeg-turbo-1.2.0.x86_64.rpm

```shell:インストール
cd /usr/local/src
sudo wget 'http://sourceforge.jp/frs/g_redir.php?m=jaist&f=%2Flibjpeg-turbo%2F1.2.0%2Flibjpeg-turbo-1.2.0.x86_64.rpm'
sudo rpm -Uvh libjpeg-turbo-1.2.0.x86_64.rpm

準備中...                ########################################### [100%]
   1:libjpeg-turbo          ########################################### [100%]

```

```shell:確認
cd /opt/libjpeg-turbo/
tree
.
|-- bin
|   |-- cjpeg
|   |-- djpeg
|   |-- jpegtran
|   |-- rdjpgcom
|   |-- tjbench
|   `-- wrjpgcom
|-- classes
|   `-- turbojpeg.jar
|-- include
|   |-- jconfig.h
|   |-- jerror.h
|   |-- jmorecfg.h
|   |-- jpeglib.h
|   `-- turbojpeg.h -> /usr/include/turbojpeg.h
|-- lib64
|   |-- libjpeg.a
|   |-- libjpeg.so -> libjpeg.so.62.0.0
|   |-- libjpeg.so.62 -> libjpeg.so.62.0.0
|   |-- libjpeg.so.62.0.0
|   `-- libturbojpeg.a -> /usr/lib64/libturbojpeg.a
`-- man
    `-- man1
        |-- cjpeg.1
        |-- djpeg.1
        |-- jpegtran.1
        |-- rdjpgcom.1
        `-- wrjpgcom.1
```

```shell:設定
# 毎回exportはめんどくさいから
# ldconfigに追加してあげる
echo /opt/libjpeg-turbo/lib64/ > /etc/ld.so.conf.d/libjpeg-turbo.conf
ldconfig
```

```shell:ImageMagickへの適用
ちょっと待ってください。。。。
```
## 画像軽量化まとめ
・メタデータを削除する。
・webpを検討する。
ChromeでHostsの切り替えを瞬時に行う方法

Hostsを切り替えても中々変わらない時や、ブラウザキャッシュを無効にしたい時に有効です。

## windowsの場合
1.Ctrl+Shift+I
2.右下の歯車(setting)を押す
3.NetworkのDisable cacheにチェックを入れる。

## Macの場合
1.⌘-option-I
2.右下の歯車(setting)を押す
3.NetworkのDisable cacheにチェックを入れる。
fish シェルのプロンプトを晒してみる

bashからfishに乗り換えを検討中。

```ruby:~/.config/fish/config.fish
function fish_prompt -d "Write out the prompt"

	if [ $status -eq 0 ]
		set emoticon "^_^"
		set color green
	else
		set emoticon ">_<"
		set color red
	end

	printf "%s%s %s%s:%s \$ %s" (set_color -o $color) $emoticon (set_color normal) (hostname|cut -d . -f 1) $PWD
end
```
WindowsでSTDERRのbinmodeが効かない

Perl 5.8/WinXP
以下のようにdieしたときのエラーメッセージをencodeしようとしたのだが……。

```binmode.pl(uft8で保存)
use strict;
use warnings;
use utf8;
use Encode;

binmode STDOUT, ':encoding(cp932)';
binmode STDERR, ':encoding(cp932)';

print "歌います。\n";
die "オラは死んじまっただ～♪";

```

dieしたメッセージは全く表示されず、「歌います。」しか表示されない。
binmode STDERR, ':encoding(cp932)';を除去すると、dieメッセージも表示される（当然文字化けするが）。

dying messageにマルチバイト文字なんか使うなって事か。
webViewのWebGLを有効にする


```objc
// WebGL を ON にする (OSX)
WebPreferences *pref = [webView preferences];
[pref performSelector:@selector(setWebGLEnabled:) withObject:[NSNumber numberWithBool:YES]];
```

iOSの場合は少し違います。

```objc
// WebGL を ON にする (iOS)
id webDocumentView = [webView performSelector:@selector(_browserView)];
id backingWebView = [webDocumentView performSelector:@selector(webView)];
[backingWebView setValue:[NSNumber numberWithBool:YES] forKey:@"WebGLEnabled"];
```
RSpecの自前のマッチャ

[こちら](http://d.hatena.ne.jp/takihiro/20081108/1226114504)を参考に作成。

```ruby:spec/custom_matchers.rb
module CustomMatchers
  # モデルの属性を変更した後、invalid?がtrueになるかを検査するマッチャ
  class InvalidAfterAttributeChange
    # 属性の名前と設定する値を指定する
    # 属性の名前はシンボルか文字列
    def initialize(attr, value)
      @attr = attr
      @value = value
    end

    # 実際にスペック実行時に呼ばれるメソッド
    # 引数はレシーバ
    def matches?(model)

      attr_name = @attr.to_s

      # 既にinvalid?がtrueだったら例外を投げる
      if model.invalid?
        raise ArgumentError.new('model is already invalid')
      end

      # 指定された属性の値を更新
      eval("model.#{attr_name}=@value")

      model.invalid?
    end

    # should失敗時のメッセージ
    def failure_message
      <<-MSG
      #{@value} was valid value.
      MSG
    end

    # should_not失敗時のメソッド
    def negative_failure_message
      <<-MSG
      #{@value} was invalid value.
      MSG
    end
  end

  # スペック実行時に呼ばれるメソッド
  # 引数はマッチャのクラスに渡される
  # クラス内に定義してはまった、モジュール配下じゃないといけない
  def invalid_after_attribute_change(attr, value)
    InvalidAfterAttributeChange.new(attr, value)
  end
end
```

使い方。

```ruby:spec/models/team_spec.rb
require 'custom_matchers'

describe Team do
  context 'has been set invalid value.' do
    include CustomMatchers
    it do
      @valid_team.should invalid_after_attribute_change(:zip, 'aaaaa')
    end
  end
end
```
MySQLのダンプをCloud Foundryに流し込む - vmc tunnelを使って

vmc tunnelコマンドを使うとmysqlのダンプファイルをクラウド上のMySQLに流し込むことができる。

用意するもの

* ローカルにmysqlクライアントがインストールされていること
* mysqldumpで生成したダンプファイル

下記のgemをインストールする。

```ruby:Gemfile
source :gemcutter
gem 'vmc',:git => "git://github.com/cloudfoundry/vmc.git"
gem 'caldecott',:git => "git://github.com/cloudfoundry/caldecott.git"
```

```
$ bundle install --path=your_gem_dir
```

`vmc apps`でアプリに紐づけられているmysqlのサービス名を確認する

例えば、クラウド側のサービス名を**mydb01**、ダンプファイルを**foo.dmp**とすると


```sh
$ bundle exec vmc tunnel mydb01 mysql < foo.dmp
```


ローカルのmysqlクラアイントがトンネルを経由してクラウド側に接続に行き、ダンプ内のSQL文を実行する。


### クラウド側のデータのダンプをとる

逆にクラウド側のデータのダンプをとるときには

```sh
$ bundle exec vmc tunnel 
```


で対話型シェルが立ち上がるのでクライアントをmysqldumpと指定すると出力ファイルを聞かれるので、そこに適当なファイル名を入れればOK


(参考)
http://blog.udcp.net/2011/11/22/vmc-tunnel/
Rails + RSpec + Guardで自動テスト

プロジェクトは```~/hoge```に作成。

まずはあれやこれやとインストール。

```sh
gem install rspec
gem install rpec-rails
gem install guard
gem install guard-spec
```

```ruby:Gemfile
# gem 'guard'は書かないほうがよいという記述を
# どこかで見かけた
group :development, :test do
  gem 'rspec-rails'
  gem 'guard-rails'
end
```

```sh
bundle install
```

RSpecを初期化。

```sh
rails g rspec:install
```

Guardを初期化。
プロジェクトのルートに移動してからじゃないと変な状態になったけど記録するのを忘れてしまった。

```sh
~/hoge
bundle exec guard init rspec
```

プロジェクト直下に下記ようなファイルが生成される。
そのままで特に問題なし。

```ruby:GuardFile
# A sample Guardfile
# More info at https://github.com/guard/guard#readme

guard 'rspec', :version => 2 do
  watch(%r{^spec/.+_spec\.rb$})
  watch(%r{^lib/(.+)\.rb$})     { |m| "spec/lib/#{m[1]}_spec.rb" }
  watch('spec/spec_helper.rb')  { "spec" }

  # Rails example
  watch(%r{^app/(.+)\.rb$})                           { |m| "spec/#{m[1]}_spec.rb" }
  watch(%r{^app/(.*)(\.erb|\.haml)$})                 { |m| "spec/#{m[1]}#{m[2]}_spec.rb" }
  watch(%r{^app/controllers/(.+)_(controller)\.rb$})  { |m| ["spec/routing/#{m[1]}_routing_spec.rb", "spec/#{m[2]}s/#{m[1]}_#{m[2]}_spec.rb", "spec/acceptance/#{m[1]}_spec.rb"] }
  watch(%r{^spec/support/(.+)\.rb$})                  { "spec" }
  watch('config/routes.rb')                           { "spec/routing" }
  watch('app/controllers/application_controller.rb')  { "spec/controllers" }
  # Capybara request specs
  watch(%r{^app/views/(.+)/.*\.(erb|haml)$})          { |m| "spec/requests/#{m[1]}_spec.rb" }
end
```

とりあえずモデルを作成。

```sh
rails g model fuga name:string
rake db:migrate RAILS_ENV=test
```

RSpecは初期状態だと```RAILS_ENV=test```で実行される。
```rails g rspec:install```した際に生成される```spec/spec_helper.rb```で設定されている。


普通にrspecでのテストを書いてguardを実行。
あとはファイルが変更されるたびに自動実行される。

```sh
bundle exec guard
```