OmniAICreator/Qiita-1.07M huggingface dataset:
TiShadowの使い方

## はじめに
TiShadowを使って、自動ビルドを目指します。
ただのTi自動ビルドと違い、hotdeploy的な再読み込みをするので速いです。
TiShadowは実機やシミュレーターの垣根なく展開するので、開発時だけでなく検証時にも力を発揮します。

## TiShadow サーバーのインストール
* `nodebrew install 0.6.x`
* `nodebrew use 0.6.x`
* `npm install -g tishadow`
* `tishadow server` [http://localhost:3000](http://localhost:3000)にアクセスできるか確認

## TiShadow アプリのインストール
* [TiShadowアプリのビルド専用SDK](https://github.com/dbankier/TiShadow/downloads)のダウンロードは**不要**になりました

* `git clone https://github.com/dbankier/TiShadow.git`
* `cd TiShadow/app`
* Titanium Studio等でビルドする
* Simulatorや実機にインストールする

## 開発中のアプリを転送する
* 予め`tishadow server`としておき、wifi内からMacに接続できるようにしておく
* Simulatorや実機のTiShadowアプリを起動し、MacのIPアドレスを入力する
* 開発中のアプリルートに移動し、`tishadow`と実行する

## 注意点
* CommonJSスタイル必須。`Ti.include`は動かない。
* '/'からrequireする必要がある
	* ◯ `var _ = require('/lib/underscore')._;`
	* × `var _ = require('lib/underscore')._;`
* Native modulesを動かしたい場合は、TiShadowアプリをビルドする時に含めること
* TiのAPIは全て使えるわけではない。`Ti.App`などは[Includes.js](https://github.com/dbankier/TiShadow/blob/master/app/Resources/api/Includes.js)のリストに追加して、リビルドが必要
* `Ti.API`のlogはTiShadowのwebpageやコンソールにリダイレクトされる
* 開発中のアプリは、通常のSDKでよい
* グローバル変数があると動作しない
* [joli.js](https://github.com/xavierlacot/joli.js)を使う場合は、[b757e00](https://github.com/DianthuDia/joli.js/commit/b757e00)のように書き換えること

## `tishadow`の自動実行
* `bundle install --path vendor/bundle`
* `guard`

```ruby:Guardfile
guard 'shell' do
  watch(%r{Resources/.+\.js}) {`tishadow`}
  callback(:start_begin) { Thread.new {`tishadow server`} unless system('curl -q http://localhost:3000 > /dev/null 2>&1') }
end
```

```ruby:Gemfile
source 'https://rubygems.org'

gem 'guard-shell'
```
git show-branch を使っていないだなんて！

「オレは git の alias こんな風にしてるぜ！」っていう投稿とかブログ記事、よく見かけるし実際かなりお世話になっている（ありがとうございます）。…のだが。

誰も `git show-branch` のエイリアスを設定していなくて信じられない。そんな Git 歴 3 ヶ月の私が通りますよ。

```.gitconfig
[alias]
    sb = show-branch
```

```sh
$ git sb
* [master] Add 'git show-branch'.
 ! [fixes] Introduce "reset type" flag to "git reset"
  ! [mhf] Allow "+remote:local" refspec to cause --force when fetching.
---
  + [mhf] Allow "+remote:local" refspec to cause --force when fetching.
  + [mhf~1] Use git-octopus when pulling more than one heads.
 +  [fixes] Introduce "reset type" flag to "git reset"
  + [mhf~2] "git fetch --force".
  + [mhf~3] Use .git/remote/origin, not .git/branches/origin.
  + [mhf~4] Make "git pull" and "git fetch" default to origin
  + [mhf~5] Infamous 'octopus merge'
  + [mhf~6] Retire git-parse-remote.
  + [mhf~7] Multi-head fetch.
  + [mhf~8] Start adding the $GIT_DIR/remotes/ support.
*++ [master] Add 'git show-branch'.
```

(man git show-branch の実行例から抜粋)

ちゃんと色つける設定にしてれば左側のマークが色分けされる。`*` が current branch で、`!` はそれ以外の HEAD、`-` はマージ、`+` が普通のコミットを表している。

オプションは `--all` と `--more` をよく使う。自分の場合、remote branch との比較でよく使うから、alias で常に `--all` をつけている。

```sh
$ git sb --all
（remote-tracking branch も表示）
$ git sb --more=5
（もっとたくさん表示）
```

いわゆる `git graph` 系と比べて、ブランチ間の進捗状況の差を確認するのに向いていると思う。`git rebase` する前に必ず叩いてる。あと diverge したって怒られた時とか。

----

余談。ついでに、「確認する」系のコマンドを片っ端から一まとめにした `git cfm` っていう alias も作ってある。`.zshrc` に .git のあるディレクトリに移動した時に自動で `git cfm` する設定書いてあるから、実際にはそんなに頻繁に叩いていないけど、色々と作業内容とか忘れがちなので重宝している。

```.gitconfig
[alias]
    sb = show-branch -a
    br = branch
    st = !git status -s && git stash list | cat
    cfm = !git sb && git br && git st
```
`is not` じゃなくて `isnt` が正しい


値のチェックでなんとなく `is not` と書いていましたが、間違いでした。

```coffee
'hello' is 'hello'
-> true

'hello' is not 'hello'
-> false

'hello' is not 'world'
-> false
```

あれ？と思って JS にコンパイルしてみると・・・。

```shell
coffee -c -e "'hello' is not 'world'"
```

```js
// Generated by CoffeeScript 1.3.3
(function() {

  'hello' === !'world';

}).call(this);
```

そう、`not` は `!` なのでした。正しくは `isnt` を使います。

```shell
coffee -c -e "'hello' isnt 'world'"
```

```js
// Generated by CoffeeScript 1.3.3
(function() {

  'hello' !== 'world';

}).call(this);
```
Apache Shiro + Arquillian


Java の認証フレームワーク [Apache Shiro](http://shiro.apache.org/) と テスティングフレームワークの [Arquillian](http://www.jboss.org/arquillian.html) を組み合わせたテストに関して、[Github にサンプル](https://github.com/ceefour/arquillian-shiro-example)が上がっていたのでメモ。

ポイントは以下のようなクラスを用意するところです。

```java:SecurityFacade
@Singleton
public class SecurityFacade {

	Logger logger = LoggerFactory.getLogger(SecurityFacade.class);
	private SecurityManager securityManager;

	@PostConstruct
	public void init() {
		final String iniFile = "classpath:shiro.ini";
		logger.info("Initializing Shiro INI SecurityManager using " + iniFile);
		securityManager = new IniSecurityManagerFactory(iniFile).getInstance();
		SecurityUtils.setSecurityManager(securityManager);
	}

	/*
	 * テストケースでインジェクションできるように、subject という名前で Produces
	 */
	@Produces
	@Named("subject")
	public Subject getSubject() {
		return SecurityUtils.getSubject();
	}
}
```

テストケースはこんな感じ。

```java:SecurityTest
@RunWith(Arquillian.class)
public class SecurityTest {

	/*
	 * 必要なクラスや設定ファイル(beans.xml等)をデプロイ
	 */
	@Deployment
	public static WebArchive deployment() {
		return RESTDeployment.deployment();
	} 
	
	/*
	 * subject をインジェクション
	 */
	@Inject
	private Subject subject;
	
	/**
	 * ユーザ認証が必要なテスト
	 */
	@Test
	public void should_test_after_loggedIn() {
		subject.login(new UsernamePasswordToken("test1", "test1"));
		// 以降、テストの中身
	}
}
```

[サンプル](https://github.com/ceefour/arquillian-shiro-example)では、インターセプター等も利用しているので他の面も参考になります。
内部エンコーディングと違う文字コードでURLエンコーディングする


```
$str = mb_convert_encoding($str, 'EUC-JP');
$encoded_str = rawurlencode($str);
```

ついでに
文字列の文字コードを判定

```
echo mb_detect_encoding($str);
```
とか

```
echo mb_detect_encoding($str, array('ASCII', 'UTF-8', 'EUC-JP'));
```
など。
第二引数のデフォルトはmb_detect_order()で、
手元ではASCIIとUTF-8しか含まれていなくて、EUC-JPが判定できなかった。
Gitを便利で楽に使うためのaliasをいろんなとこから集めて作ってみた(alias ggr='git grep' #=>ググれ！)



## コンセプト

- [dotinstallのgit編](http://dotinstall.com/lessons/basic_git)で再学習しつつ作成
- 70%はググって見つけたパクリで作られてます。
- git configに設定すると、git ~~~ の形式になるので、すべてbashのaliasコマンドとして実装しました。
- prefixとしてgをつけてます。
- 気に入っているコマンドはggr='git grep'のググれ


## alias集

```.bashrc
alias gst='git status'
alias gsts='git status -sb'
alias gstt='git status -uno'
alias gsh='git show'
alias glog='git log'
alias glogp='git log -p'
alias glogf='git log --oneline --stat'
alias glogo='git log --oneline'
alias glogg='git log -p --graph --word-diff --pretty=format:"%Cgreen%h %Creset%cd %Cblue%cn %Cred%d"'
alias graph='git log --graph --date=short --decorate=short --pretty=format:"%Cgreen%h %Creset%cd %Cblue%cn %Cred%d %Creset%s"'
alias grm='git rm'
alias gad='git add .'
alias gcm='git commit'
alias gcmm='git commit -m "$@"'
alias gfix='git commit --amend -m "$@"'
alias gpl='git pull'
alias gps='git push'
alias gco='git checkout'
alias gbr='git branch'
alias gtag='git tag'
alias gdif='git diff'
alias gdifc='git diff --cached'
alias gres='git reset'
alias gresh='git reset --hard "$@"'
alias gme='git merge'
alias ggr='git grep'
alias grem='git remote'
```

## 正直なところ

- たぶん全部使わない
- 結局慣れるまでいつもどおり```git add .```とか入力しちゃっている俺ガイル
Rxを使って、LocationChangedイベントを捕まえる --泣きながらC#

副題が付いていますが、続き物になるなんてことは無いです。

LINQですよLINQ!いや、LINQはわかる。

データを流れるように扱うLINQはわかる。Rxもその発想だってのもまあ、分かる。

わかるんだけど難しい。難しいから挑戦する、そんな日曜の昼下がり。

Rxらしく1行です。

```c#:rxgps.cs
var geoWatcher = new GeoCoordinateWatcher();

Observable.FromEvent<GeoPositionChangedEventArgs<GeoCoordinate>>(geoWatcher, "PositionChanged").
ObserveOnDispatcher().
Select(ev => ev.EventArgs.Position.Location).
Take(1).
Subscribe(location => Debug.WriteLine(location.Longitude.ToString()), () => { Debug.WriteLine("completed"); geoWatcher.Stop(); });

geoWatcher.Start();
```

`take(1)` ・・・？

なんで、`take(1)`なん？

これ外すと、`onCompleted`が呼ばれない。

あれ？でも、`Subscribe`は呼ばれてるよ？データの処理は終わったんじゃないの？？

Rx難しいねー
行頭 → 非空白行頭 → 行末 をローテートする


```vim
" 行頭 → 非空白行頭 → 行末 をローテートする
function! s:rotate_in_line()
    let c = col('.')

    let cmd = c == 1 ? '^' : '$'
    execute "normal! ".cmd

    if c == col('.')
        if cmd == '^'
            normal! $
        else
            normal! 0
        endif
    endif
endfunction

" t に割り当て
nnoremap <silent>t :<C-u>call <SID>rotate_in_line()<CR>
```

この設定を `.vimrc` に書くと，`t` を押すたびに 行頭(`0`の位置) → 非空白行頭(`^`の位置)  → 行末(`$`の位置) → 行頭 ... と順番にカーソルが移動します．
なお，行頭の位置と非空白行頭の位置が同じときは行頭と行末を行き来するようになっています．

※コメントにて行末にマルチバイト文字があるときに問題があることを指摘いただいたので修正しました．ありがとうございます．
tmux入れた on OS X

ふとscreenからtmuxにしようと思ったので、ついでに色々やった。エントリにするのめんどいから箇条書きで。

 * tmux ぶっこむ
  * brew install tmux だけ
  * プレフィクスは.tmux.conf で ``set -g prefix ^Z`` と ``bind ^Z send-prefix`` で変更
  * 後はデフォルトで、PREFIX + ? でヘルプ見て頑張る感じ
  * Option, Command+カーソルキーでpaneのサイズ変更が割り当てられてるけどOS Xのキーバインドと被ってるのでカーソルキーに割り当て直した
 * Cocoa Emacs やめてターミナルから使ってみる
  * ``/Applications/Emacs.app/Contents/MacOS/Emacs -nw`` とすればターミナルから普通に立ち上がる
  * .emacs はフォントの設定を``(window-system)``でスキップさせただけで他はそのままで動いた
  * クリップボードの操作を考えるとCommandをメタキーにすると苦しいと思ったのでメタキーはOptionに戻し
  * Terminal.app の 「メタキーとしてOptionキーを使用」 を有効
  * Command + w だけは踏むとやばそうだったので http://apple.stackexchange.com/questions/44412/disable-command-w-in-the-terminal 見て無効化(メニュー名は「ウインドウを閉じる」)
 * Emacsからシェル叩けるように改善(ずっと昔から困ってた)
  * ``shell``ではなく``term``コマンドを使う
  * http://sakito.jp/emacs/emacsshell.html#id11 見てterminfo 作成
 * Terminal.app は全画面モードで常駐

結局tmuxよりEmacs周り弄ってた時間の方が長いっぽい。
Play2.0をeclipseでデバッグ

ローカルで動作しているPlay2.0アプリを、eclipseでデバッグする方法。

というか、JPDAを利用したデバッグ方法。
JPDAを利用したデバッグ、したこと無かったのでメモがてら。

* eclipseでplay2.0の対象プロジェクトを右クリックして、「デバッグ」>「デバッグの構成」を選択

* 「デバッグの構成」ウィンドウの左側のペインから、「リモートJavaアプリケーション」をダブルクリック

* 右ペインに表示された「接続」タブで、以下を設定
接続タイプ：ソケット接続
ポート：9999（Playのデフォルト設定）

* 右下の「デバッグ」ボタンをクリックしてデバッグ開始。

* あとはPlayアプリを「play debug run」で起動していれば、ブレークポイントを貼った場所で止まるはず。

参考：http://www.ibm.com/developerworks/jp/opensource/library/os-eclipse-javadebug/
素朴な素数判定


```haskell:prime.hs
isPrime n 
    | n <= 1 = False
    | elem n [2,3,5,7] = True
    | mod n 2 == 0 = False
    | elem 0 [mod n $ floor x|x<-[3,5..fromIntegral(n)**0.5]] = False
    | otherwise = True

main = do
    print "input min (>=3)"
    min_n <- getLine
    let minnum = if (mod (read min_n) 2 == 0) then read min_n +1 else read min_n
    print "input max"
    max_n <- getLine
    let maxnum = if (mod (read max_n) 2 == 0) then read max_n -1 else read max_n
    print [x|x<-[minnum,(minnum)+2..maxnum],isPrime x]
```

minとmaxの間の素数を探します。素朴です。
オフラインリアルタイムどう書く第二回の解答を、C++で

オフラインでリアルタイムに「どう書く」をやるイベント。
またやります
http://atnd.org/events/31590
で。
改めて C++ で解いたので投稿。
問題は
http://nabetani.sakura.ne.jp/hena/ord2/

```c++
#include <iostream>
#include <string>
#include <sstream>
#include <vector>
#include <iomanip>

struct test_data{
  std::string m_input;
  std::string m_expected;
};
const test_data test_data[]={
  /* 0*/ {"ff-2f-23-f3-77-7f-3b", "1f-03-00-1c-0d-0f-06" },
  /* 本当はあと 21個テストデータがある */
};

std::vector<int> string_to_bits( std::string const & s )
{
  std::vector<int> r;
  for( int i=0 ; i<s.size() ; i+=3 ){
    r.push_back( strtol( s.c_str()+i, 0, 16 ) );
  }
  return r;
}

int and_all( std::vector<int> const & v )
{
  int r=~0;
  for( int a : v ){
    r &= a;
  }
  return r;
}

std::string toString(std::vector<int> const & v )
{
  std::stringstream s;
  for( int a : v ){
    s<<"-"<<std::setfill('0')<<std::hex<<std::setw(2)<<a;
  }
  return s.str().c_str()+1;
}

int kill_bits( int bits, int bits_to_kill )
{
  int r=0;
  for( int mask=0x80 ; mask ; mask/=2 ){
    if ( !(bits_to_kill & mask ) ){
      r<<=1;
      r|=(bits&mask) ? 1 : 0;
    }
  }
  return r;
}

std::string solve( std::string const & s )
{
  std::vector<int> columns = string_to_bits( s );
  int bits_to_kill = and_all( columns );
  for( int & c : columns ){
    c=kill_bits( c, bits_to_kill );
  }
  return toString(columns);
}

int main()
{
  std::cout << "hello";
  for( auto e : test_data ){
    std::string actual = solve( e.m_input );
    if ( actual != e.m_expected ){
      std::cerr << "solv( " << e.m_input << " ) is " << actual << ", but expected is " << e.m_expected << ".\n";
    }
  }
  return 0;
}
```

やや酔っぱらいつつ、若干 C++11 を利用して書いてみた。
テストデータをのぞくと70行ちょっと。まあそんなもんだろう。
まだまだ工夫改善の余地はあると思うけれどもこんなところで。
リスト逆順操作

よく使うリスト逆順操作について
---------
```
>>> list = [1,2,3]
>>> reversed(list) # => <listreverseiterator object>
>>> list.reverse() # => 破壊的操作
>>> list
[3,2,1]
>>> list = [1,2,3]
>>> list[::-1]     # => 最も単純かつ強力
[3,2,1]
```

逆順のリストに函数を適用する場合
---------
```
>>> list = [1,2,3]
>>> def inc(n):
...     return n+1
...
>>> # 冗長だが分かりやすい
>>> for i in reversed(list):
...     print inc(i)
...
4
3
2
>>> # 破壊的操作であるため注意が必要
>>> list.reverse()
>>> for i in list:
...     print inc(i)
...
4
3
2
>>> list = [1,2,3]
>>> map(inc, list[::-1]) # => 簡潔かつ強力
[4, 3, 2]
```
Node.jsで汎用一意識別子UUID(RFC 4122)を生成する

今日はnode-uuidを試してみます。
https://github.com/broofa/node-uuid

#インストール
npm install node-uuid

#予備知識

参考: [rfc4122](http://www.ietf.org/rfc/rfc4122.txt "rfc4122")

参考: [UUIDについて](http://ja.wikipedia.org/wiki/%E6%B1%8E%E7%94%A8%E4%B8%80%E6%84%8F%E8%AD%98%E5%88%A5%E5%AD%90 "UUIDについて")

*バージョン1
日時により生成(time-based)
*バージョン4
乱数で生成

あれ？いいのかな。。。ま、いっか。

#どうやって使う？
node-uuidでは、oj.v1()でバージョン1、oj.v4()でバージョン4のUUIDを発生できます。

#do it!
```
C:\Documents and Settings\hoge>node
> var uuid = require('node-uuid');
> uuid.v1();
'149e6d40-eeaf-11e1-9432-05ef65d4953c'
> uuid.v4();
'e844032f-8ab8-4e7c-94c7-7facb02015a5'
```
コマンドラインからSMTP認証の試験を行う

SMTPサーバの設定をした後、SMTP認証(AUTH-PLAIN)が通かどうかをtelnetで確認します。
認証用の文字列は**ユーザ名 (Null)ユーザ名(Null)パスワード**をbase64で符号化して作ります。

MacOS Xを使っている場合は、```% printf "%s\0... tr -d '\n' | pbcopy```でコピーすると文字列を選択してコピーしなくていいので楽です。

---

* SMTPサーバ: mx.example.jp:587
* 認証ユーザ名: user@example.jp
* 認証パスワード: hoge

---

```
% printf "%s\0%s\0%s" user@example.jp user@example.jp hoge | openssl base64 -e | tr -d '\n'; echo
dXNlckBleGFtcGxlLmpwAHVzZXJAZXhhbXBsZS5qcABob2dl ←コピーしておく

% telnet mx.example.jp 587
Trying 192.0.2.25...
Connected to mx.example.jp
Escape character is '^]'.
220 mx.example.jp ESMTP SENDMAIL
EHLO host.example.jp ←自分のホスト名を名乗る
250-mx.example.jp Hello host.example.jp [192.0.2.1], pleased to meet you
250-ENHANCEDSTATUSCODES
250-PIPELINING
250-8BITMIME
250-SIZE 10485760
250-DSN
250-AUTH LOGIN PLAIN CRAM-MD5 DIGEST-MD5
250-DELIVERBY
250 HELP
AUTH PLAIN dXNlckBleGFtcGxlLmpwAHVzZXJAZXhhbXBsZS5qcABob2dl ←さっきの文字列を貼り付ける
235 2.0.0 OK Authenticated ←200系の応答が返ってきたらOK
quit
221 2.0.0 mx.example.jp closing connection
Connection closed by foreign host.
```

EHLOで自分のホスト名を名乗り、AUTH PLAINで最初に作った文字列を渡して、200系の応答が返ってきたら認証成功です。

# 2014/08/04追記

毎回printf,openssl,trで長いワンライナー書くのが面倒なので実際は下記のようなスクリプトを作っておくと良いです。

```
#!/bin/sh
# smtpauth-passwd
PATH='/usr/local/openssl/bin:/usr/local/bin:/usr/bin:/bin'
MAILADDR="$1"
PASSWORD="$2"

usage()
{
	echo "Usage: $0 mail-address password"
	exit 1
}

if [ -n "$MAILADDR" ]; then
	if [ -n "$PASSWORD" ]; then
		printf "%s\0%s\0%s" $MAILADDR $MAILADDR $PASSWORD | openssl base64 -e | tr -d '\n'
		echo
		exit 0
	else
		usage
	fi
else
	usage
fi
```

これを~/binとか/usr/local/bin/にsmtpauth-passwdという名前で保存して、実行権限を付けて、コマンドラインから
```
$ smtpauth-passwd user@example.jp hoge
dXNlckBleGFtcGxlLmpwAHVzZXJAZXhhbXBsZS5qcABob2dl
```
という感じで使うと便利です。
Web Stormの個人的に使うショートカット一覧


個人的によく使う＆忘れがちなショートカットをまとめ。
**※ちなみに、Vimプラグインを入れているので、それのショートカットも含まれます。**
（現在作成中）

* Cmd + F1
	File explorerにフォーカスを当てる

* ESCで、File explorerからエディタにフォーカスを戻せる

* Cmd + Shift + N
関連ファイルを開く

* Cmd + E
最近使ったファイルを開く

* Cmd + Shift + A
コマンド検索

* Cmd + B
宣言元にジャンプ

* Alt + F7
関数・変数の使用場所一覧？

* Cmd + Shift + Delete
最後に編集した場所にジャンプ

* Cmd + Shift + left/right
ジャンプ系コマンドを実行した箇所を辿る

* Alt + Delete
Undo (shift付きでredo）

* Cmd + Alt + J/K
1ページ単位で上下にスクロール
ジェネリックと拡張メソッドを使ってみる

以前こちらの記事で作成したBetween()メソッドですが、

* [NUnitで自作クラスのユニットテストを行う #c# #NUnit - Qiita](http://qiita.com/items/47f09523f1b9dfa015b1)

ジェネリックと拡張メソッドを使えば、より汎用的で使いやすくなります。

# 書きなおしたメソッド

```csharp:Between.cs
public static class MyGeneral	// 静的クラス
{
    // 静的クラスなのでコンストラクタは無し
    
    /// <summary>
    /// 数値 current がlower ～ higher の範囲内か？(Generic版)		
    /// </summary>
    /// <param name="lower">区間(開始)</param>
    /// <param name="current">比較される値</param>
    /// <param name="higher">区間(終了)</param>
    /// <param name="inclusive">閉区間か？(境界値を含む) (初期値:true)</param>
    /// <returns>範囲内であればtrue</returns>
    public static bool isBetween<T>(this T current, T lower,  T higher, bool inclusive = true) where T : IComparable
    {
        // 拡張メソッドは1つ目の引数に this キーワードを付ける

        // ジェネリックだと比較演算子が使えなくなってしまうので、
        // where句 で型パラメーター T が IComparable<T> インターフェイスを実装するように指定
        // CompareTo() メソッドが使えるようになる。
        if(lower.CompareTo(higher) > 0 ) Swap(ref lower,ref higher);
    
        return inclusive ?
            (lower.CompareTo(current) <= 0 && current.CompareTo(higher) <= 0 ) :
            (lower.CompareTo(current) <  0 && current.CompareTo(higher) <  0 );
    }
    
    /// <summary>
    /// ２つの値a,bを交換する
    /// </summary>
    /// <param name="a">値A</param>
    /// <param name="b">値B</param>
    public static void Swap<T>(ref T a, ref T b)
    {
        T temp = a;
        a = b;
        b = temp;
    }
}
```

このように書くことで、
Rubyみたいに、以下の様なわかりやすい構文で記述することができます。
あたかも、int や string のインスタンスメソッドみたいに。

```csharp:
bool inRange;
inRange = 2.isBetween(1,3);  // true
inRange = "b".isBetween("a","c");  // true
```

# 参考

* [拡張メソッド (C# によるプログラミング入門)](http://ufcpp.net/study/csharp/sp3_extension.html)
* [Is there a "between" function in C#? - Stack Overflow](http://stackoverflow.com/questions/5023213/is-there-a-between-function-in-c)
WordPressでエラーログを画面に出さずにファイルに出力する方法


こちらの記事を参照させていただきました。ありがとうございます。
http://blog.makotokw.com/2011/06/12/wordpressのwp_debugによるphpのエラーをファイルに出力する方法/

``` wp-setting.php
ini_set('display_errors', 0);
ini_set("log_errors", 1);
ini_set("error_log", "/var/log/php_error.log");
define('WP_DEBUG', false);
```

WP_DEBUGをtrueにする必要もなく、ただ単純にPHPのエラーログを書き出すということをしているだけだったりします。

本番運用環境で画面上にエラー表示するわけには行かないんだけど、何か困ったことが起きてるっぽいよね、みたいなときにつかえるんではないかと思います。
文字コードを瞬時に変更するための zsh 関数

nkf コマンドを覚えられないので、.zshrc に以下の関数を定義している。

```sh
function euc() {
    for i in $*; do
        if [[ -f $i ]] then
            nkf -e -Lu $i >! /tmp/euc.$$ # -Lu :改行を LF にする
            mv -f /tmp/euc.$$ $i
        fi
    done
}
function utf() {
    for i in $*; do
        if [[ -f $i ]] then
            nkf -w -Lu $i >! /tmp/utf.$$ # -Lu :改行を LF にする
            mv -f /tmp/utf.$$ $i
        fi
    done
}
function sjis() {
    for i in $*; do
        if [[ -f $i ]] then
            nkf -s -Lw $i >! /tmp/sjis.$$ # -Lw :改行を CR+LF にする
            mv -f /tmp/sjis.$$ $i
        fi
    done
}
```

`utf *` でディレクトリ内のファイル全ての文字コードを UTF-8 にしたりできる。個人的に重宝してる設定の一つ。

バックアップを作成するかどうかや、改行コードを何にするかなどは各自書き換えるといいだろう。
Rubyで日本語が8bit asciiになってしまう場合

こんな感じのやつ
\xE3\x81\x99\xE3\x82\x82\xE3\x82\x82

標準出力が文字化けする場合
  pではなくputsかprintを使う

正規表現とかがヒットしなくてこんなエラーが出る場合
incompatible encoding regexp match (UTF-8 regexp with ASCII-8BIT string) (Encoding::CompatibilityError)

  String.force_encoding("UTF-8")を使う
CoreAnimationのアニメーション速度を動的に変更する

CAMediaTimingのspeedだけいじっても失敗してハマった
ただspeedだけいじると表示が一時的に消えたりした

layer.timeOffset = [layer convertTime:CACurrentMediaTime() fromLayer:nil];
layer.beginTime = CACurrentMediaTime();
layer.speed = 0.5; //ここは任意の速度で

とすると良いそうだ
ソースはhttp://johansorensen.com/articles/pausing%20and%20controlling%20the%20speed%20of%20Core%20Animation.html

どうやら時間を調整しないとだめらしい
主にループアニメーションで使えそうだ
IE 6 での複数クラスセレクタのバグ


例えば以下のような場合。

```html
<p class='foo'>Foo!</p>
<p class='bar'>Bar!</p>
<p class='foo bar'>Foo! Bar!</p>
```

```css
.foo.bar {
  color: #f00;
}
```

最後のクラス以外が無視され Bar! だけでなく Foo! Bar! までも赤字になってしまいます。

```css
.bar {
  color: #f00;
}
```

と同じになってしまうということですね。

参考
http://css-eblog.com/ie-css-problems/ie6-multiple-class.html
Rubyでメソッドの定義場所を見つける方法

RubyはModuleで組み込まれたメソッドや、`method_missing`を利用した「ゴーストメソッド」など、自分の見ているメソッドがそのクラス以外のどこで定義されているのか、分かりにくいケースがよくあります。
特にJavaやC#から移ってきた僕のようなプログラマは、「メソッド = どこかのクラスで定義されているもの」という印象が強いので、「持ち主がよく分からないメソッド」の存在はデバッグ等で苦労させられます。


こういったケースでは、`Kernel#method`と`Method#source_location`を組み合わせることで、メソッドの定義場所を見つけることができます。
たとえば、rails consoleで`blank?`メソッドの定義場所を見つけたい場合は、こんな感じです。

````
$ rails c
> 'x'.method(:blank?).source_location
 => ["/Users/mypc/.rvm/gems/ruby-1.9.2-p320/gems/activesupport-3.2.3/lib/active_support/core_ext/object/blank.rb", 102] 
````

### 制限事項
* `Method#source_location`はRuby 1.9以上でしか使えません。
* irbやrails consoleで簡単にチェックできるメソッドならいいですが、gemの奥まった処理で使われているメソッドなどを調査しようと思うと、結構大変かもしれません。

### 参考
* http://stackoverflow.com/questions/175655/how-to-find-where-a-method-is-defined-at-runtime

### 2014.12.10 追記

最近はこの方法ではなく、 **RubyMine** を使ってます。
RubyMine、便利！

[RubyMineのコードジャンプ機能は本当にすごい！！困ったときはCommand+Bを押すべし！](http://qiita.com/jnchito/items/bcb2bb5311a44113fdd9)

### 2017.1.30 追記

定数（クラス名やモジュール名を含む）の定義場所を調べたい場合はこちらの記事を参考にしてください。

[Rubyでclassやconstの定義位置を調べる方法 \- Qiita](http://qiita.com/ksss/items/377eef080909564e4a25)
IE 6, 7 で block 要素の入った li の高さがおかしくなるバグ


例えば以下のようなケース。

```html
<ul>
  <li><a href='foo.html'></a>foo</li>
  <li><a href='bar.html'></a>bar</li>
</ul>
```

```css
li a {
  display: block;
}
```

li 間の改行、スペースをなくすと解消できますが、HTML の可読性が低くなってしまいます。
そこで、以下のようにすると良いようです。

```css
li a {
  display: inline-block;
}
li a {
  display: block;
}
```

ちなみに以下ではダメです。

```css
li a {
  display: inline-block;
  display: block;
}
```

参考
http://koviko.net/tutorial/extra-spacing-and-incorrect-height-on-list-items-in-internet-explorer
Modern Objective-c Syntax

新しいxCode4.4, 4.5ではNSNumberやNSArray, NSDictionaryの新しい書き方が使えるようになったそうですね。
で、手っ取り早く既存のソースを新しい書き方に変更するには、
Edit -> Refactor -> Convert to Modern Objective-c Syntax
とメニューから選択すると、あらら簡単二つを比較しながら自動変換！
これはいいですね、ARCの時と同じですけど。
ちなみに4.5だとNSArrayに[]でアクセスできたりと4.4より便利になってる。。。
演算子オーバーロードがなかったObjective-cにはとってもうれしい機能ですね。
VimでHaskellを書く時に入れておきたいプラグイン5つ

## vim2hs
[vim2hs](https://github.com/dag/vim2hs)はHaskellのハイライト表示を強力にしてくれます。
vimのデフォルトのハイライト表示では、トップレベルに記述した関数名がハイライトされなかったり、
QuasiQuoteがハイライトされなかったりと、若干貧弱です。
vim2hsを入れておけば、全体的に色分けが細かくなるし、
メジャーなQuasiQuoteはハイライト表示してくれます。
他にもgfでimport先に飛んだりとか、\x -> というラムダの表示を
λx -> に置き換えてくれるという、良く分からん機能もあります。

導入前
![導入前](http://cdn-ak.f.st-hatena.com/images/fotolife/j/joker1007/20120913/20120913043320.png?1347478503)

導入後
![導入後](http://cdn-ak.f.st-hatena.com/images/fotolife/j/joker1007/20120913/20120913043321.png?1347478598)

## ghcmod-vim
[ghcmod-vim](https://github.com/eagletmt/ghcmod-vim)はhaskellの静的解析をやってくれるghcmodを
vimと連携させて使うためのプラグインです。
以下の設定をしておくことで、ファイルを保存した際にコンパイラがエラーをチェックし、
エラー箇所をQuickfixに表示することが出来ます。

```vim:.vim/after/ftplugin/haskell.vim
augroup ghcmodcheck
  autocmd! BufWritePost <buffer> GhcModCheckAsync
augroup END

" $VIMRUNTIME/after/ftplugin/haskell.vimに保存しておく
```

Haskellではこまめにコンパイルして型のエラーをチェックするのが重要なので、
自動でチェックできるとかなり捗ります。
また、型推論によって、カーソルが示している関数がどういう型なのかを表示する機能があります。
ソースコードの状態によるので、常に動作するわけでは無いですが、
あれ、これ今どういう型になってんだろう、って時に非常に役に立ちます。
モナドのdo記法の中とか、型がイメージしづらい時などにも使えます。

GhcModType
![GhcModType](http://cdn-ak.f.st-hatena.com/images/fotolife/j/joker1007/20120913/20120913043322.png?1347478674)

## html-template-syntax
HaskellのWebフレームワークYesodでは、hamletやjulius等、
Haskell独自のテンプレートエンジンを使っています。
[html-template-syntax](https://github.com/pbrisbin/html-template-syntax/tree/master/syntax)はそれらをハイライト表示してくれます。

## neco-ghc
[neco-ghc](https://github.com/ujihisa/neco-ghc)はneocomplecacheでHaskellの関数を補完できるようにします。
import宣言時のモジュール名を補完したり、import済みの関数名を補完してくれます。
また、GHCの言語拡張機能の利用宣言も補完してくれます。

## unite-haddock
[unite-haddock](https://github.com/eagletmt/unite-haddock)はuniteのインターフェースからhaddockを検索して開くことができます。
デフォルトではローカルにインストールされているhaddockを開きますが、
tabキーでアクションを指定すれば、hackageのサイトを開くこともできます。
~/.cabal/configの設定が`documentation: True`になっていれば、ローカルにhaddockがインストールされるので、
ネットが無い環境でも開きたい場合は、ローカルにhaddockごとインストールしておきましょう。

以上、Haskellを勉強中のVimmerによる、Haskellを書く時に役に立つVimプラグイン5つでした。
setIntervalでforeach

```javascript

function loop(array, callback, interval){
    var i = array.length;
    timerID = setInterval(function(){
	if(!i) {
	    clearInterval(timerID);
	    return;
	}
	callback(array[array.length-i]);
	i--;
    }, interval);
}
```

DEMO
http://jsdo.it/_shimizu/oaXj
素数判定(isPrime) 4種類

```javascript
function isPrime1(n) {
 if (isNaN(n) || !isFinite(n) || n%1 || n<2) return false; 
 var m=Math.sqrt(n);
 for (var i=2;i<=m;i++) if (n%i==0) return false;
 return true;
}

function isPrime2(n) {
 if (isNaN(n) || !isFinite(n) || n%1 || n<2) return false; 
 if (n%2==0) return (n==2);
 var m=Math.sqrt(n);
 for (var i=3;i<=m;i+=2) {
  if (n%i==0) return false;
 }
 return true;
}

function isPrime3(n) {
 if (isNaN(n) || !isFinite(n) || n%1 || n<2) return false; 
 if (n%2==0) return (n==2);
 if (n%3==0) return (n==3);
 var m=Math.sqrt(n);
 for (var i=5;i<=m;i+=6) {
  if (n%i==0)     return false;
  if (n%(i+2)==0) return false;
 }
 return true;
}

function isPrime4(n) {
 if (isNaN(n) || !isFinite(n) || n%1 || n<2) return false; 
 if (n==leastFactor(n)) return true;
 return false;
}

leastFactor = function(n){
 if (isNaN(n) || !isFinite(n)) return NaN;  
 if (n==0) return 0;  
 if (n%1 || n*n<2) return 1;
 if (n%2==0) return 2;  
 if (n%3==0) return 3;  
 if (n%5==0) return 5;  
 var m = Math.sqrt(n);
 for (var i=7;i<=m;i+=30) {
  if (n%i==0)      return i;
  if (n%(i+4)==0)  return i+4;
  if (n%(i+6)==0)  return i+6;
  if (n%(i+10)==0) return i+10;
  if (n%(i+12)==0) return i+12;
  if (n%(i+16)==0) return i+16;
  if (n%(i+22)==0) return i+22;
  if (n%(i+24)==0) return i+24;
 }
 return n;
}
```

DEMO
http://jsdo.it/_shimizu/uQYA
IE判定いろいろ


IE特有の挙動に対する修正って大変ですよね。
少しでもお役にたてたらと思います。

##HTMLバージョン

```html:index.html
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
        "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="ja">
  <head>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8"/>
    <meta http-equiv="Content-Style-Type" content="text/css"/>
    <meta http-equiv="Content-Script-Type" content="text/javascript"/>
  </head>
  <!--[if lt IE 7 ]><body class="ie6"><![endif]-->
  <!--[if IE 7 ]><body class="ie7"><![endif]-->
  <!--[if IE 8 ]><body class="ie8"><![endif]-->
  <!--[if IE 9 ]><body class="ie9"><![endif<]-->
  <!--[if (gt IE 9)|!(IE)]><!--><body><!--<![endif]-->

    <div class="something">
      <p>Hello, World</p>
    </div>

  </body>
</html>

```

具体的にはこう使います。

```css:styles.css

.something{
	/**/
}

.ie6 .something{
	/* ie6のハック */
}

```

```javascript:index.js

if ( $("body").hasClass("ie6") ){
	/* ie6に対する処理 */
}

```


##JavaScriptバージョン その１

```javascript:sample.js

var ie = (function(){
    var undef, v = 3, div = document.createElement('div');
    while (
        div.innerHTML = '<!--[if gt IE '+(++v)+']><i></i><![endif]-->',
        div.getElementsByTagName('i')[0]
    );
    return v> 4 ? v : undef;
}());

//IE以外のブラウザ
if(ie === undefined ) {
  //...
}


//IE7かどうか
if(ie === 7 ) {
  // ...
}


//IEを使っているかの判定
if(ie ) {
  // ...
}


//特定のバージョンのIEを使っているかの判定
ie === 6 // IE6
ie> 7 // IE8以上
ie <9 // IE9以下

```

##JavaScriptバージョン その２

```javascript:sample.js

//コメントアウトであってます。

/*@cc_on

  @if (@_jscript_version == 10)
    document.write("あなたはIE10を使っています");

  @elif (@_jscript_version == 9)
    document.write("あなたはIE9を使っています");
    
  @elif (@_jscript_version == 5.8)
    document.write("あなたはIE8を使っています");

  @else
    document.write("あなたはIE7かそれより古いのを使っています");

  @end

@*/

```
Androidでtabを出したくないとき

Androidはtab barを持ってなく、tab Groupしかない。tabを出したくないときは、tab Groupを作らないで、winだけを使うといいっぽい。

こんな感じ。
//Android
if (Titanium.Platform.osname == 'android') {
    var win = myapp.ui.createWin();
    win.open();
} else {
//iPhone
    var tabGroup = myapp.ui.createTabGroup();
    tabGroup.open();
}

＞参考
http://developer.appcelerator.com/question/33841/android-how-to-hide-tab-bar
Three.js CanvasRendererだと。。

# 困った
THREE.CanvasRendererを使用して、ポリゴンを描画すると、
枠線が消えない。。。

```
wireframe:false
```

指定してるんだけど。。。

# そんな悩みを抱えたコードがこちら
[陰面処理がおかしい件](http://jsdo.it/kjunichi/iXhd)

[ブログもよろしく](http://kjunichi.cocolog-nifty.com/misc/)
ActiveSupportで時間や日付を簡単に表現する

active_supportには時間に関する拡張がたくさんあり、非常に便利になっています。
たとえば、ありがちな今月の投稿を取得するような場合はこんな感じで超シンプルにかけます

```ruby
Post.where(created_at: Time.now.all_month) #all_monthはレンジオブジェクトを返す
```
他にも1日を表す`all_day`や1年を表す`all_year`月末を表す`at_end_of_month`や翌月を表す`next_month`など、自分で実装するとテストを書かなければならないような便利拡張がいっぱいです。

下記URLでTimeのメソッドがみれますので、一読しておいて損はないでしょう
http://api.rubyonrails.org/classes/Time.html
C#で、コマンドラインからプロジェクトのビルドを行う

今までGUIからしかやってなかった。忘れないためにメモ。

```bat:build_project.bat
"C:\Windows\Microsoft.NET\Framework\v4.0.30319\MSBuild.exe" projectname.csproj /t:build
```

MSBuild.exe のパスは、.NET Framework のバージョンに応じて読み替えてください。
第三回オフラインリアルタイムどう書くの解答 

第2回 オフラインリアルタイムどう書く( http://atnd.org/events/31590 )
参加した際に会場で書いたコードです。

問題のURL( http://nabetani.sakura.ne.jp/hena/ord3ynode/ )

再帰にしたほうが良かった気がします。

```yroad.rb
#!ruby

MAP =
{
  "A" => ["D", "C", "B"],
  "B" => ["A", "C", "E"],
  "C" => ["A", "F", "B"],
  "D" => ["E", "F", "A"],
  "E" => ["D", "B", "F"],
  "F" => ["D", "E", "C"],
}

def get_position( m, index )
  if index < 0
    return m[m.length-1]
  elsif index < m.length
    return m[index]
  else
    return m[0]
  end
end

def search_index( m, target )
  m.each_with_index { |pos, i|
    if pos == target
      return i
    end
  }
end

def move_once( p, dir )
  if dir == "b"
    return [p[1], p[0], p[2]+p[0]]
  end
  m = MAP[p[1]]
  index = search_index(m, p[0])
  if dir == "r"
    dest = get_position(m, index-1)
    return [p[1], dest, p[2]+dest]
  elsif dir == "l"
    dest = get_position(m, index+1)
    return [p[1], dest, p[2]+dest]
  end
end

def move( input )
  (input.split(//).inject(["B", "A", "A"]) { |p, dir|
     move_once( p, dir )
   })[2]
end

DATA.each { |input|
  inarray = input.chomp.split(/,/)
  ans = move(inarray[0])
  if ans == inarray[1]
    puts ans
  else
    puts "*ERROR*"
    puts "*#{ans}"
    puts "*#{inarray[1]}"
  end
}

__END__
rrrrbllrlrbrbrr,ACBACABCFDEDADFC
SharpDevelop にて、NUnit.Framework への参照が補完されない場合の対処方法

SharpDevelop 4.2.2 にて、以下の現象に悩まされたので、その時の解決方法をメモ。

	NUnit.Framework.dll ファイルへの参照を追加しても、
	using NUnit.Framework; が補完できない
	手で書いてビルドしても、ビルドエラーになる

# 解決方法

1. `表示` -> `ツール` -> `ユニットテスト` を実行
2. ユニットテストウィンドウの「選択中のプロジェクトにNUnitの参照を追加」ボタンを押す

![](https://lh6.googleusercontent.com/-XpblLZOjfWU/UFCYvgDfruI/AAAAAAAAEqI/el90i9JBBYc/s800/2012-09-12_23h07_20.png)
初めましてのgemと最速で仲良くなる方法！ (gem学習) with vim


[ 先日の記事 ]( http://qiita.com/items/ab2ad83ddbaf2f6ce7fb )がバズってて驚いております。
社内の情報共有のつもりでしたが、、ありがとうございます。

## はじめに

さて、Railsって情報が多すぎて理解するのに時間がかかるんですよね。

しかも、日本語の記事が少なく、情報も古くて時間だけがどんどん過ぎていく...
だから、コピーの知識だけ身に付いてしまい、なかなか「理解」が遠いんですよね。
「使っているgemのことならバッチシ理解してるよ!」と言える人も案外少ないのではないかと思います。

皆様は如何でしょうか。

私はそのレベルで *「RoR出来るよ!」* って言うエンジニアはナンセンスだと思っています。
なので、最速でgemと仲良くなる環境を作りました。

**設定は簡単かつ10分で終わります。**

### 1. リファレンス

yardは、サーバーを立てて、gem毎のrdoc形式を見る事のできるツールです。
本家のリファレンス以上に上質な情報は無いかと思います。

![yard]( http://cl.ly/image/0g2C0O1l081k/スクリーンショット 2012-09-12 20.46.23.png )

インストールは超簡単。
下記の後に`http://localhost:8808`にアクセスすればOK

```sh:shell
gem ins yard
yard server --gems
```

#### リファレンス高速化

vim上から一瞬でリファレンスを開けるようにします。
[vimに設定を追加 ]( https://gist.github.com/3706057 )します。
これで、gemのモジュール名の上で`<Space>y`を押せばリファレンスが開きます！

### 2. 直接コードを読む

やっぱりね、表面上の付き合いだけじゃなくて、中身をさらけ出してこそ仲良くなれると思うんですよ。
gemのインストールされたフォルダにアクセスして、コードを直接読みます。
結構コード中にデモが書いてあったり、便利なメソッドの発見があったりして楽しい。

#### tags高速化

カーソル下の単語から、gemのコードまで飛べるようにします。
まずは、おなじみctagsでgem専用のtagsファイルを作ります。
あとはタグジャンプ！
vimの設定は[ unite-tag ]( https://gist.github.com/3706047 )もオススメです。

```
# shellで実行
ctags -R -a --sort=yes --exclude=*.js --exclude=*.h --exclude=log --exclude=*.yml --exclude=.git --langmap=RUBY:.rb ~/.rbenv/versions/1.9.3-p125/lib/ruby/gems/1.9.1/gems -f ~/tags`
mv tags ~/gtags
# vimrcに追加
`au FileType ruby,eruby setl tags+=~/gtags`
```

## さらなる最速を求めて。

これで、情報収集の時間が昨日までの半分ぐらいになりました！
うーん、近くにRoRをやっている方が少ないので、リファレンスとコード以外に頼れるものが無いんですよね。

Rubyistの先輩方、もっと良い方法があればどうかご教授ください。

しかし、まだまだ不満があります。gemのメソッド補完や簡易テンプレートも全てvimでやりたいなぁと思っています。
うーん、辞書ファイル以上の補完が欲しい...

## おまけ

今週末からしばらく東京に行くんですが、
**誰かエンジニアの方か、学生の方雑談しませんか？**

何故って、土日ニートだからです。。
最近仕事しかしていないので、もしお暇な方いらっしゃればお話しましょう！
カフェとかで軽くおしゃべり出来れば良いなと思っています。

人事の方でしたら、雑談ついでに関西の優秀な学生エンジニア紹介します。
お時間がある方、関西の学生に興味がある方、物好きな方、[ **twitter** ]( https://twitter.com/taichouchou )で連絡お待ちしてます。
Jasmine spec覚え書き


## Suites and Specs
- Suite -> describe
- Spec -> it

#### JavaScript
```JavaScript
describe("abstract suite", function() {
	it("abstract spec", function() {
		//spec
	});
	describe("concrete suite", function() {
		it("concrete spec1", function() {
			//spec
		});
		it("concrete spec2", function() {
			//spec
		});
	});
});
```

#### CoffeeScript
```Coffee
describe "abstract suite", ->
	it "abstract spec", ->
		#spec
	describe "concrete suite", ->
		it "concrete spec1", ->
			#spec
		it "concrete spec2", ->
			#spec
```

## beforeEach / afterEach
describe内に書く。RSpecにおける`before do ~ end`,`after do ~ end`を思い出す。

#### JavaScript
```JavaScript
beforeEach(function() { 
	//doBefore
});

afterEach(function() {
	//doAfter
});
```

#### CoffeeScript
```Coffee
beforeEach ->
	#doBefore
afterEach ->
	#doAfter
```

## Matchers
RSpecにおける`.should be_xxx`みたいなやつら。

### toEqual
- 同値であるかどうか

```JavaScript
expect("string").toEqual("string");
```

### toBe
- 同オブジェクトであるかどうか

```JavaScript
expect("object").toBe("object");
```

### toBeTruthy / toBeFalsy
- true / false であるかどうか

```JavaScript
expect(evaluate).toBeTruthy();
expect(evaluate).toBeFalsy();
```

### toMatch
- 正規表現でマッチするかどうか

```JavaScript
expect('hello and goodbye').toMatch(new RegExp('hello'));
```

### toBeDefined
- undefinedではないかどうか

```JavaScript
var noop = function() {};
expect(noop).toBeDefined();
```

### toBeNull
- nullであるかどうか

```JavaScript
expect(arg).toBeNull();
```

### toContain
- 配列に要素が、または文字列に文字列が含まれているかどうか

```JavaScript
expect([1,2]).toContain(1);
```

### toBeLessThan / toBeGreaterThan
- 数値的に少ないかどうか / 多いかどうか

```JavaScript
expect(arg).toBeLessThan();
expect(arg).toBeGreaterThan();
```


### toThrow
- 例外が投げられるかどうか

```JavaScript
var err = function() {
	throw new TypeError;
};
expect(err()).toThrow();
```

### .not
`toXXX`の頭に付けて否定

```JavaScript
expect("object").not.toEqual("otherObject");
```
listener.logから分単位の要求数を集計する

タイトルの通り、集計したかったので作成しました。

```powershell:Listenerのログを集計.ps1
$ar=@{}

Get-Content D:\listener.log | ?{  $_ -match "2012 \d+:\d+:\d+ \*" } | 
%{
    $hm = $_.Split(" ")[2].Substring(0,5)
    $ar."$hm" += 1
}

$ar.getEnumerator() | Sort-Object  Name
```
git rebase --onto どこへ どこから どのブランチを

いつもわすれるので

    $ git rebase --onto どこへ どこから どのブランチを

あるブランチがどこから生えているかを変更することができる。

例: (まちがって master から切ってしまった feature/hoge ブランチを develop に移動する)

    $ git rebase --onto develop master feature/hoge
Twitterのウィジェットを高さ以外もカスタマイズできるスクリプト

decorateWidget内で幅を変えるなど好きに装飾できる。
```JavaScript

<script type="text/javascript">
  function decorateWidget() {
    if ($("#twitter-widget-1").length > 0) {
      $("#twitter-widget-1")[0].width = "300px";
    } else {
      setTimeout(decorateWidget, 500);
    }
  }
  decorateWidget();
</script>
```
末尾行を取り出す

[先頭行を取り出す](http://qiita.com/items/1443c8250687aba0ce69)にインスパイアされた。

```
string = "abc\ndef\nghi"
tail = string[/.*\Z/] # => "ghi"

string = "abc\ndef\nghi\n"
tail = string[/.*\Z/] # => "ghi"

string = "abc\ndef\n\n"
tail = string[/.*\Z/] # => ""
```

改行コードが `\r\n` の場合、 `\r` は取り出した文字列に残る。 `String#strip` すればよし。
OS X で OpenNI/NITE 最速開発環境構築

みなさん、Kinect/Xtion で開発してますか？私は最近しておりません。
最近だと [勝手に入るゴミ箱作った - ニコニコ動画(原宿)](http://www.nicovideo.jp/watch/sm18391671) が
盛り上がった Kinect/Xtion ハック作品だと思います。

現在は Kinect SDK のある Windows が主流なんでしょうかね？
しかし僕は Windows を持っていない。そんなわけで OS X 上での開発環境構築手順です。

**注意** 「Xtion PRO LIVE」での動作確認は行っておりません。「Xbox 360 Kinect」だけです。だれか Xtion ください。

## 必要なもの

- OS X 10.8 (Mountain Lion)
    - 手元に 10.8 しかないので他は未確認。10.7 以前でも大丈夫かも。
- [Homebrew](http://mxcl.github.com/homebrew/)

## インストール開始

```
$ brew install libusb --universal
$ brew install https://raw.github.com/gongo/openni-formula/master/openni.rb --devel
$ brew install https://raw.github.com/gongo/openni-formula/master/sensor-kinect.rb --devel
$ brew install https://raw.github.com/gongo/openni-formula/master/nite.rb --devel
```

終わり！

ちなみに Xtion PRO LIVE を使う方は、3行目の `sensor-kinect.rb` の所を

```
$ brew install https://raw.github.com/gongo/openni-formula/master/sensor.rb --devel
```

とすると良いと思います。(もってないので動作未確認)

## 動作確認


サンプルプログラムはここら辺にあります。

```
`brew --prefix`/Cellar/openni/unstable-{version}/sample/Bin/
```

簡単に動作確認するには Sample-NiUserTracker が良いでしょう。
以下のコマンドで実行すると Kinect/Xtion に映る貴方が確認できます。
Homebrew をデフォルト (`/usr/local`) 以外にインストールした方は
2行目みたいな感じで実行すると動くんじゃないかなー。

```
$ ./Sample-NiUserTracker
$ DYLD_LIBRARY_PATH=`brew --prefix`/lib ./Sample-NiUserTracker
```

もし「手元に Kinect/Xtion が無い！けどインストール成功しているか確認したい！」場合、
深度情報やその他もろもろ OpenNI で使う情報が録画されてる oni ファイルを使います。
自分で録画することもできますが、本家でダウンロードできますので、それを使いましょう。

1. http://openni.org/Downloads/OpenNIModules.aspx にアクセス
2. 「Oni files」→「Stable」→「SkeletonRec.oni」→「Download」

ダウンロードしてきた skeletonrec.oni ファイルを

```
$ ./Sample-NiUserTracker skeletonrec.oni
```

とすると、oni ファイルが「再生」されます。女性がうろうろしてるのが見えたら成功です。

## まとめ

Kinect 面白い

## 補足

### openni-formula について

今回使った openni-formula は fork 版で、本家は [totakke/openni-formula](https://github.com/totakke/openni-formula) です。
この Recipe のおかげでだいぶ OpenNI のインストールが楽になりました。ありがたい！

ちなみに fork 版の違いは、README にある

```
$ sudo niReg /usr/local/lib/libnimMockNodes.dylib
```

みたいな処理を省略できるってことくらいです。

### 参考

- http://gongo.hatenablog.com/entry/2012/09/08/233919
ア行カ行などにグルーピング

~~~:irb
> names = %w(アキハバラ アサクサ シブヤ)
> k = %w(ア カ サ タ ナ ハ マ ヤ ラ ワ)
> names.group_by{|n| k[k.index{|i| i > n[0] }.to_i - 1] }
=> {"ア"=>["アキハバラ", "アサクサ"], "サ"=>["シブヤ"]}
~~~
Arch LinuxのVagrant boxを作成する.


## 目次
1. 環境
* Arch Linuxインストール
* インストール後の設定
* VMイメージをVabrantのbaseboxにする

## 環境
* ホストOS
 * Macbook Air (Marvericks)
 * Virtualbox 4.3.10
 * Vagrant 1.4.3
* ゲストOS
 * Arch Linux 2014.05.01

## Arch Linuxインストール

ArchWikiを参考にインストールする
[Beginners' Guide (日本語) - ArchWiki] (https://wiki.archlinux.org/index.php/Beginners'_Guide_(日本語))

## インストール後の設定

### アプリケーション設定

#### sudo

パスワードなしでsudoを実行できるように設定する.

```
# visudo
```

```
%wheel ALL=(ALL) NOPASSWD: ALL
```

#### openssh

```
# pacman -S openssh
```

クライアントのホスト名を逆引きしない.

```
# vi /etc/ssh/sshd_config
-------------------------
#UseDNS yes
UseDNS no
```

SSHサーバをデーモンとして起動する.

```
# systemctl enable sshd.service
# systemctl start sshd.service
```

### ユーザを追加

vagrantでログインするユーザを追加する

```
# useradd -m -g users -G wheel -s /bin/bash archer
# passwd archer
# su - archer
$ mkdir ~/.ssh
$ chmod 700 ~/.ssh
```

ホスト上でsshキーを作成してゲストに転送する

> note: VMのポートフォワーディング設定: ホスト(2222) -> ゲスト(22)

```
$ ssh-keygen -t rsa -f ~/.ssh/arch64 -C "archer@arch64"
$ scp -P 2222 ~/.ssh/arch64.pub archer@localhost:~/.ssh/authorized_keys
```

### Virtualbox の Guest Addisions をインストールする

```
# pacman -S virtualbox-guest-utils
```

#### モジュールの設定

> note: wiki等の手順には無いがハマったので記録
> カーネルモジュールの情報を更新する

```
# depmod -a
```

GUIは使用しないので vboxvideoは設定しない.

```
# modprobe -a vboxguest vboxsf
# vi /etc/modules-load.d/virtualbox.conf
```

```/etc/modules-load.d/virtualbox.conf
vboxguest
vboxsf
```

共有フォルダ機能を有効にする

```
# groupadd vboxsf
# gpasswd -a archer vboxsf
# systemctl enable vboxservice.service
```

## VMイメージをvagrantのbaseboxにする

1) pacmanのキャッシュをクリアする.

```
# pacman -Sc
```

2) DHCPリース情報を削除する.

```
# rm /var/lib/dhcpcd/*
```

3) VMイメージをコンパクト化する.

```
# dd if=/dev/zero of=/EMPTY bs=1M
# rm /EMPTY
```

4) コマンド履歴を削除する.

```
# su - archer
$ history -c
<C-D>
# history -c
<C-D>
```

5) VMをシャットダウンする.

6) VMのポートフォワーディングの設定を削除する.

7) ホスト上でVMイメージのboxを作成する

```
$ vagrant package --base arch64 --output arch64.box
$ vagrant box add arch64 arch64.box
$ rm arch64.box
```

8) vagrantでVMを作成する.

```
$ vagrant init arch64
```

9) VagrantFileを編集

```
config.vm.box = "arch64"
config.ssh.username = "archer"
config.ssh.private_key_path = "~/.ssh/arch64"
```

10) VMを起動する

```
$ vagrant up
```

## 参考サイト

* [Beginners' Guide (日本語) - ArchWiki] (https://wiki.archlinux.org/index.php/Beginners'_Guide_(日本語))
* [Virtualbox (日本語) - ArchWiki] (https://wiki.archlinux.org/index.php/VirtualBox_(日本語))
* [Vagrant のベースBOX作成手順 (Scientific Linux 6.1) - エンジニアきまぐれTips] (http://d.hatena.ne.jp/okinaka/20110805/1312474847)
* [veewee/templates/archlinux-x86_64/virtualbox.sh at master · jedi4ever/veewee] (https://github.com/jedi4ever/veewee/blob/master/templates/archlinux-x86_64/virtualbox.sh)
文字列をインデントするメソッド


```ruby:string_indent.rb
class String
  def indent(level = 1, count = 2)
    spaces = ' ' * count * level
    each_line.map {|line| line.chomp.empty? ? line : spaces + line }.join
  end
end

<<CONFIG.indent
MyApp.configure do |app|
  # ...
end
CONFIG
#   MyApp.configure do |app|
#     # ...
#   end
```

`line.chomp.empty?` で空行の場合には空白を追加しないようにしているのがミソ。
malabar-modeでjavaを書く

## 設定する前に

emacsでjavaを書くにはそれなりにjavaに習熟してる必要があると思う

### おすすめできない人

* eclipseやnetbeansなどのインテリジェンスな補完がないとjavaを書けない人
* javaのソースから継承ツリーが辿れない人
* java se,java eeなどのコアなクラス群をいつ使えばいいのかぱっと出てこない人
* プロジェクトで使用してるライブラリを把握できない人

つまりIDEまかせでソースの大雑把なマッピングが脳内で出来てない人は今使ってるIDEを使いづづけた方がいいです。

### メリット

* emacsからmavenが呼び出せる(eclipseもnetbeansも出来るけど)
* IDEほど重くない

あとなんだろう?
コマンド併用でeclipseってエディタだよね? って言う人には向いてます。

## malabar-mode?

malabar-mode はemacsに昔からあったjdeeの変りにemacsでjavaを書くモード
jdeeはjdk5以降に対応してないので諦めた方がいいかも

### malabar-modeの導入

[配布元](https://github.com/espenhw/malabar-mode)を見るがあまりアクティブではないので[こっち](https://github.com/buzztaiki/malabar-mode)を使ってる

```sh
% git clone  https://github.com/buzztaiki/malabar-mode.git malabar-mode
% cd malabar-mode
% vi pom.xml
```
emacsの設定を弄る
私のはhomebrew使ってるので↓こうなってる

```xml
<plugin>
 <groupId>org.codehaus.mojo</groupId>
 <artifactId>exec-maven-plugin</artifactId>
 <version>1.1.1</version>
 <executions>
  <execution>
…
   <configuration>
    <executable>/usr/local/Cellar/emacs/23.4/Emacs.app/Contents/MacOS/Emacs</executable>…
…
   </configuration>
  </execution>
…
 </executions>
</plugin>
```
ビルド

```sh
% mvn package
% ls target/malabar-1.5-SNAPSHOT-dist.zip
% cp target/malabar-1.5-SNAPSHOT-dist.zip ~/.emacs.d/lisp
% cd ~/.emacs.d/lisp
% unzip malabar-1.5-SNAPSHOT-dist.zip
```
ビルドに成功すればzipファイルが出来る
load-path が通っている場所に解凍

### 設定

付属のドキュメントに目を通してから設定すること

```cl:init.el
(require 'cedet)
(semantic-load-enable-minimum-features)
(when (require 'malabar-mode nil t)
  (setq malabar-groovy-lib-dir (concat user-emacs-directory "lisp/malabar-1.5-SNAPSHOT/lib"))
  (add-to-list 'auto-mode-alist '("\\.java\\'" . malabar-mode))
  ;; 日本語だとコンパイルエラーメッセージが化けるのでlanguageをenに設定
  (setq malabar-groovy-java-options '("-Duser.language=en"))
  ;; 普段使わないパッケージを import 候補から除外
  (setq malabar-import-excluded-classes-regexp-list
        (append 
         '(
           "^java\\.awt\\..*$"
           "^com\\.sun\\..*$"
           "^org\\.omg\\..*$"
           ) malabar-import-excluded-classes-regexp-list))
  (add-hook 'malabar-mode-hook
            (lambda ()
              (add-hook 'after-save-hook 'malabar-compile-file-silently
                        nil t)))
)
```

## 使い方

だんだんメンドーになってきたので付属ドキュメントからよく使うコマンドを転記

<dl>
<dt>malabar-groovy-restart</dt>
<dd>他のコマンドが動かない場合はmalabarが使ってるgroovyを再起動させると動く。<br/><strong>よく使う。</strong></dd>
<dt>malabar-import-one-class <span class="classifier">(C-c C-v C-z)</span></dt>
<dd>カーソル位置のクラスをインポート<br/>
補完対象が複数ある場合minibufferに出るのでパッケージ名を入力する</dd>
<dt>malabar-run-maven-command</dt>
<dd>mavenコマンドを実行する<br/>編集→compile or installを繰替えせるので便利<br/>
ただ構文エラーがあると動かないのでmalabar-groovy-restartする</dd>
<dt>malabar-jump-to-thing <span class="classifier">(C-c C-v C-y)</span></dt>
<dd>カーソル位置のクラスに移動する<br/>
プロジェクトが違うと上手く動かない</dd>
</dl>
MAMP付属のpeclが動かない

前提：RockMongo入れよう→php_mongoが無いと言われた→sudo pecl install mongoで躓いた

〈以下、バージョン番号は適宜読み替えて〉

```
$ /Applications/MAMP/bin/php/php5.2.17/bin/pecl
Notice: unserialize(): Error at offset 267 of 1133 bytes in Config.php on line 1050
```

みたいなエラー
→ pear.conf が原因。

```
... s:7:"php_dir";s:35:"/Applications/MAMP/bin/php/php5.2.17/lib/php"; ...
```

のように、本当の長さは44なのにs:35となっていたりするので正しい文字列長に直す。
参考：http://forum.mamp.info/viewtopic.php?t=13815#p29192

あと、pecl install する時に php.h が無いとか言われる系は http://www.mamp.info/en/downloads/index.html から
```MAMP_components_2.0.2.zip```
を貰ってきて展開してその中の php-5.2.17.tar.gz から

```
$ tar zxf php-5.2.17.tar.gz
$ mkdir /Applications/MAMP/bin/php/php5.2.17/include
$ mv php-5.2.17 /Applications/MAMP/bin/php/php5.2.17/include/php
```

みたいな。
参考：http://thomashunter.name/blog/getting-the-php-mongodb-driver-installed-with-mamp-on-os-x/
RailsでRakeタスクの追加


Railsで使っているDBに対するバッチ処理を行うのにrails runner 使ったりもしていたけど結局Rake使うのが一番捗ると今更気づいた今日このごろ。

##サンプル
* name,commentを持つMobというモデルを作成
* それに100件のデータを追加
* 奇数IDのみ表示
* 全削除


##作成 単なるScaffold
```
rails new SampleRake
cd SampleRake
rails g scaffold mob name comment
rake db:migrate
```

##Rakeタスクの作成
###rakeファイルの作成
```
rails g task mob_task add_100 show_odd remove_all
```
結果
` create  lib/tasks/mob_task.rake`

```lib/tasks/mob_task.rake
namespace :mob_task do
  desc "TODO"
  task :add_100 => :environment do
  end

  desc "TODO"
  task :show_odd => :environment do
  end

  desc "TODO"
  task :remove_all => :environment do
  end

end
```

###100件追加タスクの作成と実行

```mob_task:add100
  task :add_100 => :environment do
+   100.times do |i|
+     mob = Mob.new
+     mob.name = "user_#{i}"
+     mob.comment = "sug" + "e" * i
+     mob.save
+   end
  end
```

実行
`rake mob_task:add100`

結果(localhost:3000/mobs)

> Name	Comment			
user_0	sug	Show	Edit	Destroy
user_1	suge	Show	Edit	Destroy
user_2	sugee	Show	Edit	Destroy
user_3	sugeee	Show	Edit	Destroy
・・・・

###奇数IDのみ出力

```show_odd
  task :show_odd => :environment do
+   Mob.all.each do |m|
+     p "id:#{m.id}, name:#{m.name}, comment:#{m.comment}" if m.id % 2 == 1
+   end
  end
```

実行
`rake mob_task:show_odd`

結果

> "id:1, name:user_0, comment:sug"
"id:3, name:user_2, comment:sugee"
"id:5, name:user_4, comment:sugeeee"
"id:7, name:user_6, comment:sugeeeeee"
"id:9, name:user_8, comment:sugeeeeeeee"

###全削除
```remove_all
  task :remove_all => :environment do
+   Mob.delete_all
  end
```
実行
`rake mob_task:remove_all`

結果
消えてます。


***
他にもいろいろできそうなので活用してみます。
Sublime Text 2 の Haxe 用プロジェクトファイルのテンプレ


Sublime Text のメニュー → Project → Save Project As… というのがあって、xxx.sublime-project と xxx.sublime-workspace というファイルが作られるのだけど、イミフだったのでちょっと調べてテンプレ作ってみた。

これで使いまわせるかな。

##前提
* [haxe-sublime2-bundle](https://github.com/clemos/haxe-sublime2-bundle) が導入されていること
* haxe にパスが通ってること

##テンプレ

```hoge.sublime-project
	{
		"folders":
		[
			{
				"path":".",
				"folder_exclude_patterns": ["bin"]
			}
		],
		"build_systems":
		[
			{
				"name":"haxe",
				"working_dir":"${project_path:Default}",
				"cmd":["haxe", "build.hxml"]
			}
		]
	}
```

これを ``build.hxml`` と同じフォルダに置いて、メニュー → Project → Open Project… で開くと、そのフォルダ配下のソースファイルが全部読み込まれる。
次に、メニュー → Tool → Build System で haxe(上のファイルに書いたやつ)を選択して、Ctrl+B でビルドできる。

##メモ
* アウトプット先の bin/ フォルダを自動で削除してからビルドしたいんだけど、スクリプト組むの面倒だなあ(組んでるけど)。``build_system`` の ``cmd`` に rm → mkdir とか複数指定できたら嬉しいのに。

##参考
* [Projects - Sublime Text 2 Documentation](http://www.sublimetext.com/docs/2/projects.html)
* [Haxe コンパイラ - Haxe](http://haxe.org/doc/compiler)
railsでブログ内にシンタックスハイライト(コードの色付け)をする方法(2)

続きましてシンタックスハイライトについてです

###シンタックスハイライト
------------
wikiより
>シンタックスハイライト（英: Syntax highlighting）とは、テキストエディタの機能であり、テキスト中の一部分をその分類ごとに異なる色やフォントで表示するものである

要はこういうものですね
![元のコード](http://gazoy.com.s3.amazonaws.com/s/w3e/orig.png)
　　　　↓　シンタックスハイライト！
![シンタックスハイライト後のコード](http://gazoy.com.s3.amazonaws.com/s/w3f/orig.png)

エディターでも使われていて、構文解析を行なって意味によって色付けを行う機能です

Railsではシンタックスハイライト用にいくつかなgemがありますがここでは
・CodeRay

を使用しします。またマークダウンされたコードは\<pre>\</pre>というタグで囲まていて、コードの部分だけを色付けするためには構文解析が必要となり
・nokogiri

というgemを使います。ということで、インストールしましょう！

~~~ruby:Gemfile
gem 'redcarpet', '~>1.17.2'
gem 'coderay'
gem 'nokogiri'
~~~

~~~c:Terminal
bundle install
~~~

それでは、コード部分をシンタックスハイライトさせましょう。
考え方は
マークダウン→\<pre>\</pre>に囲まれているところを抽出→CodeRayで色をつけたHTMLに置き換える

感じでございます

~~~ruby:~helper.rbなど
def markdown(text)
  #optionの設定
  options = [ :autolink, :gh_blockcode, :hard_wrap, :no_intraemphasis,
    :fenced_code, :filter_html]
  #マークダウン
  Redcarpet.new(text, *options).to_html.html_safe
end

def Coderay(code)
  text = markdown(code)
  doc = Nokogiri::HTML(text)
  doc.search("//pre[@lang]").each do |pre|
    pre.replace CodeRay.scan(pre.text.rstrip, pre[:lang]).div(:line_numbers => :table)
  end
  doc.to_html.html_safe
end
~~~

これでコントローラーで設定したモデルに(@post)を渡すことで完了です

~~~ruby:show.html.erbなど
<%= Coderay(@post.body) %>
~~~

以上でございます。お疲れ様でした
参考:Markdown:[RAILSCASTS](http://railscasts.com/episodes/272-markdown-with-redcarpet?language=ja&view=asciicast "RAILSCASTS")
別プロセスで動かしていた Service をアプリと同じプロセスにした時ハマった事


こんな事もあったよ、という話。

別プロセスで Service を動かしていて、そのサービスから Object を得るとき、プロセス間通信なのでマーシャリング(Percelable の実装が強制され、それによりシリアライズ／デシリアライズ)される。
つまり、この場合、Service 側とアプリ側は別々のインスタンスとなる。

一方、同一プロセスの場合は、マーシャリングされず、「同じインスタンス」が Service とアプリの間で受け渡される。

「Service から Bitmap を得るメソッド」で、ハマった。
別プロセスの時は、マーシャリングを期待してクライアントに Bitmap を送信した後、すぐに破棄(Bitmap.recycle()) していた。

このサービスを単純に同一プロセスにした所、

	java.lang.RuntimeException: Canvas: trying to use a recycled bitmap android.graphics.Bitmap@xxx

が、出るようになってしまった。
原因は前述の通り、例外で報告されているのは「破棄された Bitmap を使ってしまってます」というもの。

別プロセスから同一プロセスに戻すケースはあまりないと思うが、逆はまずまずあると思うので、その際はマーシャリングの影響について気をつけたい。