OmniAICreator/Qiita-1.07M huggingface dataset:
負の数を0にするビット演算

思いついたので。
符号ありint型のみ。

```ActionScript
if (x < 0) x = 0;
```

これが

```ActionScript
x &= ~(x >> 31);
```

これに相当します。

で、何故こうなるかというと…

intは、符号付き整数を32bitで管理しています。
そのうち32個目のビットは符号ビットと呼ばれるもので、
正の時は0、負の時は1を格納しています。

シフト演算子( >> )で右にシフトした場合、符号ビットが引きずられるようになっています。
※ AS3, Javaの場合 >>> を使うと引きずられません

例えば、
0000 0000 0100 1000
を右に2シフトした場合、
0000 0000 0001 0010
になりますが、

1111 1111 1001 0110
を右に2シフトした場合、
1111 1111 1110 0101
となります。

※ 表記上ビットが16個しかありませんが実際は32あります

では、ビットを31右にシフトしてみましょう。
正の場合は、どんな数でも
0000 0000 0000 0000
になりますね。

負の場合は符号ビットが引きずられるので、どんな数でも
1111 1111 1111 1111
になります。

このビット列を反転させると、
正の場合は全て1、負の場合は全て0のビット列が得られます。

後はそれで元の数にマスク(論理積)をかけてやることで、負の場合のみ0の数が得られます。
ActiveSupportとタイムゾーン


`in_time_zone`で`Time`と`DateTime`のタイムゾーンを切り替えられる。

	ENV["TZ"] = "UTC"

	time = Time.utc(2012, 4, 30, 18)
	time.in_time_zone("Asia/Tokyo")
	#=> Tue, 01 May 2012 03:00:00 JST +09:00

ただしこれをやっても`to_s(:db)`の結果はもとのタイムゾーンをベースに出力されるので要注意。

	time.in_time_zone("Asia/Tokyo").to_s(:db)
	#=> 2012-04-30 18:00:00

まぁデータベースのタイムゾーンと`ENV["TZ"]`はだいたい一致しているから、このほうが都合はいいんだろう。

特定のタイムゾーンにおける月初の時刻を、`ENV["TZ"]`の表現で取得したいなら2回`in_time_zone`を使う。

	time.in_time_zone("Asia/Tokyo").
	  beginning_of_month.
	  in_time_zone(ENV["TZ"])
	#=> Mon, 30 Apr 2012 15:00:00 UTC +00:00
	# 日本時間での2012-05-01 00:00:00

一つのテーブルで複数のタイムゾーンに対応するにはこんな変換が必要になる、のかな。
form_forでのエラー発生時のスタイルにBootstrapを適用


##変更箇所
```ruby:config/application.rb
config.action_view.field_error_proc =
  ->(html, instance) { %|<div class="control-group error">#{html}</div>|.html_safe }

# ちなみにスタイルを消す場合は何もせずに第1引数を返せばいい
```

変更後は**サーバの再起動**が必要。

##注意点

formのスタイルを```form-horizontal```にすると以下のようになってしまう(```rails g bootstrap:themed```をすると```form-horizontal```になる)

http://gyazo.com/cd686c8f1091aa40eb8c5043d540c903


スタイルを```form-vertical```(デフォルト)にすると綺麗に出力される。
CLLocationManager と環境設定


個人的に、リファレンスだとわかりにくかったのでメモ。

CLLocationManager のクラスメソッドと、環境設定の位置情報の関連

authorizationStatus は、こんな感じの列挙体

(iOS6頃の話。iOS8 になると変更がかなりあるので、あまり参考にならないかと… )

iOS8: http://qiita.com/koogawa/items/6ec24ca3201977e9642b


## authorizationStatus

```objective-c
typedef enum {
    kCLAuthorizationStatusNotDetermined = 0,
    kCLAuthorizationStatusRestricted,
    kCLAuthorizationStatusDenied,
    kCLAuthorizationStatusAuthorized
} CLAuthorizationStatus;
```



## 環境設定でオンの状態 の出力

```
CLLocationManager headingAvailable: => 1
CLLocationManager significantLocationChangeMonitoringAvailable => 0
CLLocationManager regionMonitoringAvailable: => 0
CLLocationManager locationServicesEnabled: => 1
CLLocationManager authorizationStatus: => 3
```


## 環境設定でオフの状態

```
CLLocationManager headingAvailable: => 1
CLLocationManager significantLocationChangeMonitoringAvailable => 0
CLLocationManager regionMonitoringAvailable: => 0
CLLocationManager locationServicesEnabled: => 1
CLLocationManager authorizationStatus: => 2
```


## アプリ起動時にCancelを押した時

```
CLLocationManager headingAvailable: => 1
CLLocationManager significantLocationChangeMonitoringAvailable => 0
CLLocationManager regionMonitoringAvailable: => 0
CLLocationManager locationServicesEnabled: => 1
CLLocationManager authorizationStatus: => 2
```

## 位置サービスをオフにした時

```
CLLocationManager headingAvailable: => 1
CLLocationManager significantLocationChangeMonitoringAvailable => 0
CLLocationManager regionMonitoringAvailable: => 0
CLLocationManager locationServicesEnabled: => 0
CLLocationManager authorizationStatus: => 2
```
rbenvを使ってシステムワイドにrubyをインストールする方法


各ユーザごとではなく/usr/local/以下にrbenvをインストールしてシステムワイドに使えるようにする手順。各ユーザがstaffグループに参加していると仮定している。

## rbenvインストール
```sh:
cd /usr/local
git clone git://github.com/sstephenson/rbenv.git rbenv
chgrp -R staff rbenv
chmod -R g+rwxXs rbenv
```

/etc/profileとか~/.profileとかで環境変数を設定しておく。設定した後はsourceコマンドで適応しておくと良い。

## 環境変数設定
```sh:
export RBENV_ROOT=/usr/local/rbenv
export PATH="$RBENV_ROOT/bin:$PATH"
eval "$(rbenv init -)"
```

rubyをインストールするためにruby-buildをインストール
## ruby-buildインストール
```sh:
mkdir /usr/local/rbenv/plugins
cd /usr/local/rbenv/plugins
git clone git://github.com/sstephenson/ruby-build.git
chgrp -R staff ruby-build
chmod -R g+rwxs ruby-build
```

## rbenv経由でrubyをインストール
```
rbenv install 1.9.3-p194
rbenv rehash
rbenv global 1.9.3-p194
```
Hello World

弊社の技術ブログに書いたので一番気に入ってるヤツ


```PHP
<?php
ob_start () &&
( print print '0' )       && ( print print '00' )       && ( print '000' )      && ( print "\t" )  &&
( print print print '0' ) && ( print print '00' )       && ( print print '0' )  && ( print "\t" )  &&
( print print print '0' ) && ( print print print '0' )  && ( print '00' )       && ( print "\t" )  &&
( print print print '0' ) && ( print print print '0' )  && ( print '00' )       && ( print "\t" )  &&
( print print print '0' ) && ( print print print '0' )  && ( print '11' )       && ( print "\t" )  &&
( print print '0' )       && ( print print '0' )        && ( print print '0' )  && ( print "11\t") &&
( print print print '0' ) && ( print print print '0' )  && ( print '11' )       && ( print "\t" )  &&
( print print '0' )       && ( print '11' )             && ( print print '00' ) && ( print "0\t" ) &&
( print print print '0' ) && ( print print print '0' )  && ( print '00' )       && ( print "\t" )  &&
( print print print '0' ) && ( print print '00' )       && ( print '00' )       && ( print "\t" )  &&
print join ( '', array_map ( function ($i) {
  return chr ( bindec ( $i ) );
}, preg_split ( '#\t#', ob_get_clean() ) ) );
```

残りはこちら

http://tech.aainc.co.jp/archives/567
UbuntuでTomcat Apache連携 

簡単なことなんだけどあまりやってこなかったので備忘録。

http://www.adminweb.jp/apache/tomcat/
を参考にさせていただきながらUbuntuに置き換えてやった。多謝。

Tomcatをインストールして動かすところまではできたとさせてください。

# Tomcatの設定
Ubuntu10でTomcat6をデフォルトでインストールすると多分
/etc/tomcat6
に設定があるはず。その前提で進める。

下記を殺し

```xml:server.xml
    <!-- A "Connector" represents an endpoint by which requests are received
         and responses are returned. Documentation at :
         Java HTTP Connector: /docs/config/http.html (blocking & non-blocking)
         Java AJP  Connector: /docs/config/ajp.html
         APR (HTTP/AJP) Connector: /docs/apr.html
         Define a non-SSL HTTP/1.1 Connector on port 8080
    -->
    <!--<Connector port="8080" protocol="HTTP/1.1"
               connectionTimeout="20000"
               URIEncoding="UTF-8"
               redirectPort="8443" /> -->
```

下記を生かす。

```xml:server.xml
     <!-- Define an AJP 1.3 Connector on port 8009 -->
     <Connector port="8009" protocol="AJP/1.3" redirectPort="8443" />
```

Tomcatを再起動

```sh
sudo /etc/init.d/tomcat6 restart
```

# Apacheの設定
mod_proxyとmod_proxy_ajpを生かす

```sh
sudo a2enmod proxy
sudo a2enmod proxy_ajp
```

今回はバーチャルホストで繋ぎたかったので新規にサイト設定を作った。
中身は例えば以下のように。

```txt:/etc/apache2/sites-available/[SiteName]
<VirtualHost *:80>
        ServerName xxx.com # ドメイン
        ServerAdmin admin@xxx.com # 管理者のメール

        <Location />
           ProxyPass ajp://localhost:8009/
           Order allow,deny
           Allow from all
        </Location>

        ErrorLog /var/log/apache2/error.log

        # Possible values include: debug, info, notice, warn, error, crit,
        # alert, emerg.
        LogLevel warn

        CustomLog /var/log/apache2/access.log combined
</VirtualHost>
```

サイトを有効にしてApacheの再起動。

```sh
sudo a2ensite [SiteName]
sudo /etc/init.d/apache2 restart
```

この場合、xxx.comにアクセスしてTomcatのルートが表示されればOK。
javascriptで使えるグラフについて

html+css+jsで使えるグラフをさがしています。jQueryプラグインが望ましいです。ご存知の方いたら教えてください。
###いま自分が求めているグラフ
マルチグラフ対応
棒グラフは3D
インタラクティブなアクション(たとえばhoverでプルプルして欲しい)

###今知ってるグラフ
qiitaのプロフィールの円グラフで使われているjQueryプラグインのraphael.js
http://raphaeljs.com/

美しめなグラフを作成することができる。

raphael.jsのプラグインのelycharts.js
http://elycharts.com/docs

マルチグラフ対応。棒グラフ×線グラフなんかもできる。
ただ、棒グラフが3Dじゃないのでダサい。
scrollable な View を、強制的に scroll させる


Ext.scroll.Scroller クラスの scrollTo(x,y) を使う

```coffeescript:controller/Main.coffee
Ext.getCmp("myid").getScrollable().getScroller().scrollTo 0,0   
```

参考：http://docs.sencha.com/touch/2-0/#!/api/Ext.scroll.Scroller-method-scrollTo
コミットメッセージの作法


[git](https://github.com/gitster/git/blob/master/Documentation/SubmittingPatches)プロジェクトのガイドラインを参考にまとめました。この作法は英語で書くことが前提となっています。

# 1. コミットメッセージの1行目は短い説明文(50文字以内)

* モジュールについての修正の場合、```モジュール名:``` ではじめる
* 説明文は小文字ではじめる
* 説明文のピリオド(句点)を省く

# 2. 2行目は空行にする

そうすることで、例えばコミットした内容を E-Mail に変更するツールにて、 Subjectに最初の行を使用し、残りの行を本文にすることができる。

# 3. 本文には意味ある内容を含める

* 問題点: 修正した問題点について説明する
* 妥当性: 行った修正について、「なぜその方法がより良いのか」を説明する
* 代替案: もし、他の修正方法を検討したのなら、それらについて説明する

# 4. 変更は命令形で表現する

まるであなたがコードベースに変更を命令じているかのように書く。

* [bad] "**This patch** makes xyzzy do frotz"
* [bad] "**I** changed xyzzy to do frotz"
* [ok] "make xyzzy do frotz"

# 5. 書いた内容が他の資料なしに理解できるものか確認する

メーリングリストのURLを指し示す代わりに、関連する点について要約する。


# コミットメッセージの形式

> モジュール名: 簡潔な説明文
>
> どのような問題があり、どのような修正を行ったか...
> その修正はなぜ他の方法より良いか...
> 他に検討した修正方法はどんなものか...(あれば)
Titanium.Network.HTTPClientでGETでパラメーターも送りたい場合

SDKのバグなのかパラメーターを送るとGETで送ってもPOSTになってしまう。

仕方なくhttp://~~~~~?param=xxxの形式で送ることで解決しました。

SDKのバージョンは1.8.2です。他のバージョンでは未確認です。
CentOS6に typesafe-stack install

Typesafeサイトを見てインストール

Create a file called typesafe.repo in the folder /etc/yum.repos.d/ containing this information:

```
[typesafe]
name=Typesafe RPM Repository
baseurl=http://rpm.typesafe.com/
enabled=1
```

Next, open a terminal window and type:

```
$ yum install typesafe-stack
```

これだけだと、*** is not signedと怒られてしまったので、

```
[typesafe]
name=Typesafe RPM Repository
baseurl=http://rpm.typesafe.com/
enabled=1
gpgcheck=0
```

と1行追加して、無事インストール完了
yaottiさんの便利なanything-git-projectコマンドを、 anything したときの情報源としてつかう

http://qiita.com/items/d0d4959510acd9fd1abf#comment-9c3dfc76132f8f3b088a
↑これがとても使いやすので、独立したコマンドとしてでなく、普通にanythingしたときに出てくれるよう、情報源として定義しなおしてみる。

```cl
(dolist (elt '(("modified" "Modified files (%s)" "--modified")
               ("untracked" "Untracked files (%s)" "--others --exclude-standard")
               ("all ""All controlled files in this project (%s)" "")))
  (destructuring-bind (suffix name options) elt
    (eval `(defvar ,(intern (concat "anything-c-source-git-project-for-" suffix))
             `((name . ,(format name default-directory))
               (init . (lambda ()
                         (unless (and ,(string= options "") ;update candidate buffer every time except for that of all project files
                                      (anything-candidate-buffer))
                           (with-current-buffer
                               (anything-candidate-buffer 'global)
                             (insert
                              (shell-command-to-string
                               ,(format "git ls-files $(git rev-parse --show-cdup) %s"
                                        options)))))))
               (candidates-in-buffer)
               (type . file))
             ))))

(defun anything-git-project ()
  (interactive)
  (let ((sources '(anything-c-source-git-project-for-modified
                   anything-c-source-git-project-for-untracked
                   anything-c-source-git-project-for-all)))
    (anything-other-buffer sources
     (format "*Anything git project in %s*" default-directory))))

```

anything-c-sources に追加。

```cl
(setq anything-sources
      `( 
        anything-c-source-git-project-for-modified
        ;; anything-c-source-git-project-for-untracked
        ;; anything-c-source-git-project-for-all
        anything-c-source-buffers
        ;; などなど、いつもの情報源いろいろ
        ))
```

M-x anything したとき、なによりも先に gitのmodifiedファイルが表示される。(存在すれば)
modelのcase classやobjectをユニテする方法ご存知ありませんか？

Play2.0 Scala でモデル層をcase class + object で定義しているのですが、ユニテで困っています。
Specs2デフォルトのmockitoでは、モックを作ることができませんし、
かといって関連するモデル全てをテスト時に定義するのも現実的ではないので、出来ればモックを作りたいのですが…
なにか、方法を御存知の方がいらっしゃればどうかご教授お願いします。
Perl製アプリケーションのボトルネックを突き止めるのに役立つ道具

## Benchmark.pm
* ある特定の処理の速度を較する
 * ○○関数と△△関数はどっちが速いか、とか
* 遅い関数/遅いモジュール とかの情報はネットに結構な量の情報が出回ってるので、自分で測る機会はそんなにない（速度厨の時期を除く）という感覚
* 参考
 * http://d.hatena.ne.jp/perlcodesample/20100509/1276960096
* example
 * http://d.hatena.ne.jp/gfx/20090115/1231984929

## Devel::NYTProf
* Perlプログラムでボトルネックになっている行を特定する（いわゆるプロファイラと呼ばれるもの）
* ループのなかで重い処理呼んでた、みたいなパターンも一発で特定できる優れ物
* 難： 計測結果が膨大なので、読むにはちょっとだけ慣れる必要あり
* Newyork Times の中の人が作ったからNYT
* 参考
 *http://d.hatena.ne.jp/tokuhirom/20080726/1217044574

## Devel::KYTProf
* I/O待ちが発生した箇所のみ計測する
 * DB/memd接続とか、外部ネットワークへのリクエストとか
* はてな社作（はてなは京都にある。KYTはKyotoから取ってる）
* 参考
 *http://perl-users.jp/articles/advent-calendar/2010/hacker/24

## DBIx::QueryLog
* DB接続に特化して計測。KYTProfの機能をさらに絞ったもの
* 実際の運用なら、これを使わず SLOW QUERY LOG みるという手もありますね
* xaicronさん作
* 参考
 *http://perl-users.jp/articles/advent-calendar/2011/dbix/9


社内向けに公開してみたら意外と好評だったのでQiitaに転載してみた。
Toolbarのボタンからオーバーレイ表示


## 概要

Toolbarにあるボタンを表示すると、ボタン下部にオーバーレイ表示したパネルを表示させる

## コード
* Toolbarコンポーネントのボタンに対して、別パネルcreateする
* 生成したコンポーネントに対して

```javascript:overlay.js
  xtype: 'button',
  text: 'overlay',
  handler: function(btn, event){
      var main = btn.getParent().getParent();
      main.overlay = Ext.create('Ext.Panel', {
          html: 'panel text',
          modal: true, // true:表示したオーバーレイの背面をグレーアウトさせ操作できないようにする
          width: 300,
          height: 400,
          scrollable: true,
          top: 0,
          left: 0
      });
      // オーバーレイさせるパネルから吹き出しを表示してどのボタンから
      // 表示したのかわかりやすくする
      // btn：対象のボタン
      main.overlay.showBy(btn);
      
  }
```

## サンプルコード

http://www.senchafiddle.com/#h6LvR
# Sencha touchによるアニメーション


Sencha touchを利用してjQueryの$("#element").animate({param: value})的なことをする方法

## コード

```javascript:animate.js
// element to animate.
var elm = someComponent.element.query('.target');
Ext.Anim.run(Ext.get(elm), 'fade', {
    out : false,    // true: fadeOut  / false: fadeIn
    duration: 2000,
    delay: 1000,
    before: function(){
      // call before animation
    },
    after: function(){
      // call after animation
    }
});
```

## APIドキュメント

* アニメーションの詳しい設定値

http://docs.sencha.com/touch/2-0/#!/api/Ext.Anim

* アニメーションの種類

http://docs.sencha.com/touch/2-0/#!/api/Ext.anims

## サンプル

http://www.senchafiddle.com/#txACG
Mac版Firefoxのバグっぽいやつとその対策

##試した環境
- Mac OS X Lion 10.7.3
- Firefox 12.0 or 13.0
- Firefox 11.0 のときは観測されなかった(多分)

##事象
Mac版FirefoxでWebWorkerを使っていると「応答のないスクリプト」ダイアログが表示される。

##再現
下記のようなWebWorker経由のタイマー（別タブを選択しても精度が落ちなくなる）を使ったとき、特に何も処理をしていなくても「応答のないスクリプト」ダイアログが表示される。

```window.js
var worker = new Worker("./timer.js");
worker.onmessage = function() {}; // 何もしていないのに..
worker.postMessage(null);    
```

```worker.js
// timer.js
this.onmessage = function() {
  setInterval(function() {
    postMessage(null);
  }, 100);
};  
```
*デモのページ*
http://dl.dropbox.com/u/645229/webworkertest/index.html
.

## 対策
無駄なコードを挟むと出なくなる。
おそらくメインスレッド外からの割り込みがあれば良い？

```window-with-uglypatch.js
var worker = new Worker("./timer.js");
worker.onmessage = function() {};
worker.postMessage(null);

setInterval(function() {}, 1000); // これがあれば出なくなる???
```
*デモのページ*
http://dl.dropbox.com/u/645229/webworkertest/uglypatch.html


##ugly-patch
この問題は発生する環境が限られているため、スクリプト内にこういうのを書いておけば良い。

```ugly-patch.js
if (/mac.*firefox/i.test(navigator.userAgent)) {
    setInterval(function() {}, 1000);
}
```
Emacsでvimのf、F、; を

vimで、カーソル行の **1文字** を検索して飛ぶコマンドがとても便利なのでEmacsでもできる限り再現しようと試みた。

M-j 押した後、次に押した文字がカーソルより右にあればそこに飛ぶ。
M-k 押した後、次に押した文字がカーソルより左にあればそこに飛ぶ。
M-u は前回のコマンドを繰り返す。

```cl
(defvar vimlike-f-recent-char nil)
(defvar vimlike-f-recent-func nil)

(defun vimlike-f (char)
  "search to forward char into current line and move point (vim 'f' command)"
  (interactive "cSearch to forward char: ")
  (when (= (char-after (point)) char)
    (forward-char))
  (search-forward (char-to-string char) (point-at-eol) nil 1)
  ;; (migemo-forward (char-to-string char) (point-at-eol) t 1)
  (backward-char)
  (setq vimlike-f-recent-search-char char
        vimlike-f-recent-search-func 'vimlike-f))

(defun vimlike-F (char)
  "search to forward char into current line and move point. (vim 'F' command)"
  (interactive "cSearch to backward char: ")
  (search-backward (char-to-string char) (point-at-bol) nil 1)
  ;; (migemo-backward (char-to-string char) (point-at-bol) t 1)
  (setq vimlike-f-recent-search-char char
        vimlike-f-recent-search-func 'vimlike-F))

(defun vimlike-semicolon ()
  "search repeat recent vimlike 'f' or 'F' search char (vim ';' command)"
  (interactive)
  (if (and vimlike-f-recent-search-char
             vimlike-f-recent-search-func)
      (funcall vimlike-f-recent-search-func vimlike-f-recent-search-char)
    (message "Empty recent search char.")))

(global-set-key "\M-j" 'vimlike-f)
(global-set-key "\M-k" 'vimlike-F)
(global-set-key "\M-u" 'vimlike-semicolon)
```
C-sなどの普通のインクリメンタルサーチと違って、Enter押す必要がない。
検索コマンドじゃなくてカーソル移動コマンドとして使う。
キーワード引数を取る関数の、interactiveにリストを渡す

関数をコマンド化する、interactive。
これの引数にリストを渡すと、コマンド実行した場合の引数リストとして解釈してくれる。マニュアルに書いてる。

```cl
(defun fuga (a b c)
  (interactive (list 1 2 3))
  (list a b c))

(command-execute #'unko)                ; => (1 2 3)
```

ではキーワード引数ではどうかというと、以下のやり方でいける。

```cl
(defun* unko (&key a b c)
  (interactive (list :a 1 :b 2 :c 3))
  (list a b c))

(command-execute #'unko)                ; => (1 2 3)
(unko :a 4 :b 5 :c 6)                   ; => (4 5 6)
```

ちなみに、この話は、interactiveだけでなく、applyとか、引数をリストとして取る関数全般にあてはまる。

ところで、:a っていうのはどうやらシンボルらしい。
>|lisp|
(type-of :a) ; => symbol
||<

あー。 :a は単体で評価してもエラーにならない。単に :a が返る。
同じ文字が N 個以上連続する部分文字列を見つける正規表現


同じ文字が N 個以上連続する部分文字列を見つける正規表現です。

```python3
import re


def nchars(s, n):
    """文字列 s に、同じ文字が n 個以上連続している部分文字列を見つける
    """
    assert n > 0
    reg = re.compile("(.)\\1{%d,}" % (n - 1))  # カンマを取ると n 個ちょうどになる
    while True:
        m = reg.search(s)
        if not m:
            break
        yield m.group(0)
        s = s[m.end():]


print(list(nchars('a いい uuu ee お', 2)))
print(list(nchars('aa いいい ううううう e ooo', 3)))
```

実行結果です。

```
['いい', 'uuu', 'ee']
['いいい', 'ううううう', 'ooo']
```
vimをソースからインストール

普段つかっている方法です。

## 初めての場合

mercurialを利用します。以下のページにmercurialによるソースコードの取得について記述されています。

* Vim from Mercurial : vim online
* http://www.vim.org/mercurial.php

インストールは以下のとおりです。

```
$ hg clone https://vim.googlecode.com/hg/ vim
$ cd vim/src
$ ./configure --with-features=huge --enable-multibyte --disable-selinux
$ make
$ sudo make install
```

[HomeBrew](http://mxcl.github.com/homebrew/)でも良いですが、個人的にはこの方法でいれることが多いです。

## ２回目以降

以下のような簡単なスクリプトを作っておくと楽です。

```
#!/bin/sh

# please located in vim source directory
hg pull
hg update

cd src
./configure --with-features=huge --enable-multibyte --disable-selinux
make
sudo make install

```

なお、configureオプションはお好みで。迷ったら`./configure --help`を参照しましょう。
全探索と二分探索

##全探索##
```scheme:search.scm
(define (binarysearch lst n)
  (let loop ((lst lst))
	(receive(left right)
	  (split-at lst (div (length lst) 2))
		(cond ((null? left)#f)
			  ((null? right)#f)
			  ((eq? (last left) n)#t)
			  ((eq? (car right) n)#t)
			  ((> (last left) n)(loop left))
			  ((< (car right) n)(loop right)))))))
```

##二分探索##
```scheme:binarysearch.scm
(define (binarysearch lst n)
  (let loop ((lst lst))
	(receive(left right)
	  (split-at lst (div (length lst) 2))
		(cond ((null? left)#f)
			  ((null? right)#f)
			  ((eq? (last left) n)#t)
			  ((eq? (car right) n)#t)
			  ((> (last left) n)(loop left))
			  ((< (car right) n)(loop right))))))
```

##結果##
(1 3 5 11 12 13 17 22 25 28)から25を探索するとき
###全探索###
>(1 3 5 11 12 13 17 22 25 28)
(3 5 11 12 13 17 22 25 28)
(5 11 12 13 17 22 25 28)
(11 12 13 17 22 25 28)
(12 13 17 22 25 28)
(13 17 22 25 28)
(17 22 25 28)
(22 25 28)
(25 28)

##二分探索##
>(1 3 5 11 12):(13 17 22 25 28)
(13 17):(22 25 28)
(22):(25 28)

二分探索のほうが圧倒時に…はい
Mojito Quickstart

# 必要なもの

**システム:** Unix-based System
**ソフトウェア:** C++コンパイラ, Node.js v.0.4.5以上

# インストール手順

1. npmのインストール

`$ curl http://npmjs.org/install.sh | sh`

もしnpmのインストールに失敗するようであれば、上記のコマンドに sudoを加えて実行してみてください。

`$ curl http://npmjs.org/install.sh | sudo sh`

2\. npmリポジトリから Mojito を入手し、コマンドラインから実行できるようにしましょう。

`$ npm install mojito -g`

3\. Mojitoのインストールが完了したかどうか、ユニットテストを実行しチェックしましょう。

# Mojitoアプリケーションの作成
1. `$ mojito create app hello_world`

2. `$ cd hello_world`

3. `$ mojito create mojit myMojit`

# アプリケーションの修正

自分の望む文字列を表示させるために、`mojits/myMojit/controller.server.js`のコードを以下のように修正しましょう。

```Javascript
YUI.add('myMojit', function(Y) {
  Y.mojito.controller = {
    index: function(ac) {
      ac.done('Hello, world. I have created my first Mojito app at ' + (new Date()) + '.');
    }
  };
});
```

# アプリケーションの実行

1. hello_world ディレクトリから、Mojitoを実行させましょう

`$ mojito start`

2\. [http://localhost:8666/@myMojito/index](http://localhost:8666/@myMojito/index)にアクセスして、アプリケーションを見ましょう。

3\. アプリケーションを停止させるには、**Ctrl-C**を押します。

より進んだ内容のチュートリアルに臨むために、[Mojito: Getting Started](http://developer.yahoo.com/cocktails/mojito/docs/getting_started/)を読んでください。Mojitoをより学ぶには、[Mojito Documentation](http://developer.yahoo.com/cocktails/mojito/docs/)を見ると良いでしょう。

> このドキュメントは[Mojito Quickstart](http://developer.yahoo.com/cocktails/mojito/docs/quickstart/)の翻訳です。
Introducing Mojito

# Mojitoとは何でしょうか？
Mojitoは、YUI3によって作られたMVCアプリケーションフレームワークで、Webアプリケーションのアジャイルな開発を実現します。Mojitoでは、クライアント、サーバーコンポーネント両方同一の言語（JavaScript）、同一のフレームワークで記述することができます。JavaScriptで書かれたMojitoアプリケーションは、WebブラウザのようなクライアントとNode.jsで動きます。そして、Mojitoは、国際化、自動テスト、ドキュメント自動生成をサポートします。

# どうしてMojitoを使うのでしょう？
Mojitoは以下のような特徴を持っています。

* ローカル開発環境とツール
* 国際化、ローカライゼーションライブラリ
* 組み込みユニットテスト機能
* デバイス別表示機能（モバイル、テレビ、ウェブ…）

# どうやって始めたらよいのでしょう？

1. [Quickstart Tutorial](http://developer.yahoo.com/cocktails/mojito/docs/quickstart/)を始めましょう
2. [Mojito Introduction](http://developer.yahoo.com/cocktails/mojito/docs/intro/)を読んでみましょう
3. [Mojito Documentation](http://developer.yahoo.com/cocktails/mojito/docs/)をチェックしましょう
4. もし何か問題があれば、[Mojito FAQ](http://developer.yahoo.com/cocktails/mojito/docs/faq/) や [Mojito Troubleshooting](http://developer.yahoo.com/cocktails/mojito/docs/reference/mojito_troubleshooting.html)を読みましょう
5. Mojitoをより良くするために、[Github](http://github.com/)上の、[Mojito open source project](http://github.com/yahoo/mojito)に参加しましょう

# Mojito APIを使う
MojitoのAPIには、Cookie, URL, リソース, REST, 国際化, といった様々なパラメータを扱うためのメソッドやアドオンが含まれています。APIを理解するために、以下の概要をよく読み、Mojitoアプリケーションを作りながら、APIドキュメントを参照すると良いでしょう。

* [Mojito API Overview](http://developer.yahoo.com/cocktails/mojito/docs/api_overview/)
* [Mojito API Documentation](http://developer.yahoo.com/cocktails/mojito/api)

# ライセンスと協力について
Mojitoは[BSDライセンス](https://github.com/yahoo/mojito/blob/master/LICENSE.txt)に基づいています。もしあなたが、Mojito Projectに協力したい場合、[Mojito Contributor Licence Agreement](http://developer.yahoo.com/cocktails/mojito/cla/)をよく読んでください。

# サポートとコミュニティについて
Mojitoについて質問や提案は、[YDN: Mojito Forum](http://developer.yahoo.com/forum/Yahoo-Mojito)にて受け付けています。もし質問があったり、テクニカルサポートを必要とするならば、こちらのForumを使ってください。
MongoidでReplicaSet secondaryからのreadを許可し、接続失敗時のリトライ回数を指定する


## 課題

ReplicaSetでread_secondary => tureにしている時、読みに行くmongoはランダムに決定される。
これが失敗すると`Mongo::ConnectionFailure`が発生するのだが、デフォルトだとそのままリトライせずにエラーとなる。

failover復旧時やindex作成時などsecondaryがblock状態の時にも、何度かリトライするようにしたい。

<small>※注: background => trueで実行したときprimaryは確かにbackground実行になっているが、secondaryはblockされる</small>


## 解決

mongoid.ymlに`max_retries_on_connection_failure`オプションを追加する。

~~~~ruby:mongoid.yml
production:
  database: myapp
  hosts: [[100.100.100.100, 27017],
          [200.200.200.200, 27017],
          [300.300.300.300, 27017]]
  pool_size: 99
  read_secondary: true
  max_retries_on_connection_failure: 5
~~~~


## 参考

> ### Connection Failures
>
> Imagine that either the master node or one of the read nodes goes offline. How will the driver respond?
>
> If any read operation fails, the driver will raise a `ConnectionFailure` exception. It then becomes the client's responsibility to decide how to handle this.
>
> If the client decides to retry, it's not guaranteed that another member of the replica set will have been promoted to master right away, so it's still possible that the driver will raise another `ConnectionFailure`. However, once a member has been promoted to master, typically within a few seconds, subsequent operations will succeed. Note that this does not prevent exception in the event of a primary failover.
>
> The driver will essentially cycle through all known seed addresses until a node identifies itself as master.
>
> <cite>[Ruby Mongo drive](http://api.mongodb.org/ruby/current/file.REPLICA_SETS.html)</cite>

---

> If you would also like Mongoid to retry operations if a Mongo::ConnectionFailure occurs you may specify this option in your config. Mongoid will retry the operation every half second up to the limit that is set. This defaults to 0.
>
> ~~~~~~~~~~
> max_retries_on_connection_failure: 3
> ~~~~~~~~~~
>
> Note that Mongoid does not handle reconnection at the time of this documentation, so you'll have to catch the connection errors and retry yourself in the meantime.
> 
> <cite>[Mongoid公式ドキュメント](http://mongoid.org/docs/installation/replication.html)</cite>


### その他ソース

http://groups.google.com/group/mongoid/browse_thread/thread/700b5e0c5249baed?pli=1
http://stackoverflow.com/questions/10221198/mongooperationfailure-repeatedly-happening-in-ec2-what-to-do
IBOutletCollectionの順序性が無い問題の解決を図りました

複数のUIButtonやUILabelをIBOutletCollectionに
まとめると最初からNSArrayに入っているので使い勝手がよいはず
なのですが順序がグチャグチャになってしまう欠点があります。

それで解決方法です。

```objectivec

@interface UIControl (sorted)
- (NSComparisonResult)compareByY:(UIControl*)control;
@end
@implementation UIControl (sorted)

- (NSComparisonResult)compareByY:(UIControl*)control
{
    NSComparisonResult result;
    if (self.frame.origin.y <control.frame.origin.y) {
        result=NSOrderedAscending;
    }else if(self.frame.origin.y > control.frame.origin.y){
        result=NSOrderedDescending;
    }else {
        result=NSOrderedSame;
    }
    return result;
}
@end
```

上記のようにカテゴリでソート用比較メソッドを追加し

```objectivec

- (void)viewDidLoad
{
    [super viewDidLoad];
    self.buttonAnswers=[self.buttonAnswers sortedArrayUsingSelector:@selector(compareByY:)];
    
    
}
```
UIViewContorollerの実装内でソートをかけるわけです。
配置座標のY値でソートしています。
だいたい並び順でソートしたいというパターンだと思いますので。
サーバーとローカルでファイルをやり取りする


基本はscpコマンド

```
scp kara:/home/hoge/backup.sql /Users/hoge/
#scp 設定したサーバー名:コピー元パス コピー先パス
```

~/.ssh/にconfigを設定していれば、パスの前に「servername:」という風にしてサーバーを指定できる。
local(mac)のプロジェクトフォルダをサーバーに差分アップロードする方法


####rsyncを使います。
```sh
rsync -auv --delete -e ssh 転送元のパス 転送先のパス
```
```sh:実例
rsync -auv --delete -e ssh /Users/hoge/Dropbox/karakara kara:/home/hoge/sites
```

##オプションの説明
###-aはアーカイブモード
基本的な設定をこれだけで指定できる。
詳細は

- ディレクトリを再帰的にコピーする (-r)
- シンボリックリンクを、そのままシンボリックリンクとしてコピーする -(-l)
- パーミッションをそのままコピーする (-p)
- タイムスタンプをそのままコピーする (-t)
- グループをそのままコピーする (-g)
- ファイルオーナー (所有者) をそのままコピーする (-o)
- デバイスファイルやを特殊ファイルを、そのままコピーする (-D)

####-uはアップデート
####-vは転送情報の表示
#### --deleteは転送元のファイルが無い場合転送先のディレクトリからも削除する。
####-eはサーバーとの接続方法を指定。
この場合sshで接続している。
あらかじめ~/.ssh/にconfigを設定しているので

	kara:/home/hoge/sites

だけで接続できる。

##サーバーをリロードさせて反映する。

```
ssh kara
sudo /etc/init.d/httpd reload
```

#####参考リンク
[rsync の使い方、オプションについてのまとめ](http://futuremix.org/2011/02/rsync)

[UNIXの部屋 コマンド検索:rsync (*BSD/Linux)](http://x68000.q-e-d.net/~68user/unix/pickup?rsync)
XMonad の Resume (<M-q>) が失敗する問題に対処する

xmonad: executeFile: resource exhausted (Argument list too long)
なやつ。
ながすぎる引数で状態を渡しているのが原因で失敗していたので、一時ファイルを使うように。

```Resume.hs
{-# LANGUAGE ScopedTypeVariables #-}

module Anekos.Resume (withStrongResume, reload) where


import Control.Exception (catch, bracket)
import Control.Monad (void)
import Data.List (elemIndex)
import Data.Map (toList)
import Data.Maybe (mapMaybe)
import Prelude hiding (catch)
import System.Directory (removeFile)
import System.Environment (getArgs, withArgs)
import System.Exit (ExitCode(..))
import System.IO (FilePath)
import System.Posix.Files (fileExist)
import System.Posix.Process (executeFile)
import System.Process (runCommand, waitForProcess)
import XMonad
import qualified XMonad.StackSet as SS


stateFilepath :: FilePath
stateFilepath = "/tmp/xmonad-state"


withStrongResume :: IO () -> IO ()
withStrongResume act = do
    args <- newArgs
    withArgs args act

-- ref: restart@XMonad/Operations.hs

reload :: X ()
reload = do
    broadcastMessage ReleaseResources
    io . flush =<< asks display
    text <- gets $ show . (\s -> windowSetData s : extState s)
    io $ writeFile stateFilepath text
    whenX (recompile True) $ catchIO (executeFile "xmonad" True [] Nothing)
  where
    windowSetData   = show . SS.mapLayout show . windowset
    extState        = return . show . mapMaybe maybeShow . toList . extensibleState
    maybeShow (t, Right (PersistentExtension ext)) = Just (t, show ext)
    maybeShow (t, Left str)                        = Just (t, str)
    maybeShow _                                    = Nothing


newArgs :: IO [String]
newArgs = do cnt <- readFile stateFilepath
             let args = cnt `seq` read cnt
             removeFile stateFilepath
             return ("--resume" : args)
          `catch`
          \(e::IOError) -> return []

```


```xmonad.hs

import Anekos.Resume (withStrongResume)

import XMonad


main = do
  withStrongResume $ xmonad $ defaultConfig
    { borderWidth        = 0
    , 
    -- ....
    } `additionalKeysP` myKeys

myKeys = [("M-q",       reload)]


```

https://bitbucket.org/anekos/xmonad-conf/changeset/e60bfb3ac83f
MonadMemoの例

~~~ {haskell}
{-# LANGUAGE FlexibleContexts #-}
import Control.Applicative
import Control.Monad.Memo                                       

f :: (Functor m, Applicative m, MonadMemo Int Float m)
     => (Int -> m Float)
     -> (Int -> m Float)
     -> (Int -> m Float)
f a b 0 = (/) <$> memo a 0 <*> memo b 0
f a b n = do
  an1 <- memo a (n+1)
  b0  <- memo b 0
  cs  <- mapM (memo c) [0..(n-1)]
  bs  <- mapM (memo b) $ reverse [1..n]
  return $ (an1 - sum (zipWith (*) cs bs)) / b0
  where
    c = f a b

{-
f a b 0 = (a 0)/(b 0)
f a b n = ((a (n+1)) - sum (zipWith (*) cs bs)) / (b 0)
  where
    c = f a b
    cs = map c [0..(n-1)]
    bs = map b $ reverse[1..n]
-}

main :: IO ()
main = do
  let a n = return $ fromIntegral n
      b n = return $ fromIntegral n + 100
  print $ sum $ map (startEvalMemo . f a b) [1..100]
~~~
こんな感じなんでしょうか…？
Railsで使ってる間に合わせのCSS

Railsやるときに「あとでちゃんとCSS作るけど、今はテキトーなスタイルでいいや」っていうときに使ってるCSS。わかる人にはわかる某サイトのデモを意識した。

```css:application.css.scss
//= require_self
//= require_tree .

html {
  background-color: #4B7399;
  font-family: Verdana, Helvetica, Arial;
  font-size: 14px;
}

body {
  background-color: #FFFFFF;
  border: 1px solid #000000;
  margin: 50px auto;
  padding: 20px;
  width: 680px;
}

p {
  margin-bottom: 10px;
}

h1, h2 {
  font-weight: bold;
  margin-bottom: 10px;
}

h1 {
  font-size: 34px;
}

h2 {
  font-size: 21px;
}
```
Parallels Desktop for Mac を使ってOSXとWin7のEmacsを横に並べてみた


![parallels_shell](http://cdn-ak.f.st-hatena.com/images/fotolife/t/tuto0621/20120428/20120428224407_original.jpg?1335620672)

左上 : OSXのターミナル
右上 : OSX, Cocoa Emacs
左下 : cygwinのbash
右下 : Win7 Emacs, gnupack

*iMac (Late 2009)* ですがOSXとWinのEmacsで動作速度の違いはほぼ体感出来ません。起動速度でいえばWin版の方が早い位。

これでやっと、**作成したソフトウェアのMac版とWin版の動作確認がマシン一台で**出来るようになりました、万歳！！

Linuxはもちろん、Win8 Preview版もインストール出来るようなので機会があれば試してみようと思います。

洞窟物語も動きました。(Mac版あるじゃん！とかいっちゃ駄目です)

![洞窟物語](http://cdn-ak.f.st-hatena.com/images/fotolife/t/tuto0621/20120428/20120428230440_original.jpg?1335621903)
Ext.Msg.alert や Ext.Msg.confirm のボタン文字列を変更する


デフォルトだと 'Yes' 'No' になっているが、'はい','いいえ' などに変更する場合は以下のようにする。詳細は sdk/src/MessageBox.js を参照のこと。

```CoffeeScript:app.coffee
# change messagebox
MyApp.MessageBox = Ext.MessageBox
Ext.apply MyApp.MessageBox,
  YES: { text: 'はい', itemId: 'yes', ui: 'action' }
  NO: { text: 'いいえ', itemId: 'no' }
Ext.apply MyApp.MessageBox,
  YESNO: [MyApp.MessageBox.NO, MyApp.MessageBox.YES]
MyApp.Msg = new Ezuko.MessageBox
```

使う時には、変更したクラスの方を使う

```
MyApp.Msg.confirm "実行確認", "実行していいですか？", (buttonId, value, opt) ->
  if (buttonId == 'yes')
    # do awesome action

```
UIDisplayControllerのSearchBarをデフォルトで非表示にする

UINavigationControllerとUITableViewをつかったいわゆるMaster-Detailアプリケーションを作る際に、SearchDisplayControllerも用いる場合、たいていUITableViewのHeaderViewにSearchBarがついてしまって過剰にスペースをとってしまう場合がある。

デフォルトアプリの「メモ」などでは、最初は表示されていなくて下にスライドさせるとぴょこっと出てくるようになっているので、そうする場合のTIPS。

実装は簡単で、以下のように書くだけ。

```objective-c:code

- (void)viewWillAppear:(BOOL)animated
{
    [super viewWillAppear:animated];
    
    // 最初に表示されたときに検索バーを非表示に
    [self.tableView setContentOffset:CGPointMake(0.0f, self.searchDisplayController.searchBar.frame.size.height)];

}

```
Vimで現在割り当てられているショートカットキーを調べる方法

VIｍで、新しいプラグインを入れたり、.vimrc を書き換えた直後に、今まで使っていたキーバインドの挙動がおかしくなったりすることがあります。

そんな時、どうやって解決するかですが、
ノーマルモードのキーバインドがおかしい場合は、VIMから以下のコマンドを実行してみてください。

```vim:
:verbose nmap
```

インサートモードの場合は、

```vim:
:verbose imap
```

これで、各キーになにが割り当てられているか、どのプラグインが原因かが分かります。

# 参考記事

vim-users.jpの記事
[Hack #148: Key mappingの設定を確認する](http://vim-users.jp/2010/05/hack14)
VIMのコメントアウトプラグインtcommentをAutoHotKeyに対応させる

# tcomment プラグインのインストール

ここでは、NeoBundle を使って、インストールします。

.vimrc に以下の記述を追加して、

```vim:.vimrc
Bundle 'tomtom/tcomment_vim'
```

以下のコマンドでインストール。

```vim:
:NeoBundleInstall
```

# AutoHotKeyのファイルタイプを追加

tcomment プラグインは、標準では AutoHotKeyのファイルタイプはサポートされていないので、
.vimrc に以下のコードを追加する。

```vim:.vimrc
if !exists('g:tcomment_types')
  let g:tcomment_types = {}
endif
let g:tcomment_types['autohotkey'] = '; %s'
```

# コメントアウト〜解除

1. 現在行をコメントアウト～解除する: (ノーマルモードで) `gcc`
2. 選択範囲をコメントアウト～解除する: (ヴィジュアルモードで選択中に) `gc`
MacでOracle JDK 7を使う


jdk-7u4からMac版もパッケージが配布されるようになったので、その設定方法。

# ダウンロード

こちらからMac用のjdk-7u4-macosx-x64.dmgをダウンロードしてくる。
http://www.oracle.com/technetwork/java/javase/downloads/jdk-7u4-downloads-1591156.html

# インストール

パッケージを展開するとJDK 7 Update 04.pkgが入っているのでインストールする。
インストールが完了すると、/Library/Java/JavaVirtualMachines/1.7.0.jdkが出来上がる。

# 設定

その後、「アプリケーション > ユーティリティ」の下にあるJava Preferencesを実行して、Java SE 7の順番を一番上に持っていく。

![Java Preferences](http://www.oracle.com/ocom/groups/public/@otn/documents/webcontent/1588945.png "Java Preferences")

# Eclipseの設定

Eclipse上でインストールしたjdk1.7を使うには、Eclipseの環境設定内の「Installed JREs」を開く。
「Add」ボタンを押して、「Standard VM」を選択する。

その次の画面でJRE homeの欄に「/Library/Java/JavaVirtualMachines/1.7.0.jdk/Contents/Home」と入力。
※ 「Directory」ボタンの中だとこのディレクトリまで辿って行けないので注意。

「JRE Name」はなんでも好きな名前で良い。

そして、「Finish」すると、「Installed JREs」の一覧に今追加したJREが表示されている。
これをデフォルトで使用したい場合は、チェックを入れておくと良い。

これでEclipseのプロジェクトでjdk1.7を使えるようになります。

※ Eclipse自体のバージョンはIndigo以降である必要があります。
背景を透過虹色グラデーションにするためのcss


```css:
.rainbow {
  background: -moz-linear-gradient(left,
	rgba(255,0,0,0.2),
	rgba(255,69,0,0.2),
	rgba(255,255,0,0.2),
	rgba(0,128,0,0.2),
	rgba(0,0,255,0.2),
	rgba(75,0,130,0.2),
	rgba(238,130,238,0.2)
  );
  background: -webkit-gradient(linear, left center, right center,
    from(rgba(255,0,0,0.2)),
	color-stop(14%, rgba(255,69,0,0.2)),
	color-stop(28%, rgba(255,255,0,0.2)),
	color-stop(42%, rgba(0,128,0,0.2)),
	color-stop(56%, rgba(0,0,255,0.2)),
	color-stop(70%, rgba(75,0,130,0.2)),
	to(rgba(238,130,238,0.2))
  );
}
```
Emacsで現在行や選択範囲を簡単に複製する duplicate-thing.el をパワーアップさせました


![duplicate-line.el](http://cdn-ak.f.st-hatena.com/images/fotolife/t/tuto0621/20120427/20120427232210.jpg?1335536582)

現在行や選択範囲を簡単に複製するためのEmacsLispです。 [過去の記事](http://qiita.com/items/3c783e47f0b9ccf8183e)

## 更新内容

- 'C-u'(コメントアウト)と'C-u 4'(4回繰り返し)の違いを判別出来るように (thanks a_ars)
- githubに [README.markdown](https://github.com/ongaeshi/duplicate-thing) を追加


## インストール＆設定
 [こちらの記事](http://d.hatena.ne.jp/tuto0621/20120321/1332329935) をどうぞ
keyremap4macbookで:と;をswapする

vimの設定だけswapしていると他の場面で逆になるので、私は:と;をswapしています。keyremap4macbookのデフォルトの:と;のswapがうまく動いていないようだったので、自分で設定ファイルを書きました。+と*もswapされてしまうのでご注意ください。

keyremap4macbookでmisc&uninstallタブからopen private.xmlを押下するとfinderが開くので、そこにあるprivate.xmlに下記を上書きして保存し、Change KeyタブのReload XMLを押すと、一番上にswap jis_colon and semicolonと表示されるので、それにチェックを入れてください。

```xml:private.xml
<?xml version="1.0"?><root>  <list>    <item>      <name>Swap JIS_Colon and Semicolon</name>      <identifier>private.swap_jis_colon_and_semicolon</identifier>      <autogen>--KeyToKey-- KeyCode::SEMICOLON, KeyCode::JIS_COLON</autogen>      <autogen>--KeyToKey-- KeyCode::JIS_COLON, KeyCode::SEMICOLON</autogen>	</item>  </list></root>
```
なんでvimは:と;を逆につくらなかったのか、不思議でしょうがないです。
ファイルの種類に応じてref/perldocとref/pydocとref/refeを呼びわける

[Unite](https://github.com/Shougo/unite.vim)から[vim-ref](https://github.com/thinca/vim-ref)を呼び出すことができるけど、いちいち`:Unite ref/perldoc`とか打つの面倒だし、かと言ってperldocとpydocに別々のキーマッピングをするのも嫌なので、perlのソースを開いている時は`ref/perldoc`を開き、pythonの時は`ref/pydoc`を開くようにしたかった。

##追記：ベターな方法

`&filetype`で現在のファイルタイプを参照できることが分かったので以下のように変更した

```vim:.vimrc
function! UniteRefDoc()                                 
    if &filetype =~ 'perl'                              
        Unite ref/perldoc                               
    elseif &filetype =~ 'python'                        
        Unite ref/pydo
    elseif &filetype =~ 'ruby'
        Unite ref/refe                          
    endif                                               
endfunction                                             
                                                        
nnoremap <silent> <space>u<space> :<C-u>call UniteRefDoc()<CR> 
```

##昔の内容

perlとpythonのバッファから入ったり出たりするタイミングでマッピングを上書きしているだけ。

vim-scriptに明るくないので、もっといい方法があればコメント下さい！

```vim:.vimrc
function! s:unite_ref_clear()
  noremap <space>u<space> <Nop>
endfunction
function! s:unite_ref_perldoc()
  noremap <silent> <space>u<space> :<C-u>Unite ref/perldoc<CR>
endfunction
function! s:unite_ref_pydoc()
  noremap <silent> <space>u<space> :<C-u>Unite ref/pydoc<CR>
endfunction
autocmd BufEnter *.pl call s:unite_ref_perldoc()
autocmd BufLeave *.pl call s:unite_ref_clear()
autocmd BufEnter *.py call s:unite_ref_pydoc()
autocmd BufLeave *.py call s:unite_ref_clear()
```
phpDocumentorインストール


## pearの場合
```bash:console
$ pear channel-discover pear.phpdoc.org
$ pear install phpdoc/phpDocumentor-alpha
```

## pyrusの場合
### システムのPEARへのインストール
```bash:console
$ php pyrus.phar set auto_discover on # 設定済みなら不要
$ php pyrus.phar install pear.phpdoc.org/phpDocumentor-alpha
```

### プロジェクトローカルのPEARへのインストール
```bash:console
$ cd /path/to/pear
$ php pyrus.phar set auto _discover on # 設定済みなら不要
$ php pyrus.phar `pwd` install pear.phpdoc.org/phpDocumentor-alpha
```
プロジェクトローカルなPEARライブラリ設置方法


## 初期設定
pyrusコマンドの前にローカルPEARライブラリのパスを指定することで，指定したライブラリ上で作業を行うことができる．

```bash:console
$ cd /path/to/pear
$ wget http://pear2.php.net/pyrus.phar
$ php pyrus.phar `pwd` set bin_dir `pwd`/bin
```


## PHPUnitインストール例
PHPUnitのインストール例．auto_discoverをonにして，チャンネルを自動的に追加できるように設定する．

```bash:console
$ cd /path/to/pear
$ php pyrus.phar set auto_discover on
$ php pyrus.phar `pwd` install pear.phpunit.de/phpUnit
```
TwitterBootstrap参考サイト

##基本

Twitter Bootstrap (v2.0)の基礎 - ドットインストール
http://dotinstall.com/lessons/basic_twitter_bootstrap_v2

Twitter Bootstrap
http://twitter.github.com/bootstrap/index.html

##Railsで使う

\#328 Twitter Bootstrap Basics - RailsCasts
http://railscasts.com/episodes/328-twitter-bootstrap-basics?language=ja&view=asciicast

##LESS

LESS - CSSプリプロフェッサ | CSS Radar | Mini Books For Front End Developers
http://css.studiomohawk.com/less/2011/04/03/use_less_to_clean_up_your_css/

##カスタマイズ

Bootstrapをもっと活用するためのカスタマイズツールやリソースのまとめ | コリス
http://coliss.com/articles/freebies/resources-that-complement-twitter-bootstrap-by-webresourcesdepot.html

とりあえず。
また追加する。
CIFilterを使った簡単な画像加工

UIImageにCIFilterをかけてその結果をUIImageで取り出す。
画像の四隅が暗くなるVignetteフィルターでテスト。

```objc
// ソース画像を準備
UIImage *source = [UIImage imageWithContentsOfFile:[[NSBundle mainBundle] pathForResource:@"IMG_0001" ofType:@"JPG"]];
CIImage *filteredImage = [[CIImage alloc] initWithCGImage:source.CGImage];

// CIFilterを作成し、ソース画像とエフェクトのパラメータをセットする
CIFilter *filter = [CIFilter filterWithName:@"CIVignette"]; 
[filter setValue:[NSNumber numberWithFloat:1.0] forKey:@"inputIntensity"];
[filter setValue:[NSNumber numberWithFloat:2.0] forKey:@"inputRadius"];
[filter setValue:filteredImage forKey:@"inputImage"];
// 結果を取り出す
filteredImage = filter.outputImage;

/*
 // CIFilterはチェーンが可能。コメント外すとCIVignetteが二重にかかる
 [filter setValue:filteredImage forKey:@"inputImage"];
 filteredImage = filter.outputImage;
 */

// CIImageをUIImageに変換する
CIContext *ciContext = [CIContext contextWithOptions:nil];
CGImageRef imageRef = [ciContext createCGImage:filteredImage fromRect:[filteredImage extent]];
UIImage *outputImage  = [UIImage imageWithCGImage:imageRef scale:1.0f orientation:UIImageOrientationUp];
CGImageRelease(imageRef);

// 表示
UIImageView *imageView = [[UIImageView alloc] initWithFrame:self.view.bounds];
imageView.contentMode = UIViewContentModeScaleAspectFit;
[imageView setImage:outputImage];

[self.view addSubview:imageView];
```
WEBサーバのログからアクセス数順にIPアドレスを抜き出すワンライナー


~~~bash
$ cat /opt/nginx/logs/access.log | awk '{print $1}' | sort | uniq -c | sort -nr
1900401 10.21.11.21
  64325 10.21.62.40
  11434 101.155.17.53
    518 101.155.17.78
    264 101.155.25.53
     96 101.155.33.170
     24 102.10.123.55
     16 102.10.157.178
     15 102.11.138.100
      3 107.11.125.51
      1 107.11.125.50
~~~~

アドレスは適当に変えてる。
実行時にSBJsonがロードできないエラー

# エラーメッセージ
>
dyld: Library not loaded: /Library/Frameworks/SBJson.framework/Versions/A/SBJson
  Referenced from: /foo/bar
  Reason: image not found

# 調査
`@rpath/Framekworks/...`みたいなエラーなら`Runpath Search Path`に`@loader_path/../Frameworks`などを追加すればいいんだけど，そうではない．なぜわざわざ/Library/Frameworksを読みにいっているのかわからない…

# 結論
ビルドメッセージをチェックすると，存在しないディレクトリを-Fオプションで指定しているというwarningが出ていた．TargetsのBuild SettingsでFramework Search Pathを見ると指定した覚えのないパスが指定されていた．
それを消し`$(inherited)`と`"$(SRCROOT)"`の2つにすると解決した．存在しないパスを指定すると/Libraryから探しにいくのは何なんだろう…?

# 教訓
意味不明なエラーが出たときはTargetsのBuild Settingsを良く読んでみること．これははまった…
Ubuntu11.10にJDK 6をインストール

Androidアプリを開発するにあたり、Ubuntu11.10にJava環境が必要だったのでそのときの手順をまとめます。

コンソールで、

```
$ sudo add-apt-repository ppa:ferramroberto/java
```

ppa追加しますか的な表示が出るので[Enter]で続行します。

```
$ sudo apt-get update
$ sudo apt-get install sun-java6-jdk sun-java6-plugin
```

また、続行しますか的な質問されるので[y][Enter]を押して続行します。その後「sun-java6-jreを設定しています」という表示が出るので[→]で了解[Enter]、[←]ではいを選択し[Enter]します。
Associative Object は自動で release, property は自分で release

[Associative Object](http://developer.apple.com/library/mac/#documentation/Cocoa/Conceptual/ObjectiveC/Chapters/ocAssociativeReferences.html#//apple_ref/doc/uid/TP30001163-CH24-SW3) を Category に付けたときにリリースするためには dealloc を swizzling しなきゃならないのかと思ったら自動で開放されるそうなので試してみた。
だったら、 property も自動で開放してくれていいのではと思ったがやっぱりダメだった。
Objective-C ってこういうコードサンプル書くときには冗長で面倒ですね。もっとシンプルに書けないかな?

~~~ main.m
/* clang main.m -o main -framework Cocoa && ./main */
#include <stdio.h>
#import <Cocoa/Cocoa.h>
#import <objc/runtime.h>

#define TRACE(msg) printf("%s %s\n", __PRETTY_FUNCTION__, msg)

@interface Content : NSObject
@property (nonatomic, retain) NSString *msg;
@end

@implementation Content

@synthesize msg=_msg;

- (id)initWithMessage:(NSString *)msg
{
    self = [super init];
    if (self) {
        self.msg = msg;
    }
    return self;
}

- (void)dealloc
{
    TRACE(self.msg.UTF8String);
    self.msg = nil;
    [super dealloc];
}
@end

@interface Container : NSObject
@property (nonatomic, retain) Content *content;
@end

static char associativeKey;
@implementation Container

@synthesize content=_content;

- (id)init
{
    self = [super init];
    if (self) {
        id associatedObject = [[[Content alloc] initWithMessage:@"associatedObject"] autorelease];
        objc_setAssociatedObject(self, &associativeKey, associatedObject, OBJC_ASSOCIATION_RETAIN_NONATOMIC);
        self.content = [[[Content alloc] initWithMessage:@"property"] autorelease];
    }
    return self;
}

- (void)dealloc
{
    TRACE("");
    self.content = nil;
    [super dealloc];
}

@end

int main(int argc, char **argv)
{
    @autoreleasepool {
        [[Container new] autorelease];
    }
    return 0;
}
~~~

~~~
$ clang main.m -o main -framework Cocoa && ./main
-[Container dealloc] 
-[Content dealloc] property
-[Content dealloc] associatedObject
~~~
Command Object のコレクション的なプロパティ


Command Object でコレクション的なものを扱うことはできない. Data binding がうまく行かない.

アクション・メソッドの引数に与えるのではなく, アクション・メソッド内で明示的に (bindData()) やっても同じ.

 (例えば画面上の) 不定個の要素を扱いたいとき (params に foo[0] みたいなキーを与える場合) には, 仕方ないから「永続化しない」ドメインクラスを作るしかない (こっちは機能する).

でもドメインクラスをいっぱい作ると悪影響を与える場合もある (artefacts 全体に対して何かをする - メソッドをインジェクトするなど - 場合が多いから, 起動が遅くなったり, メモリをくったりする).
spring-security 環境下で integration test する


Spring-security-core plugin をインストールしている時, integration test すると, spring-security 環境下になるので, ユーザのログインをシミュレートする必要がある.

その場合, 次のようにする

```groovy:
import org.codehaus.groovy.grails.plugins.springsecurity.SpringSecurityUtils

SpringSecurityUtils.doWithAuth('admin') {    // ......}
```

see. `src/java/org/codehaus/groovy/grails/plugins/springsecurity/SpringSecurityUtils.groovy`
Spock plugin による script の上書き


Spock plugin をインストールすると create-{unit,integration}-test は Spock 用に上書きされる.

ただし template は提供されないので, 現状ではファイル名が変わる (FooSpec.groovy) だけで, スケルトンは変わらない.

Spec と Junit は使い分けたい時もあるので, この中途半端さはあまり嬉しくない.

see. spock-0.6/scripts/_Events.groovy#eventDefaultStart
interactive モードで使えないコマンド


interactive モードは `grails` プロンプトの REP (Read-Eval-Print) ループと思えばよい. 今までの ｀$ grails interactive｀ と基本的に同様 (このコマンドは将来なくなる). 引数無しの ｀$ grails｀ すると, interactive モードで起動する.

ただし, 以下の状況では interactive モードでは動かないので注意.

* (もちろん) create-app, create-plugin コマンド
* install-plugin コマンド
* geb テスト (多分一般的に functional tests 全部)
* inplace plugin の更新に対する反応 (一部)

コマンド名やクラス名などをある程度 completion してくれるのも少しは便利 (これは普通のシェルで使えるマクロもあるけど).

test-app を繰り返す工程では, grails の起動 (高コスト) を繰り返さずに済む分便利だけど, 上に書いたような状況に気付かずにいると, はまる.
2次元配列を列で取り出して演算する

2次元配列を縦に取り出して合計とりたいなぁとか平均とりたいなぁとか思ってしまうことがあります。
そんなときに1行で書きたいなぁと思ったら、以下のようにします。

```
var tmp = a.SelectMany(
	x => x.Select((item, index) => new { item, index }))
	.GroupBy(y => y.index, (key, z) => { return /*ここに演算方法を記述*/ }
);
```

例えば、平均を計算したい場合は以下のようにします。

```
double[][] a = new double[][]{
	new  double[]{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 },
	new  double[]{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 },
	new  double[]{ 0, 1, 2, 3, 4, 5, 6, 7, 8, 9 }
};

var tmp = a.SelectMany(
	x => x.Select((item, index) => new { item, index }))
	.GroupBy(y => y.index, (key, z) => { return z.Average(n => n.item); }
);
```
herokuでredmine

プロジェクト管理ソフトウェア、Redmineをherokuのmicro instance(無料)で試してみた。
参考記事：http://docs.komagata.org/4558
(バージョンは古くなるが、heroku用に設定をいじらずに済むredmineが置いてある。感謝。)

```console
#rvmは導入してるものとします
% rvm use 1.8.7
#  --defaultにすると安心
% rvm gemset create redmine
% rvm gemset use redmine

% gem install heroku sqlite3-ruby taps
% gem install rails -v=2.3.5

% git clone git://github.com/komagata/redmine.git -b 0.9.6-for-heroku
% cd redmine
% heroku create --stack bamboo-ree-1.8.7 {作るアプリ名}
# stack引数を忘れずに！
% heroku db:push
# 指示通り、作ったアプリ名を入力　結構重い

% git init
% git add .
% git commit -m "first commit"
% git remote add heroku git@heroku.com:{作ったアプリ名}.git
% git push heroku 0.9.6-for-heroku:master
```

##注意点
- redmineではrailsやgemのバージョンが古いものを要求されるので、rvmなどgemfileを管理できるものを入れた方が良い
- heroku createの引数を忘れずに。後で1.8.7にしようとしても何故かmigrateが固まって変更できなかった
- rvmにてherokuコマンドがreadlineなどのエラーで機能しない場合、以下の3つを入れる

```console
% rvm pkg install readline
% rvm pkg install openssl
% rvm pkg install zlib
# それらを参照する形で再コンパイル。
% rvm reinstall 1.8.7 --with-openssl-dir=$HOME/.rvm/usr --with-readline-dir=$HOME/.rvm/usr --with-zlib-dir=$HOME/.rvm/usr
```
それでも直らなければ以下を。
参考：http://d.hatena.ne.jp/TrinityT/20110122/1295685900
キャリッジリターン(CR) \r とラインフィード(LF) \n


いつも混同するのでメモ。

* キャリッジリターン(CR)（復帰、0x0D） \r
* ラインフィード(LF)（改行、0x0A） \n

**rが入っている方がCR**(キャリッジリターン)ね。よし覚えた！

# 各OSの改行コードの違い

* unix	LF	\n
* Mac	CR	\r
* Windows	CR+LF	\r\n
行末を適切な数のスペースで埋めて行の幅を整える

タイトルだけでは何のことか分からないかもしれませんが，やりたいことは以下のような感じです．

```
aa
bbbbbb
ccc
```

こういうファイルを，行末にスペースを適切な数埋めて…

```
aa_____
bbbbbb_
ccc____
```

という形にしたいわけです (見えるようにするために，スペースの代わりに _ を表示しています)．ときどきこれをしたい要求が出てきます．それを Vim の基本操作だけで実現する方法です．もしかしたらもっといい方法はあるかもしれません．

## 追記

もっといい方法がやはり存在しました．コメント参照．Linda_pp さんありがとうございます．

(追記終了)

```
aa     # 1. 先頭行の末尾にカーソルを置き (gg$ でおｋ)，C-v で矩形選択 visual mode に入ります．
bbbbbb
ccc    # 2. 末尾行の末尾にカーソルを移動させ (G$ でおｋ)，
       # S-a でカーソル位置の後ろに挿入する状態にして，
       # ここでスペースを十分な量 (bbbbbb を超えるだけ) 入力します．
```

これで，以下の様な状態になるはずです．

```
aa__________
bbbbbb__________
ccc__________
```

ここで，aa の後ろのスペースの，bbbbbb を超える位置 (*) にカーソルを移動させ，以下の操作を行います．

```
aa_____*____     # 1. * の位置にカーソルを持っていき，C-v で矩形選択 visual mode に入ります．
bbbbbb__________
cc_____+____     # 2. + の位置までカーソルを移動させ (100j とかで OK)，
                 # その後行末までカーソルを $ で移動します．
```

$ での移動は，言い方難しいですけど「完全に末尾まで」移動が行われます．カーソル移動として l 押しっぱで cc の行の末尾まで移動しても，bbbbbb の行の行末まで移動出来ません．(実を言うとさっきスペースを挿入するときに使った G$ の $ も同じことだったりします．)

で，この状態から x で文字の削除を行うと，

```
aa_____
bbbbbb_
ccc____
```

となり，行の幅が整います．これで目的達成です．

行末に十分な量のスペースを挿入するのは，コマンドモードに入って

```
%s/$/______________/g
```

という置換を行うことでも出来ますが (※ここでもスペースを _ で書いています)，スペースの数が足りなかったり (bbbbbb の行の幅に追いつかない) することが多い感じです (※あくまで個人の感想です)．なので visual mode で見ながらスペース挿入の方が個人的にいい感じ．

必要となる Vim の知識は，hjkl での移動や x での削除と言った超基礎なもの (そもそも覚えてないと Vim を使うことすら出来ないレベル) を除けば，

* G, gg でのファイル末尾，ファイル先頭への移動
* 100j などの，(数値)(キー) で (キー) による操作を (数値) 回数行う仕組み
* C-v での visual mode (矩形選択) への突入 (※これひっじょーに便利なので知らない人は覚えて損しません！)
* visual mode において，通常時の i や a を S-i や S-a で行うという知識
* $ での行末への完全な移動

となります．矩形選択 visual mode に秘められた可能性は結構無限大だと個人的に思ったりしています．