OmniAICreator/Qiita-1.07M huggingface dataset:
Mountain Lionでwordpress動かす

phpをapacheで動かす

/etc/apache2/httpd.confで

```
LoadModule php5_module libexec/apache2/libphp5.so
```

コメントインする。

apacheを再起動

```sh
sudo apachectl restart
```

MySQLを入れる

```sh
brew install mysql
unset TMPDIR
mysql_install_db --verbose --user=`whoami` --basedir="$(brew --prefix mysql)" --datadir=/usr/local/var/mysql --tmpdir=/tmp
```

ログイン時に起動するように

```sh
ln -sfv /usr/local/opt/mysql/*.plist ~/Library/LaunchAgents
launchctl load ~/Library/LaunchAgents/homebrew.mxcl.mysql.plist
```

初期設定

```sh
/usr/local/opt/mysql/bin/mysql_secure_installation 
```

phpの設定

```sh
sudo cp /etc/php.ini.sample /etc/php.ini
```

php.iniの/var/mysql/mysql.sockを/tmp/mysql.sockに書き換える

dbを作る

```sh
mysqladmin -uroot create wordpress -p
```

[wordpress](http://wordpress.org/)からソースを落としてきて、~/Sitesに展開

wp-config-sample.phpをwp-config.phpとしてコピーして、中身を修正

http://localhost/~username/wordpressにアクセスして設定
HerokuでCoffeescriptをコンパイルせずに実行


herokuの使用は[ココ](http://blog.monoweb.info/blog/2011/09/19/)、nodeのバージョンで怒られたら[ココ](http://qiita.com/items/a64d1f6aa90dec5cc4ea)、公開鍵(key)認証にハマったら[ココ](https://devcenter.heroku.com/articles/keys)。

npmを使ってcoffee-scriptを入れる。

```
$ npm init
$ npm install coffee-script --save
```

又はpackage.jsonを直接してcoffee-scriptの依存宣告を追加。

```javascript:package.json
{
  "name": "",
  "description": "",
  "author": "",
  "version": "0.0.1",
  "main": "app.coffee",
  "dependencies": {
    "coffee-script": "*"
  },
  "licenses": ""
}
```

メインはapp.coffeeだとProcfileにはこう記述します。

```:Procfile
web: coffee app.coffee
```

このままコミットしてherokuにデプロイ。

```
$ git commit -a -m "ready for coffee-script"
$ git push heroku master
```
Rで線形識別問題の確率的生成モデル

PRML図4.10と同様に、2つのクラスの条件付き確率密度（それぞれ同じ共分散行列を持つ2次元正規分布）を図示し、さらに、それらの条件付き確率密度とクラスの事前確率から求めた事後確率を図示します。また、このモデルに従ってサンプルを生成します。サンプルからモデルパラメータを求めているわけではありません。なお、2つのクラスの事前確率が100倍異なるものとしています。

![](https://dl.dropbox.com/sh/cwfemibvr7gk4cy/EVceRjE30H/7.GenerativeModelOfLinearDiscriminant.png)

```r
library(mvtnorm)
frame()
set.seed(0)
par(mfrow=c(2, 2))
par(mar=c(2, 2, 1, 2))
par(mgp=c(2, 1, 0))
xrange <- c(-2, 2)
yrange <- c(-2, 2)
x1 <- seq(xrange[1], xrange[2], .1)
x2 <- seq(yrange[1], xrange[2], .1)
 
sigma <- matrix(c(0.5^2, 0, 0, 0.5^2), 2)
u1 <- c(-0.5, -0.5)
u2 <- c(0.5, 0.5)
N1 <- 100
N2 <- 10000
precision <- solve(sigma)
w <- precision %*% (u1 - u2)
w0 <- as.numeric((t(u1) %*% precision %*% u1 + t(u2) %*% precision %*% u2) / 2 + log(N1 / N2))
print(w)
print(w0)
base <- function(x1, x2) {
        (cbind(x1, x2))
}
logistic <- function(x) {
        1 / (1 + exp(-x))
}
estimate <- function(x1, x2){
        logistic(t(w) %*% t(base(x1, x2)) + w0)
}
 
p1 <- function(x1, x2) {
        dmvnorm(cbind(x1, x2), u1, sigma)
}
persp(x1, x2, outer(x1, x2, p1), xlim=xrange, ylim=yrange, border=1, theta=50, ticktype="detailed", main="p(x|C1)")

p2 <- function(x1, x2) {
        dmvnorm(cbind(x1, x2), u2, sigma)
}
persp(x1, x2, outer(x1, x2, p2), xlim=xrange, ylim=yrange, border=2, theta=50, ticktype="detailed", main="p(x|C2)")
 
y <- outer(x1, x2, estimate)
persp(x1, x2, y, xlim=xrange, ylim=yrange, border=3, theta=50, ticktype="detailed", main="p(C1|x)")
 
x <- rmvnorm(N1, u1, sigma)
d <- as.data.frame(cbind(x, 1))
x <- rmvnorm(N2, u2, sigma)
d <- rbind(d, as.data.frame(cbind(x, 2)))
names(d) <- c("x1", "x2", "class")
plot(d$x1, d$x2, col=d$class, xlim=xrange, ylim=yrange)
contour(x1, x2, y, xlim=xrange, ylim=yrange, col=3, add=T)
title(main="p(C1|x) and samples")
```
RspecでJsonをテストするMatcher


RailsでAPIを作成した際のテストに使えるMatcherです. 
下記のようにJsonデータのテストを書くことができます. 

```ruby:/rspec/controller/test_controller_spec.rb
# レスポンスに{"result" => {"2000" => {"03" => {"TestData" => x}}}}が存在することをテスト
subject { JSON.parse(response.body) }
it{ should have_json("/result/2000/03/TestData") }
```

以下のようにmatcherを定義します. 

```ruby:/rspec/support/controller_helper.rb
# spec/support/custom_matchers.rb
  RSpec::Matchers.define :have_json do |selector|
    match do |response_body|
      selector.split('/')[1..-1].inject(response_body) do |body, address|
        body[address]
      end
      true
    end

    failure_message_for_should do |actual|
      "json_data should have path(#{selector})"
    end
  end
```

## 追記
[json_spec](https://github.com/collectiveidea/json_spec/blob/master/lib/json_spec/configuration.rb "json_spec(github)")というgemがあるんですね。
折角なので、json_specでの記述例を挙げておきます。

```ruby:/rspec/controller/test_controller_spec.rb
subject { response.body }
# レスポンスに{"result" => {"2000" => {"03" => {"TestData" => x}}}}が存在する
it{ should have_json_path("result/2000/03/TestData") }
# レスポンスに{"result" => {"2000" => {"03" => {"TestData" => x}}}}のxがInteger
it{ should have_json_type(Integer).at_path("result/2000/03/TestData") }
# レスポンスに{"result" => {"2000" => {"03" => {"TestData" => 0}}}}が存在する
it{ should be_json_eql(0).at_path("result/2000/03/TestData") }
```
WebPlayerでtwitterの投稿ページを開く

####twitterの投稿ページを投稿する文字指定して開く
というのを試して盛大にハマッたのでメモ。
結論としては、`OpenURL`関数使うのが一番いい。

+ jsとcsのURIエンコーディング問題
+ OpenURL関数とExternalEval関数
+ WebPlayerのデモ

***

#jsとcsのURIエンコーディング問題
コードのファイルの文字コードに気をつけなければならない。
jsではUTF-8LEBOM
csではUTF-16LEBOM
でないと、`WWW.EscapeURL("日本語文字列")`でエンコードしても、期待した表示が出来なかった。
jsは勝手に色々と良い感じにしてくれるっぽい感じ。
C\#とJS混在してもいいって人はtweetするコードだけJSで書いちゃえば良いと思う。
　
　

#OpenURL関数とExternalEval関数を比較
まず前提として、
`OpenURL()`は引数に指定したURLをpcならデフォルトブラウザで、スマフォならアプリを選択して開く関数。
`ExternalEval()`は、WebPlayerで再生中のページで引数で指定したJavaScript関数を呼び出す関数。そのためWebPlayerでしか使えない。
　
　
####OpenURL()を使用した場合
これは、どのPlatformでも使える汎用的なものだが、WebPlayerでゲームが起動しているページからURLをロードしてしまうので、またゲームのページに戻るとUnityPlayerのロード画面からになってしまう。

```c#:OpenURL()を使用した場合
Application.OpenURL("http://twitter.com/intent/tweet?text="
 + WWW.EscapeURL(text));
```
　
　
####ExternalEval()でwindow.location.hrefを実行
この場合は、OpenURLと同じく、WebPlayerのページからURLに飛んでしまう。
あと、何故かdropBoxにupして試してみると、日本語表示がおかしくなる。
[デモ]((http://dl.dropbox.com/u/26238578/tweetTestGUI/tweetTestGUI.html)見ればそれが分かる

```c#:ExternalEval()でwindow.location.hrefを実行
Application.ExternalEval("window.location.href 
 = 'http://twitter.com/intent/tweet?text=" + text + "'");
```
　
　
####ExternalEval()でwindow.openを実行
これをwindowサイズ指定で実行すると、ブラウザのポップアップブロックが作動して、手動でそれを許可しなければならない。
これは、例えばゲームをプレイしてる人がスコア情報などをtweetするのを妨害している様な物なので、つらい。
あと、何故かdropBoxにupして試してみると、日本語表示がおかしくなる。

```c#:ExternalEval()でwindow.openを実行
Application.ExternalEval("window.open('http://twitter.com/intent/tweet?text
 = " + text + "','','width=500,height=400');");
```
　
　
##WebPlayerのデモ
一応、英語と日本語で、上記の3種類の方法を試すデモ作ってみた。
何故かJSのメソッド実行してる方法は、日本語表示が全滅している、くそが。
##[デモ](http://dl.dropbox.com/u/26238578/tweetTestGUI/tweetTestGUI.html)
　
***
Infix type constructors, classes, and type variables


http://www.haskell.org/ghc/docs/7.2.2/html/users_guide/data-type-extensions.html だいぶ酷くも書ける。

```haskell:
{-# LANGUAGE TypeOperators #-}
data Ore (+) = String :* (Int + Int)
y = "abc" :* (3, 3) :: Ore (,)
```
Luaで変数がNaNかどうかの判断


LuaではisNaN()は多分存在しないので、変数がNaNであるかを調べるには**変数~=変数が真であればNaN**とのこと。

```lua:isNaN
function isNaN( _v )
	return _v~=_v;
end;

print( isNaN( 100 ) );		--> false
print( isNaN( 0 / 0 ) );	--> true
```

微妙に理屈は解らないがそうらしい。
カスタムイベントの実装

Coronaでのカスタムイベントの実装方法です。
ついでに、カスタムイベントを通じて異なるモジュール間での値の受け渡しも実装してみます。

## カスタムイベントの定義
まずはそのイベントの定義から。

```lua:event/testevent.lua
module( "TestEvent" , package.seeall )

MOVE_START  = "TestEvent.MOVE_START";
MOVE_FINISH = "TestEvent.MOVE_FINISH";

function new( _name , _data )
	local evt = {};
	evt.name = _name;
	evt.data = _data;
	return evt;
end;
```

1行目`module()`の第一引数で文字列指定しておくと、一度requireしておけば
他モジュールからも永続的に使用出来るようになります。（逆に消し方がよく解りませんが）

イベントの値`"TestEvent.MOVE_START"`はどんな文字列でも大丈夫ですが、他のカスタムイベントと重複しないよう注意が必要です。




## 使用サンプル
```lua:main.lua
require( "event.testevent" );

local img_mover = require( "imgmover" );

local function eventTrace( event )
	print( event.name );
	print( event.data.x );
	print( event.data.y );
end;

Runtime:addEventListener( TestEvent.MOVE_START  , eventTrace );
Runtime:addEventListener( TestEvent.MOVE_FINISH , eventTrace );
img_mover.moveStart();
```
```lua:imgmover.lua
module(..., package.seeall)

local img = display.newImage( "image.png" );
img.x , img.y = 100 , 100;

local function moveFinish()
	local evt = TestEvent.new( TestEvent.MOVE_FINISH , { x=img.x , y=img.y } ); 
	Runtime:dispatchEvent( evt );
end;

function moveStart()
	local evt = TestEvent.new( TestEvent.MOVE_START , { x=img.x , y=img.y } ); 
	Runtime:dispatchEvent( evt );
	transition.to( img, { time=500, x=200 , y=200 , onComplete=moveFinish } );
end;
```

**結果1（起動時）**

> TestEvent.MOVE_START
> 100
> 100

**結果2（0.5秒後）**

> TestEvent.MOVE_FINISH
> 200
> 200

画像をx=100,y=100から0.5秒掛けて200,200に移動させるサンプルです。
動き出した瞬間と移動終了時にそれぞれイベントを発射し、main.lua側に伝達します。

こんな感じで、異なるモジュール間でイベントと値の送受信を簡単に行なうことが出来ますが
規模が大きくなるとカオスになってくるので必要に応じてで。
あと不要になったイベントリスナーは`Runtime:removeEventListener`で消すのを忘れずに。
プログラム実行中に外部エディタを使って入力させる方法


SVNやGitで外部エディタを使ってコミットメッセージを入力させるのと同じことを、rubyで行いたいと思った場合、以下のようにすれば一応出来る。

```
require 'tempfile'

abort "External variable HOGE_EDITOR isn't set!" unless editor = ENV['HOGE_EDITOR']
tmp = Tempfile.new('deleted_soon')
system(editor + " " + tmp.path)
message = File.open(tmp.path).readlines
tmp.unlink # delete the temp file

puts message
```
CoffeeScriptプロジェクトのビルド用makeファイル

```shell:Makefile
# コマンド
COFFEEC = coffee
 
# PATH
JSPATH = ../../webroot/js/gf
COFFEEPATH = .
 
# 依存関係とコンパイルコマンド
all: $(JSPATH)/app.js $(JSPATH)/common.js
 
$(JSPATH)/app.js: $(COFFEEPATH)/app-view.coffee $(COFFEEPATH)/app-model.coffee
    $(COFFEEC) -j $@ -c $^
 
$(JSPATH)/common.js: $(COFFEEPATH)/common.coffee
    $(COFFEEC) -j $@ -c $^
```
SCSSプロジェクトのビルド用makeファイル

```shell:Makefile
# コマンド
SASSC = sass -C
COMPASSC = sass --compass -C
 
# PATH
CSSPATH = ../../webroot/css
SASSPATH = .
 
# 依存関係とコンパイルコマンド
all: $(CSSPATH)/default.css $(CSSPATH)/dialog.css
 
$(CSSPATH)/default.css: $(SASSPATH)/default.scss $(SASSPATH)/default-form.scss
    $(COMPASSC) $(SASSPATH)/default.scss > $@
    $(COMPASSC) $(SASSPATH)/default-form.scss >> $@
 
$(CSSPATH)/dialog.css: $(SASSPATH)/dialog.scss
    $(SASSC) $< > $@
```
SCSSプロジェクトのビルド用gruntファイル


```js:grunt.js
module.exports = function(grunt) {
 
    grunt.initConfig({
        sass: {
            dist: {
                options: {
                    compass: true // Compassライブラリを使用
                },
                files: {
                    'webroot/css/default.css': [
                        'web-assets/sass/default.scss',
                        'web-assets/sass/default-form.scss'
                        ],
                    'webroot/css/dialog.css':
                        'web-assets/sass/dialog.scss'
                }
            }
        }
    });
     
    // gruntタスクライブラリを読み込み
    grunt.loadNpmTasks('grunt-contrib-sass');
 
    // デフォルトで実行するタスク
    grunt.registerTask('default', 'sass');
};
```
CoffeeScriptプロジェクトのビルド用gruntファイル


```js:grunt.js
module.exports = function(grunt) {
 
    grunt.initConfig({
        coffee: {
            'webroot/js/app.js': [
                'web-assets/coffee/app-view.coffee',
                'web-assets/coffee/app-model.coffee'
            ],
            'webroot/js/common.js': [
                'web-assets/coffee/common.coffee'
            ]
        }
    });
     
    // gruntタスクライブラリを読み込み
    grunt.loadNpmTasks('grunt-contrib');
 
    // デフォルトで実行するタスク
    grunt.registerTask('default', 'coffee');
};

```
任意のリビジョンのファイルを別名で保存する方法(Git) 

gitで`git checkout <commit> -- <file>`で任意のリビジョンに戻せることは知っていたのですが、「別名で保存したい時ってどうやってやるんだろう？」と前から思っていました。(ググっても欲する情報にヒットしない...)
で、やっとわかったので折角なのでアウトプットしておきます。

> git cat-file blob &lt;commit&gt;:&lt;file&gt;

これで標準出力に出力されますので、ファイルにリダイレクトすればOK！

例

> git cat-file blob git cat-file blob e4426a7:.vimrc   &gt;  vimrc_e4426a7

まぁしかし、これ結構使いそうなのに入門書とかに載ってないよねぇー不思議。
大抵は`git diff`を使うっていうのはあるけど...

追記

> git show &lt;commit&gt;:&lt;file&gt;
             
これでもできた。(thanks to @k_takata)
Recursion schemeとHaskell

Recursion schemeという、foldr、unfoldrを一般化した概念があるらしいのでHaskellで色々実装してみた。あとchronomorphismのかっこよさは異常(←しつこい)。

```haskell
{-# LANGUAGE StandaloneDeriving, UndecidableInstances #-}

import Control.Monad
import Control.Monad.Free
import Control.Comonad
import Control.Comonad.Cofree

newtype Fix f = Fix (f (Fix f))

unfix (Fix f) = f

deriving instance Show (f (Fix f)) => Show (Fix f)

-- morphisms

hylo :: Functor f => (f b -> b) -> (a -> f a) -> a -> b
hylo f g = f . fmap (hylo f g) . g

cata :: Functor f => (f a -> a) -> Fix f -> a
cata f = hylo f unfix

ana :: Functor f => (a -> f a) -> a -> Fix f
ana f = hylo Fix f

histo :: Functor f => (f (Cofree f a) -> a) -> Fix f -> a
histo f = extract . cata (\x -> f x :< x)

futu :: Functor f => (a -> f (Free f a)) -> a -> Fix f
futu f = ana g . return where
    g (Pure a) = f a
    g (Free fm) = fm

chrono :: Functor f => (f (Cofree f b) -> b) -> (a -> f (Free f a)) -> a -> b
chrono f g = histo f . futu g

-- list from Fix

data ListF e a = Empty | Cons e a deriving Show

instance Functor (ListF e) where
    fmap _ Empty = Empty
    fmap f (Cons e a) = Cons e (f a)

listF :: b -> (e -> a -> b) -> ListF e a -> b
listF a _ Empty = a
listF _ f (Cons e a) = f e a

type List e = Fix (ListF e)

fromList :: [a] -> List a
fromList = ana (uncons Empty Cons) where

toList :: List a -> [a]
toList = cata (listF [] (:))

unfoldr_ :: (b -> Maybe (a, b)) -> b -> List a
unfoldr_ f = ana $ maybe Empty (uncurry Cons) . f

foldr_ :: (a -> b -> b) -> b -> List a -> b
foldr_ = (cata.) . flip listF

uncons :: b -> (a -> [a] -> b) -> [a] -> b
uncons e _ [] = e
uncons _ f (x:xs) = f x xs
```
compassでspriteする際に個々のファイル名を取得する

all-dirname-sprites()みたいに、スプライトの元画像のファイル名を列挙したクラス名を付けたい場合、sprite-names($map)で個々の名前が取れる。

```scss
@import "sprite/*.png";
$spr-imgs: sprite-map("sprite/*.png");

// 2倍に拡大して表示する用にbackground-positionを指定するmixin
@mixin low-reso-sprites($name){
	$ypos: round(nth(sprite-position($spr-imgs, $name), 2) *2);
	background-position: 0 $ypos;
} 

// クラス出力
@each $sprite-name in sprite-names($spr-imgs) {
  .#{$sprite-name} {
    @include low-reso-sprites($sprite-name);
  }
}
```
Dropbox/PublicをローカルのApacheで表示する

```sh:手順
# 1. ~/Sites内に~/Dropbox/Publicへのシンボリックリンクを作る
cd ~/Sites; ln -s ~/Dropbox/Public Dropbox
# 2. ~/Dropboxの権限を 755 にする
chmod 755 ~/Dropbox
# 3. apacheのユーザディレクトリ設定でOptionsにFollowSymLinksを追加する
sudo vim /etc/apache2/users/`whoami`.conf
# 4. apacheを再起動する
sudo apachectl restart
```

これで `~/Dropbox/Public/index.html` に `http://localhost/~USERNAME/Dropbox/index.html` でアクセスできる。ローカルで素早く確認できるので嬉しい。
Leiningenにnon_proxy_hostを設定する

社内LANからLeinigenを利用する時、proxyの設定が必要な場合、社内のMavenリポジトリにはproxyをかませたくないときがある。
そういう時、javaだと、-Dhttp.nonProxyHostsに社内リポジトリのホストを指定するのだが、Leiningenではどうもprofile.cljやproject.cljでは設定できないもよう。

対応策として、環境変数に`no_proxy_host={リポジトリホスト}`のように設定する。

* MacOSX/Unix/Linuxの場合

```
export no_proxy_host=hoge.fuga.jp
```

* Windowsの場合
システムの詳細設定 → 環境変数 で NO_PROXY_HOST を作って、リポジトリを指定すればよい
[UITableViewController] 編集モード時、特定の行だけ選択可能にする

これが正攻法かあやしいんだけど、以前やったときの実装方法をメモしておきます。

## 準備
`allowsSelectionDuringEditing`プロパティを`YES`にする。
`allowsSelectionDuringEditing`は`UITableView`のプロパティ。編集モード時も行選択を可能にするかを設定する。InterfaceBuilder上では、 Editing プルダウンで設定可能。

## アプローチ
「特定の行だけ選択可能とする」ために、「全行を選択可能にして、行選択イベントで対象行以外を無視する」ことにしました。

## 実装
上記のアプローチでいくと、行選択イベントは以下のように書けます。

```objc
// 行選択イベント
- (void)tableView:(UITableView *)tableView 
    didSelectRowAtIndexPath:(NSIndexPath *)indexPath {
  if (self.editing) {
    if (/* 対象行判定 */) {
      :  // 何らかの処理
    } else {
      // 選択しなかったことにする。
      [tableView deselectRowAtIndexPath:indexPath animated:NO];
    }

    return;
  }

  // 通常の行選択処理
}
```

これだけだと、対象行以外の行をタップしたとき一瞬選択色が表示されてしまいますので、もう一押し。

```objc
// セル生成処理
- (UITableViewCell *)tableView:(UITableView *)tableView 
         cellForRowAtIndexPath:(NSIndexPath *)indexPath {
  UITableViewCell *cell = ...;  // セル作る

  if (/* NOT 対象行判定 */) {
    // 対象行以外は、行選択色を表示しないようにする。
    cell.selectionStyle = self.editing 
                          ? UITableViewCellSelectionStyleNone 
                          : UITableViewCellSelectionStyleBlue;
  }
}
```

とりあえずこれでいけました。
GNU ScreenのOSC83によるコマンド実行について


GNU Screenには、プログラムが出力した特定の制御シーケンスを自動的にscreenコマンドとして再解釈し実行してしまうという、とても危険でありながらも魅力的な設定があります。実際にはこれを知っていてもあまり役に立ちませんが、なにかまじめに取り組んでいるふりをしながら暇を潰したりするにはちょうどよい機能かもしれません。

有効化
-----
この設定は以下のscreenコマンドで有効化されます。

```
acladd :window:
```

一見なにも変わったようにはみえませんが、これを有効化したら、あなたは端末へ出力されるシーケンスを適切に予測し続けなければいけません。
もし制御に失敗して出力に予測不可能な外部データが紛れ込もうものなら、SSH鍵などをぶっこぬかれたり端末を乗っ取られたりしてもおかしくない状態です。やばいですね。

使い方
-----
遊び方の幅は無限大ですが、ここでは端末への安全な出力が特に（あえて？）考慮されていないように見受けられるプログラムのひとつである、gccを使ってみます。
gccがこのモードのGNU Screenでコンパイルされることを前提にすれば、コンパイル時の副作用を擬似的に表現することができます。
たとえば、コンパイルの途中で/usr/bin/ejectを呼んでみることにしましょう。

Cのソースに以下のようなディレクティブを書きます。

```test.c
#warning ^[]83;!/usr/bin/eject^G
```

ここで、"^["、"^G"は制御文字のつもりで書きました。
実際に入力するときは、エスケープせずに直接入力する必要があるので、「C-v + C-[」や「C-v + C-g」のようにタイプします。

```
$ gcc test.c
```

とすればコンパイル時にejectが走ると思います。

また、screenコマンドを走らせるアクションは同期的に実行される、というところもポイントです。たとえばこのようにすれば、リモートにあるコードも参照可能になります。

```test.c
#warning ^[]83;!wget remote.server/program.c^G
#include "program.c"
```

コツをつかめば自己改変や本格的な対話的インターフェースを実現することも難しくはなさそうですね。

他にもちょっとした細工で特殊な文字列を出力に紛れ込ませることが可能なプログラムはいくつかありますので、探してみるのも面白いでしょう。
特に外部システムなどから受けとったデータをそのまま端末に流してしまうタイプのものは、脆弱性と判断されることが多いみたいです。

----
今回はGNU Screenを使って遊びましたが、別解として、この機能に相当するような一部の端末エミュレータの脆弱性を活用するという方法もあります。
でもこれをちゃんと動作させるには端末や環境を選びますし、何より早く修正しろみたいな話になってしまいますよね。
その点GNU Screenはあえて確信犯的にこれを実装しているようなので、脆弱性ではなく機能である、と言い張ることができそうです。さすがですね。
read.table() でヘッダーをそのまま読み込みたい

`read.table()` でファイルをデータフレームに読み込むとき、ヘッダーに R の変数として使用できない文字があると `.` に自動的に変換されます。
例えば、下記のようなデータがあったとき、

|Name	|Value(1hours)	|Value(2hours)	|Value(3hours)	|#ofCount|
|------:|--------------:|--------------:|--------------:|-------:|
|Yamada	|4.2	|5.3	|6.4	|3|
|Tanaka	|4.5	|2.3	|4.3	|4|
|Sato	|2.3	|5.6	|4.2	|2|

次のようなコードでデータフレームに読み込むと、

```r
data <- read.table(filepath, header=TRUE, comment.char="")
print(data)
```

結果は下記のようになります。

```
    Name Value.1hours. Value.2hours. Value.3hours. X.ofCount
1 Yamada           4.2           5.3           6.4         3
2 Tanaka           4.5           2.3           4.3         4
3   Sato           2.3           5.6           4.2         2
```

ヘッダーに注目して下さい。
`(` および `)` は `.` に変換されます。`#ofCount` は `X.ofCount` というわけのわからないものになっています。これは R の変数が数字や記号から始まることができないためです。
これの何が問題かというと、このデータをそのまま作図関数に渡してしまうと、`X.ofCount` などがそのままグラフに描画されてしまいます。

```r
pairs(data[-1])
```
![プロット1](http://cdn-ak.f.st-hatena.com/images/fotolife/h/hoxo_m/20130128/20130128155458.png)

これを防ぐために `read.table()` には `check.names` という便利なパラメータがあります。
規定値は `TRUE` ですが、これを `FALSE` にすると、ヘッダーに対する変換を行わないようになります。

```r
data <- read.table(filepath, header=TRUE, comment.char="", check.names=FALSE)
print(data)
```

```
    Name Value(1hours) Value(2hours) Value(3hours) #ofCount
1 Yamada           4.2           5.3           6.4        3
2 Tanaka           4.5           2.3           4.3        4
3   Sato           2.3           5.6           4.2        2
```

```r
pairs(data[-1])
```
![プロット2](http://cdn-ak.f.st-hatena.com/images/fotolife/h/hoxo_m/20130128/20130128160156.png)

おー、便利だ。
ただし、`check.names=FALSE` にすると、データフレームの便利な記法 `$` が使えなくなります。

```r
print(data$Value(1hours))   # Error!
```
```
 エラー：   予想外の  シンボル  です  ( "print(data$Value(1hours" の) 
```
これは R の構文に違反しているためであり、まさにこのエラーが出ないように `check.names=TRUE` がデフォルトになっているのです。
しかし、これを回避する方法があります。
バッククオートで変数を囲むのです。

```r
print(data$`Value(1hours)`) # OK
```

```
[1] 4.2 4.5 2.3
```

モデル式についても、同様に記述できます。

```r
lm(`Value(3hours)` ~ `Value(1hours)` + `Value(2hours)`, data=data)
```

```
Call:
lm(formula = `Value(3hours)` ~ `Value(1hours)` + `Value(2hours)`, 
    data = data)

Coefficients:
    (Intercept)  `Value(1hours)`  `Value(2hours)`  
        -3.4059           1.2888           0.8289  
```

使ってみると意外に便利です。
以上です。
resourcesとresourceを組み合わせる際の注意点


* ユーザーの一覧は誰でも見れる
* ユーザーの詳細は誰でも見れる
* 自分のユーザー情報は編集できる

こんな仕様を実現するためのURL設計を考えます。
それぞれURLを以下のようにしようと思います。(自分の情報は```my```を挟む流派もあるかも知れませんが知ったこっちゃありません)

* GET /users
* GET /users/:id
* GET /users/edit
* PUT /users

## 失敗

この時、以下のようにroutesを定義してみました。

```config/routes.rb
resources :users, only: [:index, :show]
resource :users, only: [:edit, :update]
```

生成されたルートはこんなん。

```
rake routes
````

```
                  users GET    /users(.:format)                        users#index
                   user GET    /users/:id(.:format)                    users#show
             edit_users GET    /users/edit(.:format)                   users#edit
                        PUT    /users(.:format)                        users#update
```

うん。いいじゃん。
っんが、こんな感じでテストコケますよ、と。

```
Failures:
1) UsersController routing /users routing /users CRUD routes to #edit
Failure/Error: get("/#{resources}/edit").should route_to("#{resources}#edit")
The recognized options <{"action"=>"show", "controller"=>"users", "id"=>"edit"}> did not match <{"controller"=>"users", "action"=>"edit"}>, difference: <{"action"=>"edit", "id"=>"edit"}>.
<{"controller"=>"users", "action"=>"edit"}> expected but was
<{"action"=>"show", "controller"=>"users", "id"=>"edit"}>.
```

エラーメッセージにも書いてあるとおり、```edit```が```:id```として認識されちゃってますね。な、なるほどな。

というわけで、こういう場合はroutes定義の順番が大事さを実感するわけです。

## 成功

```config/routes.rb
resource :users, only: [:edit, :update]
resources :users, only: [:index, :show]
```

順番変わっているかな？

```
rake routes
```

```
             edit_users GET    /users/edit(.:format)                   users#edit
                  users PUT    /users(.:format)                        users#update
                        GET    /users(.:format)                        users#index
                   user GET    /users/:id(.:format)                    users#show
```

よさげです。
Instagram Engineering Challengeを解いてみた

何時かは解いてみようと思っていた[Instagram Engineering Challenge](http://instagram-engineering.tumblr.com/post/12651721845/instagram-engineering-challenge-the-unshredder)、バラバラに切断された画像を元に戻す、と言う問題。糞コードでもいいから週末にチャレンジしてみた。

**前書き**：完全糞コードなのであらかじめご了承下さい

スキル
------
HTML苦手、SVG、Canvasなど画像処理経験皆無、見ての通り無謀なスタートですが、色々なツールに出会って楽しくやり遂げました。

![切断面](https://gist.github.com/raw/4653355/b33d26026382289811d60eb5f5545d6fef050d5f/thumbnail.png)

ツール
------
全部初体験ですが大いに役に立ちました。

* [D3](http://d3js.org)：SVGによるデータ可視化ツール、[ギャラリー](https://github.com/mbostock/d3/wiki/Gallery)がかっこいい。
* [jCanvas](http://calebevans.me/projects/jcanvas/index.php)：canvas操作が楽に出来るjQueryプラグイン。
* [i-color](https://github.com/Shushik/i-color)：[カラースペース](http://ja.wikipedia.org/wiki/色空間)の変換ツール。

アプローチ
------
1. 切断された画像をcanvasに読み込み、行ごとに隣同士と色の相違度を求める。切断なら画像が繋がらないので相違度が高い。
2. n行ずつ相違度を求め、nが切断幅と重なると相違度が一層高くなる。ラジオのチューニング的なイメージ？？
3. ２の結果に基づいて画像を切断。
4. 左端の断片を見つけ、切断面が近い物を隣り合わせに配列。

コード
------
長いので[gist](https://gist.github.com/raw/4653355/21e3f285f931d057846fccff5e6a01aeae905c1f/script.coffee)でどうぞ。**長文注意、糞コード注意!!**

結果
------
![復元後](https://gist.github.com/raw/4653355/35435d5f4cb3309c77dc14240d6a96becebf73e6/result.png)

アドバンテージ
------
* [カラースペース](http://ja.wikipedia.org/wiki/色空間)はRGBでは無く[Lab](http://ja.wikipedia.org/wiki/Lab色空間)を使用する事で、色違い判定が人の目から見たそれに近くなる。

>L*、a*、b* の非線形な関係は人間の目の非線形な反応を擬似しようとしたものである。--[ウィキペディア](http://ja.wikipedia.org/wiki/Lab色空間#.E8.89.B2.E3.81.AE.E9.81.95.E3.81.84.E3.81.AE.E6.B8.AC.E5.AE.9A)

* 色違い判定の結果をD3により可視化。デバッグや、データ解析の時に役立つ。

ディスアドバンテージ
------
* 殴り書きな糞コード。
* カラースペース変換や色違い判定が非常に重い、Chromeのプロファイリングによると半分近い処理時間を消費している。
* Chromeでは正常だが、Safariでは計算結果が微妙に違い、壊れるケースがある。
* 時間があればnode.jsで[マルチスレッド](http://d.hatena.ne.jp/toriimiyukki/20120728/1343465021)に書き換えた方がいいかも。
bootstrap modal Tips


modalのコンテンツを動的に生成するようにし、動的生成コンテンツの要素に対して何らかの操作を行う場合は、on 'shown'を使う。
'shown'は、モーダルが生成された後にコールバックされる。

```javascrit:
  render: =>
    unless @modal
      @modal = $(@template()).modal()
        .on 'shown', =>
　　　   $("#text1").text("aiueo")
    @modal.modal('show')
```

参考：http://stackoverflow.com/questions/11553324/why-is-bootstraps-modal-plugin-callback-not-firing
桁数揃える


```Ruby
"%04d" % 20
# => "0020"

"%04d" % 2007
# => "2007"
```

power of ten

```Ruby
s = "3.070016013203525e-05"
f = s.to_f
# => 3.070016013203525e-05

"%0.10f" % f
# => "0.0000307002"

"%0.15f" % f
# => "0.000030700160132"

require "bigdecimal"
bd = BigDecimal(s)
# => #<BigDecimal:7fc325188518,'0.3070016013 203525E-4',27(27)>

bd.floor(2).to_f
# => 0.0

bd.floor(5).to_f
# => 3.0e-05

bd.floor(10).to_f
# => 3.07001e-05

bd.floor(15).to_f
# => 3.0700160132e-05
```
bundlerが:developmentを無視した件について


## 問題発生

```Gemfile
group :development do
  gem "better_errors"
  gem "binding_of_caller"
  gem "rails_best_practices"
  gem "meta_request"
  gem 'rack-mini-profiler'
end
```

で

```
bundle
```

してもこれらのgemがインストールされないという事件があった。

色々調べたあげく、このページにたどつく。
http://stackoverflow.com/questions/6314512/bundler-ignores-groups-in-rails-apps

## 解決
.bundle/configに

```
--without development
```

って書いてあった……いつのまに……なんでだろう……(´；ω；`)？
Heroku:  S3を利用したPGBackupsを使った運用方法

Herokuで、S3を利用したPGBackupsを使った運用方法のTips.
<参考>
https://devcenter.heroku.com/articles/pgbackups
http://psandvs.com/posts/7


1.上記のブログにあるように、AmazonS3にdumpを送る、rakeを実施。
2.下記のコマンドで、s3から、dumpを取得

>heroku pgbackups:restore DATABASE 'https://s3.amazonaws.com/XXXXX/XX.dump'

*注：この際に、s3側で、対象ファイルをpublic化する必要がある
3.完了
*注：cacheしているファイルは、表示が戻らないので、意図的にcacheを削除する必要あり
Model.save が行われる直前に特定の動作をさせる


FrogApps 技術ブログ始めました!
RailsやiOS、HTML5の情報を発信中!! → http://qiita.com/teams/frogapps

-

RailsでModelにデータを保存する際に、
「この文字列のカラムでは、前後に空白があったら除去したい」
などといったことをやりたいことがあります。

このような処理は、ActiveRecordに機能を追加することで実現できます。

##lib 以下に、以下のようなコードを書く
Procを作り、その中に空白除去をする処理を書きます。
これをvalidationが行われる前に実行させます。

```lib/ar_ex.rb
class ActiveRecord::Base
  def self.strip_data(*columns)
    columns.flatten!
    proc = Proc.new do
      columns.each do |column| 
        data = read_attribute(column)
        data.strip! if data.respond_to?(:strip!)
        write_attribute column, data
      end
    end
    before_validation &proc
  end
end
```

##config/application.rb から読み込ませる

```config/application.rb
require './lib/ar_ex'
```

##Modelで呼び出す
(Entry というモデルで、title と body のカラムに対してsave時に前後の空白除去を行わせる)

```app/models/Entry.rb
class Entry < ActiveRecord::Base

strip_data :title, :body
# …
```

##consoleでの確認
(DBはsqliteです)


```rbcon
irb(main):001:0> e = Entry.new(:title => '   hoge   ', :body => '    fuga    ')
=> #<Entry id: nil, title: "   hoge   ", body: "    fuga    ", created_at: nil, updated_at: nil>

irb(main):002:0> e.save
   (0.1ms)  begin transaction
  SQL (12.4ms)  INSERT INTO "entries" ("body", "created_at", "title", "updated_at") 
VALUES (?, ?, ?, ?)  [["body", "fuga"], ["created_at", Mon, 28 Jan 2013 02:12:10 UTC +00:00], ["title", "hoge"], ["updated_at", Mon, 28 Jan 2013 02:12:10 UTC +00:00]]
   (0.9ms)  commit transaction
=> true
```


同様の処理は before_save などでもできますが、このようにするとModelに1行追加するだけで済みます。
バイナリログの自動削除設定


```
$ vim /etc/my.cnf
# 以下を追加
expire_logs_days = 14
```

MySQLを再起動。


再起動無しで設定するには GLOBAL VARIABLES を設定する。

```
> show global variables like 'expire_logs_days';
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| expire_logs_days | 0     |
+------------------+-------+
> set global expire_logs_days = 14;
> show global variables like 'expire_logs_days';                                                  
+------------------+-------+
| Variable_name    | Value |
+------------------+-------+
| expire_logs_days | 14    |
+------------------+-------+
```
GitHubに上げてしまったパスワードを書いたファイルを消す方法


## はじめに
間違ってパスワードを書いたファイルをGitHubにPushしてしまった場合、対象のファイルを削除しても commit 履歴には残ってしまっている。
これをコミットした履歴ごと削除するにはどうしたらいいか。

対応する方法を探していたら以下の公式のヘルプにまとまっていた。
[Remove sensitive data](https://help.github.com/articles/remove-sensitive-data)

## 手順
方法としては`git filter-branch`で歴史をばっさりと書き換えて`--force`オプションをつけてpushするようだ。

例えば Rakefile にパスワードを書いたまま誤ってGitHubにpushしてしまった場合は以下のようにする。

``` bash
$ git filter-branch --index-filter 'git rm --cached --ignore-unmatch Rakefile' \
  --prune-empty --tag-name-filter cat -- --all
$ git push origin master --force
```

## おわりに

[GitHubで多くのユーザーが秘密鍵を公開状態にしていたことが判明](http://opensource.slashdot.jp/story/13/01/26/0745251/GitHub%E3%81%A7%E5%A4%9A%E3%81%8F%E3%81%AE%E3%83%A6%E3%83%BC%E3%82%B6%E3%83%BC%E3%81%8C%E7%A7%98%E5%AF%86%E9%8D%B5%E3%82%92%E5%85%AC%E9%96%8B%E7%8A%B6%E6%85%8B%E3%81%AB%E3%81%97%E3%81%A6%E3%81%84%E3%81%9F%E3%81%93%E3%81%A8%E3%81%8C%E5%88%A4%E6%98%8E)
Freeモナドでクイックソート

誰得

```haskell
import Control.Applicative
import Control.Monad.Free
import Data.Vector

data Sorter e a = Swap Int Int a
    | Search Int Int (e -> Bool) (Int -> a)
    | Index Int (e -> a)

instance Functor (Sorter e) where
    fmap f (Swap j k a) = Swap j k (f a)
    fmap f (Search i d p g) = Search i d p (f . g)
    fmap f (Index i g) = Index i (f . g)

swap j k = liftF $ Swap j k ()
search i d p = liftF $ Search i d p id
index i = liftF $ Index i id

runSorter :: Vector a -> Free (Sorter a) () -> Vector a
runSorter v (Free (Search j d p f)) = runSorter v $ f (loop j) where
    loop i | p (v ! i) = i
           | otherwise = loop (i + d)
runSorter v (Free (Swap j k cont)) = runSorter (v // [(j, v ! k), (k, v ! j)]) cont
runSorter v (Free (Index i f)) = runSorter v $ f (v ! i)
runSorter v (Pure _) = v

quickSortMain :: Ord a => Int -> Int -> Free (Sorter a) ()
quickSortMain begin end
    | begin >= end = return ()
    | otherwise = do
        pivot <- mode3 <$> index begin <*> index ((begin + end) `div` 2) <*> index end
        i <- partition pivot begin end
        quickSortMain begin i
        quickSortMain (i + 1) end
    
    where
        mode3 a b c | a <= b && b <= c = b
        mode3 a b c | a > b = mode3 b a c
        mode3 a b c | b > c = mode3 a c b

        partition pivot l r = do
            j <- search l 1    (>=pivot)
            k <- search r (-1) (<=pivot)
            if j < k
                then swap j k >> partition pivot (j + 1) (k - 1)
                else return k

quickSort :: Ord a => Vector a -> Vector a
quickSort v = runSorter v (quickSortMain 0 (Data.Vector.length v - 1))
```
UITableViewCell 上に配置した UIControl のアクションから indexPath を取得する

UITableViewCell に UIControl を配置し、アクションを MyTableViewController に繋いだとき、アクションが発火された cell の indexPath を知るにはどうすればいいでしょうか？

UIControl に tag を設定することもできますが、row や section が増えると tag も複雑になり、魔窟のようなコードになってしまいます。

UITableViewCell のサブクラスを作成し、cell 内でアクションを受け取って indexPath を取得、デリゲートで通知する手もあります。
しかし、特に Storyboard の Prototype Cells を利用する場合、アクションの行き先はコントローラに纏めたいものです。

そこで、アクションの sender から superview を辿って cell を取得し、UITableView の ` indexPathForCell:` インスタンスメソッドを使って indexPath を取得してみましょう。


```objective-c:MyTableViewController.m
- (IBAction)action:(id)sender {
    UITableViewCell *cell = [self findUITableViewCellFromSuperViewsForView:sender];
    if (cell) {
        NSLog(@"indexPath = %@", [self.tableView indexPathForCell:cell]);
    }
}

- (UITableViewCell *)findUITableViewCellFromSuperViewsForView:(id)view {
    if (![view isKindOfClass:[UIView class]]) {
        return nil;
    }
    UIView *superView = view;
    while (superView) {
        if ([superView isKindOfClass:[UITableViewCell class]]) {
            break;
        }
        superView = [superView superview];
    }
    return (UITableViewCell *)superView;
}
```

あとは取得した indexPath を使って煮るなり焼くなりしましょう。

## 参考
UITableView Class Reference
http://developer.apple.com/library/ios/#documentation/uikit/reference/UITableView_Class/Reference/Reference.html
neoagent1人読書会 その4


「その2」でna_event_loopを読んだが、その中でこのようにスレッドを作ってna_event_observerを渡していた。

```c
    if (EventQueue == NULL) {
        EventQueue = na_event_queue_create(env->conn_max);
    }
    th_workers = calloc(sizeof(pthread_t), env->worker_max);
    for (int i=0;i<env->worker_max;++i) {
        pthread_create(&th_workers[i], NULL, na_event_observer, env);
    }
```

「その3」ではna_front_server_callbackで、ウェブアプリケーションからのリクエストがある度にna_event_queue_push(EventQueue, client)でクライアントをキューに入れていた。

今回はna_event_observerを読む。短いのであっさり終わる。

```c
static void *na_event_observer(void *args)
{
    struct ev_loop *loop;
    na_env_t *env;
    na_client_t *client;
    static int tid_s = 0;
    int tid;

    env  = (na_env_t *)args;
    pthread_mutex_lock(&env->lock_loop);
    loop = na_event_loop_create(env->event_model);
    pthread_mutex_unlock(&env->lock_loop);

    pthread_mutex_lock(&env->lock_tid);
    tid = tid_s++;
    pthread_mutex_unlock(&env->lock_tid);
```

argsをenvにキャストしなおしている。

```c
    while (true) {
        client = na_event_queue_pop(EventQueue);
```

あとはwhileループでイベントキューをpopしている。

```c
        if (client == NULL) {
            pthread_mutex_lock(&EventQueue->lock);
            if (EventQueue->cnt == 0) {
                pthread_cond_wait(&EventQueue->cond, &EventQueue->lock);
            }
            pthread_mutex_unlock(&EventQueue->lock);
            continue;
        }
```

キューが空だったらpthread_cond_waitを呼ぶ。

pthread_cond_waitは、pthread_cond_broadcast（またはpthread_cond_signal）が呼ばれるまでスレッドを止めるらしい。pthread_cond_broadcastはna_event_queue_pushの中に書いてあった。それだったらpthread_cond_waitもna_event_queue_popの中にあって抽象化されてればいいのにと思った。

さておき。

```c
        ev_io_init(&client->c_watcher,  na_client_callback,        client->cfd,  EV_READ);
        ev_io_init(&client->ts_watcher, na_target_server_callback, client->tsfd, EV_NONE);
        ev_io_start(EV_A_ &client->c_watcher);
        pthread_rwlock_wrlock(&env->lock_worker_busy[tid]);
        env->is_worker_busy[tid] = true;
        pthread_rwlock_unlock(&env->lock_worker_busy[tid]);
        ev_loop(EV_A_ 0);
        pthread_rwlock_wrlock(&env->lock_worker_busy[tid]);
        env->is_worker_busy[tid] = false;
        pthread_rwlock_unlock(&env->lock_worker_busy[tid]);
```

ウェブアプリケーション側とKVS側のソケットにコールバックを付けて、ウェブアプリケーション側のほうだけ開始している。

前回読んだところでもイベントキューがいっぱいだったり、ワーカースレッドがbusyだったら同じ事をしていた。

```c
    }

    return NULL;
}
```

あとは無限ループするだけ。

今回のまとめ。ワーカースレッドはウェブアプリケーションからのリクエストを順番に処理するだけ。

前回も書いたように、neoagentは①ウェブアプリケーションからのリクエストを読み込んで、②KVSに書き出して、③KVSからのレスポンスをまた読み込んで、④またウェブアプリケーションに返す、という流れを繰り返す。それぞれのリクエストに対して自分が今どの状態にいるかなどを記録しておくのがclientらしい。

na_client_callbackは①と④を、na_target_server_callbackは②と③の処理を担当することになる。なので、それぞれの関数の中でREADとWRITEのコールバックにわかれている。

ウェブアプリケーションのリクエストをまず読み込むのはna_client_callbackのREADなので、次回はそこを見ることにする。

ここで面倒なのが、ステートマシンとしてのclientと、neoagentから見たウェブアプリケーションのリクエストという意味でna_client_callbackというネーミングがあるのだが、これはそういうものだと思うしかない。ステートマシンのほうはcontextという名前にすれば良かったと開発者の方も言っていた。
Rでフィッシャーの線形判別

PRML図4.6と同様に、クラス平均の分離を最大化するような射影方向を求め、図示します。また、フィッシャーの線形判別により、クラス内分散を最小化するような射影方向を求め、図示します。射影方向wを求めたのみであり、識別境界は求めていません。

![](https://dl.dropbox.com/sh/cwfemibvr7gk4cy/lbqwJO7fVW/6.FishersLinearDiscriminant.png)

```r
library(MASS)
frame()
par(mfrow=c(2, 2))
par(mar=c(2, 2, 1, 2))
par(mgp=c(2, 1, 0))
set.seed(0)
x <- mvrnorm(40, c(0, 1), matrix(c(2, 1.9, 1.9, 2), 2))
d1 <- as.data.frame(cbind(x, 1, 1, 0))
x <- mvrnorm(40, c(4, 0), matrix(c(2, 1.9, 1.9, 2), 2))
d1 <- rbind(d1, as.data.frame(cbind(x, 2, 0, 1)))
x <- mvrnorm(10, c(7, -7), matrix(c(.2, 0, 0, .2), 2))
d2 <- rbind(d1, as.data.frame(cbind(x, 2, 0, 1)))
names(d1) <- c("x1", "x2", "class", "t1", "t2")
names(d2) <- c("x1", "x2", "class", "t1", "t2")
 
doplot <- function(d, fisher) {
        xrange <- c(-4, 8)
        yrange <- c(-8, 4)
        m1 <- c(mean(d$x1[d$class==1]), mean(d$x2[d$class==1]))
        m2 <- c(mean(d$x1[d$class==2]), mean(d$x2[d$class==2]))
        if (fisher) {
                s1 = cov(cbind(d$x1[d$class==1], d$x2[d$class==1])) * (sum(d$class==1) - 1)
                s2 = cov(cbind(d$x1[d$class==2], d$x2[d$class==2])) * (sum(d$class==2) - 1)
                sw = s1 + s2
        } else {
                sw = diag(1, 2)
        }
        w <- solve(sw) %*% (m2 - m1)
        print(w)
        base <- function(x1, x2) {
                (cbind(x1, x2))
        }
        estimate <- function(x1, x2){
                (t(w) %*% t(base(x1, x2)))
        }
        x1 <- seq(-4, 8, .1)
        x2 <- seq(-8, 4, .1)
        y <- outer(x1, x2, estimate)
        plot(d$x1, d$x2, col=d$class, xlim=xrange, ylim=yrange, main=ifelse(fisher, "Fisher's", "max mean diff"))
        contour(x1, x2, y, xlim=xrange, ylim=yrange, add=T)
}
 
doplot(d1, F)
doplot(d2, F)
doplot(d1, T)
doplot(d2, T)
```
MacOSXでCgToolKitを使うまで

NVidiaが出してるCg言語をMacOSで動かすまでに情報がまとまってなかったのでメモ．

まずハマったのが，Windows版だと指定できるライブラリのインストール先が
表示すらされない問題．
これはインストール完了後にコマンドラインでcginfoというコマンドを実行すると
表示される．
/usr/libとかではなく，frameworkとして/Library/Framworks/Cg.framework
として入っていた．
これをXcodeで作ったコマンドラインアプリケーションにフレームワークとして追加

次にハマったのが
http://asura.iaigiri.com/OpenGL/gl11.html
とかを参考にコードを書いてビルドしようとしたら
not found framework Cgというエラー．

これはオプションでFramework search pathに先ほどのLibrary/Frameworksを追加すると
解決する．（他で追加したときはいらなかったような気がするのになぜ必要なんだろう．．）

以上．
いい感じにsleepする

バッチ処理などで、リソース(APIやDBなど)にアクセスする際に次のようなコードを書いたことある人は多いのではないでしょうか。

```php:crawler_without_throttle_proc.php
<?php
$page = 1;
while ( $result = $api->fetch("/some/api?page=" + $page) ) {
   $cache->set($result);
   if ( $page % 10 === 0 ) {
      sleep(1);
   }
}

```

このコードには、(問題にならないことも多いでしょうが)いくつか問題があります。

10回に1回のsleepで大丈夫とは限りません。もしかすると、9回目のアクセスでAPIを提供するサイトが負荷がかかって重くなってしまうかもしれません。
1秒のスリープをしたとしても、ちょうど1秒後のアクセスのタイミングで、他のユーザーの大量のアクセスが集中すれば、結果的にAPIを提供するサイトは重くなってしまいます。

というわけで、[ThrottleProc](https://github.com/walf443/php-throttle-proc)というライブラリを作ってみました。(Composerでもそのうち提供する予定です。)

これを使って書くと次のような感じになります。

```php:crawler_with_throttle_proc.php
<?php
require_once('path/to/lib/src/ThrottleProc.php');

$throttle = new ThrottleProc(0.1);
$page = 1;
while ( true ) {
  $throttle->start();
  $result = $api->fetch("/some/api?page=" + $page);
   if ( $result === null ) {
      break;
   } else {
        $cache->set($result);
        $throttle->finishAndSleep();
   }
}

```

もちろんこれで重くならない、というわけではないのですが、cacheにセットする処理に時間がかかったり、apiを取得する処理に時間がかかった場合、それに応じて間隔を自動調整してくれるので、重いリクエストを投げ続けてさらに負荷をかける、というのを緩和できます。

ruby版も前に作りましたが、perlのSub::Throttleを移植したライブラリです。phpだとClosureを受けるという方式だとちょっと都合が悪いことがありそうだったので、呼び出しがstart/finishAndSleepと分かれています。
Objective-CでParseに色んなQueryを投げる

BaaS の [Parse](https://parse.com/) を使った iPhone アプリ開発をする上で
必要な Query 発行を [公式ドキュメント](https://www.parse.com/docs/ios_guide#queries/iOS) を参考にまとめる。

#### select * from xxx where **playerName = "Dan Stemkoski"**;
```objc
[query whereKey:@"playerName" equalTo:@"Dan Stemkoski"];
```

#### select * from xxx where **playerName <> "Michael Yabuti"**;
```objc
[query whereKey:@"playerName" notEqualTo:@"Michael Yabuti"];
```

#### select * from xxx **LIMIT 10**;
```objc
query.limit = 10;
```

#### select * from xxx **ORDER BY score**;
```objc
[query orderByAscending:@"score"];
```

#### select * from xxx **ORDER BY score DESC**;
```objc
[query orderByDescending:@"score"];
```

#### select * from xxx **wins < 50**;
```objc
[query whereKey:@"wins" lessThan:[NSNumber numberWithInt:50]];
```

#### select * from xxx **wins <= 50**;
```objc
[query whereKey:@"wins" lessThanOrEqualTo:[NSNumber numberWithInt:50]]; 
```

#### select * from xxx **wins > 50**;
```objc
[query whereKey:@"wins" greaterThan:[NSNumber numberWithInt:50]];
 ```

#### select * from xxx **wins >= 50**;
```objc
[query whereKey:@"wins" greaterThanOrEqualTo:[NSNumber numberWithInt:50]];
```

#### select * from xxx **playerName IN ('Jonathan Walsh', 'Dario Wunsch', 'Shawn Simon')**;
```objc
NSArray *names = [NSArray arrayWithObjects:@"Jonathan Walsh", @"Dario Wunsch", @"Shawn Simon", nil];
[query whereKey:@"playerName" containedIn:names];
```

#### select * from xxx **playerName NOT IN ('Jonathan Walsh', 'Dario Wunsch', 'Shawn Simon')**;
```objc
NSArray *names = [NSArray arrayWithObjects:@"Jonathan Walsh", @"Dario Wunsch", @"Shawn Simon", nil];
[query whereKey:@"playerName" notContainedIn:names];
```
#### select * from xxx **name LIKE "%Big Daddy's%"**;
```objc
[query whereKey:@"name" hasPrefix:@"Big Daddy's"];
```
XCodeのUnitTestで、Failを赤く表示する

====

[XCodeColors](https://github.com/robbiehanson/XcodeColors)で、XCodeのコンソールに色が出せるようになるので、これを使ってUnitTestのFailを赤くするよう弄ってみました。

```objc:SenTestCase+PAMColor.h
//
//  SenTestCase+PAMColor.m
//  PAMColorUnitTest
//
//  Created by 田村 孝文 on 2013/01/27.
//  Copyright (c) 2013年 田村 孝文. All rights reserved.
//

#import "SenTestCase+PAMColor.h"
#import <objc/runtime.h>

// NSProxy 参考
// http://d.hatena.ne.jp/Kazzz/20120205/p1
@interface PAMColorExceptionProxy : NSProxy
@property(nonatomic,strong) NSException *targetException;
@end

@implementation PAMColorExceptionProxy
@synthesize targetException;

// "色付き"の文言を返す
- (NSString *)reason
{
    return [NSString stringWithFormat:@"\033[fg255,0,0;%@\033[;",
            self.targetException.reason];
}

- (void)forwardInvocation:(NSInvocation *)invocation
{
    if ( self.targetException )
    {
        [invocation setTarget:self.targetException];
        [invocation invoke];
    }
}
- (NSMethodSignature *)methodSignatureForSelector:(SEL)sel
{
    NSMethodSignature *result;
    if ( self.targetException )
    {
        result = [self.targetException methodSignatureForSelector:sel];
    }
    else
    {
        result = [super methodSignatureForSelector:sel];
    }    
    return result;
}
@end

@implementation SenTestCase (PAMColor)
+(void)load
{
    // failWithexceptionメソッドを入れ替える
    SEL originalSelector = @selector(failWithException:);
    SEL overrideSelector = @selector(swizz_failWithException:);
    
    Class clazz = [self class];
    Method originalMethod = class_getInstanceMethod(clazz, originalSelector);
    Method overrideMethod = class_getInstanceMethod(clazz, overrideSelector);
    
    method_exchangeImplementations(originalMethod, overrideMethod);
}

-(void)swizz_failWithException:(NSException *)exception
{
    // Proxyでラッピング
    PAMColorExceptionProxy *e = [PAMColorExceptionProxy alloc];
    e.targetException = exception;
    
    // method_exchangeImplementationsで「入れ替わってる」ので、
    // ↓でオリジナルメソッドを呼び出す
    [self swizz_failWithException:(NSException *)e];
}
@end
```

```objc
    STFail(@"Unit tests are not implemented yet in PAMColorUnitTestTests");
```
↓
![](https://www.evernote.com/shard/s3/sh/7c66bbae-c7db-458f-972b-292120feda8c/45bba59a089471b2bd9914e99427f28b/res/2ac15cdd-05ee-44da-95c1-c66dace0f10d/skitch.png)

ちょっとしたHackでした。
CALayerでFlip Animation

Dashboardにあるような裏返しアニメーションをCALayerを用いてやってみる。

単にアニメーションするだけならtransform.rotation.yの値をいじってやれば暗黙的なアニメーションを行うのだが、表と裏で違う情報を表示したい。そこで、CALayerのdoubleSidedにNOを指定すると、レイヤーが裏返しになったときに描画されなくなることを利用して、表面と裏面それぞれにレイヤーを用意し、同時に裏返すアニメーションをすることで実装する。

以下はARC下での実装例。テストはしてない。

```objectivec
@interface MyLayer : CALayer {
@private
	BOOL faceup_;

	CALayer *frontLayer_;
	CALayer *backLayer_;
}

@property BOOL faceup;
@end

@implementation MyLayer
@dynamic faceup;

- (BOOL)faceup {
	return faceup_;
}

- (void)setFaceup:(BOOL)faceup {
	if (faceup_ == faceup) return;
	faceup_ = faceup;

	// この設定値は試行錯誤の結果生まれました。
    CABasicAnimation *anim = [CABasicAnimation animationWithKeyPath:@"transform.rotation.y"];
    anim.fromValue = @(M_PI);
    anim.byValue = (faceUp) ? @(M_PI) : @(-M_PI);	//表にするのと裏にするので回転方向を変える。
    anim.duration = .25;
    [frontLayer_ addAnimation:anim forKey:nil];
    [backLayer_ addAnimation:anim forKey:nil];

	// 新しいfaceupの値によってどちらかを表にする。
	[CATransaction setDisableActions:YES];
	CATransform3D t;
	t = CATransform3DMakeRotation((faceup) ? 0 : M_PI, 0, 1, 0);
	t.m34 = 1.0f / -420.0f;
	[frontLayer_ setTransform:t];
	t = CATransform3DMakeRotation((faceup) ? M_PI : 0, 0, 1, 0);
	t.m34 = 1.0f / -420.0f;
	[backLayer_ setTransform:t];
	[CATransaction setDisableActions:NO];
}

- (id)init {
	self = [super init];
	if (!self) return nil;

	frontLayer_ = [CALayer layer];
	backLayer_ = [CALayer layer];

	// 裏返し時に描画しない。
	frontLayer_.doubleSided = NO;
	backLayer_.doubleSided = NO;

	// あらかじめ裏返しておく。
	[backLayer_ setValue:@(M_PI) forKeyPath:@"transform.rotation.y"];

	[self addSublayer:frontLayer_];
	[self addSublayer:backLayer_];

	return self;
}

- (void)resizeSublayersWithOldSize:(CGSize)size {
    frontLayer_.frame = self.bounds;
    backLayer_.frame = self.bounds;
}

@end
```

frontLayerとbackLayerの公開範囲と描画方法は自由。
- - -
以下補足。（自分用メモ）
わざわざ明示的なアニメーションを使っているのは回転方向を指定するため。始めは暗黙的なアニメーションを使っていたのだが、frontLayerとbackLayerの回転方向が逆になってしまい、奇妙な動きをしてしまった。そこで明示的なアニメーションで過程を細かく制御し、暗黙的なアニメーションをオフにした。アニメーションのfromValueはfaceupの値で変えたり色々やったが、これで上手くいったのでこれにしておく。
CATransform3Dのm34の値は木下誠氏の[Leopardのアニメーションを簡単実装! Core Animationを使いこなす](http://news.mynavi.jp/special/2007/coreanimation/005.html)を参考にした。
frontLayerとbackLayerを非公開にしたときに、-[CALayer hitTest:]でfrontLayerやbackLayerが返されるのが不都合な場合は、hitTest:を次の様にオーバーライドする。

```objectivec
- (CALayer *)hitTest:(CGPoint)p {
    CALayer *layer = [super hitTest:p];
    if (layer == frontLayer_ || layer == backLayer_) return self;
    else return layer;
}
```
何か不安な実装だが、これで動く。
Homebrewのemacsをeditしてインラインパッチなどを当てる（Emacs-24.2）

『[インサイドフラッギング - HomebrewでCocoa Emacs 24.2をインストールした][1]』
を参考に、2013年1月26日現在のemacs.rbに対し「brew edit emacs」をかけて、
いわゆるインラインパッチと
[ポップアップダイアログが出ると暫くして落ちてしまう件に対するパッチ][2]を
追加したemacsのFormulaを作成しました。

  [1]: http://insideflag.blogspot.com/2012/10/homebrewcocoa-emacs-242.html
  [2]: http://moimoitei.blogspot.jp/2010/05/fix-cocoa-emacs-23.html

差分を記しておきます。2012年10月とはFormulaが違うようで、
[インサイドフラッギング][1]のパッチはそのままではうまく当たらなかったので、
いわゆる手パッチを試みました。

    diff --git a/Library/Formula/emacs.rb b/Library/Formula/emacs.rb
    index 3e0cd5b..d17afad 100644
    --- a/Library/Formula/emacs.rb
    +++ b/Library/Formula/emacs.rb
    @@ -28,7 +28,8 @@ class Emacs < Formula
       def patches
         # Fullscreen patch works against 24.2; already included in HEAD
         if build.include? "cocoa" and not build.head?
    -      "https://raw.github.com/gist/1746342/702dfe9e2dd79fddd536aa90d561efdeec2ba716"
    +       { :p1 => "https://raw.github.com/gist/1746342/702dfe9e2dd79fddd536aa90d561efdeec2ba716",
    +         :p0 => ["http://sourceforge.jp/projects/macemacsjp/svn/view/inline_patch/trunk/emacs-inline.patch?view=co&root=macemacsjp", DATA] }
         end
       end
     
    @@ -141,3 +142,15 @@ class Emacs < Formula
         return s
       end
     end
    +__END__
    +--- src/nsterm.m.orig
    ++++ src/nsterm.m
    +@@ -4263,6 +4263,8 @@
    + 
    + - (void)changeInputMethod: (NSNotification *)notification
    + {
    ++  if (!emacs_event)
    ++    return;
    + 
    +   struct frame *emacsframe = SELECTED_FRAME ();
    + 

なお、このパッチを適用したEmacsをビルドする際、/usr/local/bin/autoconfと/usr/local/bin/automakeを必要としますが、最近のHomebrewでは[Superenv][3]という仕組みが導入されていることから/usr/local/binにPATHを通すことができません。

  [3]: https://github.com/mxcl/homebrew/wiki/Homebrew-0.9.3

そこで、PATHに/usr/local/binを加えるだけでなく、「--env=std」を加えてSuperenvを無効化する必要があります。

    h12o@Exegesis:~$ brew install emacs --cocoa --env=std

なお、OS X 10.8.2とGoogle日本語入力の環境で、このEmacsは特に問題なく動作しています。
iOS6のSafari/WebViewでスクロール中にsetTimeoutなどのイベントが発行されない問題をiScrollで解決！

FrogApps 技術ブログ始めました！
RailsやiOS、HTML5の情報を発信中!! → http://qiita.com/teams/frogapps

----

　iOS 6のSafari/WebViewはChromeやOSX版Safariと少しずつ違う動きをして、モバイル版WebやWebAppを作るときに頭を悩ませます。

　先週、ミイルの中で使うHTML/Javascriptを書いている時に、**iOS6でたまにsetTimeout/IntervalやWebWorkerからのmessageが届かない**事に気がつきました。
ググってみると、iOS6のMobileSafariでは画面がスクロールしているときに上記の様なイベントが発行されないようなのです。jQuery本家のBBSでも打つ手無し的な事が書かれていました。

　これではsetIntervalで500ms毎にスクロール位置を検出して何かしたくても、検出する方法がありません。

　Safariのスクロール機能を使わずにタッチイベントとTrasform3Dを駆使してiOSのスクロールをエミュレートする、[iScroll 4](http://cubiq.org/iscroll-4)を使うことで、この問題を解決することができます。

　iScrollは元々CSSのoverflow:scrollをエミュレートするために作られたライブラリですが、MobileSafariが同機能をサポートした今は、高度なスクロールのカスタマイズやPull to Refreshの処理を行うためのライブラリとして提供されています。

　使い方は簡単でただscriptタグで読み込むだけです。
　
　iOS 6でタイマーイベントが’使えるようになるほかに、WebViewでHTMLの端まで引っ張ったときに、バウンス部分の影が見えて格好が悪いことがあります。しかし、このライブラリを使うことで見えなくすることが可能です。

　MobileSafariのスクロール処理で困った方は、iScroll4を試してみてください。
Seleniumでブラウザ上の位置を取得する

Selenium(Capybara)でブラウザ上の位置を取得する方法

```ruby:
all('.css_path').last.native.location.y
```

allとかfindに続けて`.native.location`で取得

`location.x` も取得できる

使いたいシーンは非常に少ないが、ドラッグアンドドロップのテストの時に使った。

他にページ内でjQueryなど使っていれば、細かい要素を`evaluate_script`で取得することもできる

```ruby:
height = evaluate_script("$('#{css_path}').height()")
```