OmniAICreator/Qiita-1.07M huggingface dataset:
Bootstrap 3 RC1をGruntで効率的にカスタマイズ

Bootstrap 3 RC1では、ビルドシステムがmakeからGruntへ変更されています。このGruntを使うと、lessファイルやJavaScriptファイルの変更を監視し、自動でビルド、といったことができます。
RC1ではサイトからLESSの変数をカスタマイズすることができなくなっているので、自分でLESSコンパイルが必要です。そのときに予め用意されたGruntをを使うと楽です。ただこの方法が以前のように書かれていないようなので、調査ついでに試してみました。

## 事前準備
nodeをインストールしましょう。

## grunt-cliのインストール
Gruntを使えるようにします。Grunt 0.3からは、gruntのコマンドラインインターフェースであるgrunt-cliをインストールして利用するようになっています。0.3未満のGruntを使用していた場合は、`npm uninstall -g grunt`を実行してアンインストールしておきましょう。

grunt-cliはグローバルにインストールしましょう。`npm install -g grunt-cli`を実行すればインストール完了です。

## Bootstrap 3 RC1を入手
ビルドするためにソースコード付きのものをダウンロードします。[Getting started · Bootstrap](http://getbootstrap.com/getting-started/)で[Download latest source code](https://github.com/twbs/bootstrap/archive/3.0.0-wip.zip)からダウンロードするか、GitHubからcloneするなりしてください。zipでダウンロードした場合は適当なフォルダに展開しておきましょう。

## 必要なものをインストール
展開後のフォルダに移動し、`npm install`を実行すると、必要なものを自動で次々ダウンロードしてくれます。

これで、Gruntでのビルドができるようになりました。

## 利用方法
ビルドでどのような処理がされるかは、Gruntfile.jsに記述されています。ここでは代表的なもののみ紹介します。

### grunt watch
展開したフォルダの直下で`grunt watch`を実行すると、js/*.js, js/test/tests/unit/*.js, less/*.less の監視を開始し、変更があると自動的に以下を実行します。

+ jshintとqunit(JavaScriptファイルの場合)
+ lessファイルコンパイルと圧縮(LESSファイルの場合)

LESSファイルから生成されたCSSファイルは、dist/cssに配置されます。

### grunt clean
distディレクトリを削除します。つまり、生成されたファイルを掃除します。

### grunt
`grunt`のみを実行すると、以下を実施します。

+ jshint
+ qunit
+ distディレクトリの削除
+ lessコンパイルと圧縮
+ JavaScriptファイルの結合(concat)と圧縮(uglify)

他にもGruntのタスクはありますので、興味のある方はGruntfile.jsを覗いてみてください。

カスタマイズですが、一度gruntを実行してファイルを生成しておき、カスタマイズ実施中はwatchで自動コンパイル、完成したらgruntでJavaScriptのconcatとuglifyも実行、という流れで使っていけばよいでしょう。

## さらに効率的にカスタマイズ
watchタスクにちょっと手を加えるだけでLiveReload(ファイルに更新があると自動でブラウザをリロードしてくれる)がつかえるようになるので、ぜひ利用しましょう。

### ブラウザ拡張のインストール
まず、[How do I install and use the browser extensions? – LiveReload Help & Support](http://feedback.livereload.com/knowledgebase/articles/86242-how-do-i-install-and-use-the-browser-extensions-)に、各ブラウザへ対応した拡張へのリンクがありますので、そこからインストールしましょう。

### watch実行時にLiveReloadが実行されるようGruntfileを変更
`Gruntfile.js`を編集し、watchタスクのoptionとして、`livereload: true`を追加してください。以下の様な感じです。

```
    watch: {
      option: {
        livereload: true,
      },
      src: {
        files: '<%= jshint.src.src %>',
        tasks: ['jshint:src', 'qunit']
      },
      test: {
        files: '<%= jshint.test.src %>',
        tasks: ['jshint:test', 'qunit']
      },
      recess: {
        files: 'less/*.less',
        tasks: ['recess']
      }
    }
```

### 確認
あとは、確認対象ファイルをブラウザで開き、ブラウザ拡張のボタンを押せばOKです。watch対象のファイルを編集し保存すると、自動でブラウザがリロードされるはずです。これでさらに効率的なカスタマイズができますね！
phpunitでmax_execution_timeが効かなかった件

環境に問題がありそうだが、手元のPHP5.3環境では
`phpunit -d max_execution_time=0`
が効かなかった

コンフィグファイルの記述は有効だったのでこれで対処

```xml
<php>　
  <ini name="max_execution_time" value="0" />
</php>
```

http://phpunit.de/manual/3.7/ja/appendixes.configuration.html

ちなみに、memory_limit はどちらでも有効だった
HTMLとJavaScriptでFizzBuzz

HTMLとJavaScriptを用いてFizzBuzz問題のコードを書きました。
理由は、FizzBuzz解けない人が意外といる、みたいな記事を読んだから。

自分を含めた数人で実施して、結果を照らし合わせようと思いました。
僕が書いたのは以下のコード

```fizzBuzz.html
<!--
To change this template, choose Tools | Templates
and open the template in the editor.
-->
<!DOCTYPE html>
<html>
  <head>
    <title>FizzBuzz</title>
    <meta http-equiv="Content-Type" content="text/html; charset=UTF-8">
    <script type="text/javascript" src="fizzBuzz.js"></script>
  </head>
  <body>

    <form>
      <input type="button" value="FizzBuzz出力" onClick="outPutFizzBuzz()">
    </form>
    
  </body>
</html>

```

```fizzBuzz.js
/** 
 * FizzBuzzのダイアログを出力する関数 
 * @param void
 * @return void
 */
function outPutFizzBuzz(){  
  
    //ダイアログ合計出力回数(1からカウントするので30回出力される）
    const FIZZBUZZ_MAX_COUNT = 31;
    //ダイアログ出力回数が3の倍数の際に出力されるテキスト
    const OUTPUT_FIZZ ='Fizz';
    //ダイアログ出力回数が5の倍数の際に出力されるテキスト
    const OUTPUT_BUZZ ='Buzz';

    for (i = 1; i < FIZZBUZZ_MAX_COUNT; i++){

        //ダイアログ出力回数が3と5の倍数の場合はFizzBuzzと出力する
        if(i%3== 0 && i%5== 0){
            alert(OUTPUT_FIZZ + OUTPUT_BUZZ)

        }else if(i%3== 0){
            alert(OUTPUT_FIZZ);

        }else if(i%5== 0){
            alert(OUTPUT_BUZZ);

        }else{
            //現在の出力回数表示
            alert(i);
            
        }//if

    }//for
 
}
```

自分が一番詰まったところは、
定数を指定するとNetBeansがなぜか警告を出力してきたというところ。。。
最近Macを買って、NetBeans入れて初めて書いたプログラムなので、
ツールやマシンの操作の方に時間を消費してしまいました。

最初はFizzBuzzくらいで大してコードの違いなんてでないだろうと踏んでいましたが、
こんな小さなプログラムでも違ってくるものですね。
あと、実際FizzBuzzが書けなかった人もいました。
text-overflowについて（備忘録として）

要素から文字がはみ出したとき「...」をつけて省略するにはtext-overflow:elipsise;を設定する。

```css:sample.css
width:300px;
overflow: hidden;
white-space: nowrap;
text-overflow: ellipsis;
```

そのとき幅を指定してoverflowをhiddenにする。text-overflowだけじゃうまくいかないことに注意。
Windowsのコマンドプロンプトから ssh を利用

## 前提
+ git-bash からはssh が利用できる(git fetch とかやってもエラーが出ない。コマンドプロンプトからはgit fetch がエラーになる)
+ portable git のgit を利用している(msysgit もたぶん同じはず)
+ git, ssh コマンドが置いてある場所にパスが通っている
+ というか、Windows版SourceTreeについてくるportable git を使っている

## 対象
+ portable git の git-bashからは公開鍵認証でpushとかpullができるけど、windowsのバッチからはpushとかpullができなくて困っている人

### やりかた
1. コマンドプロンプトの環境変数 %HOME% に .ssh フォルダが置いてあるフォルダのパスを設定
 
   デフォルトの状態であれば、下記を設定するだけでOK 
    `set HOME=%HOMEPATH%`

2. git fetch 等を実行してみてエラーがでないことを確認する


#### 感想
鍵の場所を教えてやるだけで動いてびっくりした
Ubuntu をインストールした ThinkPad X60s で指紋認証を利用する。

ubuntu 12.04 LTS が入った ThinkPad X60s で指紋認証デバイスを使えるようにしたときのメモ。

```
$ sudo add-apt-repository ppa:fingerprint/fingerprint-gui
$ sudo apt-get update
$ sudo apt-get install libbsapi policykit-1-fingerprint-gui fingerprint-gui
```

インストール後は

```
$ fingerprint-gui
```

で指紋の設定とかをするアプリケーションが起動できる。
[Ansible] CentOS 6.4にnginx + php-fpmでGangliaをインストールしてみた

https://github.com/hnakamur/ansible-playbooks/commit/b1045b3e58841bba0ba0d36f9a7e94afc3d5c5ab
のplaybookでGangliaがひとまず動く状態になります。監視対象はlocalhostのみですが。（あ、このplaybookではjenkinsも一緒にインストールしてしまいます。[roles/common/tasks/main.yml](https://github.com/hnakamur/ansible-playbooks/blob/b1045b3e58841bba0ba0d36f9a7e94afc3d5c5ab/roles/common/tasks/main.yml)を適宜変更してご利用ください）。

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

* nginx.orgのレポジトリからnginxをインストール
* [Les RPM de Remi](http://rpms.famillecollet.com/)のレポジトリからphp, php-fpmをインストール
* epelからgangliaをインストール

設定は[gangliaを導入してみました！ - CubicLouve](http://spring-mt.tumblr.com/post/19338404615/ganglia)を参考にさせて頂きました。ありがとうございます！
dmesgで時刻を表示

顧客から「webページが表示されません」とTELがあった際、
アプリケーション側もいいけど、サーバーの物理障害（HDD異常やLAN抜けなど）も疑ってみる。

```bash:
$ dmesg -T
```

なお、centosでは-Tオプションがない様子。

※-cや-Cオプションはdmesgの情報が消えてしまうので注意！
iOS6以降のAVAudioSessionのdelegate設定方法

iOS 6以降`AVAudioSession`の`delegate`プロパティがdeprecatedになったんだけど、その代わりにどうやって設定するのかあんまり情報がなかった。"notification送る"とは書いてあったんだけど、サンプルコードがなかったので、動作確認したコードを載せておく。

各イベントに対応する通知名があるので、それを`NSNotificationCenter`に登録しておけばいい。

```objc:AppDelegate.m
- (BOOL)application:(UIApplication *)application didFinishLaunchingWithOptions:(NSDictionary *)options
{
    AVAudioSession *session = [AVAudioSession sharedInstance];

    NSNotificationCenter *center = [NSNotificationCenter defaultCenter];
    [center addObserver:self selector:@selector(sessionDidInterrupt:) name:AVAudioSessionInterruptionNotification object:nil];
    [center addObserver:self selector:@selector(sessionRouteDidChange:) name:AVAudioSessionRouteChangeNotification object:nil];
}

- (void)sessionDidInterrupt:(NSNotification *)notification
{
    switch ([notification.userInfo[AVAudioSessionInterruptionTypeKey] intValue]) {
        case AVAudioSessionInterruptionTypeBegan:
            NSLog(@"Interruption began");
            break;
        case AVAudioSessionInterruptionTypeEnded:
        default:
            NSLog(@"Interruption ended");
            break;
    }
}

- (void)sessionRouteDidChange
{
    NSLog(@"%s", __PRETTY_FUNCTION__);
}
```

---

### 参考

- [AVAudioSession Class Reference](http://developer.apple.com/library/ios/documentation/AVFoundation/Reference/AVAudioSession_ClassReference/Reference/Reference.html)
レガシーコード改善ガイドの「インターフェースの抽出」をObjective-Cで行うには

以下のクラスをテストしたいとする。

```objc:PaydayTransaction.h
@interface PaydayTransaction : Transaction

- (id)initWithDb:(PayrollDatabase*)db withLog:(TransactionLog*)log;
- (void)run;

@end
```

普通にテストを書くとこうなる。

```objc:PaydayTransactionTests.h
@interface PaydayTransactionTests : SenTestCase
{
    PayrollDatabase* _db;
    TransactionLog* _log;
}

@end
```

```objc:PaydayTransactionTests.m
@implementation ExtractInterfaceTests

- (void)setUp
{
    [super setUp];
    
    // Set-up code here.
    _db = [[PayrollDatabase alloc] init];
    _log = [[TransactionLog alloc] init];
}

- (void)testPayday
{
    PaydayTransaction* t = [[PaydayTransaction alloc] initWithDb:_db withLog:_log];
    [t run];
    STAssertEquals(90, _db.stock, @"_db.stock should be 90");
}

@end
```

このテストはPaydayTransactionクラスを調べるためのものだが、テストの中でPayrollDatabaseクラスとTransactionLogクラスに依存している。PaydayTransactionクラスの挙動に焦点を絞るために、TransactionLogクラスへの依存を排除したテストを書きたいとする。

つまり、以下のようなテストを書きたい。

```objc:PaydayTransactionTests.h
@interface ExtractInterfaceTests : SenTestCase
{
    PayrollDatabase* _db;
}

@end
```

```objc:PaydayTransactionTests.m

@implementation ExtractInterfaceTests

- (void)setUp
{
    [super setUp];
    
    // Set-up code here.
    _db = [[PayrollDatabase alloc] init];
}

- (void)testPayday
{
    FakeTransactionLog* aLog = [[FakeTransactionLog alloc] init];
    PaydayTransaction* t = [[PaydayTransaction alloc] initWithDb:_db withLog:aLog];
    [t run];
    STAssertEquals(90, _db.stock, @"_db.stock should be 90");
}

@end
```

Objective-Cはコンパイラが型チェックを行わないので、このままでもコンパイルは通るが、メソッドのシグナチャを合わせることにする。

まずTransactionLogクラスのメソッドを確認する。

```objc:TransactionLog.h
@interface TransactionLog : NSObject

- (void)saveTransaction:(TransactionLog*)transaction;
- (void)recordErrorWithCode:(int)code;

@end
```

次に、以下のようなTransactionRecorderプロトコルおよびクラスをつくる。

```objc:TransactionRecorder.h
@protocol TransactionRecorder <NSObject>

- (void)saveTransaction:(TransactionRecorder*)transaction;
- (void)recordErrorWithCode:(int)code;

@end

@interface TransactionRecorder : NSObject <TransactionRecorder>

@end
```

```objc:TransactionRecorder.m
@implementation TransactionRecorder

- (void)saveTransaction:(TransactionRecorder*)transaction
{
    
}

- (void)recordErrorWithCode:(int)code;
{

}

@end
```

そして、TransactionLogクラスとFakeTransactionLogクラスにはTransactionRecorderプロトコルを実装する。

```objc:TransactionLog.h
@interface TransactionLog : NSObject <TransactionRecorder>

@end
```

```objc:FakeTransactionLog.h
@interface FakeTransactionLog : NSObject <TransactionRecorder>

@end
```

そして、PaydayTransactionクラスからはTransactionRecorderクラスを参照するようにする。

```objc:PaydayTransaction.h
@interface PaydayTransaction : Transaction

- (id)initWithDb:(PayrollDatabase*)db withLog:(TransactionRecorder*)log;
- (void)run;

@end
```

これでいいのかな？ちょっと不安。

-----
ブログやってます：[PAPA-tronix !](http://weed.cocolog-nifty.com/wzero3es/)
undefined method `synchronize' for nil:NilClass の対処法

synchronize なんて呼んでないのに文句言われて困ってた。

調べてみるとFriendlyIdをRails4で使ってると起きるらしい。
初めは普通に動いてたので具体的にFriendlyIdを入れた後の操作で何がトリガーになったのかは不明。

対処法は対応するbranchを指定する

```
gem 'friendly_id', github: 'FriendlyId/friendly_id', branch: 'rails4'
```

## 情報元

http://stackoverflow.com/questions/16362567/undefined-method-synchronize-for-nilnilclass
moshのインストール (CentOS6.4)

gitでmoshのソースをダウンロードし、インストールする、その後iptablesを設定する。


####必要なライブラリのインストール

```bash
# protocolbufのインストール
$ cd /usr/local/src/
$ wget http://protobuf.googlecode.com/files/protobuf-2.5.0.tar.bz2
$ tar xjvf protobuf-2.5.0.tar.bz2 
$ cd protobuf-2.5.0
$ ./configure
$ make
$ make install
```

####moshのインストール
```bash
$ git clone git://github.com/keithw/mosh.git
$ cd mosh
$ ./autogen.sh
$ ./configure
$ make
$ make install
```

####ライブラリ設定

```bash
$ cat /etc/ld.so.conf.d/local.conf                                                                                                                                       
/usr/local/lib
/usr/local/lib64

$ ldconfig
```

####iptablesの設定
```bash
$ vim /etc/sysconfig/iptables
~
# 下記追記
-A INPUT -m state --state NEW -m udp -p udp --dport 60000:61000 -j ACCEPT

# iptables再起動
$ /etc/init.d/iptables restart

# 動作確認
$ /etc/init.d/iptables status | grep 60000
12   ACCEPT     udp  --  0.0.0.0/0            0.0.0.0/0           state NEW udp dpts:60000:61000 
```

####接続確認
```bash
$ mosh ur-hostname
```
javaScriptで対応ブラウザ判定

限定したブラウザでのみサイトを表示したい事が多々あると思うので、ブラウザ判別を楽にするコード。
個人的にmsie 6とかmsie 7とか書くのが面倒なので、勝手にie6とかie7という風に省略。

現状、IE系とChrome、Safari、Opera、FireFoxに対応。
それ以外は"unknown"。

※IE11はPreview版での検証(IE11からuserAgentにMSIEが含まれなくなったので、Tridentのバージョンで判別してます)

```js:JavaScript

/**
 *	ブラウザ名を取得
 *	
 *	@return		ブラウザ名(ie6、ie7、ie8、ie9、ie10、ie11、chrome、safari、opera、firefox、unknown)
 *
 */
var getBrowser = function(){
	var ua = window.navigator.userAgent.toLowerCase();
	var ver = window.navigator.appVersion.toLowerCase();
	var name = 'unknown';
	
	if (ua.indexOf("msie") != -1){
		if (ver.indexOf("msie 6.") != -1){
			name = 'ie6';
		}else if (ver.indexOf("msie 7.") != -1){
			name = 'ie7';
		}else if (ver.indexOf("msie 8.") != -1){
			name = 'ie8';
		}else if (ver.indexOf("msie 9.") != -1){
			name = 'ie9';
		}else if (ver.indexOf("msie 10.") != -1){
			name = 'ie10';
		}else{
			name = 'ie';
		}
	}else if(ua.indexOf('trident/7') != -1){
		name = 'ie11';
	}else if (ua.indexOf('chrome') != -1){
		name = 'chrome';
	}else if (ua.indexOf('safari') != -1){
		name = 'safari';
	}else if (ua.indexOf('opera') != -1){
		name = 'opera';
	}else if (ua.indexOf('firefox') != -1){
		name = 'firefox';
	}
	return name;
};


/**
 *	対応ブラウザかどうか判定
 *	
 *	@param	browsers	対応ブラウザ名を配列で渡す(ie6、ie7、ie8、ie9、ie10、ie11、chrome、safari、opera、firefox)
 *	@return				サポートしてるかどうかをtrue/falseで返す
 *
 */
var isSupported = function(browsers){
	var thusBrowser = getBrowser();
	for(var i=0; i<browsers.length; i++){
		if(browsers[i] == thusBrowser){
			return true;
			exit;
		}
	}
	return false;
};

// テストコード(chrome、safari、opera、firefox、ie11だとtrueが、その他だとfalseが返る)
alert(isSupported(['chrome','safari','opera','firefox','ie11']));

```
音の遅延 レーテンシー(レイテンシ)について


iOS、Android共通の音についての知識です。

サンプリングレートが44100の場合、音を1秒間あたり44100個のサンプルで作ります。

しかし、44100回も関数を呼び出すと負荷が高いのでいくつかまとめて呼び出します。その数をバッファサイズと言ったりフレームサイズと言ったりします。

フレームサイズは1024の場合が多いです。

この時、音の遅延は約0.023秒です。
1024 / 44100 = 0.023219955

※非インターリーブの場合は0.011秒？
1024 / 2 / 44100 = 0.011609977


## 参考
- [iPhone Core Audioプログラミング](http://www.amazon.co.jp/本/dp/4797355158)
- [Androidのサウンド環境はJelly Beanで劇的に進化する - GIZMODO](http://www.gizmodo.jp/2012/07/android_osjelly_bean.html)
- [Androidは10msの夢を見るか？](http://vaiopocket.seesaa.net/article/279139456.html)
windowsの共有フォルダをマウント

毎回ググって面倒なのでメモ。

* cifs-utils が入っている必要あり。

```bash:
$ sudo mount -t cifs -o username=kitty,password=fj23pfj //owner-pc/share /mnt
```

fstabに書く場合
----


```bash:id,passを記載したファイルを用意
$ cat > /root/credentials
username=USERNAME
password=PASSWORD
```

```bash:/etc/fstab
//SERVER/SHARENAME /mnt/MOUNTPOINT cifs users,credentials=/root/credentials 0 0
```
ちょっとしたことがGroovy「PostgreSQLのXML型のカラムのデータを修正する」

PostgresqlのXML型カラムをSQLだけで安全に編集する方法がいまいち分からなかったので、Groovyで書きました。

修正した内容は嘘だけど、大体こんな感じ。

updateなのにexecuteInsert使っているのは、歴史的経緯からです。。。

```groovy:xml_data_fix.groovy
@Grab(group='postgresql', module='postgresql', version='9.1-901.jdbc4')
@Grab(group='org.codehaus.gpars', module='gpars', version='1.0.0')

import org.postgresql.ds.PGSimpleDataSource;
import groovy.sql.Sql;

/* meta */
String.metaClass.queryTo = { con ->
  def qry = delegate
  
  new Object(){
      def leftShift = {c -> con.eachRow(qry,c)}
      def forList = new Object(){
        def leftShift = {c -> try{c(con.rows(qry).collect{it[0]})}catch(Exception ex){println ex} }
      }
  }
}

String.metaClass.updateBy = { con,params ->
  def qry = delegate
  con.executeInsert(qry,params)
}

PGSimpleDataSource.metaClass.set = { srv,port,db,usr,pass -> 
  delegate.setServerName(srv) ; delegate.setPortNumber(port)
  delegate.setDatabaseName(db)
  delegate.setUser(usr)       ; delegate.setPassword(pass)
  delegate.getConnection()
}


/* datasource */
def cons = {
  [pg01 : new Sql(new PGSimpleDataSource().set("localhost" , 5432 , "postgres"    , "myUser" , "******"))]
}()

/* query */
"""
select xml_data
from xml_data_store
where
document_number = '20130801'
""".queryTo(cons.pg01) << {
  def xml = it.xml_data.getString().replaceAll('不適切な文言','(不適切な表現につき検閲されました)')
  try{
      def xmlobj = new org.postgresql.jdbc4.Jdbc4SQLXML(cons.publication.connection,xml)
      """
      update xml_data_store
        set xml_data_fixed = ?
      where
        document_number = '20130801'
      """.updateBy(cons.publication,[xmlobj])
  }catch(ex){
      println ex
  }
}

/* close */
cons.each {try{it.value.close()}catch(e){}}
```
androidの初期のＡｃｔｉｖｉｔｙに色々追加

Androidの初期のＡｃｔｉｖｉｔｙに
テキストボックス
Textパスワード入力ボックス
ボタンをくっつけました。





![SnapCrab_NoName_2013-8-9_16-9-39_No-00.png](https://qiita-image-store.s3.amazonaws.com/0/27711/04727cb9-6464-a416-c526-ce980415348a.png)
Rubocopをsyntasticを使ってVimから自動実行する

Rubyコードを静的にチェックしてくれる[Rubocop](https://github.com/bbatsov/rubocop)をVimから実行するプラグインには専用の[vim-rubocop](https://github.com/ngmy/vim-rubocop)もあるんですが、このためだけのためにインストールするのが嫌だったので、[syntastic](https://github.com/scrooloose/syntastic)から実行するようにしました。

追記: 2017年現在、 syntastic から [ale](https://github.com/w0rp/ale) に乗り換えました。ale は syntastic と異なり非同期で実行されるので Vim が固まりません。

# インストール

何はともあれNeoBundleでsyntasticをインストール（NeoBundle自体の使い方については [Vim - NeoBundleの導入 - Qiita](http://qiita.com/puriketu99/items/1c32d3f24cc2919203eb)などを参照してください）

```vim:.vimrc
NeoBundle 'scrooloose/syntastic'
```

それとRubocopもインストールします。

```zsh
gem i rubocop
```

# Rubocopを使うように設定する

```vim:.vimrc
NeoBundle 'scrooloose/syntastic'
let g:syntastic_mode_map = { 'mode': 'passive',
            \ 'active_filetypes': ['ruby'] }
let g:syntastic_ruby_checkers = ['rubocop']
```

`syntastic_mode_map` は `'active'` もしくは `'passive'` を指定します。 `'active'` だとバッファを保存するたびにsyntasticが走り、 `'passive'` の場合は `:SyntasticCheck` 実行時に走ります。

 `'active_filetypes'` は保存の度にsyntasticを走らせるファイルタイプを指定します。

２つをあわせると、基本的にsyntasticは走らせないけど、rubyのときだけは自動的に走らせる、という設定になります。

`syntastic_ruby_checkers` はrubyでsyntasticが走らせるツールを指定するものです。

# 使ってみる

あとはrubyファイルを開いて保存するだけです。

syntasticはVimをブロックするので大きなファイルだとストレスたまるかも知れません。その場合は `'active_filetypes'` ではなく`'passive_filetypes'` に指定して、必要なタイミングで `:SyntasticCheck` を実行するようにするといいでしょう。

もしくは `:SyntasticToggleMode` を実行すると active と passive を切り換えることもできます。

# 合わせて読みたい

- [Ruby - Rubocopを使ってコーディングルールへの準拠チェックを自動化 - Qiita](http://qiita.com/yaotti/items/4f69a145a22f9c8f8333)
McCarthy 91 function in Ruby

```ruby:m91.rb
## McCarthy 91 function http://en.wikipedia.org/wiki/McCarthy_91_function
# ==========================================================================
# The McCarthy 91 function is a recursive function,
# defined by the computer scientist John McCarthy
# as a test case for formal verification within
# computer science.
# ==========================================================================
# Definition:
#        | n - 10 , n > 100
# f(n) = |
#        | f(f(n+11)) , otherwise
# ==========================================================================
# m91: Int -> Int
def m91(n)
  if n > 100
    n - 10
  else
    m91 m91 n+11
  end
end

## =========================================================================
# f(89) = f(f(100)) = f(f(f(111)))
# = f(f(101)) = f(91) = f(f(102)) = f(92) = ...
# This is the pattern.
# Thus we could define a function H to conclude that
# H(n,m) = f(f(...f(n)...))
#             |.. m ..|
#          | n , m = 0    , when m = 0
# H(n,m) = | H(n-10, m-1) , when m > 0, n > 100
#          | H(n+11, m+1) , when m > 0, n <= 100
# we then derive...
# ==========================================================================
# h: Int x Int -> Int
def h(n, m)
  if m.zero?
    n
  elsif n > 100
    h n-10, m-1
  else
    h n+11, m+1
  end
end

## now we can use h to redefine m91 and make it tail-recursive

## tail-recursive m91
# m91: Int -> Int
def m91_tco(n)
  h n, 1
end
```
Smarty3のSHIFT-JIS対応方法

テンプレートがSHIFT-JISの時の対応方法。


```
$smarty->registerFilter("pre","filterUtf8");
$smarty->registerFilter("output","filterSjis");

$smarty->display("index.tmpl");

//UTF-8からShift-JISへ
function filterSjis($buff, &$smarty){

return mb_convert_encoding($buff,"SJIS","UTF-8");
}
//Shift-JISからUTF-8へ
function filterUtf8($buff, &$smarty){

return mb_convert_encoding($buff,"UTF-8","SJIS");
}
```
MySQLdbの優雅な使い方



共通部分

```
import MySQLdb

args = {"hostname": "poko",
		"db": "hoge",
		"user": "pokopoko",
		"passwd": "hogehoge",
		"charset": "utf-8"
		}
```

優雅でない書き方

```
con = MySQLdb.connect(**args)
cur = con.cursor()

# commitが必要な処理
cur.execute("INSERT INTO pokos (id, poko_name) VALUES (%s, %s)" % (con.literal(id), con.literal(poko_name)))
con.commit()

cur.close()
con.close()

```

優雅な書き方

``with``と``cur.execute(query, args)``を利用

```
with MySQLdb.connect(**args) as cur:
	cur.execute("INSERT INTO pokos (id, poko_name) VALUES (%s, %s)", (id, poko_name))
```

下の書き方だとごちゃごちゃしない。
commit忘れやconnectionの開放の忘れなども防げる。例外が起きたらrollbackも。
withではas以降に``__enter__()``の返り値が入る。
withブロックを抜けるとき``__exit()__``がよばれる

``cur.execute(query, args)``で自動エスケープ
withに関するメモ


with構文で何をやってるのか

```
c = PokoClass()
with c as poko:
	poko.hoge()
```

は

```
c = PokoClass()
poko = c.__enter__()
poko.hoge()
c.__exit__()
```

と同義。

``__exit()__``はself, exc_type, exc_value, traceback の4つの引数をとる。例外が発生しない場合はNoneが渡される
Haxeからleap.jsを呼んでみる

初めてexternを書いてみて、色々覚えることがあったのと、日本語のドキュメントがあまりなさそうなので忘備録的に書き留めようかと思います。

ちなみに使用したHaxeのバージョンは3.0です。

とりあえず、SDKに付属していたコード例で一番楽そうな

```javascript
var controller = new Leap.Controller();

// for the frame event
controller.on('frame', function() {
  console.log("hello frame")
})

// for the animationFrame event. this is only supported from within the browser
controller.on('animationFrame', function() {
  console.log("hello frame")
})
controller.connect()
```

このコードをHaxeで書いてコンパイル出来るようにすることを目指します。

　　

## ディレクトリ構造

```
.
├── main.html
└── static
    ├── haxe
    │   ├── Main.hx
    │   ├── build.hxml
    │   └── leap
    │       └── Controller.hx
    └── js
        └── leap.js
```

とりあえずbuild.hxmlの定義をしてしまいましょう。

```hxml
-cp leap
-js ../js/main.js
-main Main
-debug
```

-cpはファイルを検索したいディレクトリのことです。

Controllerの型定義の前に、先にMain.hxの定義をすませてしまいます。

```csharp:Main.hx
package ;
import leap.Controller;

class Main {
    static function main() {
        var controller = new Controller();
        controller.on('frame', function() {
            trace("hello frame");
        });
        controller.on('animationFrame', function() {
            trace("hello frame");
        });
        controller.connect();
    }
}

```

こうですね。このくらいですとコードの見た目はJavaScriptのものとほとんど違いはありませんね。

では、これからこれをコンパイルが通るようにしましょう。

　　

が、ここで問題が発生します。


Haxeからjsの外部ライブラリを呼び出す場合、その定義ファイルは元のjsと同じモジュール階層を持つ必要があります。
この場合、ControllerはLeap以下に配置されているので、Haxeでも同様にしなければなりませんが、Haxeではモジュール名の先頭を大文字にすることは許されていません。どうすれば良いでしょう？

　　

### コンパイル時用のメタデータを使う

公式ドキュメントの [外部ライブラリの利用法](http://haxe.org/doc/js/extern_libraries) によると、`パッケージの構造を外部ライブラリの構造に対応させるのに、メタデータを使うこともできます。`とあります。

[Tips and Tricks](http://haxe.org/manual/tips_and_tricks) の`@:native`の部分によれば、こいつの引数に好きな文字列を与えれば This makes it more easy to bind "extern" classes that might have a different name. という雰囲気らしいので、こいつを使えば、いい感じにHaxeのルールを守りつつコンパイル後はLeapという名前のパッケージに所属させることが出来そうです。

やってみましょう。

```csharp:leap/Controller.hx
package leap;

@:native("Leap.Controller")
extern class Controller {
    public function new(opts : Map<String, Dynamic>={});
    public function on(event_type : String, func : Void -> Void): Void;
    public function connect(): Void;
}
```

とりあえず、今必要になりそうなメソッドだけ定義しておきます。
`@:native("Leap.Controller")` の部分で、展開後のモジュール名を定義しています。
ちなみに、3.0以前のHashはJavaScriptの連想配列と互換性がなかったようですが、新しく出来た`Map<T, U>`はちゃんとクロスプラットフォームで動作してくれるそうです。ウレシイ！

コンパイルしてみましょう。出来ましたね（多分）。

あとはhtmlファイルに

```html:main.html
<!DOCTYPE html>
<html>
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8">
<title>LeapHx test</title>
<script src="./static/js/leap.js"></script>
<script src="./static/js/main.js"></script>
</head>

<body>
    <h1>haxe</h1>
</body>
</html>

```

みたいに書いて、jsのコンソールを開けば凄い勢いでhello frameの文字がカウントされていくかと思います。

あとは必要に応じてexternを増やしていったりとか、gestureのenum定義したりとかしていって快適にコーディングしたいなぁとか、そういう感じですね。
mysqldump で作成したファイルを分割する

### データベースごとに分離する

```bash
reg="/^CREATE DATABASE .*\`[a-zA-Z0-9_]*\`.*/"
csplit -z -f mysqldump_ -k mysqldump-full.dump "$reg" {*}
```

* mysqldump00 コメントのみ
* mysqldump01～ 各種データーベース毎のファイル

### ファイルにデータベースの名前を設定する。

```bash:
for file in $(ls -1 mysqldump_* )
do
# mv
fname=mysqldump
mv -v $file "${fname}_$(grep 'USE `' $file | sed -e 's@.*`\(.*\)`;@\1@ig')" 
# done
done
```

### テーブルごとに分離する。

```bash
for fname in $(ls mysqldump_*)
do
# csplit
csplit -z -f ${fname}_ -k ${fname} "/^CREATE TABLE \`[a-zA-Z0-9_]*\`/" {*}
#done
done
```

### ファイルにテーブルの名前を設定する。

```bash:2015-05-18-renew
for file in $(ls -1 mysqldump_*_* ); 
do 
table_name=$(grep "CREATE TABLE" $file | cut -d '`' -f 2); 
mv ${file} ${table_name}.sql; 
done;
```

```bash:旧
for file in $(ls -1 mysqldump_*_* )
do 
# mv
fname=$( echo $file | sed -e "s@\(mysqldump_.*\)_[^_]*@\1@ig" );
mv -v $file "${fname}_$(grep 'CREATE TABLE `' $file | sed -e 's@.*`\(.*\)`.*@\1@ig')" ; 
# done
done
```

### CREATE と INSERT を分離

```bash:
for file in $(ls mysqldump_*_*)
do
# csplit
csplit -z -f ${file}_ -k ${file} "/^LOCK TABLES/" {2}
#done
done
```
[Ansible] SSL自己証明書を入れてnginxのリバースプロキシでjenkinsを動かすサンプル

https://github.com/hnakamur/ansible-playbooks/tree/45770dc87e9584f7082012445504495d738a2b2d

* iptablesを設定
* SSL自己証明書を作成
* nginx.orgのレポジトリからrpmでnginxをインストール
* openjdkをインストール
* http://pkg.jenkins-ci.org/redhat/ のレポジトリからrpmでjenkinsをインストール
* [Jenkins behind an NGinX reverse proxy - Jenkins - Jenkins Wiki](https://wiki.jenkins-ci.org/display/JENKINS/Jenkins+behind+an+NGinX+reverse+proxy)の手順を参考にnginxとjenkinsを設定。
実行時に標準出力がパイプされているかどうか判断するにはisattyを使う

MySQLコマンドに `-e` オプションでSQLを渡すと、その結果が標準出力されますよね

```zsh
% mysql -e 'SELECT * FROM life;'
+------------------------+
| カルマ                 |
+------------------------+
| リア充爆発しろ         |
| 他人の不幸で飯がうまい |
+------------------------+
```

でも、これをパイプで受け取ると中身が変わるんです。

```zsh
% mysql -e 'SELECT * FROM life;' | cat
カルマ
リア充爆発しろ
他人の不幸で飯がうまい
```

これどうやってんのかなと調べてみたら、標準出力がttyに結合してるかどうかを返す `isatty` なる関数が存在することを知りました。MySQLはこれの値を見て書きだす値を変更しているらしい。

で、これをRubyで書くとこんな感じで区別できる。

```rb:isatty.rb
puts STDOUT.isatty
```

実行してみる

```zsh
% ruby isatty.rb
true
% ruby isatty.rb | cat
false
```

なるほどー
[Ansible] Ansibleで管理している旨をテンプレートで生成したファイルのコメントに埋め込む

[templateモジュールのドキュメント](http://docs.ansible.com/template_module.html)に書かれていますが、テンプレートファイル内に{{ ansible_managed }}と書いておくと、このファイルはAnsibleで管理しているよ（だから手でいじらないでね）という旨の文字列に展開されます。

\# でコメントになるファイルの場合はテンプレートファイル(*.j2)内に以下のように書いておきます。

```
# {{ ansible_managed }}
```

epelで入れたAnsible 1.2.2の/etc/ansible/ansible.cfgに入っているデフォルトの設定は以下のとおりです。

```
# format of string $ansible_managed available within Jinja2 templates, replacing
# {file}, {host} and {uid} with template filename, host and owner respectively.
# The resulting string is passed through strftime(3) so it may contain any
# time-formatting specifiers.
#
# Example: ansible_managed = DONT TOUCH {file}: call {uid} at {host} for changes
ansible_managed = Ansible managed: {file} modified on %Y-%m-%d %H:%M:%S by {uid} on {host}
```
サーバーサイド（Node.js）とクライアントサイド（AMD/非AMD）共通のJSモジュールの定義

昨日からこういう書き方してる。

```js:math.js
(function (loader) {
    loader(function _commonDefine () {
        var math = {}; math.add = function () {
            return [].slice.apply(arguments).reduce(
                function (sum, val) {
                    return sum + val;
                }, 0);
        };

        return math;
    });
})(
// AMD RequireJS
    'function' === typeof define && difine.amd
  ? function _loader_for_requirejs (commonDefine) {
        define([], function () {
            return commonDefine();
        });
    }
// CommonJS NodeJS
  : 'undefined' !== typeof module && module.exports &&
    'function'  === typeof require
  ? function _loader_for_commonjs (commonDefine) {
        module.exports.math = commonDefine();
    }
// this === window
  : function _loader_for_window (commonDefine) {
        this.calcs || (this.calcs = {});
        this.calcs.math = commonDefine();
    }
);
```

上記の書き方で、依存モジュールが必要な場合は

```js:incr.js
(function (loader) {
    loader(function _commonDefine (math) {
        var incr = {}; incr.increment = function (val) {
            return math.add(val, 1);
        };

        return incr;
    });
})(
// AMD RequireJS
    'function' === typeof define && difine.amd
  ? function _loader_for_requirejs (commonDefine) {
        define([ "path/to/math" ], function (math) {
            return commonDefine(math);
        });
    }
// CommonJS NodeJS
  : 'undefined' !== typeof module && module.exports &&
    'function'  === typeof require
  ? function _loader_for_commonjs (commonDefine) {
        var math = require("path/to/math").math;
        module.exports.incr = commonDefine(math);
    }
// this === window
  : function _loader_for_window (commonDefine) {
        if (! this.calcs || ! this.calcs.math)
            throw new Error('"window.calcs" or "window.calcs.math" not found');

        this.calcs.incr = commonDefine(this.calcs.math);
    }
);
```
冗長性高いので、ラッパーがほしいかもしれない
tig で vim 風に&lt;C-f&gt;でページダウン&lt;C-b&gt;でページアップする



以下の設定を ~/.tigrc に記述

```bash:~/.tigrc
# Vim風に<C-f>,<C-b>でページ移動
bind generic <Ctrl-f> scroll-page-down
bind generic <Ctrl-b> scroll-page-up
```

tigrc の記述方法は以下のページを参照。
http://jonas.nitro.dk/tig/tigrc.5.html

# 参考

https://github.com/jonas/tig/commit/49ff09473805698941d4177cd84815c32921326c
[Ansible] ディレクトリが無かったら作成する

ディレクトリを作るのだからdirectoryモジュールがあるのかなと思って[Files Modules — Ansible Documentation](http://docs.ansible.com/list_of_files_modules.html)を見ると、無いなーとなるのですが、実は[fileモジュール](http://docs.ansible.com/file_module.html)でstateパラメータにdirectoryと指定するとディレクトリを作成出来ます。

```
- name: nginx location config file directory
  file: path=/etc/nginx/conf.d/location.d state=directory owner=root group=root mode=0755
```
[Ansible] 設定ファイルを書き換えた後にサービスをリロードする

詳細は[Best PracticesのTask And Handler Organization For A Role](http://docs.ansible.com/playbooks_best_practices.html#task-and-handler-organization-for-a-role)と[GlossaryのNotify](http://docs.ansible.com/glossary.html#notify)を参照してください。

templateの後にnotifyを追加してハンドラの名前を指定します。

```yaml:roles/common/tasks/nginx.yml
# ...(snip)...
- name: nginx http config file
  template: src=roles/common/templates/nginx.default.conf.j2 dest=/etc/nginx/conf.d/default.conf owner=root group=root mode=0644
  notify:
    - reload nginx
# ...(snip)...
```

ハンドラのyamlファイルにnotifyで指定したのと同じ名前でハンドラを定義しておきます。

```yaml:roles/common/handlers/main.yml
- name: reload nginx
  service: name=nginx state=reloaded
```
テストでActiveRecordのCallbcksをスキップする方法


いろいろやり方があるみたいだけど標準機能でいけそう

```sample.rb
class Sample < ActiveRecord::Base
  after_create :sample_callback

  def sample_callback
    # doing something
  end
end
```

``` sample_spec.rb
describe Sample do
  before { Sample.skip_callback(:create, :after, :sample_callback) } 
  after { Sample.set_callback(:create, :after, :sample_callback) }

  it "test" do
    # test
  end
end
```
AWKでグラフ的な表示

ごく個人的なスニペットです。昔のブログからサルベージ。

たまにターミナル上でばーっとログを比較したい時があって、使います。

```awk:ワンライナー版
awk 'match($0, /^[^ ]+ /) { lst[substr($0 ,RSTART,RLENGTH)] += 1} END { for(a in lst){ l =""; for(i=0;i<lst[a]/1000;i++){ l = l"*"; }  printf("%10d  %-30s %s\n" , lst[a],a,l);} }' | sort  -n
```

```awk:改行とコメントを入れたもの
awk '
/* 正規表現にマッチしたワードをカウントする */
match($0, /^[^ ]+ /) { 
	lst[substr($0 ,RSTART,RLENGTH)] += 1;
}

/* カウントしたワードとカウントを * の数で表す */
END { 
	for(a in lst){ 
		l =""; 
		for(i=0;i<lst[a]/1000;i++) l = l"*"; 
		printf("%10d  %-30s %s\n" , lst[a],a,l);
	} 
}' 
```

## 利用イメージ

Apache のログの頭にドメイン名が出ていると仮定すると、

```
cat /var/log/httpd/access_log \
| awk 'match($0, /^[^ ]+ /) { lst[substr($0 ,RSTART,RLENGTH)] += 1} END { for(a in lst){ l =""; for(i=0;i<lst[a]/1000;i++){ l = l"*"; }  printf("%10d  %-30s %s\n" , lst[a],a,l);} }' \
| sort  -n
```

結果

```
      1594  example.com                    **
      1994  foo.example.jp                 **
      2179  moe.example.jp                 ***
      4875  127.0.0.1                      *****
     10648  example.jp                     ***********
```


## まとめ

意外とテキストベース端末でも可視化は有効。

ここであげたようなサブドメインごとの件数集計以外にも1分ごとにどのくらいの接続があったのか、とか正規表現と出力をちょろっと変えることでいつものコンソール上で見やすく整形できるのでけっこう便利です。

たとえば以下のように変更することで、一分ごと（`/2013:10:[0-9]+/` にマッチしたパターンごと）の集計が実現できます。

```awk:
awk 'match($0, /2013:10:[0-9]+/) { lst[substr($0 ,RSTART,RLENGTH)] += 1} END { for(a in lst){ l =""; for(i=0;i<lst[a]/10;i++){ l = l"*"; }  printf("%s\t%5d\t%s\n" , a, lst[a],l);} }' | sort  -n
```

手持ちの検証サーバでの結果は、こんな感じになります。

```
2013:10:34	   52	******
2013:10:35	   26	***
2013:10:36	   23	***
2013:10:37	   26	***
2013:10:38	   26	***
2013:10:39	   23	***
2013:10:40	   11	**
2013:10:41	   31	****
2013:10:42	  275	****************************
2013:10:43	   17	**
2013:10:44	   16	**
2013:10:45	   15	**
2013:10:46	   25	***
2013:10:47	   23	***
2013:10:48	   21	***
2013:10:49	   30	***
2013:10:50	   16	**
2013:10:51	   37	****
2013:10:52	   17	**
2013:10:53	   23	***
2013:10:54	    9	*
2013:10:55	    5	*
2013:10:56	    5	*
```
ターミナルで`!$`と入力してtabを入力すると直前に指定したパスになる

タイトルで言い切ってしまった感。

例えば

```
ls /opt/boxen/homebrew/Library/Formula
```

とかでちょっと長いパスを指定して中見たあと、そのパスで何かしたい場合、

```
!$
```

って入力した後にtabを入力すると、

```
/opt/boxen/homebrew/Library/Formula
```

となる。たまに使うことがあるので知っておくと便利かも。

***

`$_`やESC+`.`でも同じようなことができるようです。
ベストプラクティスに沿ってrole用にディレクトリを作成する

# Ansibleベストプラクティスについて

[Best Practices — Ansible Documentation](http://docs.ansible.com/playbooks_best_practices.html)にAnsibleのベストプラクティスが書かれているのでご一読をお勧めします。

[Directory Layout](http://docs.ansible.com/playbooks_best_practices.html#directory-layout)にプレイブックを作成する際のお勧めディレクトリ構成が書かれているので、これに合わせて分割、配置するのがよさそうです。

## 2014-06-11追記 

と思っていたのですが、[Directory Layout](http://docs.ansible.com/playbooks_best_practices.html#directory-layout)にも書いてありますが、このディレクトリ構成に拘る必要はなくて、ニーズに応じて好きなディレクトリ構成を作って良いとのことです。

# roleのディレクトリツリーを作成するplaybook

このような構成のディレクトリツリーを作成するplaybookを書いてみました。

```https://github.com/hnakamur/ansible-playbooks/blob/master/ansible-directories.yml
# ansible-directories.yml
# Create directories for ansible playbooks.
#
# Example Usage:
# Create a single role.
# $ ansible-playbook --extra-vars 'roles=some-role' ansible-directories.yml
# or
# Create multiple roles.
# $ ansible-playbook \
#      --extra-vars '{"roles":["common", "webservers", "dbservers"]}' \
#      ansible-directories.yml
- hosts: localhost
  gather_facts: no
  connection: local
  vars:
    roles:
      - common
  tasks:
  - name: create vars directories
    file: path={{ item }} state=directory
    with_items:
      - group_vars
      - host_vars
  - name: create role directories
    file: path=roles/{{ item[0] }}/{{ item[1] }} state=directory
    with_nested:
      - roles
      - [ 'tasks', 'handlers', 'templates', 'files', 'vars', 'meta' ]
```

# 使い方

例えば、some-roleという1つのrole用にディレクトリを作る場合は

```shell-session
ansible-playbook --extra-vars 'roles=some-role' ansible-directories.yml
```

common, webservers, dbserversという複数のrole用にディレクトリを作る場合は

```shell-session
ansible-playbook \
   --extra-vars '{"roles":["common", "webservers", "dbservers"]}' \
   ansible-directories.yml
```

```--extra-vars```については[Passing Variables On The Command Line](http://docs.ansible.com/playbooks_variables.html#passing-variables-on-the-command-line)に説明があり、JSONやYAMLで変数を指定できるようになっています。
[Ansible] sshで繋がずにlocalhostで実行する

# Ansible 1.6.2では特に設定不要だそうです (2014-05-28追記)

[Ansibleチートシート（実行周り） - Qiita](http://qiita.com/unarist@github/items/39f5510f95c752c10df1)の「ローカルでの実行」によるとAnsible 1.6.2では特に下記のような設定は不要だそうです。

# 以下元記事

ymlにconnection: localと書いておけば、わざわざlocalhostにsshで繋ぐことなくlocalhostで実行出来ます。コマンドラインで--connection=localと指定する手もあるそうです。

```
hosts: 127.0.0.1
connection: local
```

詳細は[Local Playbooks](http://docs.ansible.com/playbooks_delegation.html#local-playbooks)を参照してください。
asp.netのDB接続文字列の場所とコネクション取得方法

sql serverへ接続してる場合

```xml:Web.config
<connectionStrings>
    <add name="hoge" providerName="System.Data.SqlClient" connectionString="hogeDB"/>
</connectionStrings>
```

Using使わないでconnection取ってくる

```csharp:dbConnection.cs

SqlConnection conn = new SqlConnection();
conn.ConnectionString = @"hogeDB";
conn.Open()
conn.Close();

```
文字列を連想配列(オブジェクト) or 配列に変換する。

文字列→オブジェクト変換

```js:
var str = 'Hello World';
var obj = Object.prototype.valueOf.call(str);
console.log(obj);
> {0: "H", 1: "e", 2: "l", 3: "l", 4: "o", 5: " ", 6: "W", 7: "o", 8: "r", 9: "l", 10: "d"}
```

さらに配列に変換

```js:
var array = Array.prototype.slice.call(obj);
console.log(array);
>["H", "e", "l", "l", "o", " ", "W", "o", "r", "l", "d"]
```
localhostでGithubなどからのWebhookを受ける

## 概要
Githubなどから送られてくるwebhookを受けるにはinternet上のendpointが必要です。
localhostはinternet上のendpointがないため、普通は受けることができません。

## 方法
そこで、ultrahookというサービスを使います。無料です。
http://www.ultrahook.com/

## 準備
サインアップし、Api keyとドメインを取得します。
ultrahookのgemをインストールします。


## Try it

例えば、以下のエンドポイントからlocalhostにforwardするには。

```
http://github.ukitazume.ultrahook.com -> http://localhost:3000
```

```
$ultrahook github 3000   # ultrahookの起動
$curl http://github.ukitazume.ultrahook.com/ -X POST  -d 'aa=bb'   # 適当なPOST
```

これで localhost:3000にアクセスが来ます。


## 注意
- POSTじゃないとダメです
- dataがないと、バグで落ちました(UltraHook client version: 0.1.2)
Mac OS Xのhttpd.confとDocumentRootの場所


※Mountain Lionの場合

## httpd.confはここ

	/etc/apache2/httpd.conf

`/etc/`は`/private/etc/`のシンボリックリンクになってる。

## DocumentRootはここ

	/Library/WebServer/Documents/

- - -
> Blog URL : http://www.utano.jp/ (Syntax Error.)
LeapMotionAS3 + IntelliJ IDEA 12で動かす設定

# はじめに
初投稿してみる。
IntelliJ IDEAは日本語化してあります。
[resources jp](http://morizo999.github.io/IDEA_resources_jp/)
IntelliJ IDEA最近使い始めたけど(・∀・)ｲｲﾈ!!
[LeapMotionAS3](https://github.com/logotype/LeapMotionAS3)からLeapMotionAS3-master.zipを落としておきます。

#手順
##1 プロジェクト作成

[Create New Project]→[Flash Module]を選択任意の設定をして次へ

![1.jpg](https://qiita-image-store.s3.amazonaws.com/0/4169/fd744d1b-84e4-4b50-6dc8-864a0be9c903.jpeg)

Desktopを選択、Pure ActionScriptをチェック、
Applicationを選択、Craete sample appをチェック

![2.jpg](https://qiita-image-store.s3.amazonaws.com/0/4169/38ade0c8-f7ce-b0fe-26bd-b39244fd56f3.jpeg)

##2 ソース準備

libsフォルダを作成

![3.jpg](https://qiita-image-store.s3.amazonaws.com/0/4169/320bbc6e-e91c-b569-5669-14f2b75b741d.jpeg)

LeapMotionAS3-master.zipを解凍して

- LeapMotionAS3-master/bin/LeapMotionAS3-asc2.swc
- LeapMotionAS3-master/src-examples/libs/

→作成プロジェクトのlibsへ

残りの
LeapMotionAS3-master/src-examples/
→作成プロジェクトのsrcへ

![4.jpg](https://qiita-image-store.s3.amazonaws.com/0/4169/87430559-448f-1a5f-8ce9-533cc14f1649.jpeg)

##3 ライブラリフォルダ設定
プロジェクトフォルダで右クリック → [Open Module Settings]選択
[Libraries] → [ + ] → [ActionScript/Flex] → 作成プロジェクトのlibsを選択

![5.jpg](https://qiita-image-store.s3.amazonaws.com/0/4169/c1564c36-a4b1-b16b-dddd-a197174efe00.jpeg)

表示されるダイアログで(app)を選択→OK

![6.jpg](https://qiita-image-store.s3.amazonaws.com/0/4169/c19d7dcf-0fcd-d525-7435-c4f18249c53f.jpeg)

##4 AIR application descriptorの設定
先ほどのウィンドウを閉じずModulesを選択
作成プロジェクトを選択 → AIR Packageのタブへ
Custom template選択 → Create…を押して作成

![7.jpg](https://qiita-image-store.s3.amazonaws.com/0/4169/16defb77-fc0f-79a8-5612-11375dabd8ab.jpeg)

作成されたxmlを開き

```xml:Test01-app.xml
<renderMode>direct</renderMode>
<depthAndStencil>true</depthAndStencil>
```

を設定

##5 実行
実行したいソースで以下の作業(exam:Visualizer)
Visualizerを右クリック→実行

![8.jpg](https://qiita-image-store.s3.amazonaws.com/0/4169/a173a83a-6823-a5d1-a1e4-27c3c195a1c4.jpeg)

![9.jpg](https://qiita-image-store.s3.amazonaws.com/0/4169/9bad918e-b721-e064-990e-2268d4cbbd75.jpeg)

#終わりに
もっといい方法や、間違ってたら教えろください。
オネシャッス。

#参考サイト
[IntelliJ IDEAでAway 3Dを始めよう。](http://tango.hatenablog.com/entry/2013/04/26/014251)
[LeapMotion を AIRアプリ で使う](http://blog.romatica.com/2013/07/23/leapmotionair-air/)
Flying with Google Analytics in Qiita 

？？？: _You're monitoring with Google Analytics? HOW?_

JuanitoFatas: _YES! I LEARNED IT JUST NOW. ADDING IS SO SIMPLE._

？？？: _I DUUNO. WHAT'S THAT? SOME SORT OF MAGIC?_

JuanitoFatas: SIMPLE! COME TO [Google Analytics](http://www.google.com/analytics/) and CREATE a new account for tracking code. 

？？？：I know that. And?

JuanitoFatas: Make sure to CHOOSE **Universal Tracking Code** and TYPE `http://qiita.com/` for URL field and fill in other easy stuff. 

？？？：That's done in seconds.

JuanitoFatas: Then GOTO [Qiita Account Settings](https://qiita.com/settings/account) to ADD your Google Analytics Code. That's it!!!

？？？： _THAT'S IT? I CANNOT BELIEVE IT'S SO SIMPLE._

JuanitoFatas: __I THINK IT'S BECAUSE THIS IS THE QITTA.__

[Conversation inspired from xkcd.](http://xkcd.com/353/)
Module#prepend example (Ruby 2.0+)

simplified method combination = `Module#prepend`

minimal example:

```rb:prepend.rb
class People
  def dinner
    puts 'enjoy main course.'
  end
end

module BeforeAndAfterDinner
  def dinner
    puts 'appetizers!'
    super
    puts 'desserts.'
  end
end

class People
  prepend BeforeAndAfterDinner
end

People.new.dinner
```

Output:

```
appetizers!
enjoy main course.
desserts.
```
プロセスの多重起動をアドバイザリロックで防止する・改

以前シェルスクリプトの多重起動をアドバイザリロックで防止する案を書きましたが・・・

 - [ShellScript - プロセスの多重起動をアドバイザリロックで防止する - Qiita [キータ]](http://qiita.com/ngyuki/items/618781df4383b270dee9 "ShellScript - プロセスの多重起動をアドバイザリロックで防止する - Qiita [キータ]")

この方法だとロックファイルが残りっぱなしになるので気持ち悪いです。。。

シェルスクリプト自身をロックすればいいかな？ と思ったのですが・・・

 - [Bash - flock(1)でシェルスクリプトの排他制御（Linux） - Qiita [キータ]](http://qiita.com/ma2saka/items/1eab5713097993d7ddf8#comment-3c304455cebbead2c8eb "Bash - flock(1)でシェルスクリプトの排他制御（Linux） - Qiita [キータ]")

追記で開かれた状態で実行しようとすると `bad interpreter: Text file busy` となり、排他制御の目的は達せられてもやっぱり気持ち悪いです。

`bash hoge.sh` などと呼べば回避できましたが、それはそれでやっぱり気持ち悪いです。`./hoge.sh` と書きたいです。

そこで、シェルスクリプト自身を読み込みで開いて排他ロックするようにしてみました。

```bash:lock.sh
exec {fd}<$0

flock -w 1 -x $fd || {
    echo "duplicate process.">&2
    exit 1
}
```

次のように使います。


```bash:hoge.sh
#!/bin/bash

source lock.sh

# 適当なファイルを 読み込み → インクリメント → 書き戻す
# 排他制御しないと正しくカウントされない
num=$(cat datafile)
usleep 1000
echo $(($num + 1)) > datafile
```

次のようにテストしてみます。

```bash
echo 100000 > datafile
seq 100 | xargs -P 100 -L 1 ./hoge.sh
cat datafile
```

上手くカウントできています。

```
100100
```

もちろん `source lock.sh` の部分をコメントアウトするとまともにカウントされません。
yasnippet と smartchr の干渉を修正する

C のソースコードなどを書いているとき、 yasnippet でフィールド編集 (TAB で次の位置にカーソルを移動できるアレ) をすると一部のキーで smartchr が効かなくなります。たとえば、

```common-lisp
(local-set-key (kbd ">")  (smartchr '(" > " " >> " " >= " "->" ">")))
```

と定義していて、ソースコードを普通に書いているときは ">" のキーを入力するたびに 5 つの文字列が切り替わりますが、 yasnippet のフィールド編集では ">" が挿入されるだけで文字列が切り替わりません。

この問題を修正するには以下のコードを .emacs に追加します。

```common-lisp
(remove-hook 'c-mode-common-hook
             '(lambda ()
                (dolist (k '(":" ">" ";" "<" "{" "}"))
                  (define-key (symbol-value (make-local-variable 'yas-keymap))
                    k 'self-insert-command))))
```

yasnippet ではフィールド編集で c-electric-* のコマンドが動かないように、一部のキーをフックで上書きするようになっています。そのため、そのフックを取り除くと smartchr がうまく動作するようになります。

ただし、 yasnippet でそのような処理が記述されているということは、 electric mode などを設定しているとフィールド編集で不具合が発生する可能性が十分あるということなので注意してください。
ShellScriptをつくる手順

## ファイルを作成

	$ vim test.sh

```bash:test.sh
#!/bin/sh

# 例：SSHでログイン
ssh username@host.example.com

# コマンド
# ・
# ・

```

## ユーザに実行権限を与える

	$ chmod u+x test.sh

## 実行する
	$ ./test.sh

- - -
> Blog URL : http://www.utano.jp/ (Syntax Error.)
Konachaの導入手順とheadlessテストで出力フォーマットを変更する方法

KonachaはRailsでJavaScriptのテストフレームワークのMochaを使いやすくしてくれるやつです。
https://github.com/jfirebaugh/konacha

似たようなのでJasmineをRailsで使いやすくする[Evergreen](https://github.com/jnicklas/evergreen/)ってのもあるけど、Konachaの方が開発が活発。

Konachaでheadlessテストしたときの出力フォーマットを変更する方法がぐぐってもあまり見つからなかったのでメモしておこうと思いました。ついでにせっかくだから導入手順から書いておきます。

## Konacha等のgemのインストール

Gemfileに以下を追加して、`bundle install`

```rb:Gemfile
group :development, :test do
  gem 'konacha'
  gem 'poltergeist'
  gem 'chai-jquery-rails'
  gem 'sinon-rails'
end
```

[poltergeist](https://github.com/jonleighton/poltergeist)はheadlessブラウザを使うなら必要。
[chai-jquery-rails](https://github.com/wordofchristian/chai-jquery-rails)はなくてもいい。アサーションを簡潔に書けるときがあるくらい。
[sinon-rails](https://github.com/travisjeffery/sinon-rails)はMockやStubを作れるライブラリ。なくてもいいけど、ajaxやconfirmのテストに便利。

## Phantom.jsインストール

Macでhomebrewの場合は以下のコマンド。

```
$ brew install phantomjs
```
※それ以外の場合は[こちら](https://github.com/jonleighton/poltergeist/tree/v1.3.0#installing-phantomjs
)を見てください。 

[Phantom.js](http://phantomjs.org/)はpoltergeistが使っているheadlessブラウザです。

## Konachaの設定を変更

`config/initializers/konacha.rb`に以下の設定をする。

```rb:config/initializers/konacha.rb
Konacha.configure do |config|
  RSpec.configure do |c|
    c.color = true
  end
  require 'rspec/core/formatters/documentation_formatter'
  require 'capybara/poltergeist'
  config.driver = :poltergeist
  config.formatters = [RSpec::Core::Formatters::DocumentationFormatter.new(STDOUT)]
end if defined?(Konacha)
```

RSpecなんちゃらかんちゃらって書いてあるところが、この記事の本題の出力フォーマットの設定です。RSpecでも--format documentationを指定する派なので、合わせたかった。
[RSpecの他のフォーマット](https://github.com/rspec/rspec-core/tree/master/lib/rspec/core/formatters)も使えるけど、きっとDocumentationFormatter以外使わないでしょう。
デフォルトは味気ない成功するとドットが並ぶやつです。

konacha.rbの他の設定はpoltergeistを使う設定です。

もう一つ設定します。
`spec/javascripts/spec_helper.js.coffee`を以下の内容で作成。

```coffeescript:spec/javascripts/spec_helper.js.coffee
#= require application
#= require chai-jquery
#= require sinon

beforeEach ->
  @sandbox = sinon.sandbox.create()

afterEach ->
  @sandbox.restore()
```

各specごとに書いてもいいけど、面倒なのでspec_helperに書きます。

sandboxうんちゃらはMock作るSinon.JSの設定。毎回Mockをクリアしておきます。

## テスト作成

適当にテストを作ります。CoffeeScriptじゃなくてJavaScriptでもいいです。

```coffeescript:spec/javascripts/array_sum_spec.js.coffee
#= require spec_helper

describe "Array#sum", ->
  it "returns 0 when the Array is empty", ->
    expect([].sum()).to.equal(0)

  it "returns the sum of numeric elements", ->
    expect([1,2,3].sum()).to.equal(6)
```

## 実行

### ブラウザで実行する

```
$ bundle exec rake konacha:serve
```
で、 http://localhost:3500 を開くと全テストが実行されます。

### コマンドラインで実行する

```
$ bundle exec rake konacha:run
```

以下のようなフォーマットで出力されます。色ついてないですけど、色もつきます。

```

Array#sum
  returns 0 when the Array is empty
  returns the sum of numeric elements

Finished in 0.00032 seconds
2 examples, 0 failures
```

ちなみに上の出力フォーマットの設定をしないとこんな出力です。

```
..

Finished in 0.00 seconds
2 examples, 0 failed, 0 pending
```

入れるだけ入れてSinon.JSやchai-jquery-railsは使っていませんが、詳しくはドキュメントを見てください。
Lisp's mapcar in Ruby (somehow)

Why `mapcar`?

Because sometimes I would need to do some operations for N array element by element successively.

```rb:mapcar.rb
## mapcar operates on successive elements of the arrays.
# fn is applied to the first element of each array, then to the second element of each array, and so on. The iteration terminates when the shortest array runs out, and excess elements in other arrays are ignored. The value returned by mapcar is a array of the results of successive calls to function
def mapcar(fn, *arrs)
  return [] if arrs.empty? or arrs.include? []
  transposed = if arrs.element_of_same_size
                 arrs.transpose
               else
                 arrs[0].zip(*arrs.drop(1))
               end
  transposed.map do |e|
    e.reduce(&fn) unless e.include? nil
  end
end

class Array
  def element_of_same_size
    self.all? { |a| a.size == self.first.size }
  end
end
```
## Usage:

```
mul = -> (*args) { args.reduce(:*) }
mapcar(mul, [1,2,3], [4,5,6], [7,8,9]) => [28, 80, 162]
```
物理削除されたファイルをまとめて awk で git rm する

きわめて個人的なメモ。ちなみにAWKを使っているのに必然性はありません。sedでもperlでも。

```bash
#確認
 git status -s | awk '/^ D/{print "git rm "$2}' 

#実行
 git status -s | awk '/^ D/{print "git rm "$2}' | sh
```

別にファイルリストの取得は `git ls-files --deleted` などでも。

もちろん、全変更を突っ込みたければ `git add -u` とか `git add -A` などでもいいと思います。

## 実行例

```
$ git status
# On branch master
# Changed but not updated:
#   (use "git add/rm <file>..." to update what will be committed)
#   (use "git checkout -- <file>..." to discard changes in working directory)
#
#	deleted:    hello/1
#	deleted:    hello/2
#	deleted:    hello/3
#	deleted:    hello/4
#	deleted:    hello/5
#	deleted:    hello/6
#	deleted:    hello/7
#	deleted:    hello/8
#	deleted:    hello/9
#	deleted:    hello/FizzBuzz
#
no changes added to commit (use "git add" and/or "git commit -a")

$ git status -s | awk '/^ D/{print "git rm "$2}'
git rm hello/1
git rm hello/2
git rm hello/3
git rm hello/4
git rm hello/5
git rm hello/6
git rm hello/7
git rm hello/8
git rm hello/9
git rm hello/FizzBuzz

$ git status -s | awk '/^ D/{print "git rm "$2}' | sh
rm 'hello/1'
rm 'hello/2'
rm 'hello/3'
rm 'hello/4'
rm 'hello/5'
rm 'hello/6'
rm 'hello/7'
rm 'hello/8'
rm 'hello/9'
rm 'hello/FizzBuzz'

$ git status -s
D  hello/1
D  hello/2
D  hello/3
D  hello/4
D  hello/5
D  hello/6
D  hello/7
D  hello/8
D  hello/9
D  hello/FizzBuzz
```