OmniAICreator/Qiita-1.07M huggingface dataset:
正規表現のクローンとか

# 正規表現のクローンは作る必要あるのかわかんないけど、どうなんだろう？
任意のハッシュに正規表現が登録されていて、何かのタイミングで書き換えられたら困るとかそういう場合があるかどうか...

あと、ベストプラクティスはどうなんだ？

````javascript
function cloneRegExp (reg) {
    if (!(reg instanceof RegExp))
        throw new Error('"reg" is not "RegExp"');

    var _source = reg.source;
    var _string = reg.toString();
    var p       = _string.lastIndexOf('/');
    return new RegExp(_source, _string.slice(p+1));
}
```

簡単なテスト

```javascript
var reg = /<a(?:.*?)href="([^\"]+)"(?:.*?)>(.*?)<\/a>/im;
var reg_cop = cloneRegExp(reg);

function test (str) {
    console.log(reg.test(str));
    console.log(reg_cop.test(str));
}

function match (str) {
    var res  = str.match(reg);
    console.log(res);
    var res2 = str.match(reg_cop);
    console.log(res2);
}

[
    '<a href="/hoge.org/hoge">hoge1</a>'
,   '<a title="hoge2" href="/hoge.org/hoge2">hoge2</a>'
,   '<a href="/hoge.org/hoge3" title="done">hoge3</a>'
].forEach(function (str, i) {
    console.log('test %d', i + 1);
    test(str);
    match(str);
    console.log();
});
```

結果

```
test 1
true
true
[ '<a href="/hoge.org/hoge">hoge1</a>',
  '/hoge.org/hoge',
  'hoge1',
  index: 0,
  input: '<a href="/hoge.org/hoge">hoge1</a>' ]
[ '<a href="/hoge.org/hoge">hoge1</a>',
  '/hoge.org/hoge',
  'hoge1',
  index: 0,
  input: '<a href="/hoge.org/hoge">hoge1</a>' ]

test 2
true
true
[ '<a title="hoge2" href="/hoge.org/hoge2">hoge2</a>',
  '/hoge.org/hoge2',
  'hoge2',
  index: 0,
  input: '<a title="hoge2" href="/hoge.org/hoge2">hoge2</a>' ]
[ '<a title="hoge2" href="/hoge.org/hoge2">hoge2</a>',
  '/hoge.org/hoge2',
  'hoge2',
  index: 0,
  input: '<a title="hoge2" href="/hoge.org/hoge2">hoge2</a>' ]

test 3
true
true
[ '<a href="/hoge.org/hoge3" title="done">hoge3</a>',
  '/hoge.org/hoge3',
  'hoge3',
  index: 0,
  input: '<a href="/hoge.org/hoge3" title="done">hoge3</a>' ]
[ '<a href="/hoge.org/hoge3" title="done">hoge3</a>',
  '/hoge.org/hoge3',
  'hoge3',
  index: 0,
  input: '<a href="/hoge.org/hoge3" title="done">hoge3</a>' ]
```
Mirrorモナドを作ってみた

ReaderとWriterの組み合わせにフィードバック機能が付いたら面白そうだな、と考えた結果。計算の間の相互作用を記述するのに使えそう

```haskell:Mirror.hs
{-# LANGUAGE FlexibleContexts #-}
module Control.Monad.Mirror (MirrorT, MirrorF, look, pose, reflect, runMirrorT) where
import Control.Monad.Trans.Free
import Control.Monad.Trans
import Data.Monoid

data MirrorF i a = Look (i -> a) | Pose i a | Reflect a

instance Functor (MirrorF i) where
    fmap f (Look g) = Look (f . g)
    fmap f (Pose i x) = Pose i (f x)
    fmap f (Reflect x) = Reflect (f x)

type MirrorT i = FreeT (MirrorF i)

-- | 鏡を見る。
look :: MonadFree (MirrorF i) m => m i
look = wrap $ Look return

-- | 鏡にモノを映す。
pose :: MonadFree (MirrorF i) m => i -> m ()
pose i = wrap $ Pose i (return ())

-- | モノを反射させる。今までにposeしたものがlookで見えるようになる。
reflect :: MonadFree (MirrorF i) m => m ()
reflect = wrap $ Reflect (return ())

-- | Mirrorモナドを実行し、結果を取り出す。
runMirrorT :: (Monad m, Monoid i) => i -> MirrorT i m a -> m a
runMirrorT initial = run initial mempty where
    run image current m = runFreeT m >>= \r -> case r of
        Pure a -> return a
        Free (Look f) -> run image current (f image)
        Free (Pose img cont) -> run image (mappend current img) cont
        Free (Reflect cont) -> run current mempty cont

main = runMirrorT [0..9] $ do
    i <- look
    lift $ print i -- [0,1,2,3,4,5,6,7,8,9]が表示される
    
    pose (filter odd i)
    pose (filter even i)
    
    look >>= lift . print -- [0,1,2,3,4,5,6,7,8,9]が表示される
    reflect
    look >>= lift . print -- [1,3,5,7,9,0,2,4,6,8]が表示される
    reflect
    look >>= lift . print -- []が表示される
```
alfredでエイリアスを設定するには

Macで最近良い感じのキーボードランチャーAlfredで、あるキーワードで特定のアプリを起動させたい時は以下の用に設定。
(例えばmailと入力した時にデフォルトメールアプリのmailでなくsparrowを起動させたい時などに活用できます)
***
Applicationsフォルダからsparrowの情報ウィンドウを表示させ、spotlightコメントにmailと入力

これだけで次回検索からmailと入力すれば候補にsparrowがでてくるはずです。
Stumpwm で *resize-increment* が反映されない問題の対処

``` common-lisp
(setf *resize-increment* 100)
```

などとしても、iresize で違いが見られない。stumpwm/iresize.lisp を見てみると、どうやら *iresize-increment* の反映には update-resize-map をしないといけないようだ。それも行ってくれる set-resize-increment 関数が iresize.lisp で用意されているが、export されていない。

対処方法の 1 つとしては、export の *resize-increment* を set-resize-increment に書き換えて `make && sudo make install` というのがある。
C++言語仕様は2値以上の"ビット"をサポートするか？

Stack Overflowの[Does C++, as an abstraction, support "bits" representing one of more than two values?](http://stackoverflow.com/questions/12655875/)より。
プログラミング言語C++の言語仕様は、2つ以上の値をとる"ビット"を許容するか？例えば"3状態ビット"であっても成り立つか？というお話。**実用性は皆無です**。

* C++11標準ではビット(bit)について直接定義している箇所は無いらしい。
* C++11標準のnoteには言及箇所があるが、それはinformativeであってnormativeじゃないよねと突っ込み。
* C++11がnormativeに参照するC99標準では下記の定義が行われているとのこと。

> 1 bit unit of data storage in the execution environment large enough to hold an object that may have one of two values

つまりC99標準でも「2値のうち1個を保持するのに十分なサイズ」としか定義していないようです。これは"ビット"は「少なくとも2値以上の状態をとること」を意味しますが、一方で「必ず2値状態をとること」は意味しないため、やっぱり厳格な答えにはならないねという所のようです。

おしまい。
TitaniumでViewをdragする


[この記事](http://ti.masuidrive.jp/topic.php?id=200)を参考に、動くように改良。

```:js
var counter = 1;
var startX = null, startY = null;
view.addEventListener('touchstart', function(e){
    startX = e.x, startY = e.y;
});
view.addEventListener('touchmove', function(e){
    if((counter % 5) == 0){
        var x = (e.x - startX) + view.animatedCenter.x;
        var y = (e.y - startY) + view.animatedCenter.y;
        view.animate({top:y-viewHeight/2, left:x-viewHeight/2, duration:1});
        counter = 0;
    }
    counter += 1;
});
view.addEventListener('touchend', function(e){
    startX = null, startY = null;
});
```

e.x, e.yで取れるのはviewからの相対的な位置のようなので、最初にtouchした時点の位置を覚えておき差分を動かすように修正。
NSMutableArrayの要素を削除の落とし穴


```Objective-C
for (id object in array.reverseObjectEnumerator) {
    // objectを削除する必要があるかどうかチェックする
    if ([object shoudRemove]) {
        // objectを削除する
        [array removeObject:object];
    }
}
```

というコードを見かけたのですが、これはちょっとどうなのかな？
と思いました。
なぜならremoveObjectが配列では定数時間ではないからです。
コードでは１重ループのはずが、内部的には２重ループをまわしていることになるのです。
NSArrayにはfilteredArrayUsingPredicate、
NSMutableArrayにはfilterUsingPredicateが使えるので、こちらを使うのが良いんじゃないかと思います。

コレクションのサイズが大きくなると、この速度差は歴然だと思います。
実装によっては深刻なボトルネックにもなりかねません。
※もちろん要素数が少ないならばどっちでもいいです。


NSPredicateではblocksを使ってやるのが一番使いやすいかなとおもいます。

```Objective-C
NSMutableArray *array = [@[@1, @2, @3, @4, @5] mutableCopy];
[array filterUsingPredicate:[NSPredicate predicateWithBlock:^BOOL(NSNumber *evaluatedObject, NSDictionary *bindings) {
            return evaluatedObject.intValue > 2;
        }]];
NSLog(@"%@", array);
```
vim scriptで、正規表現のマッチを変数に格納する

vim scriptで、正規表現のマッチを変数に格納するには、matchstr関数を使います。

```matchStr1.vim
let defLine = "def some_method"
let methodName = matchstr(defLine, '\(def\s\+\)\zs\k\+', 0)
echo methodName 
"-> some_method
```

最初の引数はリストでも関数を呼ぶことはできますが、リストの場合はマッチした結果ではなく、該当行全体が返ってくるため、さらに絞り込む必要があります。

```matchStr2.vim
let defFile = ["def move_camera"]
let defFile += [ "eye = [100, 1000, 1000]"]
let defFile += [ "target = [0, 0, 0]"]
let defFile += [ "up = [0, 0, 1]"]
let defFile += [ "my_camera= Sketchup::Camera.new eye, target, up"]  
let defFile += [ "view = Sketchup.active_model.active_view"]
let defFile += [ "view.camera = my_camera"]
let defFile += [ "end"]

let defLine = matchstr(defFile, '\(def\s\+\)\zs\k\+', 0)
let methodName = matchstr(defLine, '\(def\s\+\)\zs\k\+', 0)
echo methodName 
" -> move_camera
```
prototypeを上書きする弊害

`Klass.prototype.xxx = ` で書くと面倒なので、`Klass.prototype = {xxx: }`と書きたくなるけれど、constructor.nameが狂ってしまうという弊害があるみたい。
TypeScriptやCoffeeScriptを使えって話？

```javascript
function Klass(){}
Klass.prototype.foo = 'foo';

var o = new Klass;
console.log(o.constructor.name); //Klass
```

```javascript
function Klass(){}
Klass.prototype = {
  foo: 'foo'
};

var o = new Klass;
console.log(o.constructor.name); //Object
```
Linux でメモリ利用順でプロセスを表示

top のバッチモードで表示したかったがやり方が判らなかった

>
$ top -b -n1

awk でsort しようとしたが単位(m)が出てくるので挫折

>
$ top -b -n1|sort -nr -k6

ps で出来た

>
$ ps aux --sort rss
コマンドラインから画像形式を変換する

## 最初に結論
[ImageMagick](http://www.imagemagick.org/script/index.php)に入ってる `convert` コマンドを使ふ。

以下のコマンドを実行すると、PNGから可能な限り劣化を最小限に変換できる。 **Windows可**

```bat
convert hogehoge.png -quality 100 hogehoge.jpg
```

## 画像形式について

画像形式にはJPEGやPNG、GIF、それとWindows bitmap(BMP)なんかがありますね。いや、ほかにもたくさんたくさんあるんですけど、Webで汎用的かつ一般に流通してるのは99.9%これですね。

最近のアプリケーションはたいてい賢いので、これらの形式ならどれでも大差なく扱ってくれるのですが、それでもどれか一つの形式に統一しなければいけない、あるいはしておきたい場面はあるものです。

ちょっと考へてみたところでは、同人ゲーム制作なんかではありがちかもしれないですね。僕はやったことないですけど。

んで、上に挙げた形式の中でJPEGだけは **lossy** (データを間引くことでサイズを縮める、つまりファイルが劣化する。非可逆)なファイル形式です。JPEGに変換するだけで、確実にデータが損失します。ところが **どうしてもJPEGにしたい** といふことはあります。 *僕にはあるんです*

そんなときには妥協して、PNGなどからJPEGの圧縮率100に変換することにします。圧縮率100とは、JPEGの最も高画質な状態です(が、通常はそれでも僅かに劣化することに注意する必要があります)。

で、圧縮率100のJPEGに変換してやるにはGIMPなどを使ってもできるんですが、起動がめんどくさいのと、マウス操作必須なのでいろいろだるいです(数年前はこれでやってました…)。そこで、コマンドラインから [ImageMagick](http://www.imagemagick.org/script/index.php) を使ひませう。

ちなみにGIF形式は仕様上256色までしか扱ふことができないので、単純なアイコンなどには向きますが、写真や鮮やかな色彩のイラストなどでは減色の必要があり、やはり画質の劣化、データの損失が発生します。

## ImageMagickの導入
Windowsのひとは [ImageMagick: Install from Binary Distribution](http://www.imagemagick.org/script/binary-releases.php#windows) から *"Win32 dynamic at 16 bits-per-pixel"* ってやつを選んでインストール。 (なんでこんなに差分があるのよ、って理由はリンク先に英語で書いてあるんですが、精度の問題です。ふつうはこのバージョン以外を選ぶ理由はない)

DebianとかUbuntuを使ってたら `sudo apt-get install imagemagick` とかやったら入る気がします。Mac OS XならHomeBrewでもMacPortsでも入るんじゃないですかね。入ったはずです。タブンネ。

## 画像形式を変換する
**やり方は冒頭に書いた通り** なのですが、これでは説明不足なので補足します。ImageMagickはとっても賢い子なので、拡張子から空気を読んで、よしなにファイル形式を選んでくれます。

`-quality 100` と指定する必要があるのは(ここまで紹介してきた形式では)JPEGだけです。つまり、GIFからPNGに変換するには次のやうにすれば良いです。

```bat
convert hogehoge.gif hogehoge.png
```

あと、 `-quality 100` の指定なしにJPEGに変換しようとすると、ファイルサイズは縮みますが

## PNGからJPEGに決め打ちで変換したい
僕の使ってる用途(CDのアルバムアートを合法的に蒐集して音楽ライブラリに取り込む)だと、PNGで存在する画像をJPEGにしたい! って感じなので、わざわざこんなコマンドを打ち込むのはめんどくさいですね。

ってわけで、バッチファイルにします。ファイル名は `p2j.bat` といふ名前にして、 `Path` の通ったフォルダに保存します。よくわかんないならメモ帳か何かでデスクトップに保存してから、マウスで `C:\Windows` とかに抛り込むと良いんじゃないですかね。きっと。

```bat:p2j.bat
REM p2j: PNG-to-JPEG convert
REM usage:
REM     p2j hogehoge
REM hogehoge.png -> hogehoge.jpg
convert "%~pn1.png" -quality 100 "%~pn1.jpg"
```

変換したい対象の画像ファイルが `folder.png` で、これをJPEGに変換したいとします。そのファイルのあるフォルダをエクスプローラで開いて、アドレスバーに `p2j folder` と打ち込みます。すると、 `folder.jpg` ができあがります。

えっ、そんなのめんどくさい? 覚えられない? うるせえ。 [png jpeg 右クリック 変換] とかで検索して出てきたツールでも入れてりゃ良いんじゃないんですか? クォリティも使ひ方も安全性も面倒見切れませんよ＞＜

## ちなみにちなみに
`-compress LossLess` を指定してやればロスレス形式のJPEGに変換できる… のですが、これは互換性の問題で非推奨です(Windows7では表示できましたが、どのJPEGライブラリでもデコードできるとは限りません)。

僕は「一枚単位で画像変換するくらゐでけちけちする必要ないよね!」といふ *富豪的プログラミングな発想* で **Q16** を勧めるのですが、大量の画像を捌くから高速な方が良い! なんて場合は **Q8** 版を使って全然大丈夫なはずです。それから、[ImageMagick高速化まとめ #ImageMagick #Linux - Qiita](http://qiita.com/items/e86a1cf8fe64dc8bf1b8)によれば、自前でビルドできるなら  `--disable-openmp` オプションを付けてやると良いみたいですね。僕は知りません。

あと、ImageMagickには `mogrify` といふコマンドがあって、これを使っても似たやうなことができ、なほかつ一括処理に向いてゐます。が、こちらを使ふと基本的にファイルは上書きしてしまふことになるので、僕は使ひません。PNGからJPEGへの変換は必ずlossyなので、元のファイルは残しておきたいからです。

## 参考文献

* [Common Formats -- IM v6 Examples](http://www.imagemagick.org/Usage/formats/)

……あんまり読んでないです＞＜
Javaをwgetでダウンロード時にHTMLファイルが取得されてしまう

OracleのサイトからJREやJDKをwgetで落とす時に、そのままwgetすると対象のファイルでは無く、htmlファイルがダウンロードされてしまうのでメモ

--no-cookiesでクッキーを使わない指定と
--headerでクッキーを指定してやれば、とりあえず落とせます。
wget --no-cookies --header "Cookie: gpw_e24=http%3A%2F%2Fwww.oracle.com" "ファイルURL"

下記のクッキーでダメでしたら、www.oracle.comのCookiesのgpw_e24の値を見て下さい。
Chromeであれば、Ctrl+Shift+iでヘッダー情報参照できます。

詳しい事は、stackoverflow参照して下さい。
http://stackoverflow.com/questions/10268583/cant-install-java-jdk-on-linux-through-wget-is-there-a-workaround
Sublime Text 2: キーボードでタブの順序を変更


2つのタブを切り替えながら作業するとき、タブが隣同士に並んでいると楽ですよね。

標準ではマウスでドラッグして並べ替えますが、
MoveTabプラグインを入れるとキーボードでタブの順序を変えられるようになります。

1. Package ControlでMoveTabをインストール
2. お好きなキーバインドを設定。私は下記のようにしています。

```json
{ "keys": ["super+u"], "command": "move_tab", "args": { "position": "-1" } },
{ "keys": ["super+i"], "command": "move_tab", "args": { "position": "+1" } }
```

この例では

+ super+u で、現在のタブを左に1つ移動 (左のタブと入れ替える)
+ super+i で、現在のタブを右に1つ移動 (右のタブと入れ替える)

となります。
unite.vim や VimFiler で git リポジトリに登録されたファイルを一度に開く

カレントディレクトリの git リポジトリに登録されているファイルすべてを一度に開くアクションです．
なお，カレントディレクトリが git リポジトリ内に無いときはエラーメッセージを返します．

```vim:.vimrc
let s:git_repo_action = { 'description' : 'all file in the git repository' }
function! s:git_repo_action.func(candidate)
    if(system('git rev-parse --is-inside-work-tree') ==# "true\n" )
        execute 'args'
                \ join( filter(split(system('git ls-files `git rev-parse --show-cdup`'), '\n')
                        \ , 'empty(v:val) || isdirectory(v:val) || filereadable(v:val)') )
    else
        echoerr 'Not a git repository!'
    endif
endfunction

call unite#custom_action('file', 'git_repo_files', s:git_repo_action)
unlet s:git_repo_action
```

unite.vim と VimFiler の両方に `git_repo_files` というアクションが追加されます．

このアクションをキーマッピングに追加したい場合は次のようにします．

```vim:.vimrc
autocmd FileType vimfiler nnoremap <buffer><expr>git vimfiler#do_action('git_repo_files')
```

この例では VimFiler のバッファ内で `git` と打つと上記のアクションを実行します．
第五回オフラインリアルタイムどう書くrubyでの解答

現場で書いたコード書き直したい・・。
問題は　http://qiita.com/items/5c10c132e1f78131563f

```ruby
ORD={'3'=>1,'4'=>2,'5'=>3,'6'=>4,'7'=>5,'8'=>6,'9'=>7,'T'=>8,'J'=>9,'Q'=>10,'K'=>11,'A'=>12,'2'=>13,'o'=>14}

def solve(q)
  base,hand = q.split(',')
  return '-' if hand.nil?
  cards = hand.scan(/../)
  base_num = base.size / 2
  base_ord = base.scan(/../).map{|e| ORD[e[1]]}.min
  ans = []
  cards.permutation(base_num) do |cs|
    joker = cs.delete('Jo')
    if cs.empty?
      cs << joker
      next
    end
    if cs.map{|e| ORD[e[1]]}.min > base_ord and cs.map{|e| ORD[e[1]]}.min == cs.map{|e| ORD[e[1]]}.max
      cs << joker if joker
      ans << cs
    end
  end
  return '-' if ans.empty? 
  ans.map{|e| e.sort}.uniq.map{|e| e.join}.join(',')
end

DATA.readlines.each do |line|
  no,q,a = line.chop.split(/\s+/)
  ans = solve(q)
  print no + "\t"
  print ans
  puts ans.split(',').map{|e| e.scan(/../).sort.join}.sort.join(',') == a.split(',').map{|e| e.scan(/../).sort.join}.sort.join(',') ? 'o' : 'x'
end
__END__
#1	DJ,	-
#2	H7,HK	HK
#3	S3,D4D2	D4,D2
```
第五回オフラインリアルタイムどう書くの問題

オフラインでリアルタイムに「どう書く」をやるイベント( http://atnd.org/events/32979
 )を行いました。

問題は
http://nabetani.sakura.ne.jp/hena/ord5dahimi/
です。

実装ができた方はこちらのコメント欄からリンクを張っていただくと見つけやすくて助かります。
Rack::Session::Dalliのexpire_afterには要注意


Rack::Session::Dalliは、Rack::Session::Memcacheの代わりに使える素敵なモジュールです。

Rack::Session::Dalliに指定するexpire_afterの最大値は2591999 (60 * 60 * 24 * 30 - 1)です。これを超えた値を指定すると、memcachedに値が保存されずに即座にexpireしてしまうようです。例外も何も出ないので注意が必要。

## 例
```ruby:
class MyApp < Sinatra::Base
  use Rack::Session::Dalli,
    memcache_server: 'localhost:11211',
    domain: 'mydomain.com',
    path: '/',
    expire_after: 60 * 60 * 24 * 30 - 1  # 2592000未満の値にしよう!
  # (略)
end
```
UIColorのRGBマクロ


※20121112 指摘事項を修正


RGBカラー指定のマクロ。hファイルや、Prefix.pchファイルに以下を記述する。

```
#define RGB(r, g, b) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:1]
#define RGBA(r, g, b, a) [UIColor colorWithRed:(r)/255.0 green:(g)/255.0 blue:(b)/255.0 alpha:a]
```

使用する際は、以下のようにしてカラーを指定する。

```
UIColor *color = RGB(255,100,50);
```
tcpflow で tail -f のように流れるパケットを見る


## インストール
```
$ brew install tcpflow
```

## 使い方

### localhost の port 3000 に対するパケットのやりとりを見る

```
$ tcpflow -c -i lo0 port 3000
```

`-c`を付けると`tail -f`のようにリアルタイムにコンソールに出力してくれる。


## 参考

* [tcpflow — A tcp ip session reassembler](https://github.com/simsong/tcpflow/wiki/tcpflow-%E2%80%94-A-tcp-ip-session-reassembler)
* [tcpflow が楽しい](http://d.hatena.ne.jp/yutamoty/20101217/1292577600)
VimFiler でカレントディレクトリ内での絞込みに unite.vim を使う 

今まで VimFiler 内のファイルを検索するときは `/` でファイル名を検索していましたが，絞込みに unite.vim を使うようにしてみました．たくさんファイルがあるディレクトリでの絞込みがかなり楽になります．

```vim:.vimrc
autocmd FileType vimfiler 
        \ nnoremap <buffer><silent>/ 
        \ :<C-u>Unite file -default-action=vimfiler<CR>
```
Windows7で緊急の再起動

Windows7でシステムがフリーズしてしまってどうしようもなくなってしまった場合、電源ボタンを長押しするような状況では、「緊急の再起動」を試してみる。

CTRL-ALT-DELを押して表示される画面の右下の電源ボタンのアイコンを、CTRLキーを押しながらクリックすると、「緊急の再起動」ができる。
強制電源断するよりもおすすめ。
Android のブラウザだと HTML5 Application Cache の manifest の CACHE: セクションに書いたリソースを未来の Expires で配信すれば manifest が更新されてもリクエストが飛ばない気がする

メモ書きです。新しいことがわかったら更新しようかと思います。
コメント歓迎です。

- 最初に manifest ファイルを指定した html は Master Explicit となって app cache にずっと残る
  - それ以外のリソースが manifest から消えると safari の inspector ではちゃんと消える
- manifest の CACHE: セクションに指定したファイルを未来の Expires: 付きで配信すると
  - Android 2.3.4 (ISW11M) のブラウザからアクセスだと manifest が更新されても期待どおりリクエストが発行されなかった! -> webView でも同じ挙動が期待できる
    - リンクを辿る場合は更新されないが、URLを直接叩いたり、リロードすると更新される
  - Mountain Lion の Safari 6.0.2 (8536.26.17) だとリクエストが発行されてしまう...
  - iOS 6.1 (iPod Touch 4G) の Mobile Safari からもリクエストが発行されてしまう

ちなみに never_expire.html の cache に関係ありそうなレスポンスヘッダは

~~~
Cache-Control: public, max-age=31536000
Expires: Sat, 09 Nov 2013 01:41:17 GMT
~~~

参考資料:
- [テストに使ったアプリ](https://github.com/hiroshi/html5_app_cache_test) (諸般の事情で GAE python 2.7)
- http://appcachefacts.info
Railsで、URLにIDでなく名前を入力して、アクセスする方法


showやeditなど、member系のアクションに、数値のIDなどではなく、TwitterIDのような一意の文字列でアクセスする方法。

例えば、

```
http://your.app.com/users/400
```

でなく

```
http://your.app.com/users/bob-smith
```

でアクセスできるようにする。

単純にURLのかっこ良さが上がる気がするし、文字列でのアクセスのみ受け入れるようにしたら、サイトの持っている情報のスクレイピング対策にもなる。

例として、適用するモデル名を`User`、urlに使用するカラム名を`canonical_name`とする。ここでは`id`と`canonical_name`のどちらでもアクセスできるようにする例を書く。


## モデル側のコード

```app/models/user.rb
class User < ActiveRecord::Base
  validates :canonical_name,
    uniqueness: { case_sensitive: false },
    format: { with: /^[A-Za-z][\w-]*$/ },
    length: { minimum: 3, maximum: 25 }

  def to_param
    canonical_name ? canonical_name : id.to_s
  end

  def self.find_by_canonical_name_or_id(arg)
    find_by_canonical_name(arg) || find(arg)
  end
end
```

`to_param`というActiveRecordのメソッドが肝。これで通常の表示が`id`から`canonical_name`に切り替わる。
validationは大体こんな感じにすると良いと思う。ここでは大文字小文字が違うだけの`canonical_name`は許さないようにしているが、そもそも大文字を禁止するのもありだと思う。
なお、ここでは`canonical_name`が設定されていない`User`もいることを前提としている。

## コントローラー側のコード

```app/controllers/users_controller.rb
class UsersController < ApplicationController
  before_filter :load_user, only: [:show, :edit, :update, :destroy]
  ## if you use cancan
  # load_and_authorize_resource :user, find_by: 'find_by_canonical_name_or_id'

  private
  def load_user
    @user = User.find_by_canonical_name_or_id(params[:id])
  end
end
```

数字でなくてもidの情報は`params[:id]`に入って渡される。
`canonical_name`でしかアクセスできないようにしたい時は`load_user`で`User.find_by_canonical_name`を使えば良い。

## 別案

探すときに、`find_by_canonical_name_or_id`というのを使うとto_paramを変更しているクラスだけ、`find`でModelを探せなくなってしまう。これだと困る場合は、

```app/models/user.rb
  def self.find(arg)
    find_by_canonical_name(arg) || super
  end
```

とfindを上書きしてしまえばいいかもしれない。

## 追記
https://gist.github.com/agnellvj/1209733 にもっといろんな方法が載っているのを発見。興味ある人は見てみるべし。
zshをツンデレにする

味気ない作業に、少しのnynyタイムを

.zshrcに

```zsh
setopt correct
SPROMPT="%r? べ, 別にあんたのために修正したんじゃないからね! [n,y,a,e]:"
```

と書くと、

```
% sl
ls? べ, 別にあんたのために修正したんじゃないからね! [n,y,a,e]:
```

とツンデレにな感じで修正してくれます。
Smartyクロスサイトスクリプティングの脆弱性の修正


http://jvn.jp/jp/JVN63650108/
で報告されてる脆弱性の修正です

なんらかの事情でSmartyのバージョンをあげられないケースでは下記の様に修正

Smarty.class.php 1090行目あたりに下記の様なコードがあります。
（XOOPSなら XOOPS_ROOT_PATH/class/smarty/ にファイルがあります）

```php
    function trigger_error($error_msg, $error_type = E_USER_WARNING)
    {
        trigger_error("Smarty error: $error_msg,", $error_type);
    }
```

これを下記に書き換えてください。

```php
    function trigger_error($error_msg, $error_type = E_USER_WARNING)
    {
        $msg = htmlentities($error_msg);
        trigger_error("Smarty error: $msg", $error_type);
    }
```
printfデバッグのためのdebug.h


いや，デバッガ使えよ ←
**Kobito**からの投稿テストも兼ねて．

# 仕様
#### 1. メッセージは標準エラー出力に出す
なんとなく標準出力じゃねーだろと思った．
`fprintf( stderr, ... )`で実装する．

-
#### 2. コンパイル時に`-D NDEBUG`で何もしないようにする
リリース時を考えて，**何もしないようにする**機能が欲しかった．
`-D NDEBUG`にしたのは，`assert()`と一緒に使えばいいと思ったから．

-
#### 3. `printf`らしく使いたい
つまり，**フォーマット指定子**を使いたい．
となれば，必然的に**可変長引数**を扱える必要がある．

-
#### 4. 表示メッセージに行番号とか入れたい
デバッグに使うものですからね．
最低限【ファイル名】と【行番号】は欲しい．
この場合，マクロで定義する必要がある．
`[日付] ファイル名:行番号 # メッセージ`とかイイネ！

-
#### 5. C99規格準拠
仕様3および4より．
C99規格ならマクロでも可変長引数が扱える．

-

# 実装
というか定義？宣言？
とにかく作ってみた

```c:debug.h
#ifndef _DEBUG_H_
#define _DEBUG_H_

#ifdef NDEBUG
	// NDEBUGが定義されているときは何もしない
	#define debug( fmt, ... ) ((void)0)
#else /* !NDEBUG */
	// NDEBUGが定義されていないときはprintfデバッグ用関数化
	#include <stdio.h>
	#define debug( fmt, ... ) \
		fprintf( stderr, \
				  "[%s] %s:%u # " fmt "\n", \
				  __DATE__, __FILE__, \
				  __LINE__, ##__VA_ARGS__ \
		)
#endif /* NDEBUG */
#endif /* _DEBUG_H_ */
```

#### `##__VA_ARGS__`について
> `__VA_ARGS__`を使う場合，`debug( fmt, ... )`の第2引数以降に何らかの引数を入れないと，`__LINE__`の後ろのコンマが邪魔になってコンパイルエラーが起こる．

- つまり，`debug("ここまできたよ〜")`みたいな使い方ができない問題に直面した．
- いろいろと調べた結果，`##__VA_ARGS__`ならエラーが起こらないらしいとの情報を得る．
- 試してみると確かに`debug("ここまできたよ〜")`でもコンパイルエラーにならない．
- この辺はまだまだ勉強不足ですね．

# 使用方法など
- `printf`と同じように使えます．
- `assert`なんかと一緒に使うと，開発効率が上がった気になります．
- メッセージの表示形式は，Rubyで使用されているLoggerの影響を若干受けている感じが…
- Linux (Ubuntu 11.10~) および Mac (Xcode 4.1~) で動作確認済み．
- Windowsでは未検証．Cygwinならgcc4.3入るから動くのかな？
[ccchart] ツールチップのCSSカスタマイズ

追記: 2013/06/13 テンプレートでカスタマイズする方法を実装中です(v1.06.5+) http://ccchart.org/test/tooltip-template/temp-jp.htm
-----

ccchartの使い方を少しずつ書いてみることにしました。

ccchartは、ベースがCanvasの軽量チャートですが、CSSハイブリッドモードで動かすとインタラクティブなツールチップを使えるようになります。

CSSハイブリッドモードは、"useMarker": "css-ring" や "css-maru" などのCSSマーカーを使うと自動的に起動し、そのマーカーに触れると表示されます。

ccchartのツールチップ( http://jsgt.org/c/#67 )のHTMLは、下記ののようなclass構造になっています。したがってCSSでカスタマイズできます。

![ccchartのツールチップ](http://jsgt.org/c/img/67memo.png)


``` ccchartツールチップのclassName例
<div class="-ccchart-css-tooltip" id="-ccchart-css-tooltip-チャートのキャンバス名">
<span class="-ccchart-ttip-colnametitle">年度</span> 
<span class="-ccchart-ttip-colname">2007</span><br>
<span class="-ccchart-ttip-rowname">コーヒー</span><br>
<span class="-ccchart-ttip-data">600</span>
</div>
```

たとえば、こんな感じ。
http://jsfiddle.net/mYyxp/17/

![ccchartのツールチップ](http://jsgt.org/c/img/67memo2.png)

HTMLはこう。

```html
<script src="http://jsgt.org/c/js/ccchart.js" charset="utf-8"></script>
<canvas id="hoge"></canvas>​
```

JavaScriptはこんな感じ。

```js

var chartdata67 = {

  "config": {
    "title": "Option useMarker: css-ring",
    "subTitle": "useMarkerにcss-ringを指定するとCanvasではなくCSSで輪を描きHoverします。",
    "type": "line",
    "useMarker": "css-ring",
    "lineWidth": 8,
    "borderWidth": 7,
    "markerWidth": 28
  },

  "data": [
    ["年度",2007,2008,2009,2010,2011,2012,2013],
    ["紅茶",435,332,524,688,774,825,999],
    ["コーヒー",600,335,584,333,457,788,900],
    ["ジュース",60,435,456,352,567,678,1260],
    ["ウーロン",200,123,312,200,402,300,512]
  ]
};

ccchart.init("hoge", chartdata67);
```

そして、ツールチップ用のCSSをこんな感じで指定すると上記のような黄色いツールチップになります。

```css
/* ツールチップ */
#-ccchart-css-tooltip-hoge{ line-height:1.3em;padding:8px;background:yellow }
#-ccchart-css-tooltip-hoge:before{top:55px}
.-ccchart-ttip-colnametitle{ 
    background: #333; color:#fff; 
    padding:2px; padding-left:10px; padding-right:10px;
}
.-ccchart-ttip-colname{ color: #555; font-weight: 900;}
.-ccchart-ttip-rowname{ color: green; }
.-ccchart-ttip-data{color: red ;font-size: 1.2em; }
.-ccchart-ttip-data:after {content: " 個";}
```
mysqlやubuntuのパスワードを再設定メモ


パスワード忘れた場合のウチで今回成功した再設定手順です。
ubuntu 12.04 LTS
mysql  Ver 14.14 Distrib 5.5.28

```
# mysqlは全て停止
sudo /etc/init.d/mysql stop
sudo killall mysqld

# セーフモードのような？起動方法
#  mysqld_safeの位置はディストリやmysqlインストール時の設定で各人で異なるかと
sudo /usr/bin/mysqld_safe -u root --skip-grant-tables &
mysql mysql

# ココでrootのパスを空値で設定
# この時点でも設定できるはずらしいのですがウチでは上手く行きませんでした
mysql> UPDATE user SET Password='' WHERE Host='localhost' and User='root';
FLUSH PRIVILEGES;
# 一旦はmysqlを抜けます
exit

mysqladmin password -u root
# ココでパスワードを再設定
New password: 
Confirm new password:

# コレで次回からは新しく設定したパスワードでログイン出来るはずです
mysql -u root -p

```

参考先サイト様
[http://l-w-i.net/t/mysql/passwd_001.txt](http://l-w-i.net/t/mysql/passwd_001.txt)

ubuntu10.04 のパスワード忘れた時メモ
はい。
10.04 LTS使用です。はい、サポート切れですかね。。。
前にログインしてた頃は切れてなかった時期のような。それだけ間が空いていればパスワード忘れもむべなるかなという。
忘れ一日目は ひたすら色々なパスワードを試して終わりました。(ずっと連続で試せるとか・・・)
忘れ二日目はsafemodeでも起動できることに気づき、それで起動してみたら
```root@hagge #~```

はい、rootで入れたおかげで後はもうpasswdで解決しました。
before/after filterの設定状況を確認する

debuggerなどで

```ruby:
puts _process_action_callbacks
```

Controllerの継承とかextend ActiveSupport::Concernとかやってて、
skip_before_filter使ったときに良くわからない事になったので調べたらあった。
例えば次のようなデバッグプリントを追加してfilterを調査する。

```ruby:hoge_controller.rb
class HogeController < MyBaseController
  puts _process_action_callbacks.map(&:raw_filter).inspect
  skip_before_filter :set_hage
  puts _process_action_callbacks.map(&:raw_filter).inspect
  ...
```

```
#=> [:verify_authenticity_token, :set_hage]
#=> [:verify_authenticity_token]
```

callbackの内容

```ruby:
(rdb:1) pp _process_action_callbacks.first
#<ActiveSupport::Callbacks::Callback:0x007f99d99c6060
 @callback_id=14,
 @chain=
  [#<ActiveSupport::Callbacks::Callback:0x007f99d99c6060 ...>,
   #<ActiveSupport::Callbacks::Callback:0x007f99ded359d0
    @callback_id=8,
    @chain=[#<ActiveSupport::Callbacks::Callback:0x007f99ded359d0 ...>],
    @compiled_options="true",
    @filter=:set_hage,
    @kind=:before,
    @klass=ActionController::Base,
    @options={:if=>[], :unless=>[]},
    @per_key={:if=>[], :unless=>[]},
    @raw_filter=:set_hage>],
 @compiled_options="true",
 @filter=:verify_authenticity_token,
 @kind=:before,
 @klass=ApplicationController,
 @options={:prepend=>true, :if=>[], :unless=>[]},
 @per_key={:if=>[], :unless=>[]},
 @raw_filter=:verify_authenticity_token>
```

Modelの場合は調べてない
bootstrapのresponsiveでtabletを無効化する

[bootstrap](http://twitter.github.com/bootstrap/)のresponsive designにおいて、tabletのみを無効にしたい時が、時々あります。
(そうならないようにちゃんとcss書け、という話もありますが)

無効にするときには、bootstrapをbuildする前に、less/responsive.lessを少しいじります。

```less
// MEDIA QUERIES
// ------------------

// Large desktops
//@import "responsive-1200px-min.less"; //コメントアウトする

// Tablets to regular desktops
//@import "responsive-768px-979px.less"; //コメントアウトする

// Phones to portrait tablets and narrow desktops
@import "responsive-767px-max.less";

```

このようにコメントアウトしてからmakeすると、PC-スマホのみでresponsive designが利用できます。
Androidアプリをビルドして起動するスクリプト（複数実機対応）

Eclipseで開発しているひとでも，Eclipseから実行ボタンで実機にインストールしていると，その間Eclipseが重たくなって開発が進みません．
このスクリプトにinstall.commandなどと名前をつけてデスクトップに置いておけば，そいつをダブルクリックすることで，ターミナル上でビルドを走らせることができます．
YOUR_APP_DIRの部分は開発ディレクトリに，
YOUR_MAIN_ACTIVITYの部分はアプリのメインのActivity（フルパッケージ名で）にしてください．
スクリプトファイルの実行権限のつけかたは[こちらの方の記事](http://sakuranon.blog.fc2.com/blog-entry-27.html)参照

```#!/bin/bash
MY_DIRNAME=$(dirname $0)
cd $MY_DIRNAME
cd YOUR_APP_DIR
echo "インストール先を選んでください"

# sedで余計な文字列を削除し，selectでANSに選ばれた選択肢を入れる
select ANS in `adb devices | sed -e "s/List of devices attached//" | sed -e "s/device//"`
# 入力値が適切な値かどうかチェック
do
  if [ -z "$ANS" ]; then
    continue
  else
    break
  fi
done

echo $ANS
# debugbuildしてインストール
# http://www.alittlemadness.com/2010/06/15/android-ant-builds-targeting-a-specific-device/
export ANDROID_SERIAL=$ANS
ant debug install
# 起動
adb -s $ANS shell am start -a android.intent.action.MAIN -n YOUR_MAIN_ACTIVITY
# BUILD FAILEDなどを見るために，ターミナルを閉じずにキー入力を待つ
read null
```
Flash Player plugin の trace ログ出力設定


## mm.cfg ファイルの編集

以下を mm.cfg に記述

```mm.cfg
ErrorReportingEnable=1
TraceOutputFileEnable=1
```

mm.cfg ファイルの場所は、Adobe.com では `/Library/Application Support/Macromedia` となっているが、その状態では設定が有効にならなかった。
ホームディレクトリの直下に置いたら設定が有効になった。

## ログファイルの出力先

ログファイルは `~/Library/Preferences/Macromedia/Flash Player/Logs` に出力される。

## 参考
Adobe.com Flash Player Help : [Configure the debugger version of Flash Player](http://helpx.adobe.com/flash-player/kb/configure-debugger-version-flash-player.html)

## 確認した環境

 * Shockwave Flash 11.5 r502 (バージョン:11.5.502.110)
 * Mac OS X 10.7.5
Log4jのログ出力内容をJUnitでテストする方法

Log4jのログ出力内容をJUnitでテストする書き方になります。

``` java
	@Test
	public void test() {
		StringWriter writer = new StringWriter();
		WriterAppender appender = new WriterAppender(new PatternLayout("%p, %m%n"),writer);
		LogManager.getRootLogger().addAppender(appender);
		LogManager.getRootLogger().setAdditivity(false);
		try{
			// 何かしらのログを出力する処理
			
			// エラーログのテスト
			String logString = writer.toString();
			assertThat(logString, containsString("initOption() fail perse."));
			
		}finally{
			// ログアペンダを消す
			LogManager.getRootLogger().removeAppender(appender);
			LogManager.getRootLogger().setAdditivity(true);
		}
	}
```

以上のようなテストメソッドを書くことで、ログに"initOption() fail perse."を含む
メッセージが出力されたかどうかをテストできます。

ちなみに利用したJUnitのバージョンを表すMavenのpom.xml以下の通り。

```xml
	<dependencies>
		<!-- JUNIT DEPENDENCY FOR TESTING -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.10</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
```
Logbackのログ出力内容をJUnitとMockitoでテストする方法

Logbackのログ出力内容をJUnitとMockitoでテストする書き方になります。

``` java
	@Test
	public void test() {
		ch.qos.logback.classic.Logger root = (ch.qos.logback.classic.Logger) LoggerFactory.getLogger(ch.qos.logback.classic.Logger.ROOT_LOGGER_NAME);
		@SuppressWarnings("unchecked")
		final Appender<ILoggingEvent> mockAppender = mock(Appender.class);
		when(mockAppender.getName()).thenReturn("MOCK");
		root.addAppender(mockAppender);
		
		// 何かしらのログを出力する処理

		verify(mockAppender).doAppend(argThat(new ArgumentMatcher<LoggingEvent>() {
			@Override
			public boolean matches(Object argument) {
				return ((LoggingEvent)argument).getFormattedMessage().contains("initOption() fail perse.");
			}
		}));
	}
```
以上のようなテストメソッドを書くことで、ログに"initOption() fail perse."を含む
メッセージが出力されたかどうかをテストできます。


ちなみに利用したJUnitとMockitoのバージョンを表すMavenのpom.xml以下の通り。

```xml
	<dependencies>
		<!-- JUNIT DEPENDENCY FOR TESTING -->
		<dependency>
			<groupId>junit</groupId>
			<artifactId>junit</artifactId>
			<version>4.10</version>
			<scope>test</scope>
		</dependency>
		<!-- Mockito for support of mocking in test -->
		<dependency>
			<groupId>org.mockito</groupId>
			<artifactId>mockito-all</artifactId>
			<version>1.9.0</version>
			<scope>test</scope>
		</dependency>
	</dependencies>
```
Tclのflymake と org-modeの併用

tclのソースが含まれるorg-modeのテキストを、exportしようとするとflymake-get-file-name-mode-and-masksでエラーになります。
エラー発生箇所はここ

```lisp:flymake.el
(defun flymake-get-file-name-mode-and-masks (file-name)
  "Return the corresponding entry from `flymake-allowed-file-name-masks'."
  (unless (stringp file-name)
    (error "Invalid file-name"))
```

Emacsのトレースはこれ

```lisp:*Backtrace*
Debugger entered--Lisp error: (error "Invalid file-name")
  signal(error ("Invalid file-name"))
  error("Invalid file-name")
  (if (stringp file-name) nil (error "Invalid file-name"))
  (unless (stringp file-name) (error "Invalid file-name"))
  flymake-get-file-name-mode-and-masks(nil)
  (nth 0 (flymake-get-file-name-mode-and-masks file-name))
  (let* ((init-f ...)) init-f)
```

.emacsに以下のコード追加し、org-modeからtcl-modeが呼ばれた時はflymakeを無効にして対応しました。

```lisp:.emacs
(defvar on-org-mode nil)
(defadvice org-export (around flymake-off activate)
    (setq on-org-mode t)
    ad-do-it
    (setq on-org-mode nil))

; org-modeから呼ばれていないときのみflymakeを有効にする。
(add-hook 'tcl-mode-hook
	  (lambda ()
	    (unless on-org-mode
	      (flymake-mode t))))
```
Powで動いているアプリをVirtualBox上のOSのブラウザから開けるようにする


Powのdefaultリンクを利用してアクセスできるようにします。VirtualBoxで動いているOSはWindowsXPであるとします。

## 1. VirtualBoxのネットワーク設定
VirtualBoxのネットワーク設定を「NAT」にする。

## 2. シンボリックリンクの設定
~/.powにアクセスしたいアプリのルートパスへのシンボリックリンクを「default」という名前で作成する。

```例
ln -s ~/dev/xxx/myapp ~/.pow/default
```

## 3. WindowsXP側のDefault GatewayのIPアドレスを調べる
```
> ipconfig

Ethernet adapter ローカル エリア接続:

    . . . (中略) . . .
	Default Gateway . . . . . . . . . . : 10.0.2.2	
```

## 4. WindowsXP側のhostsにDefault GatewayのIPを追加

```C:\windows\system32\drivers\etc\hosts
10.0.2.2     outer
```

## 5. WindowsXP側のブラウザからアクセスする

`http://outer/`と指定するとdefaultに指定したアプリが立ち上がります。

## 求）
普通に`http://myapp.dev`みたいな感じでアクセスするにはどうすればいいんだろうか。。
CakePHPをVirtualDocumentRootで使う時の設定

VirtualDocumentRootではCakePHPのModRewriteが無限ループに陥る。

これを防ぐために、.htaccessに以下RewriteBaseの設定が必要


<IfModule mod_rewrite.c>
    RewriteEngine On
    RewriteBase /

    RewriteCond %{REQUEST_FILENAME} !-d
    RewriteCond %{REQUEST_FILENAME} !-f
    RewriteRule ^(.*)$ index.php [QSA,L]

</IfModule>
オプショナル引数を使う


いつも忘れるので覚え書き。
関数のシグネチャを定義するときに`? label:(pattern=default-value)`というふうに書くと、オプショナル引数として扱われる。
labelとpatternが同じ時は省略して`?(label=default-value)`というふうに書けるらしい。

```ocaml:
let some_function ?mode:(mode=0) arg1 arg2 = 
(* もしくは ?(mode=1) *)
	(* ... *)
;;

some_function arg1 arg2;;
some_function ~mode:1 arg1 arg2;; (* debug mode *)
```

使えるラベルは決まってるらしいけど良く分からない。
そもそもこのページみたほうが良い
http://www.geocities.jp/m_hiroi/func/ocaml22.html
Could not instantiate class named NSLayoutConstraint

uncaught exception 'NSInvalidUnarchiveOperationException', reason: 'Could not instantiate class named NSLayoutConstraint'

が出た場合。iOS6からの機能なので、OSがそれ以前だとエラーになってしまう。
http://d.hatena.ne.jp/paraches/20120928/1348838724
で解説されているように「Use Autolayout」のチェックを外そう。
box-shadowで画像(img要素)に影を落とす

素直にやると、img要素の上には、box-shadowでinset指定しても影が落ちません。

そこで、z-indexで調整してimg要素を下のレイヤーに持って行くと、box-shadowで影が落ちるようになります。box-shadowだけじゃなくて色々使えるテクニックです

```html
<div class="image-box">
      <div class="shadow">
        <img src="http://octodex.github.com/images/megacat-2.png"/>
      </div>
</div>
```

```css
.image-box {
      margin-top: 100px;
      position: relative;
      z-index: 1;
      
}
.image-box .shadow {
      -moz-box-shadow: inset 0px 0px 12px rgba(0,0,0,.6);
      -webkit-box-shadow: inset 0px 0px 12px rgba(0,0,0,.6);
      box-shadow: inset 0px 0px 12px rgba(0,0,0,.6);
}
.image-box .shadow img {
      position: relative;
      z-index: -1;
}
```
Scalaで重み付き乱択アルゴリズム

Play Framework始めました。

Scala良いよScala　って思ってたけど、案外イバラの道感。

先日Rubyで実装したものと同じ物をScalaでやってみました。

あれ？Scalaってもっと格好良く書けるんじゃねえの？あれ？あれえ？

```scala:chooser.scala
	val makeRandomChooser = (shops : List[Shop]) => {
		val sortedList = shops.sort(_.likely > _.likely)
		var likeSum = 0.0
		sortedList.foreach(likeSum += _.likely)
		val targetList = sortedList.map{tem => new Shop(0, tem.name, tem.likely / likeSum)}
		println(targetList)

		sortedList.foreach(likeSum += _.likely)

		def choosen (targetList : List[Shop], likeSum : Double) = {
			val rand = Math.random
			var sum = 0.0
			val result = targetList.find{(shop: Shop) =>
				sum += shop.likely
				rand < sum
			}
			if(result == None){
				targetList.last
			} else {
				result.get
			}
		}
		choosen(targetList, likeSum)
	}	
```
Building Jenkins

state: under construction

# Evaluation Environment

+ CentOS 6.3
+ Jenkins 1.1

# Installation Jenkins

```
curl http://pkg.jenkins-ci.org/redhat/jenkins.repo -o /etc/yum.repos.d/jenkins.repo
rpm --import http://pkg.jenkins-ci.org/redhat/jenkins-ci.org.key

yum install -y java-1.6.0-openjdk
yum install -y jenkins
```

should restart system or start jenkins.

# Trying to accesss to Jenkins

+ access to `http://[ip address]:8080/`
Railsアプリのパフォーマンスチューニング用ツール紹介

Railsアプリのパフォーマンスチューニング用ツール紹介
[forkwell.com Y U SO SLOW // Speaker Deck](https://speakerdeck.com/a_matsuda/forkwell-dot-com-y-u-so-slow) で[松田さん](http://github.com/amatsuda)が紹介していたツールを使ってRailsアプリのボトルネックを調べたので，そのツールの説明．

## [MiniProfiler/Ruby](https://github.com/SamSaffron/MiniProfiler/tree/master/Ruby)

```ruby:Gemfile
# developmentでもproductionでも入るようにしておく
gem 'rack-mini-profiler'
```

設定は以下

```ruby:application_controller.rb
class ApplicationController < ActionController::Base
  before_filter :profile_for_admins
  # ...
  def authorize
    if Rails.env.development? || current_user.try(:staff?)
      Rack::MiniProfiler.authorize_request
    end
  end
end	
```

左上に各リクエスト(XHRなど)でかかった時間が表示される．発行されたSQLごとの処理時間も見られる．

参考リンク: [#368 MiniProfiler - RailsCasts](http://railscasts.com/episodes/368-miniprofiler?view=comments)

SQLをざっと見てみて，明らかに無駄なSQLを排除していく．
かかった時間ごとにSQLをソートしてくれたらいいのに…

## [flyerhzm/bullet](https://github.com/flyerhzm/bullet)
[N+1クエリ問題](http://guides.rubyonrails.org/active_record_querying.html#eager-loading-associations)や不要なeager loading, counter cacheを使うべきポイントを検出してくれるツール．
[flyerhzm/bullet configuration](https://github.com/flyerhzm/bullet#configuration)にある通りに設定すると以下のようなlogを出してくれる．stacktraceも見られるので問題箇所がわかりやすい．

```txt:log/bullet.log
N+1 Query detected
  Item => [:user]
  Add to your finder: :include => [:user]
N+1 Query method call stack
  N+1 Query method call stack
  N+1 Query method call stack
  N+1 Query method call stack
  /foo/bar/baz.rb:123:in `some_method'
  /foo/bar/baz.rb:123:in `other_method'
```

適切に`Foo.all`->`Foo.includes(:bar).all`などとしてN+1クエリを潰せばよい．

## SQL auto explain(v3.2)
http://guides.rubyonrails.org/v3.2.13/active_record_querying.html#automatic-explain のように設定すると，実行に時間がかかったSQLをログ出力してくれる．
しかしRails 4.0では削除済．(https://github.com/rails/rails/commit/d3688e02ca52c0b72d3092e8498da51e06b7fc58)
リージョンを複数選択して同時にリアルタイム編集出来る mark-multiple.el

[昨日のexpand-region](http://qiita.com/items/abd1016bf484c4e05ab1) に引き続き、これもいいです。

- [mark-multiple.elの mark-more-like-thisの紹介 - Life is very short](http://d.hatena.ne.jp/syohex/20120206/1328540927) 

まずは [動画](http://emacsrocks.com/e08.html) をどうぞ。特にすごいのは20秒～30秒の辺り！

## インストール

[package.el](http://d.hatena.ne.jp/tuto0621/20120613/1339607400) に入っていたのでそっちを使いました。

`M-x package-list-packages` で `mark-multiple` にカーソルを合わせてEnter

## 設定

基本はデフォルト設定のままですが、`rename-sgml-tag`をhtml-modeで使えるようにしています。

```init.el
;; mark-multiple
(require 'inline-string-rectangle)
(global-set-key (kbd "C-x r t") 'inline-string-rectangle)

(require 'mark-more-like-this)
(global-set-key (kbd "C-<") 'mark-previous-like-this)
(global-set-key (kbd "C->") 'mark-next-like-this)
;; (global-set-key (kbd "C-M-m") 'mark-more-like-this) ; like the other two, but takes an argument (negative is previous)
(global-set-key (kbd "C-*") 'mark-all-like-this)

;; (add-hook 'sgml-mode-hook
;;           (lambda ()
;;             (require 'rename-sgml-tag)
;;             (define-key sgml-mode-map (kbd "C-c C-r") 'rename-sgml-tag)))
(add-hook 'html-mode-hook
          (lambda ()
            (require 'rename-sgml-tag)
            (define-key html-mode-map (kbd "C-c C-r") 'rename-sgml-tag)))
```

## リンク
- [magnars/mark-multiple.el](https://github.com/magnars/mark-multiple.el)  - 本家
F#で素数の無限列を生成する

Eratosthenesの篩です。

```:primes.fs
let primes = 
    let rec sieve (xs : bigint seq) = xs |> Seq.take 1 |> Seq.head |> (fun p -> seq { yield p; yield! sieve (seq { for x in xs do if x % p <> 0I then yield x }) } )
    sieve (Seq.initInfinite (fun i -> bigint i) |> Seq.skip 2)
```

> primes |> Seq.take 100 |> Seq.map (sprintf "%A") |> Seq.toArray;;
val it : string array =  [|"2"; "3"; "5"; "7"; "11"; "13"; "17"; "19"; "23"; "29"; "31"; "37"; "41";
    "43"; "47"; "53"; "59"; "61"; "67"; "71"; "73"; "79"; "83"; "89"; "97";
    "101"; "103"; "107"; "109"; "113"; "127"; "131"; "137"; "139"; "149";
    "151"; "157"; "163"; "167"; "173"; "179"; "181"; "191"; "193"; "197";
    "199"; "211"; "223"; "227"; "229"; "233"; "239"; "241"; "251"; "257";
    "263"; "269"; "271"; "277"; "281"; "283"; "293"; "307"; "311"; "313";
    "317"; "331"; "337"; "347"; "349"; "353"; "359"; "367"; "373"; "379";
    "383"; "389"; "397"; "401"; "409"; "419"; "421"; "431"; "433"; "439";
    "443"; "449"; "457"; "461"; "463"; "467"; "479"; "487"; "491"; "499";
    "503"; "509"; "521"; "523"; "541"|]
WebSocketでリアルタイムチャート

ccchartのv0.950をリリースしたよ。
http://ccchart.com/test/ws2.htm

くたびれたので説明は省略。

[update] 
2012/11/08 v0.951 fix for firefox.
http://jsgt.org/c/update.json

追記 上記 jsgt.org/c は移転してます
http://ccchart.com/test/ws2.htm
http://ccchart.com/c/test/ws.htm
♥♥♥超簡単にFactoryGirlのdefinitionを作る方法♥♥♥

`rails console` で以下を実行し、

```ruby
class ActiveRecord::Base
  def to_factory_girl
    ignores = %w(id created_at updated_at)
    array = []
    array << "FactoryGirl.define do"
    array << "  factory :#{self.class.model_name.underscore} do"
    attributes.each do |key, value|
      next if ignores.include?(key)
      if key =~ /_id$/
        array << "    association :#{key.gsub(/_id$/, '')}"
      else
        array << "    #{key} #{value.inspect}"
      end
    end
    array << "  end"
    array << "end"
    array.join("\n")
  end
  alias_method :to_fg, :to_factory_girl
end
```

以下を実行すると、

```ruby
puts User.first.to_factory_girl
```

こんなのが

```
FactoryGirl.define do
  factory :user do
    ...
  end
end
```

あら便利！！！

♥♥♥♥♥♥♥FactoryGirl♥♥♥♥♥♥♥♥
C#からThrustを使う方法（またはネイティブなクラスを使う方法）

といっても大したことではなくて、いわゆるネイティブC++からC#を呼び出す方法という感じ。
注意点は（というほどでもないけど）、`thrust::device_vector`などのネイティブなクラスとか構造体は、ポインタにしてC#側に返して、C#側は`System.IntPtr`を使うというところ。

詳細は、百聞は一見にしかずなので、[githubレポジトリに上げた](https://github.com/aokomoriuta/ThrustInterop)ので、それを見てもらうほうが早いと思います。
C#: ウィンドウの位置・サイズ・最大化状態を保存する

※WinFormsの場合です。WPFではプロパティ名やイベントハンドラが異なると思います。

プロジェクトのプロパティで、下記のように設定します。
デフォルト値はフォームのプロパティから拾ってください。

![アプリケーション設定](https://lh3.googleusercontent.com/-eWf1VHVwnMM/UJoICvPaM1I/AAAAAAAAE_8/1fKFEuIRdAk/s828/save_window_state.png)

フォームのコードを以下のようにします。

```csharp
private void MainWindow_Load(object sender, EventArgs e)
{
    // ウィンドウの位置・サイズを復元
    Bounds = Properties.Settings.Default.Bounds;
    WindowState = Properties.Settings.Default.WindowState;
}

private void MainWindow_FormClosing(object sender, FormClosingEventArgs e)
{
    // ウィンドウの位置・サイズを保存
    if (WindowState == FormWindowState.Normal)
        Properties.Settings.Default.Bounds = Bounds;
    else
        Properties.Settings.Default.Bounds = RestoreBounds;
    
    Properties.Settings.Default.WindowState = WindowState;

    Properties.Settings.Default.Save();
}
```

マルチディスプレイの場合も動作確認しています。
Boundsを先に復元するのがミソだと思います。

Windows 7では画面左半分・右半分に最大化することができますが、
これは単にウィンドウサイズの変更で実装されているようで、特別扱いは必要なさそうです。
※ これが正しく保存されないアプリをときどき見かけるので、何かある気もしますが…

なお、最小化状態も保存されます。
これがユーザーの混乱を招くようなら、WindowState == FormWindowState.Minimized の場合は保存しないといいと思います。

他のサイトではPropertyBindingを使用する方法がありましたが、
やたらと挙動不審になるので私はあきらめました。
MissingManifestResourceExceptionの対処法

Formクラスの定義の前に他のクラスの定義を書くと、この例外が発生します。
http://support.microsoft.com/kb/318603/en-us

例:

```csharp
public class Hoge
{
    ...
}

public partial class MainWindow : Form
{
    ...
}
```    

Hogeの定義をMainWindowの後ろに移動すると解決します。
心当たりがないのに、いきなりシステムの深い部分で例外が出るのでびっくりしますね。
スレッド間のバリア同期


Rubyでバリア同期です。たまに欲しくなるんだけど、標準ライブラリにはないみたいなので(もしあったら教えてください)。
バリア同期は、複数のスレッド間で処理を再開するタイミングの同期を取る(待ち合わせをする)ために使うことができます。

## コード
```ruby:barrier.rb
#!/usr/bin/env ruby
# coding: utf-8
require 'monitor'

class Barrier
  def initialize(thresh)
    @thresh = thresh
    @obj = {count: 0}
    @obj.extend(MonitorMixin)
    @cond = @obj.new_cond
  end

  def wait
    @obj.synchronize do
      raise 'Cannot enter twice within same barrier' unless @obj[:count]

      @obj[:count] += 1
      @cond.broadcast
      @cond.wait_until { @obj[:count].nil? or @obj[:count] >= @thresh }

      @obj[:count] = nil
    end

    true
  end
end
```

## 使い方
まずBarrierインスタンスを作ります。ここでは、3人が`wait`したら動き出すインスタンスを作っておきます。

```ruby:
@barrier = Barrier.new(3)
```

次に、いくつかのスレッドを起動します。

```ruby:
alice = Thread.start do
  puts 'Alice: prepare...'
  sleep(5)  # 初期化に5秒かかるスレッドを想定

  puts 'Alice: waiting'
  @barrier.wait  # ここで待ち合わせ

  puts 'Alice: Starting the task'
  puts 'Alice: Foo'
  puts 'Alice: finished'
end

bob = Thread.start do
  puts 'Bob: prepare...'
  sleep(1)  # 初期化に1秒かかるスレッドを想定

  puts 'Bob: waiting'
  @barrier.wait  # ここで待ち合わせ

  puts 'Bob: Starting the task'
  puts 'Bob: Bar'
  puts 'Bob: finished'
end

puts 'MainThread: prepare...'
puts 'MainThread: waiting'
@barrier.wait  # ここで待ち合わせ

puts 'MainThread: Starting the task'
alice.join
bob.join
puts 'MainThread: Finished'
```

alice, bob, そしてメインスレッドの3者が同じ`Barrier`インスタンスの`#wait`を呼び出すまで待機し、待ち合わせが完了したら同時に動き出します。

## 実行例
```
Bob: prepare...
MainThread: prepare...
Alice: prepare...
MainThread: waiting
Bob: waiting
Alice: waiting
Alice: Starting the task
Alice: Foo
Bob: Starting the task
Bob: Bar
Bob: finished
Alice: finished
MainThread: Starting the task
MainThread: Finished
```
ARC環境でリファレンスカウントをログ表示するマクロ

ARC環境下ではretainCount メソッドは使えないのでCFGetRetainCountを使いますが、面倒なのでマクロにしてみました。

` #define  LogReferenceCount(obj) NSLog(@"[%@] reference count = %ld", [obj class], CFGetRetainCount((__bridge void*)obj)) `
exifrの使い方

最近カメラに凝っていますが、ストレージが安くなったこともあり、つい大量に撮影してしまって整理が大変です。
デジカメの写真にはEXIFというフォーマットで撮影情報が含まれているのはよく知られています。[exifr](https://github.com/remvee/exifr)はそれをrubyから扱うことのできるライブラリです。

まず`gem install exifr`でインストールします。
そして以下のようなコードで画像（jpgまたはtiff）からEXIF情報を取り出します。

```ruby:get_exif_data.rb
@exif = EXIFR::JPEG.new('/path/to/file.jpg')

# カメラのモデル名
puts @exif.model # => "NIKON D7000"

# シャッタースピード。Rationalで返る
puts @exif.exposure_time.to_s # => "1/640"

# F値。Rationalで返る
puts @exif.f_number.to_f.to_s # => "5.6"

# レンズ焦点距離（ミリメートル）。Rationalで返る
puts @exif.focal_length.to_i # => "300"

# 35mm（いわゆるフルサイズ）換算のレンズ焦点距離
puts @exif.focal_length_in_35mm_film.to_i # => "450"

# ISO値
puts @exif.iso_speed_ratings # => "100"

# 更新日時。RAWを現像した場合などは撮影日時ではなくなるので注意
puts @exif.date_time

# 撮影日時
puts @exif.date_time_original

# 写真の縦横サイズ
puts @exif.pixel_x_dimension
puts @exif.pixel_y_dimension

```

さらに詳しくは`@exif[0].to_hash`のキーや、EXIFフォーマットの解説（[ここ](http://cachu.xrea.jp/perl/ExifTAG.html)とか）を参考にして下さい。

撮影データをまとめてDBに入れたり、EXIF情報つきのフォトビューアを開発したり使い道は色々ありそうです。
Rspecでjpmobileを利用したスマートフォンサイトのコントローラのテストをする方法


jpmobileを利用している際にそのままRspecを走らせてしまうとPCサイトとみなされてテストが走ってしまうので、スマートフォンによるアクセスと見せかける方法。smart_phone?メソッドでtrueが返るようにスタブメソッドを定義してしまう

```ruby:spec/spec_helper.rb
config.before(:each, :type => :controller) do
  Rack::Request.any_instance.stub(:smart_phone?).and_return(true)
end
```
JavaScript文字列のバイト数を数える - encodeURIComponent版

http://qiita.com/items/a46a70b724e3dd9378f2 JavaScript文字列のバイト数を数える - にインスパイアされました。

この記事はブラウザでも使えるコアJavaScriptの範囲でどうするか考えます。Node.js などが持っているバイナリ処理の便利機能等は使わないものとします。

こちらは実際にencodeURIComponent()でUTF-8のバイト列の16進数バイト表記に直して正規表現で処理する形式。バイト数をcharCodeAt()で数えるよりコストはかかるけど、たぶん正確性や保守性は高いんじゃないかな。速度を気にしない場合にどうぞ。

```bytes2.js
String.prototype.bytes2 = function () {
    return(encodeURIComponent(this).replace(/%../g,"x").length);
}
```

コアのprototypeを拡張すると速度が低下することを気にする人用の関数バージョン。

```bytes2func.js
function bytes2(str) {
    return(encodeURIComponent(str).replace(/%../g,"x").length);
}
```

***結果***

```output.js
console.log( "あああa".bytes2() ); // -> 10
console.log( "èî".bytes2() ); // -> 4
```

試していないけど、UTF-8には6バイトまで種類があるらしいから、これで定義しておけばしばらくは困らないんじゃないかな。
JavaScript文字列のバイト数を数える

JavaScriptのString#lengthは文字数を返すためバイト数を出すメソッドを追加する。
たとえばDBにバイト数で制限がかかっていてフロントでも補助的にバリデーションをかけるような場合に。


```javascript:bytes.js

String.prototype.bytes = function () {
    var bytes = 0,
        i,c,
        len = this.length;
    for(i=0 ;i < len ; i++){
        c = this[i].charCodeAt(0)
        if (c <= 127){
            bytes += 1;
        } else if (c <= 2047){
            bytes += 2;
        } else {
            bytes += 3;
        }
    }
    return bytes;
};
```

下記のようになる

```javascript:sample.js
console.log( "あああa".bytes() ); // -> 10
console.log( "èî".bytes() ); // -> 4
```

ただし、この実装は厳密ではない
SugarCRM5.2で取引先担当者と取引先、メールアドレスをJOIN


```
SELECT C.*, A.*, email.`email_address` FROM `contacts` AS C LEFT JOIN `accounts_contacts` AS L
ON C.`id`=L.`contact_id` AND L.`deleted`=0
LEFT JOIN `accounts` AS A
ON L.`account_id`=A.id AND A.`deleted`=0
LEFT JOIN `email_addr_bean_rel` AS EL
ON C.id=EL.`bean_id` AND `bean_module`='Contacts' AND `primary_address`=1 AND EL.`deleted`=0
LEFT JOIN `email_addresses` AS email
ON EL.`email_address_id`=email.`id` AND email.`deleted`=0
where C.deleted=0
```

メールアドレスはメインアドレスのみのJOINです
サイト移転の際のリダイレクト

# 全部移転先のトップに流し込みたい

## 例

|brefore|after|
|:----:|:----:|
|http://before.local/abc/def|http://after.local|
|http://before.local/|http://after.local|

## 設定

```
<VirtualHost *:80>
    RewriteEngine on
    RewriteRule ^/(.*)$ http://after.local/
    ...(省略)...
</VirtualHost>
```

# ディレクトリ階層を生かしたままリダイレクトさせたい

##  例

|brefore|after|
|:----:|:----:|
|http://before.local/abc/def|http://after.local/abc/def|
|http://before.local/|http://after.local|

## 設定

```
<VirtualHost *:80>
    Redirect permanent / http://after.local/ #最後のスラッシュ忘れずに
    ...(省略)...
</VirtualHost>
```

## permanentについて

permanentが望ましいですが、一度設定してしまうとキャッシュされてしまうのが困る場合等はtemp等を使用する。

参考：http://www.kishiro.com/apache/redirect_30x.html



以上、良く忘れてしまうのでメモ・・・・
親Viewでスタートしたtouchイベントが子Viewに重なったかどうか判定


ゲーム製作過程で、実った果物をスワイプで収穫していくという処理を実装しました。
ベースとなる親Viewでスワイプ中の位置とそこに配置されている子Viewの
重なりを判定する必要がありました。

画面上では背景の親Viewに対して果物が子Viewとして配置されている状態。

処理の流れは
１．親ViewでtachesMovedイベント発生
２．スワイプ中の位置Pointを取得
３．現在実っている果物それぞれに対してCGRectContainsPoint(果物の位置, スワイプ中のPoint)
　で重なりチェック

という感じ。

touchMovedイベントを拾うたびに現在実っている果物全てに対して重なり判定をしています。
パフォーマンス面はよく考えていないですが一応動いています。
もっとうまい方法があれば知りたいです。
NSMutableArrayの要素を削除


NSMutableArray型び配列の要素を削除している最中に、配列にアクセスすると「Collection was mutated while being enumerated」という例外が出る。

これを解決するためには逆順からアクセスする列挙子「reverseObjectEnumerator」を用いればよい。

リンクリスト構造の配列は「次の要素」情報を管理しているので、逆から削除するとこれからアクセスする要素には影響がないかららしい。

```objective-c:
for (id object in array) {
    // objectを削除する必要があるかどうかチェックする
    if ([object shoudRemove]) {
        // objectを削除する
        [array removeObject:object];
    }
}
```

参考：[ダイナミックObjective-C](http://news.mynavi.jp/column/objc/105/index.html)