OmniAICreator/Qiita-1.07M huggingface dataset:
ロードアベレージを上げていって10くらいで安定させるワンライナー

```shell
for i in {0..9}; do nohup `while :; do echo 1 > /dev/null; done;` & done
```
メモメモ
http://d.hatena.ne.jp/japanrock_pg/20110412/1302600276

終了するときは、 ps コマンドでプロセスIDを確認して kill コマンドで1つずつ潰すみたい。
JSDeferredでBackbone.jsのモデル更新を快適に

いまだに参加者が増えなくて大変なBackbone.js Advent Calendarの8日目の記事です．
参加はこちらから！→ http://atnd.org/events/22017

## Backbone.ModelやBackbone.Collectionのsaveやfetch

Backbone.jsで`model.save`や`collection.fetch`が成功/失敗したときの処理は，それらの引数に関数を渡して書きます．

~~~js
collection.fetch({
    data: params,
    success: function(model, res) { 
        // 取得成功時の処理
    },
    error: function(model, res) { 
        // 取得失敗時の処理
    }
});
~~~

しかしこの書き方はあまり良いとは言えません．

- ぱっと見たときにどういう処理が実行されるのかわかりにくい
 - success/errorの順番が上記のように守られていればいいですが，ほかのパラメタが間に入ったり後に付いたりすると流れを追いにくくなる
- fetch/save完了時の処理が大きくなるにつれて，引数部分が長くなっていく
 - コールバックが切り出すほどの大きさでないときは微妙に汚いコードになる…

fetchやsaveは頻繁に利用するので，もうちょっと読みやすい，わかりやすい書き方をしたいところです．

## JSDeferred

ところで[cho45さん](http://subtech.g.hatena.ne.jp/cho45/)が作られた[JSDeferred](http://cho45.stfuawsc.com/jsdeferred/doc/intro.html)(ドメインかっこいい)というライブラリがあります．これは煩雑になりがちな，JavaScriptの非同期処理を直感的な形で書けるようにするものです．

例えばjQuery用の [jsdeferred.jquery.js](https://github.com/cho45/jsdeferred/blob/master/jsdeferred.jquery.js) を利用すると，$.ajaxのsuccess/error処理を以下のように書くことができます．

~~~js
$.ajax({ url: '/foo' })
    .next(function(res) {
        // 成功時の処理
        console.log(res);
    })
    .error(function(e) {
        // エラー時の処理
        console.error(e);
    });
~~~


## Backbone.js & JSDeferred
`Backbone.Model`や`Backbone.Collection`の`save`や`fetch`はいずれも`Backbone.sync`を返し，そして`Backbone.sync`は`$.ajax`を返します．
そこでJSDeferredと組み合わせることで上の`$.ajax`の例と同じようにメソッドチェインの形で成功/失敗時の処理を書くことができます．

~~~js
collection.fetch({ data: params })
    .next(function(response) {
        // 取得成功時の処理
        console.log(response);
    })
    .error(function(e) {
        // 取得失敗時の処理
        console.error(e);
    });
~~~

最初の例よりもずっとわかりやすいですね！

## 注意点
`Backbone.Collection#create`だけは`Backbone.sync`ではなく，作成したモデルを返すためこのように書くことができません．
それ以外のメソッドではDeferredをロードすれば上のように綺麗に書くことができます．


## matome

Backbone.jsに限らずJSDeferredを使うことでJSを綺麗に書けるようになるので，JavaScriptを書く人は一度試してみることを薦めます:)

再度ですが，そろそろネタがないのでBackbone.js Advent Calendarに参加してください!今回みたいにBackbone.jsにちょっと絡んだ程度の内容でもOKです．
Backbone.jsの日本語コンテンツを増やしましょう! http://atnd.org/events/22017
vimでhoge.rbというファイルを新しく作ったとき、ファイルの頭にshebang行を自動的に挿入する。

vimでhoge.rbというファイルを新しく作ったとき、ファイルの頭にshebang行を自動的に挿入する。

```vim
augroup SetShebang
    autocmd! SetShebang
    autocmd BufNewFile *.rb 0put =\"# -*- encoding: UTF-8 -*-\"|$
augroup END
```
xargs で標準入力が空だったら何もしない

>find /hoge/fuga -ctime +30 -type f -print | xargs rm

などしたときに、何もfindの条件にマッチしなかったら、単に引数なしのrmが実行され

>rm: missing operand
>Try `rm --help' for more information.

となる。

こういったエラーを出したくない場合は、--no-run-if-empty を使って

>find /hoge/fuga -ctime +30 -type f -print | xargs --no-run-if-empty rm

としてやると、findの結果が空の場合は、rmが実行されず、エラーも出ない。
NSURLConnectionは一度didFinishLoadingを受けるともう使えない。

NSURLConnectionは一度didFinidhLoadingを受けるともう使えない。

#以下のようなコードはNG
NSURLConnection *connection  = [[NSURLConnection alloc] initWithRequest:[NSURLRequest requestWithURL:targetUrl] delegate:self startImmediately:NO];

connection.start;
connection.start;//→これが駄目
コールバック関数内のthisを束縛する

今回はBackbone.jsが依存するunderscore.jsに関する話題です。
Backbone.jsに限らず、JavaScriptではコールバック関数内でthisがグローバルのwindowを差してしまうため、この問題に対処するために、以下のようにthatやselfといった変数にthisを代入してコールバック内で使うということをすることがあると思います。

```js
function () {
  var that = this;
  someFunc(function () {
    this; // window
    that; // 外側のthis
  });
}
```

これでもいいですが、若干面倒ですね。こんな時、ECMAScript5で導入されたbindを使えば

```js
function () {
  someFunc(function () {
    this; // 外側のthis
  }.bind(this));
}
```

という風に書くことができますが、bindはブラウザによってはまだ実装されていなかったりするので、使うのを躊躇してしまいます。こういう時はunderscoreに定義されているbindを使えます。

```js
function () {
  someFunc(_.bind(function () {
    this; // 外側のthis
  }, this));
}
```

##underscoreの便利関数を使う場合
underscoreにはbindだけでなくmapやforEachなどのECMA Script 5の関数を模倣した関数がいくつか定義されています。実際、これらは内部でネイティブで実装されていればそちらを使用し、なければJavaScriptで模倣するように実装されています。
で、たとえばmapを使う場合でも、コールバックにthisを渡すには上記の様なthatやbindを使う必要がありますが、これらのunderscoreの関数群は関数コンテキストを渡すことができます。言葉で説明するとよくわかりませんが、つまりこういうことです。

```js
function () {
  _.map([1,2,3], function (s) {
    this; // 外側のthis
  }, this);
  _.map([1, 2, 3], function (s) {
    this; // window
  });
}
```

ここではmapを使用していますが、他の関数も同様にコールバック関数の次にコンテキストを渡すことができるので、上手に使えば、コードを綺麗に保つことができます。
もちろん、いかなる場合でもthatやselfを用いる、というのでも問題ないでしょう。
NSURLConnectionはRunLoopしないと通知がこない。

NSURLConnectionで非同期通信を行う際の注意点。

NSURLConnectionはRunLoopしないと、didReceiveResponseなどの通知を受け取ることが出来ません。
メインスレッドだと、１つRunLoopが走っているので通知がくるんですね。
iPhoneDeveloperなかたがたには当たり前かもしれないですが。私ははまったので、念のため。
dygraph.js を使って関数を描画

ここでいう関数とは、数学の関数のこと。

```html:headタグ内
<script type="text/javascript" src="js/dygraph-combined.js"></script>
<script type="text/javascript">
  function plot(graphArea, fromX, toX, fn) {
    var graph = document.getElementById(graphArea);
    var width = parseInt(graph.style.width);
    var xs = 1.0 * (toX - fromX) / width;

    var data = [];
    for (var i = 0; i < width; i++) {
      var x = fromX + i * xs;
      var y = fn(x);
      var row = [x];
      if (y.length > 0) {
        for (var j = 0; j < y.length; j++) row.push(y[j]);
      } else {
        row.push(y);
      }
      data.push(row);
    }

    g = new Dygraph(graph, data);
  }
</script>
```

```html:bodyタグ内
<div id="graph" style="margin: 10px auto; width:512px; height:400px;"></div>
<script type="text/javascript">
  plot("graph", -1.5, 1.5, function(x){
    return Math.cos(x);
  });
</script>
```

[これを使ってグラフを描くと…](http://yuki24.github.com/heart_drawn_on_js/)
ActiveRecordであるidとは別のidのレコードをランダムに1件取得する

ActiveRecordを継承したItemモデルで、あるidとは別のidのレコードをランダムに1件取得する、次のようなnamed scopeを定義したかったが、

```ruby
Item.other_item(1)
```
named scopeにActiveRecord::Relation#sampleが書けないので、

```ruby
class Item < ActiveRecord::Base
  default_scope order("id")
  scope :other_items, lambda { |my_id| where("id != ?", my_id) }
  def self.other_item(id)
    self.other_items(id).sample
  end 
end
```

というクラスメソッドにして回避した。より上手い書き方があれば知りたい。
（itemsテーブルをほぼ全件取得することは問題ないという前提）
Pythonでconstant 

Pythonで、CやC++のconst定数のような変更不可能なオブジェクトを作る方法はないでしょうか。
Python CookBookを見てconstを導入したところ、再代入は防げているのですが、辞書自体が操作可能なので期待している動きをしません。

オブジェクトの状態自体も変更不可にしたいです。
汎用的で良い方法があれば教えてください。

Cookbookに載っていたコード

```ruby:qiita.rb
puts 'The best way to log and share programmers knowledge.'
```

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

class _const(object):
    class ConstError(TypeError):pass
    def __setattr__(self, name, value):
        if name in self.__dict__:
            raise self.ConstError("Can't rebind const(%s)" % name)
        self.__dict__[name] = value
        def __delattr__(self, name):
            if name in self.__dict__:
                raise self.ConstError("Can't unbind const(%s)" % name)
            raise NameError(name)

import sys
sys.modules[__name__] = _const()
```

テストプログラム

```python:const_test.py
# -*- coding: utf-8 -*-
import const

# 最初の代入はOK
const.dic = {'a':'b'}

#　これはエラー　
# const.dic = {'c':'d'}

# 追加出来る
const.dic['c'] = 'd'

# 削除できる
del const.dic['a']

print const.dic
```
ヘッダー以外でメソッドを宣言する

// 特に必要ない場合には、メソッドはヘッダーに書かない方が良い
// そんなときはソースファイルで宣言すれば良い

// HogeController.m
@interface HogeController( )
- (void)_method
@end

@implementation HogeController
...
enumerator パッケージの Iteratee (>>=) の実装

Iteratee の Monad インスタンス定義の (>>=) のナイーブな実装は以下のようになります。

	instance Monad m => Monad (Iteratee a m) where
	  m >>= f = Iteratee $ runIteratee m >>= \r1 ->
	      case r1 of
	        Continue k -> return (Continue ((>>= f) . k))
	        Error err -> return (Error err)
	        Yield x (Chunks []) -> runIteratee (f x)
	        Yield x extra -> runIteratee (f x) >>= \r2 ->
	          case r2 of
	            Continue k -> runIteratee (k extra)
	            Error err -> return (Error err)
	            Yield x' _ -> return (Yield x' extra)

この実装は比較的理解しやすいので好きなのですが、これには space leak があるそうで、
enumerator 0.4.7 (bzr revno 98) で不動点コンビネータを使った以下のような定義に修正されたそうです。

	instance Monad m => Monad (Iteratee a m) where	
	  m0 >>= f = ($ m0) $ fix $
	    \bind m -> Iteratee $ runIteratee m >>= \r1 ->
	      case r1 of
	        Continue k -> return (Continue (bind . k))
	        Error err -> return (Error err)
	        Yield x (Chunks []) -> runIteratee (f x)
	        Yield x extra -> runIteratee (f x) >>= \r2 ->
	          case r2 of
	            Continue k -> runIteratee (k extra)
	            Error err -> return (Error err)
	            Yield x' _ -> return (Yield x' extra)

前者の実装で space leak が起こり、後者では大丈夫な理由が良くわからないので誰か教えてください。

なんとなく

    fix f = f (fix f)

では space leak が起こり

    fix f = let x = f x in x

では起こらない理由と同じなのかなと思っていますが……
cron + uptimeでロードアベレージのログを取るやつ

```bash
echo `date +"%Y-%m-%d %H:%M:%S"` `uptime | awk '{print $10, $11, $12}'` >> /var/log/uptime.log
```
* awk 部分は OS によって調整する必要あり。

uptimeのバージョン

```bash
# uptime -V
procps version 3.2.7
```
Backbone.jsでモデルとビューを分離しやすくするためにadd/resetイベントを活用

# Backbone.js Advent Calendar 6日目!
参加者が増えなくてなかなか大変…簡単な内容でも良いので日本語コンテンツ増加のためにも使ったことある人は参加してください！ http://atnd.org/events/22017


この記事ではBackbone.jsのmodel/collectionのイベントとして用意されているイベントの中でも，綺麗に書くために使いこなしたい`add`と`reset`について
Qiitaでの利用例を交えつつ説明していきます．

## 余談
Backbone.jsのアイコンが変わってますね．背骨でなくなった．
![](http://documentcloud.github.com/backbone/docs/images/backbone.png)

## 本題
Backbone.jsでは

```js
model.bind('hoge', function () {
    alert('hogeされた');
});
model.trigger('hoge');  // => alert('hogeされた');
```

のように自分で決めたイベントにコールバックを登録し，発火させる仕組みがあります．
このように自分で登録していってもいいのですが，よく使われそうなものについてはBackbone.ModelやBackbone.collectionに組込みで用意されています．
今回はその中でも重宝する`add`及び`reset`イベントについて説明します．これらを適切に利用すると，サーバーからのデータ取得時やユーザーの行動によってデータが追加されたとき，ビューも合わせて変更するというロジックがシンプルに書けます．


### addイベント
名前の通り，collectionにモデルが追加されたときに発火します．

```js
var items = new Backbone.Collection;

items.bind("add", function(item) {
  alert("New item is added: " + item.title);
});

```

ユーザーが新規に投稿したときやサーバーから新しい情報を取得したときなどに便利です．
Qiitaではユーザー投稿したアイテムをストリームへ追加する部分で利用しています．



### resetイベント
`reset`が発火されるメソッドは以下の3つです．

- collection.sort

 - modelの配列を，定義した`comparator`を利用してソートしなおす．
 - Qiitaでは`sort`は利用していません．
- collection.fetch
 - collectionに対応したアイテムをサーバーから取得する．
 - Qiitaでは投稿のページャーで`collection.fetch({data: { before: oldestItemId } })` のように古い投稿を取得しています．
- collection.reset
 - collectionの中身を引数に渡したモデルの配列で置き換える．
 - Qiitaでは最初に表示するアイテム一覧を`collection.reset(<%= @items.to_json %>)`のように設定しています．

いずれもオプションに{silent: true}を渡すと`reset`イベントが発火されるのを防ぐことができます．

### その他
Backbone.jsではこの2つ以外にももさまざまなイベントが組込みで用意されています．[Backbone.jsの組込みイベント一覧](http://documentcloud.github.com/backbone/#FAQ-events)
これらをうまく使えばモデルとビューを適切に分離し，見通しの良いコードが書けるでしょう:)
Mac OS X で Growl が暴走したときに再起動

Skypeとかが新Growlに対応してなくて？たまに暴走する。
冬は膝の上ぽかぽかでいいんだけど健康的じゃないので再起動する。面倒なので自動でする。

適当に cron とかにいれた。

```bash:growl_restart
#!/bin/bash

PID=$(ps ax | grep Growl.app | grep -v grep | awk '{print $1};')
test -z "$PID" && open -j -a Growl && echo "Growl restarted on $(date) :: pid not found ($PID)" >> /tmp/growl_restart.log && exit

CPU_USAGE=$(top -pid $PID -l 2 -s 5 -stats cpu | tail -n1 | cut -d"." -f1)
if test $CPU_USAGE -gt 80
then
    killall Growl
    open -j -a Growl
    echo "Growl restarted on $(date) :: pid=$PID" >> /tmp/growl_restart.log
fi
```

(追記。 cut だと pid の桁数が grep の pid と異なるときうまくとれないから awk に変えた
Redmine で既存のすべてのプロジェクトで特定のモジュールを有効にする

あとから変更したくなったときとか、プラグインいれたあととかで、全プロジェクトの設定画面のモジュールタブをひらいてチェックして送信とかしてられないから多分 MySQL で直接やればいいとおもった。（多分あってる

```
insert into enabled_modules (project_id, name) select distinct project_id, 'issue_extensions' from enabled_modules;
```
制御文字を取り除く方法（改行コードは保持）

```php
<?php
preg_replace('/[\x00-\x09\x0B\x0C\x0E-\x1F\x7F]/', '', $string); // The line feed and carriage return will be saved.
```

ここから拝借:
http://stackoverflow.com/questions/1497885/remove-control-characters-from-php-string
Rails3のroot :toに特定レコードでshowアクション呼び出す記述をしたい

ハッカソンで認証を省略したRailsアプリを作ったとき、
アプリのルート画面をItem(ActiveRecordのモデル)の1レコード目を表示させたかったのだけど、
routes.rbに

```ruby
root :to => item_path(Item.first)
```

みたいな書き方は当然できないわけで(xxx\_pathが、routes.rbから生成されるものだから)、
いろいろ書いてみたがどれもエラーになるので、

```ruby
root :to =>  'items#first'
```

と、いったんitems\_controller.rbに飛ばして、

```ruby
def first
  @item = Item.first
  redirect_to :action => "show", :id => @item[:id]
```

とやって回避した。専用メソッドでリダイレクトするのがイケてないと思う。
Pyramidで遊ぶ

Pyramidチュートリアルで遊んでみました. 
http://docs.pylonsproject.org/projects/pyramid_tutorials/en/latest/single_file_tasks/single_file_tasks.html
そのまま写経するのはつまらないので, DBをMongodbに書き換えてみました.
テンプレートとスタイルシートファイルはチュートリアルと同じ配置にしてあげると動きます.

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

from paste.httpserver import serve
from pyramid.configuration import Configurator
from pyramid.response import Response
from pyramid.events import subscriber, ApplicationCreated, NewRequest
from pyramid.session import UnencryptedCookieSessionFactoryConfig
from pyramid.exceptions import NotFound
from pyramid.httpexceptions import HTTPFound
from mongoengine import connect, Document, StringField, \
     BooleanField
from pyramid.view import view_config
import os

MONGODB_SERVER_HOST = 'localhost'
MONGODB_SERVER_PORT = 27017
MONGODB_SERVER_DATABASE = 'db'

here = os.path.dirname(os.path.abspath(__file__))

#
# Models
#

class Task(Document):
    name = StringField(required=True, max_length=100)
    closed = BooleanField(required=True, default=False)

#
# Views
#

@view_config(route_name='list', renderer='list.mako')
def list_view(request):
    tasks = Task.objects(closed__ne=True)
    return {'tasks': tasks}

@view_config(route_name='new', renderer='new.mako')
def new_view(request):
    if request.method == 'POST':
        if request.POST.get('name'):
            task = Task()
            task.name = request.POST['name']
            task.save()
            request.session.flash('New task was successfully added!')
            return HTTPFound(location=request.route_url('list'))
        else:
            request.session.flash('Please enter a name for the task!')
    return {}

@view_config(route_name='close')
def close_view(request):
    task_id = unicode(request.matchdict['id'])
    Task.objects(id=task_id).update(set__closed=True)
    request.session.flash('Task was successfully closed!')
    return HTTPFound(location=request.route_url('list'))

@view_config(context='pyramid.exceptions.NotFound', renderer='notfound.mako')
def notfound_view(self):
    return {}

@subscriber(ApplicationCreated)
def application_created_subscriber(event):
    connect(MONGODB_SERVER_DATABASE, host=MONGODB_SERVER_HOST, port=MONGODB_SERVER_PORT)

if __name__ == '__main__':
    settings = {
        'reload_all': True,
        'debug_all': True,
        'mako.directories': os.path.join(here, 'templates'),
        }
    session_factory = UnencryptedCookieSessionFactoryConfig('itsaseekreet')
    config = Configurator(settings=settings, session_factory=session_factory)
    config.add_route('list', '/')
    config.add_route('new', '/new')
    config.add_route('close', '/close/{id}')
    config.add_static_view('static', os.path.join(here, 'static'))
    config.scan()
    app = config.make_wsgi_app()
    serve(app, host='0.0.0.0')
```
ダフズデバイルによるループ処理の高速化

配列長に対する(時間)計算量は変わらないが, ループの終了のための比較回数が小さくなるため, 高速化されるらしい.

``` DuffsDevice.js
var iterations = items.length % 8;
var i = items.length - 1;
while (iterations) {
    process(items[i--]);
    iterations--;
}

iterations = Math.floor(items.length / 8);
while (iterations) {
    process(items[i--]);
    process(items[i--]);
    process(items[i--]);
    process(items[i--]);
    process(items[i--]);
    process(items[i--]);
    process(items[i--]);
    process(items[i--]);
    iterations--;
}
```
underscore.js入門

# Backbone.js Advent Calendar 4日目
参加はこちらから! http://atnd.org/events/22017


Backbone.jsはunderscore.jsというものに(唯一)依存しており，利用する場合はunderscore.jsもロードしてやらなければなりません．
ではこのunderscore.jsとは何なのかというと，配列操作やオブジェクト処理に便利な関数群を提供するライブラリです．ざっくり言うと配列や連想配列などがRubyっぽい形で操作できるようになります．

## 使い方
underscore.jsはロードすると`_`を定義します．使い方は以下の2通りです．

- `_`を関数として利用する
 - 例: `_.each(array, function(element) { ... });`
- オブジェクト指向的につかい，対象オブジェクトをラップしてメソッドを利用する
 - 例: `_(array).each(function(element) { ... });`

Rubyに慣れている人ならかなり書き易く感じると思います．
以下いくつか便利な関数の利用方法

### each

```js
_({a:1, b:2, c:3}).each(function(v,k) { console.log("key: " + k + ", value: " + v); })
// key: a, value: 1
// key: b, value: 2
// key: c, value: 3
```

### tap

```js
_([1,2,3]).chain().tap(console.log).map(function(n){ return n * 3; }).value();
// [1, 2, 3] (console.logで表示される)
// [3, 6, 9] (全体の返り値)
```

以上，簡単でしたがunderscore.jsの便利さが伝われば嬉しいです．
その他underscore.jsで提供される関数についてはドキュメントを．http://documentcloud.github.com/underscore/
シェルのコマンドをヒアドキュメントに書いて編集可能にする

コマンドラインでちょっと難しいことをやるとき、一端ファイルにコマンド一覧を書いてから実行することがある。

```
% cat list.txt
mv hoge hoge.txt
mv fuga fuga.txt
% cat list.txt | zsh
```

いちいちファイルに書くのがめんどくさいときはヒアドキュメントでコマンドラインに直接書けばOK。

```
% {cat <<.
mv hoge hoge.txt
mv fuga fuga.txt
.
}
```

これで確認してから、^Pで戻ってシェルで実行する。

```
% {cat <<.
mv hoge hoge.txt
mv fuga fuga.txt
.
} | zsh
```

ヒストリに残るので後から使うのも楽。{ } で囲むのがポイント。
キーボードを表示／非表示


``` java:softKeyBordShowHidden.java
//キーボードを表示させる
EditText et = new EditText(this);
InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.showSoftInput(et, 0);  

//表示されているキーボードをダウンさせる
InputMethodManager mgr = (InputMethodManager) getSystemService(Context.INPUT_METHOD_SERVICE);
mgr.hideSoftInputFromWindow(getCurrentFocus().getWindowToken(), 0);
```
Googleのプログレスバー作ってみた

シェルで実行するとググったときに出るアレがプログレスバーとして表示されます．

```ruby:google_progress.rb
#!/usr/bin/env ruby
# -*- coding: utf-8 -*-

class GoogleProgress

    def initialize m
        @max = m
        @tic = 0
    end

    def +@
        return if @tic >= @max
        @tic += 1
        draw_progress_bar
        puts if @tic == @max
    end

    def reset
        @tic = 0
    end

private

    Default = "\e[0m"
    Blue = "\e[34m"
    Red = "\e[31m"
    Green = "\e[32m"
    Yellow = "\e[33m"

    def google count
        ooo = "o" * count
        "#{Blue}G#{Red}o#{Yellow}o#{ooo}#{Blue}g#{Green}l#{Red}e#{Default}"
    end

    def draw_progress_bar
        oo = @tic*20/@max
        print "\r#{google(oo)} [#{Float(@tic*100)/@max}]"
    end
end

#
# main
#
if __FILE__ == $0 then
    google_progress = GoogleProgress.new 100
    100.times do 
        +google_progress
        sleep 0.1
    end
end
```
『Backbone.jsの1番良いリファレンスを頼む』へのAwesomeな回答を翻訳してみた

Quoraの"What are some good resources for Backbone.js?" のトップ回答がcoolだったので、翻訳して追加して編集してコメントしてメモ。
http://d.hatena.ne.jp/hamhei/20111202/1322814067
『Backbone.jsの勉強に役立つサイトを教えて下さい』への回答

Quoraの"What are some good resources for Backbone.js?" のトップ回答がcoolだったので、翻訳して追加して編集してコメントしてメモ
http://d.hatena.ne.jp/hamhei/20111202/1322814067
多変量テストのための gem を開発中

複数のABテストを同時に行う多変量テストを hacker-friendly な記法で簡単に実装できる gem を開発中。
下記のように記述できる。

```erb:home/index.html.erb
...

<div class="landing-image">
  <% # The first test %>
  <%= select_variation(:landing_page, :btn_color, "red_btn", "green_btn", "blue_btn") do |alt| %>
    <% # alt will be "red", "green" or "blue" %>
    <%= link_to next_page_path, "Next", :class => alt %>
  <% end %>
</div>

...

<div class="content">
  ...

  <% # And the second one. You can also change what template is rendered by doing like this. %>
  <%= select_variation(:landing_page, :explanation, "alts/explain1", "alts/explain2") do |alt| %>
      <%= render :partial => alt %>
  <% end %>
  ...

  <% # You can put as many ab tests as you want in one page! %>
  <%= link_to select_variation(:landing_page, :signup, "Learn more", "Sign up"), signup_path %>
  <% # This is the same as the code below. %>
  <% # select_variation(:landing_page, :signup, "Learn more", "Sign up") do |alt| %>
    <% # link_to alt, signup_path %>
  <% # end %>
  ...

</div>

...

```

### 管理画面のスクリーンショット

![admin interface of rightchoice](http://blog.yukinishijima.net/wp-content/uploads/rightchoice_screeshot.png)
ビューが画面に現れたら処理を実行する

#Backbone.js Advent Calendar 2日目!

勢い良く走り始めたBackbone.js Advent Calendarですが、初日に引き続き2日目もビューに関連する話題です。

##ビューの遅延評価をしたい

Backbone.jsに限らずサービスを高速化するために、遅延評価を行いたい場面は沢山あります。たとえば画像掲示板のシステムを作っていたら、いきなり画像全てを読み込もうとするとサーバにも負荷がかかりますし、何よりユーザが表示しない画像まで読み込むのは無駄です。他にもTwitterのようなタイムラインに対して、一番下までユーザがスクロールしたら自動的に続きを読み込むような処理を行いたい場合もあるでしょう。
という訳でユーザのスクロールをトリガーにしてイベントを発火させられる`Backbone.LazyView`というのを作ってみました。

* [taak84u9/backbone-lazyview - GitHub](https://github.com/taka84u9/backbone-lazyview "taka84u9/backbone-lazyview - GitHub")

###簡単な使い方

`lazyview.js`を読み込むと`Backbone.LazyView`というオブジェクトがBackboneに追加されます。このオブジェクトは`Backbone.View`と全く同じインタフェースを持ちます。唯一の違いは`el`プロパティが指すエレメントがブラウザ上に現れたら`appear`というイベントが発行されることです。
使い方は通常の`Backbone.View`と全く同じです。

```js
var FooLazyView = Backbone.LazyView.extend({
    events: {
        "appear": "appear"
    },
    initialize: function () {
        _.bindAll(this, "appear");
    },
    appear: function () {
        /* ここに処理を書く */
        alert("hoge");
    }
});
```

あとは`FooLazyView`コンストラクタを使ってオブジェクトを生成するだけです。

```js
var view = new FooLazyView({el: $("#foo")});
```

これで`$("#foo")`要素がブラウザに表示された瞬間に`view.appear`が実行されて**hoge**とアラートされます。代わりにimgタグのsrc属性を書き換えたり、Ajaxによる読み込みを行う処理を記述すれば遅延評価の完成です。

##Viewのクラスプロパティを使う

上記だけだと寂しいので、ちょっとした小ネタを紹介します。
例えばBackbone.Viewのrenderメソッド内でunderscore.jsのtemplate機能を使うというのはよくあるパターンだと思いますが、レンダリングの度にjQueryを使ってテンプレートをわざわざ取ってくるのもなんか嫌な感じですよね。こういう場合はクラスプロパティにテンプレートを文字列として保存したくなります。例えばこんな感じに書くかも知れません。

```js
var SomeView = Backbone.View.extend({
    initialize: function () {
        _.bindAll(this, "render");
    },
    render: function () {
        $(this.el).html(_.template(SomeView.template, this.model));
    }
});
SomeView.template = $("#template-of-some-view").html();
```

もちろんこれでも問題ありませんが、下記のように書くこともできます。

```js
var SomeView = Backbone.View.extend({
    initialize: function () {
        _.bindAll(this, "render");
    },
    render: function () {
        $(this.el).html(_.template(SomeView.template, this.model));
    }
}, {  // クラスプロパティになる
    template: $("#template-of-some-view").html()
});
```

テンプレートを動的に選択したり、JSのロード時にDOM上にテンプレートが存在しない場合などは、underscore.jsのmemoizeなどを使ってもいいかも。

```js
var SomeView = Backbone.View.extend({
    initialize: function () {
        _.bindAll(this, "render");
    },
    render: function () {
        $(this.el).html(_.template(SomeView.getTemplate("#template-of-some-view"), this.model));
    }
}, {
    getTemplate: _.memoize(function (q) { return $(q).html() })
});
```
このようにextendメソッドの第二引数に渡されたオブジェクトがクラスプロパティになります。Viewに限らずModelやController、上で紹介したLazyViewでも同様です。
動的に作られる要素にイベントをbindする

# Backbone.js Advent Calendar 1日目!
参加者が増えないと2人で25日回すことになるので，どんどん参加してください:)
http://atnd.org/events/22017
参加方法は，atndで登録したあと，AdventCalendarタグとBackbone.jsタグを付けて投稿してもらえれば，advent calendar用ページに登録します．
http://qiita.com/adcal/backbone

## Backbone.jsのイベント登録
Backboneではイベントを

```js
var myView = Backbone.View.extend({
    events: {
        "click .hello-button": "hello"
    },
    hello: function() {
        alert("hello!");
    }
});
```
のように記述するが，eventsはview作成時にbindされるためこの書き方だと動的に作る要素に対して利用できない．

```js
var myView = Backbone.View.extend({
    initialize: function() {
        $('.hello-button').click(hello);
    },
    hello: function() {
        alert("hello!");
    }
});
```

のように書くという方法もなくはないが，登録イベント数が増えて来るとひどいことになる…


こういう場合は`delegateEvents`を利用する．

```js
var myView = Backbone.View.extend({
    initialize: function() {
        var events = {
            "click .dynamic-hello-button": "hello"
        };
        this.delegateEvents(events);
    },
    hello: function() {
        alert("hello!");
    }
});
```
のように`initialize`の中で`delegateEvents`を利用して登録するといい．
pでdivが囲めない件

p要素はdiv,ulといった所謂（xhtmlで言う所の）「ブロック要素」を子要素に持てないんでしょうか？
pの中にdiv等を入れようとすると、divはpの兄弟要素として扱われてしまうようです。pの中にpを入れた場合も同様。
これはHTML5の仕様でしょうか？それとも過去の遺物？前者だとしたら仕様書のどこに書かれてるんでしょうか？
google maps api V3で複数のマーカーを描画する

```html:
<!DOCTYPE html>
<html>
<head>
<meta name="viewport" content="initial-scale=1.0, user-scalable=no" />
<meta http-equiv="content-type" content="text/html; charset=UTF-8"/>
<title></title>
<link href="http://code.google.com/apis/maps/documentation/javascript/examples/default.css" rel="stylesheet" type="text/css" />
<script type="text/javascript" src="http://maps.googleapis.com/maps/api/js?sensor=false"></script>
<script type="text/javascript" src="http://code.jquery.com/jquery-1.7.1.min.js"></script>
<script type="text/javascript">
  function render() {
    var rows = $("#data").val().split("\n");
    var latlng = new google.maps.LatLng(0,0);
    var cnt = 1;
    var options = {
      zoom: 4,
      center: latlng,
      mapTypeId: google.maps.MapTypeId.ROADMAP
    };
    var map = new google.maps.Map(document.getElementById("map_canvas"), options);
    
    $.each(rows, function() {
      var d = this.split(",");
      latlng = new google.maps.LatLng(d[1],d[0]);
      if(cnt == 1) {
        map.setCenter(latlng);
      }
      /* V3では map.addOverlay(marker) は使わないらしい */
      var marker = new google.maps.Marker({
        position: latlng, 
        map: map,
      });
      cnt++;
    });
  }
</script>
</head>
<body>
  <textarea id="data" cols="80" rows="10">
141.3478394,43.0583725,61.24,Thu Jun 09 18:12:29 2011
142.3478394,43.0583725,61.24,Thu Jun 09 18:12:29 2011
143.3478394,43.0583725,61.24,Thu Jun 09 18:12:29 2011
  </textarea>
  <input type="button" value="submit" onclick="render();" />
  <div id="map_canvas"></div>
</body>
</html>
```
億単位のデータを扱うDBは何が人気でしょうか？

例えばユーザーが別のユーザーのページにアクセスした日にち等、億単位になりうるデータの保存方法として、皆さんは何を使われているのでしょうか？
候補としては下記をイメージしています。
・MySQLで日付順やユーザーID順でテーブルを分割して保存
・MongoDB
・テキストでアクセスログに保存しておいて、あとで解析
記事：Androidアプリ開発者なら押さえておきたいJavaセキュアコーディングの意味と効果

あとで読む。
「Androidアプリ開発者なら押さえておきたいJavaセキュアコーディングの意味と効果
Javaセキュアコーディング入門（1）」
http://codezine.jp/article/detail/6285
XOOPSのカスタムブロックに64KB以上のコンテンツを登録する方法

* XOOPSのカスタムブロックは64KBまでしか保存できない
* HTMLコンテンツは軽く64KB超えることがある

そんなときの対処法

1. おっきいコンテンツのHTMLを ```block_contents_hoge.html``` という名前で保存（hogeの部分は好きな文字列に読み替えてください）
1. /uploadsに```block_contents_hoge.html```をアップロード
1. ブロック管理に行って、カスタムブロックを作って保存する

カスタムブロックを作るときの設定

* コンテンツ: ```require XOOPS_ROOT_PATH.'/uploads/block_contents_hoge.html'; ```
* タイプ: PHPスクリプト
options_for_select で disabled を指定する

メソッドのシグネチャだけみると selected しか指定できそうにありませんが、options\_for\_select, options\_from\_collection\_for\_select 共に disabled も指定できます。

指定方法は、Hash で Key は、:selected, :disabled、Value は、\<option\> の value の配列です。

    list = option_no_list
    selected = ...
    disabled_list = list.map {|p| p.id if p.disabled }.compact
    
    select_tag "hoge", options_from_collection_for_select(list, "id", "name", :selected => selected.id, :disabled => disabled_list), ... %>
FlaskでBlueprintを使ってControllerを別に分けてみる

# server.py
app = Flask(__name__, static_folder='webapp/static', template_folder='webapp/templates')
from webapp.views.news import news_app
app.register_blueprint(news_app)

# webapp.views.news.py
news_app = Blueprint('news', __name__)

@news_app.route('/')
def index():
    return 'Hello World in news controller'
これが10分でできない人は自分がかなりプログラミングができないというつらい事実を認識しましょう。

http://hatsukari.2ch.net/test/read.cgi/news/1318598633
 400：名前：名無しさん＠涙目です。(岐阜城)：2011/10/15(土) 18:51:50.10 ID:eMBuD7fo0
某所から拾ってきた。 
「これが10分でできない人は自分がかなりプログラミングができないというつらい事実を認識しましょう。」だそうな。 

人数とカードが与えられたとき、分配後のカードを配列として返す関数を作成せよ。 
カードは与えられた文字列の前から順番に配られ、配られるカードの枚数は均等で余りは無視することとする。
Backbone.jsを利用したアプリケーション構築において参考になるアーキテクチャ

Backbone.jsを利用したアプリケーションを作る定石は未だないように感じています。
ある程度の規模のアプリケーションになると、イベント周りのマネジメントに対して気を使わなければなりません。

以下の実装のようにpub/subのパターンを使うのは良い選択かもしれません。

https://github.com/addyosmani/backbone-aura
ドミニオン　堀の防御率

カードの合計枚数と、堀の枚数を与えると、少なくとも1枚堀を持っている確率を返すプログラム
25枚に3枚なら防御率は50%くらいで、4枚だと60％、2枚だと36％。
だから、3枚手にいれよう！というわけではなく、とりあえず、「防御目的のためだけに4枚買うのは無駄っぽい」とだけ覚えておこう。直感的に明らかなレベルな域はでないけども。
村系があるとまわりやすいので、マルチプレイでヤバい攻撃カードが多かったら堀3枚くらい買うといいかも。
自分の記事からの転載:http://goo.gl/P4fNz

```python:dominion_moat_defence.py
sum = 25.0
hit = 3.0

def kai(x):
    if x == 0:
       return 1
    else:
       return x * kai(x-1)

bunbo = kai(sum) / kai(sum-5)
bunsi = kai(sum-hit) / kai(sum-hit-5)

answer = 1.0 - bunsi/bunbo
print answer
ランダムなパスワードを1行で生成する

ランダムなパスワードや文字列を生成する方法を6つ紹介します。

# 1. str_shuffle() を使う

* 同じ文字が2回出ない
* 36文字まで生成可能

```php
<?php
function random($length = 8)
{
    return substr(str_shuffle('1234567890abcdefghijklmnopqrstuvwxyz'), 0, $length);
}
```

# 2. mt_rand() を使う

* 同じ文字が複数回でる可能性がある
* 12文字まで生成可能

```php
<?php
function random($length = 8)
{
    return base_convert(mt_rand(pow(36, $length - 1), pow(36, $length) - 1), 10, 36);
}

```

# 3. md5(uniqid()) を使う

* 同じ文字が複数回でる可能性がある
* 25文字まで生成可能

```php
<?php
function random($length = 8)
{
    return substr(base_convert(md5(uniqid()), 16, 36), 0, $length);
}
```

sha256にすることで48文字まで生成可能になる

```php
<?php
function random($length = 8)
{
	return substr(base_convert(hash('sha256', uniqid()), 16, 36), 0, $length);
}
```

# 4. array_reduce() を使う

* 同じ文字が複数回でる可能性がある
* 何文字でも生成可能

```php
<?php
function random($length = 8)
{
	return array_reduce(range(1, $length), function($p){ return $p.str_shuffle('1234567890abcdefghijklmnopqrstuvwxyz')[0]; });
}
```

# 5. opensslを使う

[PHP - ランダムなパスワードを1行で生成する with openssl - Qiita](http://qiita.com/ngyuki/items/dd947aae213327cbeb70)

# 6. str_repeat + str_shuffle

* 同じ文字が複数回でる可能性がある
* 何文字でも生成可能

```php
<?php
function random($length = 8)
{
	return substr(str_shuffle(str_repeat('0123456789abcdefghijklmnopqrstuvwxyz', $length)), 0, $length);
}
```

参考: [[PHP] 一行でランダムパスワードを得る方法 : してログ - LANDHERE](http://landhere.info/blog/a67.html)


# 7. random_bytes

* PHP7で追加された暗号学的に安全なランダムバイト生成する[random_bytes関数](http://php.net/manual/ja/function.random-bytes.php)を使う。
* 同じ文字が複数回でる可能性がある
* 出現する文字は`0`-`9`, `a`-`f`のみ
* 何文字でも生成可能

```php
function random($length = 8)
{
    return substr(bin2hex(random_bytes($length)), 0, $length);
}
```

---

最後までお読みくださりありがとうございました。Twitterでは、Qiitaに書かない技術ネタなどもツイートしているので、よかったらフォローお願いします:relieved:→[Twitter@suin](https://twitter.com/suin)
Titaniumでmy365風なカレンダーアプリを作る（1）

[my365](http://my365.in/ "my365")がすごいいい感じだったので、Titaniumで簡略に作れるレベルでパクってみる。
目指してるところは、写真とってカレンダーに表示するってだけの簡単なもの。my365はコミュニケーション、カメラフィルタ、SNS連携など高機能でデザインも良い神アプリなのでここのとは全然違います。

javascriptでカレンダーを実現するスクリプトは[ここ](http://amenti.usamimi.info/calendar.html)を参考にしました。

今回はカレンダー状にLabelを並べただけ。写真保存、写真挿入とか作って続くかも

＊マジックナンバー多用注意!!

```javascript:calendar_view.js
var win = Ti.UI.currentWindow;

//今日という日
var now = new Date();
now.setHours(12);
var Y = now.getYear()+1900;
var M = now.getMonth()+1;

//表示している画面の年と月
var whenLabel = Ti.UI.createLabel({
	font:{
		fontFamily:'Helvetica Neue',
		fontSize:25
	},
	textAlign:'center',
	text:Y+"年"+M+"月",
	top:5, left:'auto', height:25, width:'auto'
});
win.add(whenLabel);

//月を戻すボタン
var backMonthButton = Ti.UI.createLabel({
	backgroundColor:"green",
	top:35, left:30, height:25, width:120,
	textAlign:'center',
	text:'back'
});
backMonthButton.addEventListener('click', function(){
	var date = new Date(Y,parseInt(M)-1-1)
	var Y_ = date.getYear()+1900;
	var M_ = date.getMonth()+1;
	whenLabel.text = Y_+"年"+M_+"月";
	cal(date);
});
win.add(backMonthButton);

//月を進めるボタン
var forwardMonthButton = Ti.UI.createLabel({
	backgroundColor:"green",
	top:35, left:170, height:25, width:120,
	textAlign:'center',
	text:'forward'
});
forwardMonthButton.addEventListener('click', function(){
	var date = new Date(Y,parseInt(M)-1+1)
	var Y_ = date.getYear()+1900;
	var M_ = date.getMonth()+1;
	whenLabel.text = Y_+"年"+M_+"月";
	cal(date);
});
win.add(forwardMonthButton);

//ここにカレンダーの各日付を表示。スクロールさせる。
var scrollView = Titanium.UI.createScrollView({
	contentWidth:'auto',
	contentHeight:'auto',
	top:70,
	height:300,
	width:320,
	backgroundColor:'#fff'
});
win.add(scrollView);

//カレンダー表示関数
var cal = function(date){
	var year = date.getFullYear();
	var month = date.getMonth();
	
	var leap_year=false;
 	if ((year%4 == 0 && year%100 != 0) || (year%400 == 0)) leap_year=true;
	var lom = new Array(31,28+leap_year,31,30,31,30,31,31,30,31,30,31);
	var w = new Array("red","gray","gray","gray","gray","gray","blue"); //曜日の見分けは色のみ
	var days=0;
	for (var i=0; i < month; i++) days+=lom[i];
	var week=Math.floor((year*365.2425+days)%7); //その月の開始曜日を取得
	var cols = 0;
	var rows = 0;
	var width = 80;
	var height = 80;
	for(var i=0; i<lom[month]; i++){
		var top = 0 + height * rows;  //各日付の表示位置制御
		var left = 0 + width * cols;
		var calLabel = Ti.UI.createLabel({
			backgroundColor:w[week],
			borderColor:"black",
			top:top, left:left, height:height, width:width
		});
		scrollView.add(calLabel);
		var dayLabel = Ti.UI.createLabel({
			color:'white',
			font:{fontSize:20},
			width:'auto',
			textAlign:'center',
			height:'auto',
			text:i+1
		});
		calLabel.add(dayLabel);
		if(cols != 3){  //各日付は横4列まで
			cols++;
		} else {
			cols = 0;
			rows++;
		}
		if(week != 6){
			week++;
		} else {
			week = 0;
		}
	}
}

cal(now);
```
cv::Mat の演算を高速化したいです

OpenCVで画像処理していたら、以下のような計算で時間がかかってました。RGB画像をプレーンごとに係数掛けて足しています。バイラテラルフィルタよりかなり遅い（5倍程度）のが腑に落ちない･･････。

```
dst_plane[0] = sc_r[0]*src_plane[0] + sc_g[0]*src_plane[1] + sc_b[0]*src_plane[2] + shift_r;
dst_plane[1] = sc_r[1]*src_plane[0] + sc_g[1]*src_plane[1] + sc_b[1]*src_plane[2] + shift_g;
dst_plane[2] = sc_r[2]*src_plane[0] + sc_g[2]*src_plane[1] + sc_b[2]*src_plane[2] + shift_b;
```
ssh-agentの基本

説明するほどのでもない気がするけど、書いてとせがまれたので書いてみる。
適当に書いたので、細かい説明とか用語の使い方がおかしいのは大目に見てもらう方向で。

ssh-agentは、sshの鍵をssh-agentデーモン(?)に保持させておいて、使い回せるようにするツール。
使い方は、ssh-agentを起動して、そのシェル内でssh-add でkeyを追加するだけ。

    % ssh-agent bash
    % ssh-add /path/to/my-private-key

とやっておく。

ちなみに、ssh-agent使うなら普通はagent forwardingした方がらく。
agent forwardingは、多段sshする際にsshの鍵の認証情報をforwardする機能で、たとえば

    A(local) -> B(DMZ) -> C(App server) -> D (DB server)

みたいな多段構成でsshをわたっていくとき、Dに入るための秘密鍵をいちいちBやCに置くのは面倒だしセキュリティ的にモアレで気持ち悪い。
そんなときにagent forwardingを使うと、Aで持っている秘密鍵をつかってBだけでなくCやDも認証できてしまう。
ssh-agentつかってれば、パス入力なしで全部ばんばんわたっていける。

やり方は単純で、ssh-agentの起動しているところ(ここでいうA) からBにsshでアクセスする際に

    % ssh -A B

と、-Aオプションをつけてやるだけ。B->CやC->Dのときにはもう-Aはいらない。
(Bはサーバの名前。れいの名前のつけ方が良くなかった。。)

こんな感じでやると、色々さくさくできて便利。

### 追記：
agent forwardingを常時使いたい場合は~/.ssh/configで

    ForwardAgent yes

を書いておけば-Aいらない。
AjaxPostの高速化

この手法を使うと、webアプリでajaxを用いてpostしたときの体感速度がクライアントアプリ並になる。

#####従来の方法

1.onclick="update(this);"などと設定
2.update(this)で更新クエリを発行
3.callback関数に処理が返ってくるのを待つ
4.更新クエリのcallback関数で更新内容をインターフェイスに反映

→callback関数に処理が返ってくるまでインターフェイスが反映がされず、遅い。

#####みのるajaxpost高速化

1.onclick="update(this);"などと設定
2.update(this)で更新クエリを発行する前に、インターフェイスを更新
3.callback関数に処理が返ってくるのを待つ
4.更新に失敗していたら、callback関数でインターフェイス上で取り消し処理やエラー処理をする

→callback関数に処理が返ってくるまでの待ち時間がなく、インターフェイスが瞬時に更新されるため、体感速度が爆速。

\#ただし、更新の失敗が多い場合、callback関数の反映やエラーをユーザーが見逃していると、「反映したはずなのに更新されていない」ということがおこりがちなので、留意されたい。

#####みのるajaxpost高速化におけるcallback関数のベストプラクティスになりそうな手法
callback関数は、更新失敗時の処理(インターフェイスの巻き戻し＆エラー通知)だけを書いて共通化することができるはずなので、たくさん書く必要はないと思われる。
###補足
従来のcallback関数による更新が一般的なのは、callback関数が便利すぎるためだと思う。「言語が思考を規定する」というサピアウォーフの仮説によるバイアスで発想が制限されているため、通信処理の更新はcallback関数でやるのが常態化しているのだと推測したりしなかったりしている。SNSとかゲームくらいのいい加減なシステムならガンガンつかっていいはず。特に、ゲームはレスポンス命なので、この技術を応用するとユーザー体験が圧倒的に向上するはず。

\#この記事は、以前自分で書いた記事からの転載です
\#ちなみに私はみのるではありません
日本語:http://goo.gl/RbUvd
英語:http://puriketu99.blogspot.com/
SQLでレコードの値を縦に比較してランキングを動的に実装する

副問い合わせでランキングを実装
着想がクール
http://codezine.jp/article/detail/460?p=2

```sql:rank.sql
SELECT P1.name,
       P1.price,
       (SELECT COUNT(P2.price)
          FROM Products P2
         WHERE P2.price > P1.price) + 1 AS rank
  FROM Products P1
 ORDER BY rank;
virtualenvのpythonでMeCabを使うときは

virtualenvのpythonでMeCabを使うときはvirtualenvのPythonでsetup.py installすればバインディングされる．
MacのPortでインストーされたモノだと，PortのPythonはimport MeCabが可能だけど，
virtualenvでのPythonにバインディングされない．
lambda短縮マクロ

登録記念にlisp支援。
前に書いたlambda短縮マクロ。既出？

```common-lisp:CommonLisp
(defun deep-find (item seq &key (test #'eql))
  (if (not (null seq))
      (or (if (funcall test item (car seq))
              item
              (if (not (atom (car seq)))
                  (deep-find item (car seq) :test test)))
          (deep-find item (cdr seq) :test test))))

(defmacro >str (&body body)
  `(write-to-string ,@body))
(defmacro >sym (str &optional package)
  `(intern ,str ,package))
(defmacro str+ (&rest b)
  `(concatenate 'string ,@b))

(set-macro-character #\] (get-macro-character #\)))
(set-dispatch-macro-character #\# #\[
  #'(lambda (stream char1 char2)
      (let ((body (read-delimited-list #\] stream t)))
        (if (deep-find '_ body)
            `(function (lambda (_) ,body))
            `(function
              (lambda
                  ,(nreverse
                    (do ((i 0 (1+ i)) (var nil))
                        ((> i 9) var)
                      (if (deep-find (>sym (str+ "_" (>str i)) *package*) body)
                          (setq var (cons (>sym (str+ "_" (>str i)) *package*) var)))))
               ,body))))))
```
テスト

```common-lisp:CommonLisp
;; #[+ 1 2] 
;;  => #'(lambda () (+ 1 2))
;;
;; #[+ _ 1] 
;;  => #'(lambda (_) (+ _ 1))
;;
;; #[if (< _0 10) (+ _1 2) (+ (- 100 _0) _2)] 
;;  => #'(lambda (_0 _1 _2) (if (< _0 10) (+ _1 2) (+ (- 100 _0) _2)))

> (funcall #[+ 10 100])
; 110
> (funcall #[+ _ 100] 1)
; 101
> (mapcar #[list _0 _1 _2] '(1 2 3) '(4 5 6) '(7 8 9))
;((1 4 7) (2 5 8) (3 6 9))
```
mb_levenshtein 二つの文字列のレーベンシュタイン距離を計算する（マルチバイト対応版）

<div class="alert alert-danger">
<i class="fa fa-exclamation-circle"></i>
この関数は文字数制約のある雑な実装になっています。制約のない実装は@mpywさんの
<a href="http://qiita.com/mpyw/items/2b636827730e06c71e3d">[マルチバイト対応] レーベンシュタイン距離を求める</a>をご覧ください。
</div>

levenshtein()のマルチバイト対応版

```php
<?php

function mb_levenshtein($string1, $string2)
{
	$tokens1 = preg_split('/(?<!^)(?!$)/u', $string1);
	$tokens2 = preg_split('/(?<!^)(?!$)/u', $string2);
	$tokens = array_unique(array_merge($tokens1, $tokens2));

	if ( count($tokens) > 26 )
	{
		return false;
	}

	$ascii = 'a';

	foreach ( $tokens as $token )
	{
		$string1 = str_replace($token, $ascii, $string1);
		$string2 = str_replace($token, $ascii, $string2);
		$ascii ++;
	}

	$arguments = func_get_args();
	$arguments[0] = $string1;
	$arguments[1] = $string2;

	return call_user_func_array('levenshtein', $arguments);
}

var_dump(mb_levenshtein('あとうかい', 'かとうあい')); // int(2)

```

* 制限事項：比較する文字の種類(文字数ではない)は26を超えると false を返します。
* http://php.net/manual/ja/function.levenshtein.php
min()/max()関数でDateTimeオブジェクトを比較

```php:datetime-minmax.php
<?php
$dts = array(
    new DateTime('-5 days'),
    new DateTime('+1 weeks'),
    new DateTime('-3 years'),  // min
    new DateTime('-4 months'),
    new DateTime('+7 months'), // max
);

var_dump(max($dts), min($dts));
```

実行結果: 

```
$ date --rfc-3339="seconds"; php datetime-minmax.php
2011-12-14 14:52:31+09:00
object(DateTime)#5 (3) {
  ["date"]=>
  string(19) "2012-07-14 14:52:31"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(10) "Asia/Tokyo"
}
object(DateTime)#3 (3) {
  ["date"]=>
  string(19) "2008-12-14 14:52:31"
  ["timezone_type"]=>
  int(3)
  ["timezone"]=>
  string(10) "Asia/Tokyo"
}
```
ドミニオン圧縮プレイをモンテカルロ法で分析

```python:dominion_chapel_strategy.py
#coding: UTF-8
#ドミニオンの圧縮戦略で、5枚以上のカードの情報(銀、金、属州礼拝堂)を与えると、その状態から属州を5枚買うまでの平均ターン数を返すプログラム。
#適宜手動で実験してみてください。かなり理想化しているので、参考程度にどうぞ。
#下記のプログラムによれば、結論としては、「属州を買えるときは常に属州を買おう。そうでないときは、マナブースト(この場合は金)を買おう」となりそう。
#これは、圧縮戦略によらなそうな気もしているが、そこは自分でかんがえろ。
#chokudaiが解析的に解いた結果、G3枚買ってから、上記の戦略に移るのが正しいとのこと。
import random

moto = ['s','s','s','g','z']#sは銀貨、gは金貨、zは属州と礼拝堂
lib = moto[:]

answer = 0.0
division = 0.0
turn = 0.0

while division < 3000:
  if lib.count('z') == 6:
    answer = answer + turn
    division = division + 1.0
    lib = moto[:]
    turn = 0
  list = random.sample(lib,5)
  point = 3 * list.count('g') + 2 * list.count('s')
  if point >= 8:
    lib.append('z')
  if point == 6 or point == 7:
    lib.append('g')
  turn = turn + 1

print answer / division
tweetstreamサンプル 

TwitterのStreaming APIを使ってみたかったものの、多くのブログにある
スクリプトは古くてそのままでは動かないものが多く、勝手がわからないまま
初めてrubyスクリプトを書いてみました。
gemが何かとか今日知った次第……

```ruby:twstream.rb
#!/usr/bin/ruby
#coding:utf-8

require 'rubygems'
require 'tweetstream' 

TWITTER_USERNAME='USERNAME'
TWITTER_PASSWORD='PASSWORD'

TweetStream.configure do |config|
  #BASIC認証版
  config.username = TWITTER_USERNAME
  config.password = TWITTER_PASSWORD
  config.auth_method = :basic
  config.parser   = :yajl #using Yajl-Ruby
end

TweetStream::Client.new.sample do |status|
  #日本語を使っていてフォロワーが1000人以上いるユーザで
  #リプライツイートでないツイートを表示
  if status.user.lang == 'ja' && status.user.followers_count >= 1000 && status.in_reply_to_user_id == nil 
    puts "#{status.user.screen_name} (#{status.user.followers_count}): #{status.text}"
  end 
end
```
ログインが必要なページから curl でデータ取得

```sh
 curl -c cookie.txt -d "user=kuboon" -d "pass=password" "http://example.com/login"
 curl -b cookie.txt "http://exapmle.com/admin/get_data"
```

1行目でログイン。デベロッパーツール等を用いて実際にログインするときのIDとパスワードのパラメータ名と form の POST 先 URL を調べ、-d オプションとURLを適当にして実行。ログインに成功したら、その時入手した cookie を cookie.txt に保存する。

2行目でデータ取得。さっき入手したばかりの cookie を手みやげにする
プログラミングの師匠募集

プログラミングの師匠を募集しています。
私が技術的な質問をしたときに、twitter上のリプライで通知されてもいい方は、コメントにtwitterIDを書いて下さい。質問は、人力検索とQiita上で行います。気が向いたときに回答をいただければ充分です。様子を見たい方は、Qiita上でpuriketuタグをフォローしてください。

現在、師匠は7名です(http://twitter.com/#!/puriketu99/prk2master/members)
過去の質問一覧(http://q.hatena.ne.jp/puriketu99/questionlist)

主に質問するトピック
Javascript
Closure Library
Scala
Play!
Google App Engine for Python
Mac OS X

よろしくお願い致します。
iOS開発向けライブラリ（.Frameworkファイル）作成時にはまったこと

iOS開発向けライブラリ（.Frameworkファイル）作成時にちょっとはまったことがあるのでメモ。

iOS開発向けライブラリ(libXX.o)をlipoコマンドでユニバーサル化したのだが、以下のようにしてしまったため、作成者以外の環境で動かなくなってしまった。

FRAMEWORK_BUILD_PATH="${SRCROOT}/build/${CONFIGURATION}-framework"
FRAMEWORK_DIR="${FRAMEWORK_BUILD_PATH}/${FRAMEWORK_NAME}.framework"

xcodebuild -project ${PROJECT_NAME}.xcodeproj -sdk iphonesimulator${IPHONEOS_DEPLOYMENT_TARGET} -target "TestFramework" -configuration ${CONFIGURATION} clean build
xcodebuild -project ${PROJECT_NAME}.xcodeproj -sdk iphoneos${IPHONEOS_DEPLOYMENT_TARGET} -target "TestFramework" -configuration ${CONFIGURATION} clean build
 
mkdir -p ${FRAMEWORK_DIR}
mkdir -p ${FRAMEWORK_DIR}/Versions
mkdir -p ${FRAMEWORK_DIR}/Versions/${FRAMEWORK_VERSION}
mkdir -p ${FRAMEWORK_DIR}/Versions/${FRAMEWORK_VERSION}/Resources
mkdir -p ${FRAMEWORK_DIR}/Versions/${FRAMEWORK_VERSION}/Headers
 
ln -s ${FRAMEWORK_DIR}/Versions/${FRAMEWORK_VERSION} ${FRAMEWORK_DIR}/Versions/Current
ln -s ${FRAMEWORK_DIR}/Versions/Current/Headers ${FRAMEWORK_DIR}/Headers
ln -s ${FRAMEWORK_DIR}/Versions/Current/Resources ${FRAMEWORK_DIR}/Resources
ln -s ${FRAMEWORK_DIR}/Versions/Current/${FRAMEWORK_NAME}
 
lipo ${SRCROOT}/build/${CONFIGURATION}-iphoneos/lib${FRAMEWORK_NAME}.a ${SRCROOT}/build/${CONFIGURATION}-iphonesimulator/lib${FRAMEWORK_NAME}.a -create -output "${FRAMEWORK_DIR}/Versions/Current/${FRAMEWORK_NAME}"

シンボリックリンクを作成する際に、絶対パスを指定してしまったためである。

正解は以下のように相対パスを指定しなくてはならない。

ln -s ${FRAMEWORK_VERSION} ${FRAMEWORK_DIR}/Versions/Current
ln -s Versions/Current/Headers ${FRAMEWORK_DIR}/Headers
ln -s Versions/Current/Resources ${FRAMEWORK_DIR}/Resources
ln -s Versions/Current/${FRAMEWORK_NAME} ${FRAMEWORK_DIR}/${FRAMEWORK_NAME}
コード品質を機械的にチェックする

「コードスメル」「コードメトリクス」というキーワードでググると、コード重複の指摘、複雑性の数値化などを機械的に行なってくれるリファクタリングを促すツールが結構あることがわかる。
Rubyだと、reek、roodi、flog、flayなど。
また、Rails Best Practices を元にしたコードチェッカもある。https://github.com/flyerhzm/rails_best_practices
来年の素数日を列挙してみた

コード：

```haskell:primes2012.hs
import Data.Time.Calendar
isPrime n=not $ or $ map (\a->n `mod` a==0)
            $ takeWhile (\i->i*i<=n) [2..]
days=map (\a->filter (/= '-') $ show a) $ takeWhile (< fromGregorian 2013 1 1) 
      $ iterate (\d->addDays 1 d) $ fromGregorian 2012 1 1
main=mapM_ (\a->print a) $ filter (isPrime.read) days
```

結果：
"20120203"
"20120207"
"20120213"
"20120323"
"20120407"
"20120501"
"20120509"
"20120531"
"20120623"
"20120629"
"20120713"
"20120717"
"20120719"
"20120729"
"20120801"
"20120819"
"20120827"
"20120923"
"20120927"
"20121103"
"20121107"
"20121121"
20111213が今年最後の素数日であることの検証

```ruby:lastPrime2011.rb
def isPrime(n)
  2.upto(Math.sqrt(n).to_i) {|i|
    if n%i==0
      return false
    end
  }
  return true
end

20111213.upto(20111231) do |i|
  if isPrime(i)
    puts i
  end
end
```
geektool で 自分のIPアドレスをデスクトップに表示するスクリプト

こんな感じ http://gyazo.gijutsuya.jp/data/93ca9665f1e96a7f38b817a37840f7b7.png

[geektoolの詳細はこちら](http://projects.tynsoe.org/en/geektool/)

```bash
#! /bin/bash

myen0=`ifconfig en0 | grep "inet " | grep -v 127.0.0.1 | awk '{print $2}'`

if [ "$myen0" != "" ]
then
echo "Ethernet: $myen0"
else
echo "Ethernet: INACTIVE"
fi

mytun0=`ifconfig tun0 | grep "inet " | grep -v 127.0.0.1 | awk '{print $2}'`

if [ "$mytun0" != "" ]
then
echo "OpenVPN: $mytun0"
else
echo "OpenVPN: INACTIVE"
fi
```
Backbone.jsでのサーバーサイドデータ→クライアントサイドデータ変換

サーバーからJSONでデータを返すとき，以下のようにキーが設定してあることがあります．例えばTwitterの検索APIでは，検索結果のtweetはresultsというキーの値に入っています．

```js
{ item: {foo: bar, ...} }
```

({foo: bar, ...}がアイテムの中身)
しかし，このデータからBackbone.Modelオブジェクトを作る時に`new Model(json.item)`のように毎回中身を取り出すのは面倒です．

## Backbone.Model#parse

Backbone.Modelではnewするときにまず引数を`parse`メソッドに渡し，その返り値を使ってモデルの属性値を設定します(`parse`はデフォルトでは何もしない)．
そこで`parse`を適切に実装するとJSON→Backbone.Modelオブジェクトの変換がシンプルになります．

```js
var MyItem = Backbone.Model.extend({
    parse: function(json) {
        return json.item;
    },
    // ...
});

var item = new MyItem(json);
// var item = new MyItem(json.item); と書く必要はない
```

他にもサーバーから返すデータの型が綺麗でないのをクライアント側では綺麗に扱ったり，複数バージョンAPI間のレスポンス形式の違いを隠蔽したり，というのも`parse`を実装することでできます．

```js
var MyItem = Backbone.Model.extend({
    parse: function(json) {
        // 新旧APIのレスポンス形式の違いを吸収する
        return json.version == 1 ? obj.item : obj;
    },
    // ...
});
```

このようにサーバーから返すデータとクライアントで扱うデータの間に1層挟むと綺麗に書けてよいですね．
Mac OS X で Growl が暴走したときに再起動・改

http://qiita.com/items/1302 をベースに書き方とログの出力先を自分好みに。

- test と書くのをやめるとbashっぽい気がする。
- logが無限に膨らむのもアレだからsyslogに出力するように変更

```bash
#!/bin/bash

PID=$(ps ax | grep Growl.app | grep -v grep | awk '{print $1};')

if [ -z "$PID" ]; then
    open -j -a Growl
    logger -p user.notice -t growl_cron "Growl restarted on $(date)"
    exit
fi

CPU_USAGE=$(top -pid $PID -l 2 -s 5 -stats cpu | tail -n1 | cut -d"." -f1)
if [ "$CPU_USAGE" -gt 80 ]; then
    killall Growl
    open -j -a Growl
    logger -p user.notice -t growl_cron "Growl restarted on $(date)"
fi
```
Selenium2を使ってWebアプリをテストする時にIPアドレス:ポート番号の形式でアクセスすると色々とおかしな動きをしたのに、同じコンピュータにホスト名:ポート番号の形式でアクセスしたらうまく動いた。なぜだろう？ちなみにWin XP, IE7でIEのWebDriverをJavaから動かしてます。

Selenium2を使ってWebアプリをテストする時にIPアドレス:ポート番号の形式でアクセスすると色々とおかしな動きをしたのに、同じコンピュータにホスト名:ポート番号の形式でアクセスしたらうまく動いた。なぜだろう？ちなみにWin XP, IE7でIEのWebDriverをJavaから動かしてます。