OmniAICreator/Qiita-1.07M huggingface dataset:
LimeJSにおけるイベントのstopPropagation

LimeJSのオブジェクトに対して`goog.events.listen(obj, 'type', fn, false this);`のようにした場合、fnの引数に渡されるイベントはlime.events.Eventで、stopPropagationも実装されているのですが、
内部的にgoog.eventsの処理でカスタムイベントとして処理されているのでうまく働かないようです。
stopPropagationするにはlime.events.Event.eventを使うとうまくいくようです。

```javascript:exLimeStopPropagation.js
var sprite = new lime.Sprite();
      sprite.setSize(...)...
var fn = function(e) {
  e.event.stopPropagation();
};
goog.events.listen(sprite, 'mousedown', fn, false, this);
```
rails runner

rails runnerコマンド
rails runner [option] ('Some.ruby(code)' or a filename)

Railsアプリケーションの環境下でrubyコードを実行するコマンド。

-e, --environment=name：test/development/productionの3つの環境の内、どの環境下でコードを実行するのかを指定
-h, --help：ヘルプページ
TwitterやQiitaのような自動更新タイムラインをBackbone.jsで作成

Qiitaでは新しい投稿がある場合にその件数を表示し，クリックするとタイムラインに追加するということをやっています．TwitterやFacebookと同じ仕組みですね．
これはBackbone.jsの`Backbone.Collection#fetch`を使うと簡単に実装できます．

## コード

```js
// アイテムのコレクションを実装
var TimelineItems = Backbone.Collection.extend({
        model: Item // 投稿のモデル
 });
// 新規投稿のみを取得する
// "/items?after=123"でid:123以降のアイテム情報がJSONで返ってくる想定
TimelineItems.fetch({ url: '/items?after=' + TimelineItems.models[0].id, add: true });
```

`add: true`をfetchの引数に渡すことで，fetchしたときに返ってきたデータをcollectionに追加することができます．あとはViewに適切にイベントを設定しておけば，fetchによってビューの見た目が更新されます．
イベントまわりの話は[Backbone.js入門 「View と Model と Collection の連携」](http://qiita.com/items/1413)でわかりやすく説明されています．
このfetchを定期的に呼んでやることで自動更新タイムラインを作ることができます．

```
setInterval(function() {
    TimelineItems.fetch({ url: '/items?after=' + TimelineItems.models[0].id, add: true });
}, 1000 * 180);
```

ざっくりとした説明でしたが，`fetch`をうまく使うことで取得した投稿の管理やビューの更新を簡単に行うことができます:)
date('W')は月曜始まりの日曜終わり固定

[マニュアルにも思いっきり書いてる…](http://www.php.net/manual/ja/function.date.php#refsect1-function.date-parameters "date関数のパラメータ")

> W	ISO-8601 月曜日に始まる年単位の週番号 (PHP 4.1.0 で追加)

日曜始まりの土曜終わりだと思い込んでいて、1/1が日曜になってる来年(2012年)の挙動が見えてくる今頃(2011年12月末)になってようやく、おや、となった…。

月曜始まり以外の週番号カウントには対応してないみたいなので、その場合は自作するしかないっぽい。

あと、最終週は翌年1月も含めて全て52週目と判定し、その年の第1月曜からが1週目になるので、「1/1以降は1週目」とか「1/1を含む週は1週目」とかの場合も、自作するしかない。

なお、date関数の挙動については、PHP自体のソースのstandard/datetime.c 内にある php_date部分を読むと詳しく書いてる。マニュアル見るより、こちらのコメント部分だけでも見ておいたた方がいいかもしれない。
マルチメソッドで階層的なディスパッチ

deriveで階層の設定。::rectは::shapeの子。階層を設定するキーワードは名前空間付きじゃないといけない。

```clojure
(derive ::rect ::shape)
;=> nil
```

parents、ancestors、descendants、isa?で階層が設定されていることを確認できる。

```clojure
(parents ::rect)
;=> #{:user/shape}
```

mutimethodを定義。
methodのマッチングは=じゃなくてisa?が使われるので階層を設定したキーワードで直接ディスパッチ。

```clojure
(defmulti bar (fn [x] x))
;=> #'user/bar
(defmethod bar ::shape [x] "shape!")
;=> #<MultiFn clojure.lang.MultiFn@6061b355>
```

::shapeしか定義していないので ::rect でも ::shape にマッチ。

```clojure
(bar ::shape)
;=> "shape!"
(bar ::rect)
;=> "shape!"
```

::rectにも定義するとそっちが呼ばれる。

```clojure
(defmethod bar ::rect [x] "rect!")
;=> #<MultiFn clojure.lang.MultiFn@6061b355>
(bar ::rect)
;=> "rect!"
```

ClojureScriptでも大丈夫だった。

参考 [Clojure - multimethods](http://clojure.org/multimethods)
capistranoでtail -f

```ruby:config/deploy.rb
namespace :logging do
  task :tail_unicorn do
    run "tail -f #{shared_path}/log/unicorn.log" do |channel, stream, data|
      trap("INT") { puts "Interupted!"; exit 0; }
      puts "=== #{channel[:host]} ==="
      puts data
      break if stream == :err
    end
  end
end
```
[StackOverflowの投稿](http://stackoverflow.com/questions/5218902/tail-production-log-with-capistrano-how-to-stop-it)のほぼコピペですが、非常に便利なので共有です。
プログラムのシンタックスハイライト方法の比較

# 背景
ブログシステム構築などでコードのシンタックスハイライトをしたいときに方法はいくつかありますが，ここではQiitaで試したいくつかの手段の比較をしてみます．


# 候補

## Gist添付

### 概要
コード部分をGistに投稿し，読み込むときにサイトでgistのembed jsを展開する．

### pros
- お手軽

### cons
- コードを検索できない
- コードごとにGistを読みにいくため重い

どちらも工夫すれば一応解決可能ではあるけれど，素直じゃない


## JavaScriptのハイライトライブラリ
### 概要
- [syntaxhighlighter](http://alexgorbatchev.com/SyntaxHighlighter/)
- [SHJS - Syntax Highlighting in JavaScript](http://shjs.sourceforge.net/)
など．
コード部分を特定のタグで囲み，JSファイルを読み込むとハイライトされる．

### pros
- とにかくお手軽

### cons
- 処理が重い
 - Qiitaのように1ページに多数のコードブロックが存在する場合，ハイライトにかかる時間が少し気になる
 - リロードごとに毎回ハイライト処理が走ることになる


## pygments
### 概要
Pythonで書かれたシンタックスハイライタ．pygmentizeコマンドで実行できる．
rubyライブラリがあり([albino](https://github.com/yaotti/albino), [pygments.rb](https://github.com/tmm1/pygments.rb))，GitHubでも使われている．

### pros
- 対応言語が多い
- 言語の自動判定機能

### cons
- セットアップが面倒
 - pythonのインストールが必要…


# 結論
pythonのインストールが必要ですが，Qiitaではpygmentsを採用しました．今のところは不便に感じることはないです．
とにかく簡単にハイライトしたいということならJSライブラリが良いと思います．
git系コマンドのエイリアス集

`alias gPull="git pull"`はSandSによる誤爆対策

```sh
# aliases for git
function git(){hub "$@"}
alias g="git"
alias gad="git add"
alias gb="git branch -v"
alias gba="git branch -a"
alias gbr="git branch -r"
alias gc="git commit -v"
alias gco="git checkout"
alias gd="git diff"
alias gdc="git diff --cached"
alias gf="git fetch"
alias gg="git grep -n"
alias ggi="git grep -ni"
alias gl="git log --stat"
alias gll="git log --oneline"
alias glp="git log -p"
alias gls="git ls-files"
alias gm="git merge"
alias gst="git status"
alias gs="git show"
alias gsp="git stash pop"
alias gss="git stash save"
alias gssh="git stash show"
alias gsl="git stash list"
alias gPull="git pull"
alias up='cd ./$(git rev-parse --show-cdup)' # cd to current repo's root dir
# git current-branch: Show current branch
alias gcb="git symbolic-ref --short HEAD"
```
__construct()があると、クラス名と同じメソッドはコンストラクタとはならないみたい

```php
<?php
class Hoge
{
	public function __construct()
	{
		var_dump(__METHOD__);
	}

	public function Hoge()
	{
		var_dump(__METHOD__);
	}
}

$obj = new Hoge(); //string(17) "Hoge::__construct"
```

```php
<?php
class Hoge
{
	public function Hoge()
	{
		var_dump(__METHOD__);
	}
}

$obj = new Hoge(); // string(10) "Hoge::Hoge"
```

一安心
JsTestDriver with Rails 3.1

Testing javascripts is stil our team's problem. I'm trying JsTestDriver. Here is a quick note of what I tried. 

## What's JsTestDriver? 

With JsTestDriver, you can tests javascript on your shell console. Code will be run on actual browsers.

http://code.google.com/p/js-test-driver/

##  Setting up

Download JsTestDriver.jar from 
http://code.google.com/p/js-test-driver/downloads/list
I picked JsTestDriver-1.3.3d.jar

Then,I put it into test/js dir which has been created at that time. And wrote config file.
File structure is like this:

```
test/js/JsTestDriver.jar
test/js/jsTestDriver.conf
```

```yaml:jsTestDriver.conf
server: http://localhost:9876

load:
  - test/js/lib/jquery.min.js
  - test/js/lib/jquery-ui.min.js
  - app/assets/javascripts/*js
  - test/js/*_test.js
```
I copied jquery.min.js and jqeury-ui.min.js from jqeury-rails gem dir(in my case: ~/.rvm/gems/ruby-1.9.2-p290/gems/jquery-rails-1.0.14/vendor/assets/javascripts/), because my scripts need to be run with them.

## Very simple testcase sample

```javascript:simple_test.js 
TestCase("MyTestCase", {
    setUp:function(){
        this.oj = { name: "masaki"};
    },
    tearDown :function(){
        this.oj = null;
    },
    testMyName:function(){
        assertEquals("masaki",this.oj.name);
    },
    testB:function(){
        assertTrue(true);
    }
});
```

## Starting Server , Running tests

Starting JsTestDriverServer
`java -jar test/js/JsTestDriver.jar --port 9876`

Then,access http://localhost:9876/ with your taget browser.

Running tests
`java -jar test/js/JsTestDriver.jar --config test/js/jsTestDriver.conf --basePath . --tests all`

The great thing of JsTestDriver is that you can run tests on various browsers and machines simultaneously. 

```text:result
$ java -jar test/js/JsTestDriver.jar --config test/js/jsTestDriver.conf --basePath . --tests all
......
Total 6 tests (Passed: 6; Fails: 0; Errors: 0) (2.00 ms)
  Microsoft Internet Explorer 6.0 Windows: Run 2 tests (Passed: 2; Fails: 0; Errors 0) (16.00 ms)
  Chrome 16.0.912.75 Mac OS: Run 2 tests (Passed: 2; Fails: 0; Errors 0) (1.00 ms)
  Safari 534.52.7 Mac OS: Run 2 tests (Passed: 2; Fails: 0; Errors 0) (1.00 ms)
  Firefox 9.0.1 Mac OS: Run 2 tests (Passed: 2; Fails: 0; Errors 0) (1.00 ms)
````



## Rake task

I wrote rake task. (It's not necessary ,of cause. )

```ruby:test_js.rake
namespace :test do
  namespace :js do 
    desc "javascript test server"
    task :server do
      port = 9876
      puts "Booting JsTestDriver server on http://localhost:#{port}"
      puts "Access the url with your browser to setup"
      puts "Do 'rake test:js' "
      p `java -jar test/js/JsTestDriver.jar --port #{port}`
    end
  end

  desc "run all javascript tests"
  task :js do
    cmd = "java -jar test/js/JsTestDriver.jar --config test/js/jsTestDriver.conf --basePath . --tests all"
    puts "execute: #{cmd}"
    puts `#{cmd}`
    exit
  end
end
```
Now I can do
`$ rake test:js:server`
`$ rake test:js`

## Next..

to know how to deal with

- DOM related functions. 
- Ajax 
- Mocking

### Questions

- Can we test with coffee script?
Djangoのモジュールをインタープリタで読み込む

(訂正)
python manage.py shell を実行すればsettings.pyが指定された状態になるため,こちらを使用する方が良いです.
以下は,無駄な行為でした.

========
Djangoのモジュールをインポートしてhelpやdirを見たい時がある.
その際,普通にやるとインポートエラーとなり,モジュールを読み込めない.

    In [1]: import django.shortcuts
    (...)
    ImportError: Settings cannot be imported, because environment variable DJANGO_SETTINGS_MODULE is undefined.

インポートするためには環境変数DJANGO_SETTINGS_MODULEに,設定を記載したモジュールを教えてやる必要がある. デフォルトではDjangoプロジェクト直下のsettings.pyを指定してやれば良い.

    In [2]: import os
    In [3]: os.environ['DJANGO_SETTINGS_MODULE'] = 'mokumoku.settings'
    In [4]: import django.shortcuts
    In [5]: help(django.shortcuts)
========
Kotlinを使ってみた

JetBrain社で作成中の言語KotlinのWebのIDEが公開されたので試してみた。
http://kotlin-demo.jetbrains.com/

特徴は次の3点
- `import java.util.*`によりJavaの標準ライブラリが利用できる
- 拡張メソッドにより，標準ライブラリにメソッドが追加できる
- `set`, `get` メソッドがRubyでいう `[]`, `[]=` に変換される

`inline`は一応書いてみたけど中間コードを確認してないのでinline化されているかは不明

```Kotlin:map_sample
import java.util.*

inline fun <K, V> Map<K,V>.set(key : K, value : V) {
  this.put(key, value)
}

inline fun <K, V> Map<K, V>.get(key : K) : V {
  return this.get(key)
}

fun main(args : Array<String>) {
  val map = HashMap<String, String>()
  map["foo"] = "bar"
  System.out?.println("foo:" + map["foo"])
}
```
出力は予想通りこんな感じ

```text:sample
foo:bar
```
ifディレクティブを使った複数行のコメントアウト

Cで複数行をコメントアウトしたい時は//を行頭に付けたり/**/で囲むより if ディレクティブ を使うのがおすすめ

```
#include <stdio.h>
int main () {
#if 0
    printf("hello world\n");
#endif
    return 0;
}
```

if,endifで囲まれた部分はコンパイルされないが、
シンタックスハイライトは有効になるので見やすい。(IDE・エディタによるが)
ただし、構文に影響を与えるような場合にはあまり使うべきでないかも。
たとえば"}"だけif,endifで囲むとコンパイルできるがIDE・エディタによる構文解析がうまく出来なかったりする。
C言語をコンパイルするたびに日付の名前で自動バックアップ

初投稿です。やってる方も多いかとは思いますが、便利だったので。
僕の場合は前日の状態まで戻れれば十分だったので１日１バックアップにしてました。

```Auto_backup.sh
# 日付を取得しNに代入
N=`date '+%Y-%m-%d'`
cp  /home/source/sample.c  /home/source/backup/sample_$N.c.BAK
cp  /home/source/sample.sh  /home/source/backup/sample_$N.sh.BAK
```
au one marketからアプリをDLすると最大5倍の容量が必要

au one marketからアプリをDLすると最大5倍の容量が必要。
しかも公式発表。

アプリ容量をかなり制限して作らないと。

http://web-market.auone.jp/details?id=9612000000002
https://groups.google.com/forum/#!topic/android-sdk-japan/ffkLJgcaOWE
JSHintでJavaScriptのソースコードをチェックする

最初は jslint.vim を使っていたんだけど、jslint-core.js を最新にするのが面倒だったので
npm で簡単に管理できる node-jshint を使う設定を書いてみた。
[errormarker.vim](http://www.vim.org/scripts/script.php?script_id=1861) とあわせて使うとなかなか快適。

jslint.vim みたいに書いたはしからチェックかけるようにするにはどうすればいいんだろう……

https://github.com/ponko2/vim-javascript

```sh:install-jshint.sh
npm install -g jshint
```

```vim:.vim/compiler/jslint.vim
if exists("current_compiler")
  finish
endif
let current_compiler = "jshint"

let s:save_cpo = &cpo
set cpo&vim

if exists(":CompilerSet") != 2
  command -nargs=* CompilerSet setlocal <args>
endif

CompilerSet makeprg=jshint\ %

CompilerSet errorformat=%f:\ line\ %l\\,\ col\ %c\\,\ %m,%+Z%p^,%+C%.%#,%-G%.%#

let &cpo = s:save_cpo
```

```vim:.vim/ftplugin/javascript.vim
if exists("b:did_ftplugin")
  finish
endif
let b:did_ftplugin = 1

let s:save_cpo = &cpo
set cpo&vim

if !exists("current_compiler")
  compiler jshint
endif

autocmd BufWritePost <buffer> silent make

let &cpo = s:save_cpo
```

久しぶりにVim Script書いてみたけど、作法とか良くわからない……
Vim Script テクニックバイブルとかでないかなぁ
アルゴリズムイントロダクションの最悪線形時間選択アルゴリズムは中央値を選択できているか？

9.3 最悪線形時間選択アルゴリズムで以下のようなアルゴリズムがあります

1.入力配列のn 個の要素をそれぞれ5 個の要素からなるLn/5J 個のグループと残りのnmod5
個の要素からなる高々1 個のグループに分割する.

2. 各グループの(高々5 個の)要素を挿入ソートによってソートし，それぞれの中央値を
とることによって， n/5 個のグループのそれぞれの中央値を求める.

3. SELECT を再帰的に用いてステップ2 で見つけた　n/5  個の中央値の中央値x を見つける.
(中央値が偶数個の場合は，本書での約束にしたがって，小さい方の中央値をとるものと
する. )

4. 変更された版のPARTITION を用いて入力配列を中央値の中央値x をピボットとして分割す
る. k を分割の小さい方(x よりも小さい要素の集合)に属する要素数に1 を足したもの
とする.このとき， x はk 番目に小さい値であり，分割の大きい方にはn-k 個の要素が
属する.
5. i=k ならば， x を返す.そうでなければ， SELECT を再帰的に用いて， i<=k ならば，分割
の小さい方からi 番目に小さい要素を見つけ， i>k ならば，分割の大きい方から(i -k)
番目に小さい要素を見つける.


このステップ３なのですが、本当に全体の中央値が取得できているのでしょうか？
再帰ステップを繰り返すうちに中央値が候補から弾かれてしまうという事はないのでしょうか？
mercurialでバグ予測ツールbugspotsつかった

1.pythonモジュールのmercurialのインストールにかなり手こずった(たかのさんありがとう！)
http://qiita.com/items/1714

2.ソースはこちらのものを拝借
http://d.hatena.ne.jp/karronoli/20120109#1326111368

コミットログのコメントの中で'fix(es|ed)?|close(s|d)?'の正規表現にヒットするコミットをバグフィックスと見なしている。
コメントを日本語で残しているなら、"修正"とかしてもいいかもしれない。
読めばわかると思うけど、該当の文字列がヒットしないとエラーになる

3.理屈
http://www.publickey1.jp/blog/11/post_193.html

>つまり、より高頻度にバグを修正し、かつ最近になって集中的に直しているほど、スコアが大きくなります。そしてスコアが大きいほど、相対的に見てそのコードにはバグがある可能性が高い、というのがこのアルゴリズムが示すところです。

4.出力結果
$python bugspots.py ~/test
['server/main.py: 0.000006', 'server/foo.py: 0.000006', 'server/bar.py: 0.000006', 'bugspots.py: 0.000006']
mercurialのpythonモジュールの場所を探しています

bug予測ツールbugspotsのmercurail版を使うために
"from mercurial import ui, hg"がしたいです。
ご存じの方いましたら教えてください。

http://d.hatena.ne.jp/karronoli/20120109

ぐぐれどぐぐれどmercurialの本体のインストール方法がでてきてなかなか難儀してます。
cellの上下にラインを引いて綺麗に見せるスニペット。

記念投稿なので大したあれじゃないですが。
もちろんcellじゃなくても。

```objc:CustomCell.m
- (void)drawRect:(CGRect)rect
{
    [super drawRect:rect];
    
    CGFloat width = self.bounds.size.width;
    CGFloat height = self.bounds.size.height;    
    CGFloat lineWidth = 2.0;
    
    CGContextRef context = UIGraphicsGetCurrentContext();
    
    CGContextMoveToPoint(context, 0.0, 0.0);
    CGContextAddLineToPoint(context, width, 0.0);
    
    UIColor *topColor = [UIColor colorWithWhite:1.0 alpha:1.0];
    CGContextSetStrokeColorWithColor(context, [topColor CGColor]);
    
    CGContextSetLineWidth(context, lineWidth);
    CGContextStrokePath(context);
    
    CGContextMoveToPoint(context, 0.0, height);
    CGContextAddLineToPoint(context, width, height);
    
    UIColor *bottomColor = [UIColor colorWithWhite:0.85 alpha:1.0];
    CGContextSetStrokeColorWithColor(context, [bottomColor CGColor]);
    
    CGContextStrokePath(context);
}
```
CoffeeScriptで即時関数

CoffeeScriptで、jsの

```instant.js
var foo = (function () {
    // ...
})();
```

をやりたい場合、

```instant.coffee
foo = do ->
    # ...
```

とすればいい。意外とリファレンスサイトには載ってない。
ちなみに引数を渡したければ以下のように書く。

```instant.coffee
foo = do (x) ->
    # ...
```
Vimでカーソル位置の単語をアルクで検索

Space + a でやる場合。

```vim:lookup_alc.vim
nnoremap <expr> <space>A ':Ref alc ' . expand('<cword>') . '<CR>
```

なお :Ref alc するためにはw3mが必要なので、homebrewなどで入れておく。
実行スクリプトからの相対パスでファイルにアクセスする.

実行スクリプト名は`__file__`で取得できる.
これとos.pathモジュールを組み合わせて,実行スクリプトから相対パスでファイルにアクセスする.

```py
base = os.path.dirname(os.path.abspath(__file__))
name = os.path.normpath(os.path.join(base, '../local/local_db'))
```
mscgen, Ubuntu 10.04, 日本語

古めのUbuntu(10.04 LTS)でmscgenを入れて日本語入りのシーケンス図をコンパイルしようとしたら、-Fの指定が効かず文字化けしてしまう。

仕方なくソースからコンパイルしてみたらなんとかなった。コンパイルにはaptitude install libdg2-xpm-devが必要だった。
Android公式デザインガイド

いまさら出ても・・・感が強いけど、とりあえずデザイナーさんは必読でお願いしたいドキュメント。
しっかり書かれているので、とても勉強になる。

ただし、OS２,３以前で使えるノウハウはあんまりありません(笑)。日本の端末事情もほとんど考慮されていません(笑)。

http://developer.android.com/design/index.html
TFS版バグ予測ツール

http://qiita.com/items/1596
の投稿で知ったバグ予測ツールの計算式を元にTFS管理しているファイルに対して、計算を行うクエリを作成。TFSを管理するSQLServerのデータベース上で実行する。

```sql:BugTfs.sql
DECLARE @T_FILE table (
	ID int identity(1, 1),
	ItemId int,
	[PATH] nvarchar(4000),
	[FILENAME] nvarchar(4000),
	COUNT_CHECKIN int,
	DATE_CREATE] datetime,
	DATE_LAST_UPDATE datetime,
	ALIVE_MINUTES money
)

DECLARE @T_CHECKIN table (
	ID int identity(1, 1),
	FileId int,
	ItemId int,
	DATE_CHECKIN datetime,
	DATE_CREATE_AS_SAMEFILE datetime,
	TIMING float(53)
)

INSERT INTO @T_FILE
SELECT
	tbl_VersionedItem.ItemId,
	REPLACE(REPLACE(tbl_VersionedItem.ParentPath, '>', '_'), '\', '/') AS [PATH],
	REPLACE(REPLACE(tbl_VersionedItem.ChildItem, '>', '_'), '\', '') AS [FILENAME],
	T_FILE.[COUNT] AS COUNT_CHECKIN,
	T_FILE.MIN_DATE_UPDATE,
	T_FILE.MAX_DATE_UPDATE,
	DATEDIFF(D, T_FILE.MIN_DATE_UPDATE, T_FILE.MAX_DATE_UPDATE)
FROM
	tbl_VersionedItem
	INNER JOIN (
		SELECT
			tbl_File.ItemId,
			COUNT(*) AS [COUNT],
			MIN(tbl_File.CreationDate) AS MIN_DATE_UPDATE,
			MAX(tbl_File.CreationDate) AS MAX_DATE_UPDATE
		FROM
			tbl_File
		GROUP BY
			tbl_File.ItemId
	) AS T_FILE ON tbl_VersionedItem.ItemId = T_FILE.ItemId

INSERT INTO @T_CHECKIN
SELECT
	tbl_File.FileId,
	tbl_File.ItemId,
	tbl_File.CreationDate,
	A_FILE.DATE_CREATE] AS DATE_CREATE_AS_SAMEFILE,
	null
FROM
	tbl_File
	LEFT OUTER JOIN @T_FILE AS A_FILE ON tbl_File.ItemId = A_FILE.ItemId

UPDATE @T_CHECKIN
SET DATE_CREATE_AS_SAMEFILE = ISNULL(MIN_CHECKIN.MIN_DATE, NULL)
FROM
	@T_CHECKIN AS A_CHECKIN
	LEFT OUTER JOIN (
		SELECT
			tbl_File.ItemId,
			MIN(tbl_File.CreationDate) AS MIN_DATE
		FROM
			tbl_File
		GROUP BY
			tbl_File.ItemId
	) AS MIN_CHECKIN ON A_CHECKIN.ItemId = MIN_CHECKIN.ItemId

UPDATE @T_CHECKIN
SET TIMING = CONVERT(float(53), DATEDIFF(D, DATE_CREATE_AS_SAMEFILE, DATE_CHECKIN)) / CONVERT(float(53), DATEDIFF(D, DATE_CREATE_AS_SAMEFILE, GETDATE()))
WHERE
	DATEDIFF(D, DATE_CREATE_AS_SAMEFILE, GETDATE()) <> 0



SELECT
	A_FILE.[PATH],
	A_FILE.[FILENAME],
	T_SCORE.SCORE
FROM
	@T_FILE AS A_FILE
	INNER JOIN (
		SELECT
			A_CHECKIN.ItemId AS ItemId,
			SUM(1/(1+EXP(-12*TIMING+12))) AS SCORE
		FROM
			@T_CHECKIN AS A_CHECKIN
		GROUP BY
			A_CHECKIN.ItemId
	) AS T_SCORE ON A_FILE.ItemId = T_SCORE.ItemId
ORDER BY
	T_SCORE.SCORE desc
```
Redis接続をチェックしてからRailsサーバー起動

# はじめに
Railsでredisを使うとき，設定に

```ruby:config/initializers/redis.rb
$redis = Redis.new(:host => 'localhost', :port => 6379)
```

のように書いて$redis.get 'key'みたいに使うけれど，これだとRedisサーバーに繋がらないとき(redisサーバーが落ちてるとか)でもアプリケーション内でredisへアクセスするまでわからない．
起動時にチェックしてほしい．

# 手段、コード
初期化したあとすぐに[ping](http://redis.io/commands/ping)を飛ばす

```ruby:config/initializers/redis.rb
$redis = Redis.new(:host => 'localhost', :port => 6379)
$redis.ping
```

繋がらない場合は例外を投げて落ちるのでより安心．

# 参考リンク
[Redisのpingコマンド](http://redis.io/commands/ping)
coffee-script-pure

https://github.com/charliesome/coffee-script-pure

どうやってるのかと思ったら、https://github.com/charliesome/twostroke というRubyによるJS実装を利用しているそうだ。

JSの他言語実装はどうしてもDOMとかが問題になりがちだが、CoffeeScript処理系(JSで書かれている)はDOMフリーだろうから、JSの他言語実装で動かすには向いてるのかも。
HEREマクロ

デバッグなど出力をするときに使うと便利なマクロです。

```c:heremacro.h
#define _STR(x)      #x
#define _STR2(x)     _STR(x)
#define __SLINE__    _STR2(__LINE__)
#define HERE         __FILE__  ":" __SLINE__ " "
```

使い方はこんな感じ

```c:main.c
#include <stdio.h>
#include "heremacro.h"
int main() {
    printf(HERE "hello world\n");
    return 0;
}
```

出力結果はこうなる。

```
main.c:4 hello world
```

__FUNC__マクロとかを使ってカスタマイズするもよし。
元ネタはこちら http://d.hatena.ne.jp/mindcat/20090523/1243045233
RailsでコントローラのアクションがAjaxで呼ばれたものかどうかを判定する


```ruby
request.xhr? #=> 0 or nil
```

Rack::Request#xhr? からActionDispatchに継承されたメソッドであり、

```ruby
@env["HTTP_X_REQUESTED_WITH"] == "XMLHttpRequest"
```

の結果を返している模様。
$displayなどの引数について

Verilog HDLのTipsなんぞ需要なさそうだけど、練習がてら投稿します。

$display、$fmonitor、$fstrobeなどの引数はC言語のprintfとほぼ同じですが、
次のように変わった書き方ができます。

`$display( "こんな", "書き方が", "できる" );`

> 結果: こんな書き方ができる

`$display( "hoge%h", 1000, "piyo", 2000 );`

> 結果: hoge3e8piyo 2000


strobeも、次のように信号ごとに分けると見やすくなります。

```
reg sig_a, sig_b, sig_c;
reg [7:0] bus;
initial begin
    #10;
    forever begin
        #10;
        $strobe( "%b", sig_a,
                 "%b", sig_b,
                 "%b", sig_c,
                 "%h", bus );
      end
  end
```


なお、これはIEEE1364で定義されているわけではありません。
なので、シミュレータによっては正しく動作しない可能性があります。
    動作確認したシミュレータ = Icarus Verilog、Verilog-XL
OverScroll(iPhone的にViewを引っ張る)の実装

OverScrollの実装の参考になるURL。ただしpullToRefresh(引っ張って更新)まで実装するのは結構調整が大変そう。
http://techbooster.jpn.org/andriod/ui/2658/
http://y-anz-m.blogspot.com/2011/01/androidoverscroll.html
yieldのあるモナド

rubyのyieldの再現。
クロージャを毎度作る感じでできないか試していたらコンパイルが通りました。

```Haskell:Main.hs
import Yield

main = print $ collect $ do
  yield 1
  yield 2
  yield 3

collect :: Yield () y a -> [y]
collect m = fst $ foldYield cons [] m
  where
  cons ys y = (y:ys, ())
```

```haskell:Yield.hs
data Yield x y a = Yield y (x -> Yield x y a) | Stop a

instance Monad (Yield x y) where
  return = Stop
  Yield y c >>= f = Yield y ((>>= f) . c)
  Stop a >>= f = f a

yield :: y -> Yield x y x
yield y = Yield y return

foldYield :: (a -> y -> (a, x)) -> a -> Yield x y b -> (a, b)
foldYield _ a (Stop b) = (a, b)
foldYield f a (Yield y c) = let (a', x) = f a y in foldYield f a' $ c x
```

モナド変換子版。

```haskell:YieldT.hs

newtype YieldT x y m a = YieldT { runYieldT :: m (Either (y, x -> YieldT x y m a) a) }

instance (Monad m) => Monad (YieldT x y m) where
  return a = YieldT $ return $ Right a
  m >>= f = YieldT $ do
    p <- runYieldT m
    case p of
      Right a -> runYieldT $ f a
      Left (y, c) -> return $ Left (y, (>>= f) . c)

instance MonadTrans (YieldT x y) where
  lift = YieldT . liftM Right

yieldT :: (Monad m) => y -> YieldT x y m x
yieldT y = YieldT $ return $ Left (y, return)

foldYieldT :: (Monad m) => (a -> y -> m (a, x)) -> a -> YieldT x y m b -> m (a, b)
foldYieldT f a m = do
  p <- runYieldT m
  case p of
    Right b -> return (a, b)
    Left (y, c) -> do
      (a', x) <- f a y
      foldYieldT f a' (c x)
```
あまりにも当たり前のことだが、OpenGLの大前提

とある事情で、他人の書いたiPadのアプリをデバッグしているのだが、OpenGLの関数がスレッドローカルなカレントコンテキストに対して実行されるのを考慮していないクソな設計で大ハマリした。そのアプリケーションにEAGLContextが複数あるなら、必ずカレントコンテキストを確認して必要ならカレントコンテキストを変更してからOpenGL関数を実行すること。というか、deallocで後始末するのはよくない。
TypeSafe CLOS MOP

Gauche の CLOS, MOP, define-macro を使って Perl の moose 的 TypeSafe Scheme OOP をやってみる
See also
http://voqn.blogspot.com/2011/09/type-safe-metaclass-for-gauche-mop.html

``` scheme:mop.scm
(define-class <type-safe-meta> (<class>) (()))

(define-method compute-get-n-set ((class <type-safe-meta>) slot)
  (let* ((has? (cut slot-definition-option slot <> #f))
	  (acc (compute-slot-accessor class slot (next-method)))
	  (type-error
	   (^ (value type)
	     (error
	      #`"Type Error : require type ,|type| but ,(class-of value)"
	      value)))
	  (validate-type
	   (^v (if-let1 t (has? :is-a)
		(if (is-a? v t) v (type-error v t))
		v)))
	  (validate-value
	   (^v (if-let1 validate (has? :validate) (validate v) v)))
	  (filter-value
	   (^v (if-let1 f (has? :filter) (f v) v))))
    (if (or (has? :is-a) (has? :validate) (has? :filter))
	(let1 filter/validate (.$ filter-value validate-value validate-type)
	  (list (^ (o) (slot-ref-using-accessor o acc))
		(^ (o v) (slot-set-using-accessor! o acc (filter/validate v)))
		(^ (o) (slot-bound-using-accessor? o acc))
		#t))
	(next-method))))
```

``` scheme:macro.scm
(define-macro (define-class* name supers slots . options)
  `(define-class ,name ,supers
     ,(map (^s (let ((has? (cut get-keyword <> <> #f))
		     (key (car s))
		     (accessor (^ (k a) (string->symbol #`",|k|-,|a|")))
		     (rest (cdr s)))
		 (let1 compl (^ (k i)
			       (if (has? k rest) '()
				   (list k i)))
		   `(,key
		     ,@(compl :init-value (make-init-value rest))
		     ,@(compl :init-keyword (make-keyword key))
		     ,@(compl :getter (accessor key 'of))
		     ,@(if (or (has? :setter rest)
			       (has? :read-only rest)) '()
			       (list :setter (accessor key 'set!)))
		     ,@rest))))
	   slots)
     ,@options))

(define (make-init-value key-list)
  (let1 has? (cut get-keyword <> key-list #f)
    (if-let1 t
	     (has? :is-a)
	     (case t
	       ((<number> <complex> <real> <integer>) 0)
	       ((<string>) "")
	       ((<boolean>) #f)
	       ((<list>) '())
	       ((<vector>) '#())
	       (else (make t)))
	     (undefined))))
```


``` scheme:example.scm
(define (loop-mod$ max) 
  (^x ((^v (if (= v (floor v)) (x->integer v) v))
       (cond ((<= max x) (fmod x max))
	         ((> 0 x) (fmod (+ x max) max))
	         (else x)))))

(define (inner$ min max) (cut clamp min <> max))

(define-class* <hsl> (<color>)
  ((hue :is-a <real> :filter (loop-mod$ 360))
   (saturation :is-a <real> :filter (inner$ 0 1))
   (luminance :is-a <real> :filter (inner$ 0 1))))
```
xcode4.2 StoryboadでXML表記になってしまたのを元に戻す

いきなりハマって
[ここ](http://blog.kojisblog.com/development/iphone%E3%82%A2%E3%83%97%E3%83%AA/xcode4-2storyboard-xml/ "[xcode4.2]StoryboardでXML表記からiOSのStoryboard形式の表示に戻す。") を参考にした。
ワンファイルをFTPでPUTするバッチ

Marijuanaさんが書いてくれたのでメモ

```sh
@echo off
echo ftpの情報を入力します

set /p SV="ftpサーバのアドレスを入力 > "
set /p US="ユーザ名を入力 > "
set /p PW="パスワードを入力 > "
set /p UPPATH="アップロードフォルダを入力 > "

set FTPCMD=%TEMPDIR%\ftpcmd.txt

echo open %SV%> %FTPCMD%
echo %US%>> %FTPCMD%
echo %PW%>> %FTPCMD%
if "%UPPATH%" NEQ "" echo cd %UPPATH%>> %FTPCMD%
echo put install.php>> %FTPCMD%
echo bye>> %FTPCMD%

ftp -s:%FTPCMD%

pause
del %FTPCMD%
```
Prelude Hack : divide and remainder return Either Monad

See also
1. http://voqn.blogspot.com/2012/01/bdd-on-haskell-3-1-catch.html
2. http://voqn.blogspot.com/2012/01/bdd-on-haskell-3-2-throw-exception.html

``` haskell:Data/Numeric/Arith.hs
import qualified Data.Fixed as F
import Control.Exception
import Prelude hiding ( div, mod, divMod )
import qualified GHC.Real as R

divZero :: Either ArithException a
divZero = Left DivideByZero

div' :: (Real a, Integral b) => a -> a -> Either ArithException b
div' _ 0 = divZero
div' x y = Right $ F.div' x y

mod' :: Real a => a -> a -> Either ArithException a
mod' _ 0 = divZero
mod' x y = Right $ F.mod' x y

divMod' :: (Real a, Integral b) => a -> a -> Either ArithException (b, a)
divMod' = pairEither div' mod' divZero

div :: Integral a => a -> a -> Either ArithException a
div _ 0 = divZero
div x y = Right $ R.div x y

mod :: Integral a => a -> a -> Either ArithException a
mod _ 0 = divZero
mod x y = Right $ R.mod x y

divMod :: Integral a => a -> a -> Either ArithException (a, a)
divMod = pairEither div mod divZero

pairEither f g e x y = case (f x y, g x y) of
  (Right n, Right m) -> Right (n, m)
  _ -> e
```
Rails3.1.3 + Ruby1.9.3-p0でruby-debug19が動かない件

結局、Gemfileをこうすれば動いた。

```ruby
gem 'ruby-debug19' 
gem 'ruby-debug-base19x', '0.11.30.pre4'
```

ruby-debug-base19xは0.11.29ではだめで、30.preである必要があった。
参考1: <http://youtrack.jetbrains.net/issue/RUBY-9418>
参考2: <http://stackoverflow.com/questions/8087610/ruby-debug-with-ruby-1-9-3>
使ってないポートを取得する Python版

[Rubyで実装したやつ](http://qiita.com/items/992)のPython版．サーバのテストでまた必要に…prz

```python
def unused_port():
    import socket

    sock = socket.socket()
    sock.bind(("localhost", 0))
    port = sock.getsockname()[1]
    sock.close()
    return port
```
Pythonにおける例外のメッセージ

e.argsに構築時の情報が入っているので，それを使うのが統一的な方法らしい．Python3からはmessageが消えてるので使うことが出来ない．

Python2 (2.7.1)のExceptionが持ってるメンバ:

```python
['__class__', '__delattr__', '__dict__', '__doc__', '__format__', '__getattribute__', '__getitem__', '__getslice__', '__hash__', '__init__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__unicode__', 'args', 'message']
```

Python3 (3.2.2)のExceptionが持ってるメンバ:

```python3
['__cause__', '__class__', '__context__', '__delattr__', '__dict__', '__doc__', '__eq__', '__format__', '__ge__', '__getattribute__', '__gt__', '__hash__', '__init__', '__le__', '__lt__', '__ne__', '__new__', '__reduce__', '__reduce_ex__', '__repr__', '__setattr__', '__setstate__', '__sizeof__', '__str__', '__subclasshook__', '__traceback__', 'args', 'with_traceback']
```
merge で値も型も右側のhashmapを優先したい

merge は2つのhashmapを合併したhashmapを作る。
同じkeyがあると右側のhashmapの値が優先される。
optionをhashmapで取るようにしてデフォルト値と合わせるときに便利。
値は右側が優先されるが、型は左側が保存される。
これはdefrecordで作った型をmergeしたい時に問題になる。

```clojure
(defrecord Person [a b])
(def person (Person. 1 1))
;=> #cljs.user.Person{:a 1, :b 1}
```

用意したhashmapとmergeしたいが、値も型もpersonの方を優先したい。

```clojure
(merge person {:a 2 :c 2})
;=> #cljs.user.Person{:a 2, :b 1, :c 2} ;; 値は右側が優先され型はPersonのまま。
(merge {:a 2 :c 2} person)
;=> {:a 1, :c 2, :b 1}  ;; 値はpersonが優先されるが、型がPersonじゃなくなる。
```

workaround的な対処だがpersonで挟む。

```clojure
(merge person {:a 2 :c 2} person)
;=> #cljs.user.Person{:a 1, :b 1, :c 2}
```
VIMのsystem()からgit cloneがエラー

VIMからsystem()関数を使って、git cloneをしたいんですが、実行するとtempファイルを作り損ねているのか、
「E484: ファイル "C:\Users\ ...ユーザーのtempフォルダ... \tmp" を開けません」と出てきます。
どこの設定がおかしいんでしょう．．．
.git ディレクトリを除外して find を行えるようにする関数

Git管理してるディレクトリで find を実行すると .git の中身も表示してしまってイラッとくるので

```sh:.zshrc
function git-find() {
   find $1 \( -type d -name '.git' -prune \) -or \( $*[2,-1] -print \)
}

function git-find0() {
   find $1 \( -type d -name '.git' -prune \) -or \( $*[2,-1] -print0 \)
}
```

もっとスマートな方法があるような気もする……
protocolで可変個引数は取れない

```clojure
(defn f [x & xs] (apply some-function x xs))
```

みたいにprotocolで可変個引数(variadic arity)は取れない。

```clojure
(defprotocol foo
  (bar [f])
  (baz [f & gs]))
```

protocolは低レベルな仕組みの提供を目的としているかららしい。

[Do clojure protocols allow one to have a variadic method the way funcions do (with an ampersand)? - Stack Overflow](http://stackoverflow.com/questions/5401378/do-clojure-protocols-allow-one-to-have-a-variadic-method-the-way-funcions-do-wi)
CSSでfloatをかけた2カラムレイアウトを縦に並べたいのだが、ズレる。

いまちょっと困っているところ。

左右の2カラムからなり、右カラムはいくつかのボックスに分かれているレイアウトを作っている。
その際、単純にfloat:leftとrightで左右に配置しているのですが、floatは横に並べようとするため、
左カラム幅が少ないとき複数ボックスからなる右カラムがずれてしまう。

↓こんなかんじ。rightのboxをタテに並べたいのだが横に回り込んでしまう。
https://img.skitch.com/20120108-j5j4h2bdycmw9xfgak7dr8kbpu.jpg

簡略化した構造とCSSは以下の通り。

```html
<body>
  <div id="content">
    <div id="left_content">
      <div class="box">
        left
      </div>
    </div>
    <div id="right_content">
      <div class="box">
        right-1
      </div>
      <div class="box">
        right-2
      </div>
      <div class="box">
        right-3
      </div>
    </div>
  </div>
</body>
```

```css
#content {
  position: relative;
  width: 1020px;
  margin: auto auto;
  padding: 20px 0 0;
}
#left_content .box {
  float: left;
  width: 750px;
  border: 1px solid #C5D5DD;
  padding: 10px;
}
#right_content .box {
  float: right;
  width: 200px;
  border: 1px solid #C5D5DD;
  margin-bottom: 20px;
  padding: 10px;
}
```

強引に解決するなら左カラムのmin-heightを定義すればよいとは思うのだが、
右カラムに含まれるボックスの高さはある程度動的に変わる可能性があるため、CSSで解決できる問題であればそうしたい。
setTimeoutで処理待ち

一定時間処理を待たせたいときはsetTimeoutが使える。

```js:setTimeout.js
var runTime = 1000;
$("runner").animate({left: "350px"}, runTime); // runTime時間分かけた何らかの処理
setTimeout(function(){
	alert("完了");
}, runTime); // runTime時間分処理を待つ
```
Ruby でハッシュテーブルを実装する

ハッシュテーブルというデータ構造について理解するために書いた.

ここを参考に.
http://www.geocities.jp/ky_webid/algorithm/014.html

```ruby:hash_table.rb
# coding: utf-8
class HashTable
  class Bucket
    attr_reader :key, :value, :next_cell

    def initialize(key, value, next_cell = nil)
      @key, @value, @next_cell = key, value, next_cell
    end
  end

  TABLE_SIZE = 10

  def initialize
    @table = Array.new(TABLE_SIZE)
  end

  def []=(key, value)
    raise '既に存在するキーです' unless self[key].nil?

    hash_key = hash(key)
    cell = Bucket.new(key, value, @table[hash_key])
    @table[hash_key] = cell
  end

  def [](key)
    hash_key = hash(key)
    cell = @table[hash_key]
    while cell do
      return cell.value if cell.key == key
      cell = cell.next_cell
    end
  end

  private
  def hash(key)
    key % TABLE_SIZE
  end
end
```

```ruby:hash_table_spec.rb
# coding: utf-8
require './hash_table'

describe HashTable do
  let(:table) { HashTable.new }

  context 'キーに値が存在しないとき' do
    subject { table[0] }
    it { should be_nil }
  end

  context 'キーに値が存在するとき' do
    before { table[0] = :foo }
    subject { table[0] }
    it { should == :foo }
  end

  context '既に値が存在するキーにもう一度値をセットしたとき' do
    before { table[0] = :foo }
    it 'エラーを投げる' do
      proc { table[0] = :bar }.should raise_error
    end
  end

  context 'ハッシュが競合するキーに値をセットしたとき' do
    before do
      table[0] = :foo
      table[10] = :bar
    end

    it { table[0].should == :foo }
    it { table[10].should == :bar }
  end
end
```

データ構造がどういう風になっているか, pp で示してみる.

```ruby:test.rb
require './hash_table'
require 'pp'

ht = HashTable.new
ht[0] = :foo
ht[1] = :bar
ht[10] = :baz # 0 とハッシュが競合

pp ht
```

```
#<HashTable:0x007fa0c282cbd8
 @table=
  [#<HashTable::Bucket:0x007fa0c282ca98
    @key=10,
    @next_cell=
     #<HashTable::Bucket:0x007fa0c282cb38 @key=0, @next_cell=nil, @value=:foo>,
    @value=:baz>,
   #<HashTable::Bucket:0x007fa0c282cae8 @key=1, @next_cell=nil, @value=:bar>,
   nil,
   nil,
   nil,
   nil,
   nil,
   nil,
   nil,
   nil]>
```
git merge で常に --no-ff

```sh
# master 上で git merge するときは常に --no-ff
git config branch.master.mergeoptions "--no-ff"
# git merge するときは常に --no-ff(1.7.6以降)
git config --global merge.ff false

## あわせて設定しておくと吉
# master 上で git pull するときは常に rebase
git config branch.master.rebase true
# git pull するときは常に rebase(1.7.9以降)
git config --global pull.rebase true
# git pull するときは常に rebase(1.8.5以降)
git config --global pull.rebase preserve
```
pull のときは常に rebase する

`git pull` のときいちいち `git pull –rebase` ってするのが面倒なので

```sh
# master 上で git pull するときは常に rebase
git config branch.master.rebase true

# 全ブランチで rebase を使う
git config --global branch.autosetuprebase always

# 全ブランチで rebase を使う(1.7.9以降)
git config --global pull.rebase true

# 全ブランチで rebase を使う(1.8.5以降)
git config --global pull.rebase preserve

# 全ブランチで rebase を使う(2.22以降)
git config --global pull.rebase merges
```
PHPでロードアベレージのログを取るワンライナーv2

```bash
php -r "echo date('Y-m-d H:i:s'), ', ', vsprintf('%01.2f, %01.2f, %01.2f', sys_getloadavg()), PHP_EOL;" >> /var/log/uptime.log;
```

* ver 1 : http://qiita.com/items/1330
[memo] 『二平方の定理』の素数調査

とあるブログで『二平方の定理』というものを見て、面白いなぁと思った
のですが、手計算だと面倒だったのでスクリプトで該当素数を一覧表示。

`ruby two_square_theorem.rb [調査限界値（省略時：257）]`

```ruby:two_square_theorem.rb 
# coding: UTF-8
require "prime"

def theorem?
  lambda { |n|
    Prime.prime?(n, Prime::EratosthenesGenerator.new) && n % 4 == 1
  }
end

def quadrable
  lambda { |n|
    v = Math.sqrt(n)
    [ v == v.floor.to_f, v.to_i ]
  }
end

def prover
  squares = {}
  lambda { |n| 
    1.upto(Math.sqrt(n/2)) { |x|
      squares[x] ||= (x ** 2)
      res, y = quadrable[ n - squares[x] ]
      return [x, y] if res
    }
    return nil
  }
end

def output(args = nil, &blk)
  blk && blk[args]
end

if __FILE__ == $0

  n = ( ARGV.shift || 257 ).to_i
  
  case n
  when theorem?
    puts output( prover[n] || output { puts "#{n} is not resolved."; nil } || exit(0) ) { |x, y| 
      print "[ #{n} = #{x}^2 + #{y}^2 = #{x**2} + #{y**2} ] : "
      n == x**2+y**2
    } ? "OK" : "NG"
  else
    output { puts "#{n} is not (4n+1)'s Prime." }
  end


  puts "\n=== [ List ] ==="
  l = Math.log10(n).ceil
  
  Prime.each(n, Prime::EratosthenesGenerator.new).grep(theorem?).grep(prover).to_enum.with_index(1) { |n, i|
    puts output(prover[n]) { |x, y| 
      xx, yy = x**2, y**2
      fmt = "No. %#{l}d [ %#{l}d = %#{l-1}d^2 + %#{l-1}d^2 = %#{l}d + %#{l}d ] : "
      print fmt % [ i, n, x, y, xx, yy ]
      n == xx + yy
    } ? "OK" : "NG"
  }

end
```
- - -
**実行例**

`ruby theorem.rb`

```
[ 257 = 1^2 + 16^2 = 1 + 256 ] : OK

=== [ List ] ===
No.   1 [   5 =  1^2 +  2^2 =   1 +   4 ] : OK
No.   2 [  13 =  2^2 +  3^2 =   4 +   9 ] : OK
No.   3 [  17 =  1^2 +  4^2 =   1 +  16 ] : OK
No.   4 [  29 =  2^2 +  5^2 =   4 +  25 ] : OK
No.   5 [  37 =  1^2 +  6^2 =   1 +  36 ] : OK
No.   6 [  41 =  4^2 +  5^2 =  16 +  25 ] : OK
No.   7 [  53 =  2^2 +  7^2 =   4 +  49 ] : OK
No.   8 [  61 =  5^2 +  6^2 =  25 +  36 ] : OK
No.   9 [  73 =  3^2 +  8^2 =   9 +  64 ] : OK
No.  10 [  89 =  5^2 +  8^2 =  25 +  64 ] : OK
No.  11 [  97 =  4^2 +  9^2 =  16 +  81 ] : OK
No.  12 [ 101 =  1^2 + 10^2 =   1 + 100 ] : OK
No.  13 [ 109 =  3^2 + 10^2 =   9 + 100 ] : OK
No.  14 [ 113 =  7^2 +  8^2 =  49 +  64 ] : OK
No.  15 [ 137 =  4^2 + 11^2 =  16 + 121 ] : OK
No.  16 [ 149 =  7^2 + 10^2 =  49 + 100 ] : OK
No.  17 [ 157 =  6^2 + 11^2 =  36 + 121 ] : OK
No.  18 [ 173 =  2^2 + 13^2 =   4 + 169 ] : OK
No.  19 [ 181 =  9^2 + 10^2 =  81 + 100 ] : OK
No.  20 [ 193 =  7^2 + 12^2 =  49 + 144 ] : OK
No.  21 [ 197 =  1^2 + 14^2 =   1 + 196 ] : OK
No.  22 [ 229 =  2^2 + 15^2 =   4 + 225 ] : OK
No.  23 [ 233 =  8^2 + 13^2 =  64 + 169 ] : OK
No.  24 [ 241 =  4^2 + 15^2 =  16 + 225 ] : OK
No.  25 [ 257 =  1^2 + 16^2 =   1 + 256 ] : OK
```
make_unique

std::make_shared と同じような感じで make_unique を作ってみた．

```cpp:make_shared.cpp
#include <memory>

template<class T, class... Args>
inline std::unique_ptr<T> make_unique( Args&&... args )
{
    return std::unique_ptr<T>( new T( std::forward<Args>(args)... ) );
}

// Usage is below

struct X {
    int x,y;
    X(int x, int y) : x(x), y(y) {}
};

int main()
{
    auto x_ptr = make_unique<X>(3,5); // the same as "std::unique_ptr<X> x_ptr(new X(3,5));"
    return 0;
}
```
jVi の設定

Netbeans プラグイン jVi をインストール後にとりあえずした設定。

* General -> 'number' を チェック（行番号を表示）
* Buffer Modifications -> 'backspace' を 2 に設定（バックスペースで改行および挿入部分を超えて削除）
* Buffer Modifications -> 'shiftwidth' でインデント幅を設定
2つの基準で大小判断

date、idの順で大小を決定する Comparator。
もっとシンプルにできそうでできない。

```clojure
(fn [a b]
  (let [a-date (:date a)
        b-date (:date b)]
    (if (= a-date b-date)
      (< (:id a) (:id b))
      (< a-date b-date))))
```
全角文字を半角二文字分として扱うStringの拡張

こんな感じで良いのかな。
車輪再発明してる気がするが、車輪が見当たらなかった...。

```ruby
class String
  def length_as_half_chars
    res = 0
    self.split(//).each do |v|
      res += v.bytesize > 1 ? 2 : 1
    end
    return res
  end

  def get_half_count n
    return nil unless n >= 0
    str = ""
    self.split(//).each do |v|
      str += v; n -= v.bytesize > 1 ? 2 : 1
      break if n <= 0
    end
    return str
  end
end
```
CoffeeScriptでnamespace的なことをする

CoffeeScriptでは、namespaceは自分で実装しろとのことなのでやってみた。

# こういう関数を用意しておいて
```coffeescript
namespace = (namespace, fn) ->
	klass = fn()
	
	tokens = namespace.split('.')
	
	here = window
	
	for token in tokens
		here[token] ?= {}
		here = here[token]
	
	here[klass.name] = klass
```

# インチキだけど、CLIだとwindowがないからb

```coffeescript
Foo = {}
window = {}
window.Foo = Foo
```

# 普通のクラスはこんなかんじ

```coffeescript
namespace 'Foo', -> class Hoge
	doSomething: ->
		console.log('Hoge class method')
```

# CoffeeScriptのextendsを使って継承する場合

```coffeescript
namespace 'Foo', -> class HogeChild extends Foo.Hoge
	doSomething: ->
		console.log('HogeChild class method calls:')
		super()
```

# よんでみる

```coffeescript
hoge = new Foo.Hoge()
hoge.doSomething()

hogeChild = new Foo.HogeChild()
hogeChild.doSomething()
```

```
$ coffee Class.coffee 
Hoge class method
HogeChild class method calls:
Hoge class method
```
浮動小数点型を16進数表示

あまり使う機会はないが覚えておくと役に立つかも。
float型などのbit表現をprintfで確認したい時は、一度unionでキャストしてから表示する。

``` c
#include <stdio.h>
#include <stdint.h>

int
main()
{
	printf("%08x\n", ((union {float f; uint32_t ui;})((float)1.00)).ui);
}
```

出力は「3f800000」となり、IEEE754に従っていることが確認できる。
cakeコマンドでCoffeeScriptをひとつのjsにまとめる

ビルドをプログラミングした ```Cakefile``` ファイルを用意して、```cake``` コマンドでいつでもビルドできるようにしておくと大変便利。この例は、foo.coffee, bar.coffee, baz.coffeeをbuild.jsにコンパイルするものです。

```coffeescript:Cakefile
util = require('util')
exec = require('child_process').exec

# 設定
SOURCE_DIR = './source'
TARGET_DIR = './build'
TARGET_FILENAME = 'build.js'

#コンパイルするファイル群
files = [
	'foo.coffee'
	'bar.coffee'
	'baz.coffee'
]

# タスクの登録
task 'build', 'CoffeeScriptをまとめてひとつのJavaScriptにします', (options) ->

	# ファイルを構成する
	util.log('まとめるファイルを構成します')
	fileList = []
	
	for filename, index in files
		file = SOURCE_DIR + '/' + filename
		fileList.push(file)
		util.log("#{index + 1}) #{file}")
	
	fileList = fileList.join(' ')

	# コンパイルオプション
	option = "-b -cj #{TARGET_DIR}/#{TARGET_FILENAME} #{fileList}"

	# コンパイル実行
	util.log('コンパイルします')
	exec "coffee #{option}", (error, stdout, stderr) -> 
		
		util.log(error) if error
		util.log(stdout) if stdout
		util.log(stderr) if stderr
		
		if error
			util.log('失敗しました')
		else
			util.log('成功しました')
```

# 使い方とか

```cake``` を叩くと、Cakefileが提供しているタスクの一覧が確認できます。

```text
^_^ (suinair:~/Desktop/project)
* tree .
.
├── Cakefile
├── build
└── source
    ├── bar.coffee
    ├── baz.coffee
    └── foo.coffee

2 directories, 4 files

^_^ (suinair:~/Desktop/project)
* cake
Cakefile defines the following tasks:

cake build                # CoffeeScriptをまとめてひとつのJavaScriptにします

^_^ 3 hits! (suinair:~/Desktop/project)
* cake build
27 Jan 08:47:17 - まとめるファイルを構成します
27 Jan 08:47:17 - 1) ./source/foo.coffee
27 Jan 08:47:17 - 2) ./source/bar.coffee
27 Jan 08:47:17 - 3) ./source/baz.coffee
27 Jan 08:47:17 - コンパイルします
27 Jan 08:47:18 - 成功しました

^_^ 4 hits! (suinair:~/Desktop/project)
* tree .
.
├── Cakefile
├── build
│   └── build.js
└── source
    ├── bar.coffee
    ├── baz.coffee
    └── foo.coffee

2 directories, 5 files
```
Redisに登録されているキー一覧の取得方法

```
keys *
```

```
redis 127.0.0.1:6379> keys *
(empty list or set)
redis 127.0.0.1:6379> set hoge1 hoge
OK
redis 127.0.0.1:6379> set hoge2 hoge
OK
redis 127.0.0.1:6379> set fuga aaaaaaaaaaaaaaa
OK
redis 127.0.0.1:6379> keys *
1) "fuga"
2) "hoge1"
3) "hoge2"
```

http://stackoverflow.com/questions/5252099/redis-command-to-get-all-available-keys
Redisさんのリストのindexが0始まりの件

```
redis 127.0.0.1:6379> rpush hoge_list hoge1
(integer) 1
redis 127.0.0.1:6379> rpush hoge_list hoge2
(integer) 2
redis 127.0.0.1:6379> rpush hoge_list hoge3
(integer) 3
redis 127.0.0.1:6379> rpush hoge_list hoge4
(integer) 4
redis 127.0.0.1:6379> rpush hoge_list hoge5
(integer) 5
redis 127.0.0.1:6379> lrange hoge_list 0 100
1) "hoge1"
2) "hoge2"
3) "hoge3"
4) "hoge4"
5) "hoge5"
redis 127.0.0.1:6379> lset hoge_list 1 hoge1-modified
OK
redis 127.0.0.1:6379> lrange hoge_list 0 100
1) "hoge1"
2) "hoge1-modified"
3) "hoge3"
4) "hoge4"
5) "hoge5"
```

```lrange``` でリストを出すと、番号が１始まりだけど、これは行番号みたいなものっぽくて、実際のリストは０始まりで、なんか紛らわしい。redisのGUIクライアントとかあるのかな？
lime.CanvasContextのつかいかた


```javascript
    var sprite = new lime.CanvasContext();
    sprite.draw = function(ctx) {
        ctx.fillStyle = "#123456";
        ctx.beginPath();
        ctx.moveTo(0, 0);
        ctx.lineTo(100, 0); 
        ctx.lineTo(100, 100);
        ctx.lineTo(0, 100);
        ctx.closePath();
        ctx.fill();
    };
```

という感じで、デフォルトだとdrawにはgoog.nullFunctionが入っているのでそれを上書きするとCanvas2DContextが渡されるので好きにやれば良い。
[0,0.1..1.0] != (map (/ 10) [0..10]) ?

IRC の #Haskell に貼った小ネタ

QuickCheck 用に aribitrary を実装する際などに，本当に [0,0.1..1.0] となる数のリストが欲しいのであれば，そのまま 小数のリテラルを使うのではなく，整数のリストを map (/ 10) で割ると期待通りの値が取れるよ，というお話

***
if you wants number list of `[0,0.1..1.0]` , not use it but `map (/ 10) [0..10]` .

``` haskell:numberliteral-is-liar.hs
-- Is List Literal with Number liar ?
-- 
-- ;-)
--
-- This Sample Code Depend on test-framework, and QuickCheck 2
-- try this
-- cabal install test-framework
-- cabal install test-framework-th
-- cabal install test-framework-quickcheck2
-- cabal install QuickCheck
-- runhaskell numberliteral-is-liar.hs

{-# LANGUAGE TemplateHaskell #-}

module Main ( main ) where

import Test.Framework.TH
import Test.Framework
import Test.Framework.Providers.QuickCheck2
import Test.QuickCheck

main = $(defaultMainGenerator)


contains xs x = any (== x) xs

fixedList = map (/ 10) [1..10]

-- Do you expect to pass this test property ?
prop_floating_number_list =
  forAll ( elements [0,0.1..1.0] ) $ contains fixedList

-- ;-)
prop_true_arbitrary_value =
  forAll ( fmap (/ 10) $ elements [1..10] ) $ contains fixedList

-- Why? try ghci ;-)
-- > map (/ 10) [1..10]
-- > [0,0.1..1.0]
```
DBの制約に違反する値を与えた時にSequelが例外を投げるのを抑制する

## DBによる制約 (not null)

```ruby
Sequel.migration do
  up do
    create_table :users do
      primary_key :id
      String :name, null: false
    end
  end

  down do
    drop_table :users
  end
end
```

こんなかんじで users.name について not null 制約をかける。

## Sequelによる制約

するとSequelが例外 (Sequel::InvalidValue) を投げる。

```ruby
class User < Sequel::Model; end

User.new(name: nil) # -> Sequel::InvalidValue
```

## 対処

特にウェブ・アプリケーションなどでこの強い制約は扱いづらいので例外の発生を抑制する。

```ruby
# RailsとかPadrinoだと config/database.rb あたりにでも
Sequel::Model.raise_on_typecast_failure = false
```

DBに施された制約 (この例だと not null 制約) は残ったままで、Sequel::Modelによる制約 (!= 検証) がなくなった状態になる。

## 検証 (validation, != 制約, constraint)

空文字列も含めた「空の値」ではないことを求めるよりリッチで柔軟な検証として validates_presence が使えるので、それを使う。

```ruby
class User
  def validate
    validates_presence :name
  end
end

User.new.valid? # -> false
```

## 余談

SequelはActiveRecordと比べてよりRDBに対してローレベルな操作ができる。(check制約などを付与するのも簡単)
それでいてバックエンド剥き出しではなくきちんと抽象化されている。 (Rubyへ落としこまれている)

ActiveRecordをはじめとするRailsプロダクトは規約を外れると使いづらさが極端に増すことでゆるやかな洗脳を仕掛けることで有名で、それはRubyに近いところがある。
それはそれでソフトウェア開発における啓蒙的アプローチとして妥当なのだけど、勧められるものを蹴ってまで規約を外れなきゃいけないケースは少なくないわけで、そういったケースのための一手として、たとえばSequelが使えるとおもう。

ざざっとコードを読んだかぎり、とても筋がいいとおもう。センスがいいとも言う。
GNU Global のタグファイル自動更新

Emacsで日々コードと戦っている諸氏は、当然 GNU Global のタグファイルを作ってEmacsから便利に使っていることかと思います。まだの人は急げ http://d.hatena.ne.jp/aduka/20090308/1236493524

そのような諸氏におかれましては、下記のような emacs lisp を .emacs などに書いておくことで、現在編集しているプロジェクトのタグファイルをファイル保存時に自動で更新するようにできます。

```.emacs.el
(defun my-c-mode-update-gtags ()
  (let* ((file (buffer-file-name (current-buffer)))
	 (dir (directory-file-name (file-name-directory file))))
    (when (executable-find "global")
      (start-process "gtags-update" nil
		     "global" "-uv"))))

(add-hook 'after-save-hook
	  'my-c-mode-update-gtags)
```

## 中身の説明

`global -uv` を実行すると、カレントディレクトリからルートにさかのぼって GTAGS などのタグファイルを検索し、見つかったらタグファイルを更新してくれます。このコマンドを、ファイル保存のフックから起動しているだけです。
MacにRedisさんをインストールする

memcachedよりよさそうなKVSのRedisをHomebrewを使ってインストールする。

```
$ brew update
$ brew install redis
```

```text
Error: Failed executing: make -C src 
If `brew doctor' does not help diagnose the issue, please report the bug:
    https://github.com/mxcl/homebrew/wiki/checklist-before-filing-a-new-issue
```

エラー出て、brew doctor で調べてって言われた。

```
$ brew doctor redis
```
```text
We couldn't detect gcc 4.2.x. Some formulae require this compiler.
NOTE: Versions of XCode newer than 4.2 don't include gcc 4.2.x.

==> /usr/bin occurs before /usr/local/bin
This means that system-provided programs will be used instead of those
provided by Homebrew. This is an issue if you eg. brew installed Python.

Consider editing your .bashrc to put:
  /usr/local/bin
ahead of /usr/bin in your PATH.
Some "config" scripts were found in your path, but not in system or Homebrew folders.

`./configure` scripts often look for *-config scripts to determine if software packages
are installed, and what additional flags to use when compiling and linking.

Having additional scripts in your path can confuse software installed via Homebrew if
the config script overrides a system or Homebrew provided script of the same name.

/Applications/MAMP/Library/bin
    curl-config freetype-config libmcrypt-config libpng-config libpng15-config sablot-config xml2-config xslt-config yaz-config
```

/usr/local/bin を /usr/bin より前にしてって言われたので、.bashrc で $PATH の順番を変更。

```
$ brew install redis
```
```text
==> Downloading http://redis.googlecode.com/files/redis-2.4.6.tar.gz
File already downloaded in /Users/suin/Library/Caches/Homebrew
==> make -C src
==> Caveats
If this is your first install, automatically load on login with:
    mkdir -p ~/Library/LaunchAgents
    cp /usr/local/Cellar/redis/2.4.6/io.redis.redis-server.plist ~/Library/LaunchAgents/
    launchctl load -w ~/Library/LaunchAgents/io.redis.redis-server.plist

If this is an upgrade and you already have the io.redis.redis-server.plist loaded:
    launchctl unload -w ~/Library/LaunchAgents/io.redis.redis-server.plist
    cp /usr/local/Cellar/redis/2.4.6/io.redis.redis-server.plist ~/Library/LaunchAgents/
    launchctl load -w ~/Library/LaunchAgents/io.redis.redis-server.plist

  To start redis manually:
    redis-server /usr/local/etc/redis.conf

  To access the server:
    redis-cli
==> Summary
/usr/local/Cellar/redis/2.4.6: 9 files, 460K, built in 3 seconds
```

できた