OmniAICreator/Qiita-1.07M huggingface dataset:
git: ソースからビルド


CentOS 5.10 にgitをソースから入れてみた:

依存:

    # yum install gcc gcc-c++  autoconf automake kernel-devel ncurses-devel
    # yum install gettext
    # yum install zlib-devel curl-devel
    
ソースをgithubより:
    
    # wget https://github.com/git/git/archive/master.zip
    # unzip master
    # cd git-master/
    # autoconf
    # ./configure --prefix=$HOME/local --with-curl=/usr/local --with-expat
    # make all
    # make install
    # ~/local/bin/git --version
    
    git version 1.9.0.GIT
Keynote '13に色付きのソースコードを貼る簡単な方法



1. gistにソースコードをはってcreateする
2. gistのソースコードを古いKeynote '09にコピペする
3. Keynote '09から'13にコピペする

[2014/04/21追記]
Keynote '09がない人は、テキストエディットを経由してもOKです(thanks to @gishi_yama さん！)

これで、ソースコードがハイライトされますね。
良かった良かった(Bad know how)
Ubuntsu13.04 にpostfixをインストールする。


１．postfixのインストール

![postfix_setting1.png](https://qiita-image-store.s3.amazonaws.com/0/39717/b3ee7ef4-648a-3e2a-7d30-d3ff13f2594f.png "postfix_setting1.png")

２．mail nameを設定する。

![postfix_setting2.png](https://qiita-image-store.s3.amazonaws.com/0/39717/cc8244e9-6003-9d73-bb54-502b8b77b8eb.png "postfix_setting2.png")

## サーバー起動時にOnにする。

$ sudo chkconfig --add postfix
$ sudo chkconfig postfix on

## main.cfの編集

```
myhostname = [ドメイン名] # => 例：yahoo.co.jp
relayhost をコメントアウト

/etc/init.d/postfix restart
# => postfixの再起動
```
rptからcsvへ変換

SQLServer等で出力したrptからcsvへ変換する際のメモ
・2行目の「-」の長さを利用する。
・2行目をスペースでsplitして「-」の長さを見ながら1行目と3行目以降の文字列をsubstringで取得していき、trimをかけてカンマをいれていく
　・substringする際にスペースの分を考えて指定していく。一番最初のカラムのところはスペースを考慮しなくていい
この辺りを考慮してゴリゴリすればできる。ソースはそのうち。。。

→20150217更新
-rptの形式は「結果をテキストで表示」時の内容を出力しているのでそれを変更すればよかった。表示形式を変更するには、クエリオプションから、結果-テキストを選択して、出力形式を選択することで変更ができる
NSPredicate で BOOL 型プロパティをテストするときの落とし穴

ある NSManagedObject のサブクラスが BOOL 型のプロパティ `aBoolProperty` を持つとする。このプロパティが偽であるかどうかをテストするとき、以下のような NSPredicate を書きたくなるかもしれない：

```objc
anObject.aBoolProperty = NO;
NSPredicate *isNO = [NSPredicate predicateWithFormat:@"aBoolProperty == NO"];
[isNO evaluateWithObject:anObject]; // => YES
```

（注： predicate には比較演算子が必要なので `@"!aBoolProperty"` とは書けない）

厳密に `NO` と比較したいならこれで構わないが、 `aBoolProperty` が **偽だが NO と一致しない** 場合もあることに気をつけよう。

Core Data が内部的に扱う `aBoolProperty` の値は `@YES` または `@NO` **または `nil`** である。これは BOOL 型の getter メソッドを介してアクセスする限り問題にならないが、内部値を直接扱う predicate では `nil != @NO` であることに注意しなければならない。

```objc
[anObject setPrimitiveValue:nil forKey:@"aBoolProperty"];

// getter は内部値が nil なら偽を返す
NSAssert(!anObject.aBoolProperty, @"");

// predicate では nil は NO と一致しない
NSPredicate *isNO = [NSPredicate predicateWithFormat:@"aBoolProperty == NO"];
[isNO evaluateWithObject:anObject]; // => *NO*
```

これが望み通りの挙動でないなら、 `NO` と一致するかどうかではなく `YES` でないことをテストすればよい：

```objc
[anObject setPrimitiveValue:nil forKey:@"aBoolProperty"];
NSPredicate *isNO = [NSPredicate predicateWithFormat:@"aBoolProperty != YES"];
[isNO evaluateWithObject:anObject]; // => YES
```
Scalaで例外を定義

Javaとの互換性のために補助コンストラクタを追加。

```scala
class MyException(message: String = null, cause: Throwable = null) extends RuntimeException(message, cause) {
  def this(cause: Throwable) = this(Option(cause).map(_.toString).getOrElse(null), cause)
}
```

こんな感じで使える。

```scala
new MyException()
new MyException("msg")
new MyException(new Exception("hoge"))
new MyException("addtional message", new Exception("hoge"))
```

Scalaならもちろん引数名を指定しても良い。

```scala
new MyException(cause = new Exception("hoge"))
```
Salesforce1(web)で任意のレコードのページを表示する

iPhoneアプリを作っていて、WebView内でSalesforce1を表示して、任意のレコードを表示しようと思い、調べてみました。

VFPageだと、`sforce.one.navigateToSObject(recordId);`で飛べるみたいですが、Salesforce1が開かれた状態では上記のライブラリは読み込まれていない様です。
※参考：http://www.salesforce.com/us/developer/docs/salesforce1/Content/vf_dev_best_practices_navigation.htm

![sforce is not defined](https://qiita-image-store.s3.amazonaws.com/0/9490/e112c284-887e-f6f9-61f6-358c0c739bcb.png)

ソースをごにょごにょ追っていて見つけたやり方が、
`$A.get('e.force:navigateToSObject').setParams({recordId:'00QO0000001dTZX'}).fire();`
での呼び出し。

![e.force:navigateToSObject](https://qiita-image-store.s3.amazonaws.com/0/9490/dda0b890-bf90-255f-ec3f-f8f991996473.png)

たぶんやってることは同じなんでしょうね。

iPhoneアプリでもWebViewにone/one.appを読み込ませてから、このJavaScriptコードを実行したらレコードのページが開けました。

ただ、公式なやり方ではないので、今後動作する保証はありません（Winter'14, Spring'14時点で動作）。

あと、ページ遷移の際に#の後に付くハッシュの様な文字列…これの内容が分かればもう少しスマートにできそうです。
ヒント: https://twitter.com/stomita/status/448079681246347264
↓
答え：http://qiita.com/stomita/items/79ec9c4b6273f7970d3e
何番目系の便利なCSSまとめ

この辺のはなし。

| 種類 | -child | -of-type |
|-----------:|:------------|:------------|
|最初|:first-child|:first-of-type|
|最後|:last-child|:last-of-type|
|n番目|:nth-child(n)|:nth-of-type(n)|
|後ろからn番目|:nth-last-child(n)|:nth-last-of-type(n)|
|１個だけ|:only-child|:only-of-type|

#最初
##:first-child
最初の要素（親要素から見て、子要素すべての最初）
[デモ](https://codepen.io/ituki_b/full/Qzwrwo?type=0)

##:first-of-type
ある要素の最初（親要素から見て、ある子要素の最初）
[デモ](https://codepen.io/ituki_b/full/Qzwrwo?type=1)

#最後
##:last-child
最後の要素（親要素から見て、子要素すべての最後）
[デモ](https://codepen.io/ituki_b/full/Qzwrwo?type=2)

##:last-of-type
ある要素の最後（親要素から見て、ある子要素の最後）
[デモ](https://codepen.io/ituki_b/full/Qzwrwo?type=3)

#1個だけ
##:only-child
1個だけ子要素がある（親要素から見て、子要素が1個だけある）
[デモ](https://codepen.io/ituki_b/full/Qzwrwo?type=4)

##:only-of-type
1個だけある子要素がある（親要素から見て、ある子要素が1個だけある）
[デモ](https://codepen.io/ituki_b/full/Qzwrwo?type=5)

#X番目
##:nth-child(X)
X番目
[デモ：５番目](https://codepen.io/ituki_b/full/Qzwrwo?type=6)

##:nth-of-type(X)
ある要素のX番目
[デモ：５番目](https://codepen.io/ituki_b/full/Qzwrwo?type=7)

##:nth-child(Xn)
Xの倍数
[デモ：2の倍数](https://codepen.io/ituki_b/full/Qzwrwo?type=18)

##:nth-of-type(Xn)
ある要素のXの倍数
[デモ：2の倍数](https://codepen.io/ituki_b/full/Qzwrwo?type=19)

#最後からX番目
##:nth-last-child(X)
最後からX番目
[デモ：最後から５番目](https://codepen.io/ituki_b/full/Qzwrwo?type=8)

##:nth-last-of-type(X)
ある要素の最後からX番目
[デモ：最後から５番目](https://codepen.io/ituki_b/full/Qzwrwo?type=9)

#X番目からYまで
##:nth-child(n+X)
X番目以降（X番目から最後まで）
[デモ：５番目から最後まで](https://codepen.io/ituki_b/full/Qzwrwo?type=10)

##:nth-of-type(n+X)
ある要素のX番目以降（X番目から最後まで）
[デモ：５番目から最後まで](https://codepen.io/ituki_b/full/Qzwrwo?type=11)

##:nth-child(-n+X)
X番目以前（最初からX番目まで）
[デモ：５番目以前](https://codepen.io/ituki_b/full/Qzwrwo?type=12)

##:nth-of-type(-n+X)
ある要素のX番目以前（最初からX番目まで）
[デモ：５番目以前](https://codepen.io/ituki_b/full/Qzwrwo?type=13)

#最後からX個
##:nth-last-child(-n+X)
最後からX個
[デモ：最後から5個](https://codepen.io/ituki_b/full/Qzwrwo?type=14)

##:nth-last-of-type(-n+X)
ある要素の最後からX個
[デモ：最後から5個](https://codepen.io/ituki_b/full/Qzwrwo?type=15)

#最後からX番目以前
##:nth-last-child(n+X)
最後からX番目以前
[デモ：最後から5番目以前](https://codepen.io/ituki_b/full/Qzwrwo?type=16)

##:nth-last-of-type(n+X)
ある要素の最後からX番目以前
[デモ：最後から5番目以前](https://codepen.io/ituki_b/full/Qzwrwo?type=17)

#参考

- http://bl6.jp/web/css/nth-child-nth-last-child/
- http://flukeout.github.io/
[Groovy]複数のGrapeを指定する方法

[本家サイト](http://groovy.codehaus.org/Grape)は正しいけど[日本語サイト](http://groovy.codehaus.org/Japanese+Grape)の方は多分情報が古い？
正しくは本家サイトのように、リストとして以下のように指定する。

```groovy
@Grapes([
    @Grab(group='net.sourceforge.jtds', module='jtds', version='1.3.1'),
    @Grab(group='postgresql', module='postgresql', version='9.1-901.jdbc4')
])

```
ScalaのAkka Actorで定期実行する


Actorを自分自身で定期的に実行します。

## アクター

```scala
import akka.actor.Actor

object ScheduledActorProtocol {
  case class Update(target: String)
  case class Schedule(interval: Int)
}

class ScheduledActor extends Actor {
  import SchduledActorProtocol._
  import scala.concurrent.duration._

  val system = context.system
  implicit val executionContext = system.dispatcher

  def receive = {
    case Update(target) =>
      println("update " + target)

    case Schedule(interval) =>
      system.scheduler.schedule(5 seconds, interval seconds, self, "update"))
  }
}
```


## クライアントコード

```scala
import akka.actor.{ Props, ActorSystem }
import SchduledActorProtocol._

val scheduledActor = ActorSystem("schedule").actorOf(Props[ScheduledActor])
  dispatchActor ! Schedule(1)
```


system.scheduler.schedule(5 seconds, interval seconds, self, Update("foo"))

これは、5秒に、interval間隔で、自分のActorRef(self)に、Update("foo")メッセージを送るという意味です。

selfの部分を他のアクターにすれば、そのアクターにメッセージが送信されます。
vagrant で "WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED"

背景
-----

vagrant で起動した VM 上の DB に SSH 経由で接続しようとした場合などに、
```WARNING: REMOTE HOST IDENTIFICATION HAS CHANGED``` が出てきて億劫だ。

毎度毎度 ```~/.ssh/known_hosts``` から該当行を探して消すのに疲れた。

対応
-----

```ssh-keygen -R "[127.0.0.1]:2222"```
JEP 171: Fence Intrinsics

低レベルJVM操作(`com.sun.Unsafe`)に"明示的フェンス"を導入する（Java8で採用済み）。java.util.concurrent配下クラスの内部実装等で利用されることを想定したものであり、アプリケーション開発者向けの機能拡張ではない。

* http://openjdk.java.net/jeps/171

関連情報

* [RealJenius.com - JEP-171: Fence Intrisics Keep Memory In Line](http://realjenius.com/2012/12/03/jep171-fences/)
facebook tips


## facebookページのURLを短縮する

http://fb.com/ にfacebookページのURL末尾の数字を連結すると、短縮されたURLになります。

例えば、

https://www.facebook.com/pages/%E9%AD%9A%E4%B8%89/170040003050340

というURLは、

http://fb.com/170040003050340

のように短縮することが可能です。
Scala: 例外が発生しても手段を変えながら成功するまでtryする方法



例外が発生しても、手段を変えながらtryし続ける処理を書くためのユーティリティ:

```scala
object Flow {
  class NoChoiceException(exceptions: Seq[Throwable]) extends RuntimeException(exceptions.zipWithIndex.map { case (e, index) => s"[$index] ${e.getMessage}" }.mkString("\n"))
  def select[A](functions: Function0[A]*): A = {
    def tryNext[A](functions: Seq[Function0[A]], exceptions: Seq[Throwable]): A = {
      functions.headOption match {
        case None => throw new NoChoiceException(exceptions)
        case Some(function) =>
          try {
            function()
          } catch {
            case exception: Throwable => tryNext(functions.drop(1), exceptions.:+(exception))
          }
      }
    }

    tryNext[A](functions, List())
  }
}
```

使い方

```scala
val char = Flow.select(
	() => "a".charAt(-1), // 例外が発生
	() => "b".charAt(-1), // 例外が発生
	() => "c".charAt(0), // ここで成功
	() => "d".charAt(0) // 上で成功したので、ここには来ない
)
//> char  : Char = c
```

ちなみに、これを `try-catch` だけで書くとこうなる:

```scala
val a = {
	try {
		"a".charAt(-1)
	} catch {
		case e:Throwable =>
			try {
				"b".charAt(-1)
			} catch {
				case e:Throwable =>
					try {
						"c".charAt(0)
					} catch {
						case e:Throwable =>
							"d".charAt(0)
					}
			}
	}
}

//> a  : Char = c
```

全部ダメだった場合は、最終的に例外が飛ぶ

```scala
try {
	Flow.select(
		() => "a".charAt(-1),
		() => "b".charAt(-1),
		() => "c".charAt(-1)
	)
} catch {
	case e:Flow.NoChoiceException => println(e.getMessage)
}
//> [0] String index out of range: -1
//| [1] String index out of range: -1
//| [2] String index out of range: -1
//| res0: AnyVal = ()
```

# Eitherを使う方法

ScalaにはEitherというエラーモナドを簡単に使えるライブラリがある。Eitherをforを組み合わせると、上のFlow.selectと同じようなことができる。

```scala
implicit class MyString(string: String) {
	def charAtOption(index: Int): Either[Throwable, Char] = {
		try {
			Right(string.charAt(index))
		} catch {
			case e:Throwable => Left(e)
		}
	}
}

val char: Either[Throwable, Char] = for (
  result <- "a".charAtOption(-1).left; // 例外が発生
  result <- "b".charAtOption(-1).left; // 例外が発生
  result <- "c".charAtOption(0).left; // ここで成功
  result <- "d".charAtOption(0).left // 上で成功したので、ここには来ない
) yield result

//> char  : Either[Throwable,Char] = Right(c)
```
Xcode, AppCodeスニペッド(Live Template)

少しずつ追記して行くッス。
所詮はスニペッドなので大した事はありませんが、便利そうならIDEに装備してやってくださいッス。

# Objective-C編

まずはシングルトンクラス用ッス。
(shared instance)

```objc:shain
+ (instancetype)sharedInstance {
	static id sharedInstance;
	static dispatch_once_t onceToken;
	dispatch_once(&onceToken, ^{
		sharedInstance = [self new];
	});
	return sharedInstance;
}
```

可変引数をNSArrayに変換するッス。
(variable length variables)

```objc:vlvs
va_list argp;
NSMutableArray* array = [NSMutableArray array];
id value = $VL_PARAMETER$;
for (va_start(argp, value); value != nil; value = va_arg(argp, id)) [array addObject:value];
va_end(argo);
```

次はNSValueのカテゴリクラスにメソッドを作る時のスニペッドッス。
構造体とNSValueを変換すればいろいろ便利ッス。（NSArrayに格納するときとか）
(structure - NSValue)

```objc:strcval
+ (NSValue*)valueWith$STRUCT_TYPE$:($COPY_STRUCT_TYPE$)$STRUCT_VAR_NAME$ {
  return [NSValue value:&$COPY_STRUCT_VAR_NAME$ withObjCType:@encode($COPY_STRUCT_TYPE$)];
}

- ($COPY_STRUCT_TYPE$)$COPY_STRUCT_TYPE$Value {
  $COPY_STRUCT_TYPE$ $COPY_STRUCT_VAR_NAME$;
  [self getValue:&$COPY_STRUCT_VAR_NAME$];
  return $COPY_STRUCT_VAR_NAME$;
}
```

一度だけ実行したいコードは

```objc:once
static dispatch_once_t onceToken;
dispatch_once(&onceToken, ^{
	$END$
});
```

 非同期処理して最後にUIに反映する時とかは

```objc:async
dispatch_async(dispatch_get_global_queue(DISPATCH_QUEUE_PRIORITY_DEFAULT, 0), ^{
	// On another thread
	$END$
	dispatch_sync(dispatch_get_main_queue(), ^{
		// On main thread
		
	});
});
```

# Javascript編

書き方の好き嫌いやブラウザのバージョン互換がどうとか議論が多そうなところですが、JSに首突っ込んで２日目の俺のスニペッドっス。

まずはオブジェクト指向でJSを扱う際のクラス定義周りッス。（厳密にはJSにはクラスないッスね・・。概念上クラスって連呼するからスマンッス。）

```js:cls
$CLASS_NAME$ = function ($ARG$) {
	var self = this;
	self.$COPY_ARG$ = $COPY_ARG$;
}

$COPY_CLASS_NAME$.prototype = {

	$CLASS_METHOD$: function () {
		var self = this;
		$END$
	}
}
```

次はサブクラスッス。
そうそう、ココが最も人それぞれでミンナチガッテミンナイイ的な部分だけど基本的に俺はオブジェクト指向型言語に囲まれてぬくぬくと育ったので「厳密に書く事で冗長になったりするけどセーフティなコード」とかよりもJSがクラスベースのオブジェクト指向型言語でないことを忘れてオブジェクティブな日常を送りたいので次のスニペッドが俺のジャスティス！

```js:subcls
$CLASS_NAME$ = function ($ARG$) {
	$SUPER_CLASS_NAME$.call(this, $COPY_ARG$);
	
	var self = this;
	self.$COPY_ARG$ = $COPY_ARG$;
}

$COPY_CLASS_NAME$.prototype = {

	$CLASS_METHOD$: function () {
		var self = this;
		$END$
	}
}

$COPY_CLASS_NAME$.prototype.__proto__ = $COPY_SUPER_CLASS_NAME$.prototype;
```

スはスニペッドのスっす。
Binding を設定したメニューアイテムに対して validateMenuItem: が呼ばれない

Cocoa のメニューには NSMenuItemValidation プロトコルというメニュー項目の有効・無効を動的に切り替えられる機構がある。ある `NSMenuItem` の `target` に設定されたオブジェクトが `-(BOOL)validateMenuItem:(NSMenuItem *)` を実装しているとき、このメニューアイテムが表示される直前に、メニューアイテム自身を引数としてこのメソッドが呼ばれる。メソッドが真を返せばメニューアイテムが有効になり、偽を返せば無効になる。

ところが、 Interface Builder でメニューアイテムに binding を設定すると `-validateMenuItem:` が呼ばれなくなるようだ。そのようなメニューアイテムの有効・無効を切り替えるには binding またはコードで `enabled` プロパティを操作すればよい。ただし、そのメニューアイテムを含むメニューの `autoenablesItems` が真ならば、メニューアイテムの `enabled` にセットした値が上書きされるかもしれないことに注意。
PlayFramework1.2 - Validationエラー発生時、フォームに入力値を再表示する

# やりたいこと
PlayFramework 1.2.7を使ったアプリケーションで、validationエラー発生時にフォームに入力値を再表示する

# 環境

* java version：1.7.0_45
* PlayFramework：1.2.7

# 方法1：入力画面のアクションにリダイレクトする
公式ドキュメント（[テンプレートへのエラーの表示](http://www.playframework-ja.org/documentation/1.2.7/validation#display)）に記載されている方法です。
> リダイレクトの間にエラーを保持する特別なトリックが必要になります。
> validation.keep() メソッドを使用してください。
> このメソッドは、次のアクションのためにエラーコレクションを保持します。

```Sample1.java
if(validation.hasErrors()) {
	//リダイレクトの間エラーを保持する
	validation.keep();
	//入力パラメータをflashに詰める
	params.flash();
	//入力画面のアクション(index)にリダイレクトする
	index();
}
```
※最初はこの方法を試しましたが、フォームへの入力値が一定量を超えた段階でブラウザが動かなくなってしまったため断念し、
　方法2に切り替えました。

# 方法2：入力画面のテンプレート名を指定してレンダリングする
入力パラメータはテンプレートスコープの変数として受け渡します。
他のアクションにリダイレクトするわけではないため、エラー内容を保持するトリックは必要ありません。

```Sample2.java
if(validation.hasErrors()) {
	render("@index", param1, param2, param3);
}
```

# 参考
* Beginner: Preferred way to handle Validation, Flash-scoped vars and form re-rendering - Google グループ
https://groups.google.com/forum/#!topic/play-framework/eOAh7fjoJV0

* mvc - play framework: how to repopulate form on validation-failure when using datamodel? - Stack Overflow
http://stackoverflow.com/questions/6782016/play-framework-how-to-repopulate-form-on-validation-failure-when-using-datamode
線形サポートベクトルマシン (1)

# サポートベクトルマシンとは

高い認知性能があり、クラス分類、回帰などの分野で盛んに実用される識別関数である[サポートベクトルマシン (SVM)](http://ja.wikipedia.org/wiki/%E3%82%B5%E3%83%9D%E3%83%BC%E3%83%88%E3%83%99%E3%82%AF%E3%82%BF%E3%83%BC%E3%83%9E%E3%82%B7%E3%83%B3) について話を進めていきます。詳しい解説は例によって Wikipedia 辺りを読んだほうが早いでしょう。

SVM ではモデルパラメータがある凸最適化問題の解として求まるため、局所解があればそれが大域解にもなるという点が大きな特徴として挙げられます。

SVM は疎な解 (sparse solution) を持ち、訓練データの一点だけに対してカーネル関数を計算することで新しい入力データの予測をするアルゴリズムです。機械学習の分野で高い認識性能を誇り、パターン認識や回帰分析などに応用されます。

## 最大マージン分類

訓練データ点が特徴空間 Φ(x) において線形分離可能である場合に、線形モデルを用いて二値分類問題を解くことを考えます。 SVM においては分類境界はマージンを最大化するものが選ばれます。

線形モデルの式は

```math
y(x) = w^T{\phi}(x)+b
```

Φ(x) はある固定された特徴空間変換関数、 b をバイアスパラメータとします。 W はあるひと組のパラメータです。

超平面 y(x) = 0 から点 x までの距離は |y(x)|/||w|| で与えられます。分類境界から点 Xn までの距離は次式で表されます。

```math
\frac {t_ny(Xn)} {||w||} = \frac {t_n(w^T{\phi}(X_n) + b)} {||w||}
```

マージンは訓練データと分類境界の最短距離です。マージンを最大化する w と b を求めますので、次の最適化問題を解くことでこれらが得られます。

```math
arg max(w,b) \{\frac {1} {||w||} min(n)[t_n(w^T{\phi}(x_n) + b)] \}
```

この最適化問題を解くのは複雑なので式を変形します。過程は[教科書](http://www.amazon.co.jp/dp/4621061240/)に譲るとして、結局のところ最適化問題は単に ||w||^-1 を最大化する問題に帰着します。この最大化問題は ||w||^2 を最小化する問題と等価です。

マージンを最大化する解は次式で求まります。

```math
argmax(w,b) \frac {1} {2} ||w||^2 \\
ただし \\
t_n(w^t{\phi}(x_n) + b) {\ge} 1\\
n = 1, ..., N
```

重なりのあるクラス分布、多クラス SVM といった問題は今は考えないことにします。次回はカーネル関数と実際に分類器を実装して動かす流れを説明します。
jQueryでclassやidをワイルドカード指定

jQueryでワイルドカード指定取得方法、忘れがちなのでメモ。

```html
<ul>
<li id="aaa1">TEST1</li>
<li id="aaa2">TEST2</li>
<li id="aaa3">TEST3</li>
</ul>
```

```js
$(function(){
    $("[id^=aaa]").on("click",function(){
        console.log($(this).attr("id"));
    });
});
```

これのワイルドカード部分、id="aaa1"であれば「1」をclickイベント内で取りたい。
replace()で置換すれば良いんだろうけど、何かもっと簡単な方法があれば賢い人教えて～。
rails g scaffold で生成される model や migration のコードをカスタマイズ


前に [rails g scaffold のカスタマイズ](http://qiita.com/labocho/items/387e7592b8e388fd9ca5)という記事を書いたんだけど、model や migration のテンプレートがなかったので調べた。

参考: http://stackoverflow.com/questions/19404133/custom-scaffolding-rails-add-a-method-in-every-model-class

# デフォルトで使われるテンプレート

activerecord のソースに含まれている。

```
activerecord-3.2.12
└── lib
    └── rails
        └── generators
            ├── active_record
            │   ├── migration
            │   │   ├── migration_generator.rb
            │   │   └── templates # rails g migration 用テンプレート
            │   │       └── migration.rb 
            │   ├── migration.rb
            │   ├── model
            │   │   ├── model_generator.rb
            │   │   └── templates # rails g model 用テンプレート
            │   │       ├── migration.rb
            │   │       ├── model.rb
            │   │       └── module.rb
            │   ├── observer
            │   │   ├── observer_generator.rb
            │   │   └── templates # rails g observer 用テンプレート
            │   │       └── observer.rb
            │   └── session_migration
            │       ├── session_migration_generator.rb
            │       └── templates # rails g session_migration 用テンプレート
            │           └── migration.rb
            └── active_record.rb
```

`rails g scaffold` 時には `rails g model` と同じテンプレートが利用される模様。

# カスタマイズ

Rails アプリケーションの `lib/templates/active_record/ジェネレータ名/テンプレート名.rb` にテンプレートのファイルを置くと優先的に利用される。

たとえば `rails g scaffold` や `rails g model` で生成される migration のテンプレートを変更したいなら、`activerecord-3.2.12/lib/rails/generators/active_record/model/templates/migration.rb` を、`lib/templates/active_record/model/migration.rb` にコピーして変更を加えればよい。

```bash
$ cd my_rails_app
$ mkdir -p lib/templates/active_record/model
$ cp `bundle show activerecord`/lib/rails/generators/active_record/model/templates/migration.rb lib/templates/active_record/model/migration.rb
dockerがv0.9になったのでinstallしてみた

dockerがバージョンアップされたのでとりあえず入れてみた。
homebrewで入るらしい。
dockerのメリットがわからなかったので調べると、
(http://apatheia.info/blog/2013/06/17/docker/)

- 仮想マシンを立ち上げるわけではなく、ホスト内の隔離された環境で動作するため起動が速い。LXCという技術のことらしい。ここでこの隔離されたシステムのことを コンテナ という。  
- AUFSを使っている。起動したときはディレクトリを重ねあわせておいて、更新の際に別の場所に書き込むというファイルシステムっぽい。立ち上げ時にイメージコピーがいらないので起動が軽い。

らしい。
以下コマンド。

```
$ brew upgrade
$ brew install boot2docker
$ export DOCKER_HOST=tcp://localhost:4243
$ boot2docker init
$ boot2docker up
$ docker version
Client version: 0.9.0
Go version (client): go1.2.1
Git commit (client): 2b3fdf2
Server version: 0.9.0
Git commit (server): 2b3fdf2
Go version (server): go1.2.1
Last stable version: 0.9.0
```

これでvirtualboxにチーズみたいなのが追加された。

```
$ docker run -i -t centos /bin/bash
Unable to find image 'centos' locally
Pulling repository centos
539c0211cd76: Download complete
bash-4.1#exit
$ boot2docker ssh  #パスは「tcuser」
boot2docker: 0.7.0
docker@boot2docker:~$
```

終了。
UIDocumentInteractionControllerを使ってNSStringを他のアプリで開くまで

UIDocumentInteractionControllerを使った事がある方はいると思いますが、
ネット上のサンプルコードを探してもNSStringを他のアプリで開くまでの手順が書かれているものがなかったのでコチラに投稿。

UIActivityViewControllerを使えば、簡単にテキストを他のアプリで開けるのですが、
コチラの場合、自分でアプリを追加しなければいけなかったりと、面倒。

UIDocumentInteractionControllerを使えば、自動的にテキストファイルが開けるアプリを
探して表示してくれるのでコチラのほうが断然便利です。

```objc:UIDocumentInteractionControllerを使用

//テキストファイルとして書き出すためのディレクトリを作成する
NSArray* paths = NSSearchPathForDirectoriesInDomains(NSDocumentDirectory, NSUserDomainMask, YES);
    NSString* docDir = [paths objectAtIndex:0];
    
    NSString* dirPath = [NSString stringWithFormat:@"%@/cache", docDir];
    NSFileManager* fileManager = [NSFileManager defaultManager];
    // ディレクトリが存在するか確認する
    if (![fileManager fileExistsAtPath:dirPath])
    {
        // 存在しなければ、ディレクトリを作成する
        [fileManager createDirectoryAtPath:dirPath
               withIntermediateDirectories:YES
                                attributes:nil error:nil];
	}


    // 最終的に他のアプリで開きたい文字列を用意しておきます
    NSString* hoge = @"テスト"
    
    // データの書き込み
    NSString* filePath = [NSString stringWithFormat:@"%@/new.txt", dirPath];

    [hoge writeToFile:filePath atomically:YES encoding:NSUnicodeStringEncoding error:nil];
    
    
    NSURL *url = [NSURL fileURLWithPath:filePath];
    self.docInterCon = [UIDocumentInteractionController interactionControllerWithURL:url];
    
    self.docInterCon.delegate = self;
    
    BOOL isValid;
    isValid = [self.docInterCon presentOpenInMenuFromRect:self.view.frame inView:self.view animated:YES];
    if (!isValid) {
        NSLog(@"データを開けるアプリケーションが見つかりません。");
    }

```

他のアプリで開くまでの手順としては、

１．一度NSStringをテキストファイルとして書き出す
２．UIDocumentInteractionControllerを使って書きだしたテキストファイルを開けるアプリを表示させる

という感じです。
Nexus5 のADBドライバが入らない（Windows7）

http://developer.android.com/sdk/win-usb.html

ここからGoogle USB Driver を落として、インストールしようとするんだけど何故かダメ。
ドライバが見つかりませんとな。

上記のファイル一式に含まれている android_winusb.inf を見ると確かにNexus5っぽいものがない（Google Glassは入っているのに・・・）のでないというのは妥当な気はするが、[ネットの皆さんは普通にインストールできている様子](http://www.teradas.net/archives/12243/)。

なぜだかわからないけど、infファイルを書き換える。
追加したのは下記の2つ。

```ini:android_winusb.inf
%SingleAdbInterface%        = USB_Install, USB\VID_18D1&PID_D002
%CompositeAdbInterface%     = USB_Install, USB\VID_18D1&PID_D002&REV_0232

```

値は、以下のハードウェアIDを入れる。
![device.PNG](https://qiita-image-store.s3.amazonaws.com/0/31010/978f0754-7ed2-0a3f-4cd3-25dabc375944.png)

（デバイスマネージャから調べてね）
Rubyのoptparseを軽く使うなら悩む必要なんてなかった

今回『スクリプトに--dry-runオプションのみを作りたい』場面が個人的に出てきました。
以前、[Rubyのoptparseを軽く使いたい時に悩む](http://qiita.com/ionis_h/items/519f3ecceb739e71b43d)というような事を書いていたのですが、実は軽く使いたい時は悩む必要がなかったのでメモ・・・orz

# 概要
[library optparse](http://docs.ruby-lang.org/ja/1.9.3/library/optparse.html)
> ARGV の機能
> optparse を require すると ARGV に OptionParser::Arguable の機能 が加わります。以下の書き方ができるようになります。
> OptionParser::Arguable#getopts はオプションを保持した Hash を返します。
>
> ```ruby
> # sample.rb の内容
> require 'optparse'
> params = ARGV.getopts("a:c:", "foo", "bar:")
> p params
> ```
>
> この sample.rb を実行すると
>
> ```bash
> $ ruby sample.rb -a 1 --foo --bar xxx
> {"a"=>"1", "c"=>nil, "foo"=>true, "bar"=>"xxx"}
>```

(引用元のコードでは、getopts第一引数のa:の後ろはb:なのですが、そうするとQiitaの記法に引っかかるのか、"a:b:"と絵文字っぽくなってしまうので、cに変更しました。)

試しに上記スクリプトを--helpをしてみると

```bash
$ ruby sample.rb --help
Usage: sample [options]
    -a VAL
    -c VAL
        --foo
        --bar VAL
```

・・・素敵やん。

なおgetoptsに関して、詳しくは以下のリンク
[instance method OptionParser::Arguable#getopts](http://docs.ruby-lang.org/ja/1.9.3/method/OptionParser=3a=3aArguable/i/getopts.html)

# 今回のコード
というわけで、今回は--dry-runのオプションのみを作りたかっただけなので、以下に落ち着きました。

```rb
require "optparse"

options = ARGV.getopts("", "dry-run")
p options
```

実行結果

```bash
$ ruby temp.rb --dry-run
{"dry-run"=>true}
$ ruby temp.rb
{"dry-run"=>false}
```

シンプル！！（｀・ω・´）

# まとめ
ちゃんとドキュメントは読みましょう。。。orz
だいぶ手軽になりましたね〜（＾＾
cloudstackをMacBook Proにインストールしたい


DevCloud2を使うと簡単そうだけど、ビルド中にエラーでちゃう。
仕事おわったら、確認。

VMWare Fusion + KVMでインストールしてるひとがいた。
http://d.hatena.ne.jp/oraccha/20130424/1366787032
Resque の Worker 毎に Redis のホストを設定する

ResqueのWorker毎にRedisの接続先を変更したかったので以下の拡張を作ってみました。
Redisのメモリ使用量が多く分散したい場合等で利用できます。

```rb:worker_base.rb
class WorkerBase
  def self.before_enqueue(*args)
    Resque.redis = @redis if @redis
  end

  def self.after_enqueue(*args)
    Resque.redis = DEFAULT_REDIS_HOST
  end
end
```

以下で変更が可能です。

```rb:worker.rb
require 'worker_base'

class Worker < WorkerBase
  @redis = OTHER_REDIS_HOST

  # ...
end
```
JavaScript: 前後の空白を取り除く方法

```js
" aaa ".trim();// "aaa"
```
# 解説

String.trim()メソッドがJavascript1.8.1より実装されています。

https://developer.mozilla.org/ja/docs/Web/JavaScript/New_in_JavaScript/1.8.1

IEで言うと9以降。Chrome,Firefoxに関しては今日現在の最新版であればすでに対応しているようです。safariは5以降だそうです、実機で試していないので断言はできませんが動くと思います。

IE9未満のブラウザには正規表現で自前で行う必要があります。

```js
string.replace(/^\s+|\s+$/g,'');
```

以下のようにしておくことで、IE9未満でも他のブラウザと同様に冒頭のように使えるようになります。

```js
if(!String.prototype.trim) {
  String.prototype.trim = function () {
    return this.replace(/^\s+|\s+$/g,'');
  };
}
```
test-kitchenの新しいサブコマンドexec


test-kitchenでも`vagrant exec`みたいなことしたいよとクライアントが言ったので、実装してみたら意外と便利だったので本家にプルリクして採用。
次回リリース(v1.2.2かな?)から使えると思います。

> 1.3.0に含まれました。

[Add new subcommand 'exec' by sawanoboly · Pull Request #373 · test-kitchen/test-kitchen](https://github.com/test-kitchen/test-kitchen/pull/373 "Add new subcommand 'exec' by sawanoboly · Pull Request #373 · test-kitchen/test-kitchen")

`kitchen create`と`converge`の間に一手間加えるとか、`converge`と`verify`の間にちょっと味付けするとかに使えるかもしれない。特にCIの時。


そういえばその目的で、以前にこんな質問もしました。

[I would like to execute some tasks before chef-client run at `kitchen converge`. · Issue #251 · test-kitchen/test-kitchen](https://github.com/test-kitchen/test-kitchen/issues/251 "I would like to execute some tasks before chef-client run at `kitchen converge`. · Issue #251 · test-kitchen/test-kitchen")

その時推奨されたやり方は`test/`の下に何かをprepareするCookbookを用意する、または`data/`ディレクトリを置けばついでにアップする、でした。

`test/`の下にcookbookは便利なので結構使ってます。
ただ、Provisionツールを実行するより完全に前の段階で仕込みたい時は、Chefなら`client/solo.rb`にRubyコードとして仕込んでしまうとか、少々強引な手法を取る必要がありました。


### kitchen exec ヘルプ

使用方法は他のコマンドと一緒。実行するリモートコマンドは`-c`で渡してあげよう。

```
kitchen exec INSTANCE|REGEXP -c REMOTE_COMMAND  # Execute command on one or more instance
```


プラットフォームが1つの時は`INSTANCE|REGEXP`は省略可、あと全部を表す予約語の`all`もつかえます。


```shell
$ kitchen exec all -c 'hostname'
-----> Execute command on default-centos-64.
       default-centos-64
-----> Execute command on mafalt-centos-64.
       hogehoge-centos-64
```


#### 余談：PTY

test-kitchenのリモート実行系はrequiretty(NET::SSHのrequest_pty)に対応しているのでsudoが必要な環境でも安心のexec。
CircleCIのSSH Settingsでドハマり


![Edit_settings_-_vexus2_hipchat_to_chatwork_-_CircleCI.png](https://qiita-image-store.s3.amazonaws.com/0/20074/710fce32-8295-7538-762a-408f5e5b0c4c.png "Edit_settings_-_vexus2_hipchat_to_chatwork_-_CircleCI.png")



SSHの設定画面で、ずっとこんな感じのエラーが出てて登録できなかった。


```
Error: can't tell if the public and private keys match, try checking whitespace. If we can help, contact us.
```

結局、Private Key欄に↓も含めるようにしたら登録できた。

```
-----BEGIN RSA PRIVATE KEY-----
-----END RSA PRIVATE KEY-----
```
jQueryValidationではまったところ

# はじめに
[jQueryValidation](http://jqueryvalidation.org/)を使ってはまったところをメモ。

# textareaの入力チェック結果がサーバーサイドと異なる（改行コードの数え方）
jQueryValidationでは改行を1文字(LF)、サーバーサイドでは2文字(CRLF)で数えていましたので、jQueryValidationでも改行を2文字として数えるように手を加えました。

↓のスライドを参考にさせていただきました。
改行コードについては14ページから。
[jQuery Validation x ASP.NET MVC で遭遇した不具合 & 対抗ハック](http://www.slideshare.net/jsakamoto/cod2012-jsakamoto-13279704)

# 数字項目にスペースを入れてもエラーにならない！
numberやrangeを適用している項目にスペース（半角・全角ともに）を入れてもエラーになりません。
オリジナルのValidationメソッドを追加して対応する必要があります。

```js
// 半角スペースと全角スペース不可
jQuery.validator.addMethod("noSpace", function(value, element){
  return !(/\s/.test(value))
});
```
【参考】
[jquery form validate not allow space for username field? - Stack Overflow](https://stackoverflow.com/questions/2942325/jquery-form-validate-not-allow-space-for-username-field)

# エラー（valid)だったときに任意の処理をしたい
コールバック関数が用意されていますが、チェックのタイミングによって使えるものが異なります。

* invalidHandler：サブミットした時にエラーがあったら呼ばれる。フォームの全ての項目のエラー内容が取得可能。
* highlight：リアルタイムにチェックして項目一個一個がエラーになった時に呼ばれる。現在入力中のエラー内容が取得可能。

# jQueryValidationを初めて使った時お世話になったサイト
 
最初に読ませていただきました。チュートリアルっぽくなっていてわかりやすいです。
[jQuery Validate Pluginの解説とValidate 日本語環境用PluginとjQuery Form Pluginとの連携 - くらげだらけ](http://kudakurage.hatenadiary.com/entry/20091211/1260521031)

APIドキュメントを日本語訳されています。
 [高機能ライブラリ「jQuery」とそのPlugin「Validation」 - すぎゃーんメモ](http://d.hatena.ne.jp/sugyan/20090312/1236815025)
SQL ServerでIDENTITYの飛び番号を埋めてINSERTする

IDENTITYが有効になっているテーブルで間違えてDELETEとかして飛び番号を埋めたいときの対応方法。

```sql
SET IDENTITY_INSERT [テーブル名] ON

INSERT INTO [テーブル名] ([IDENTITYのカラム]) VALUES ([入れたい値])

SET IDENTITY_INSERT [テーブル名] OFF
```

最初にON、最後にOFFなのが間違えそう。
cpan perl ライブラリをユーザー領域へ

メモ

```bash:terminal
$ cpan
```

```bash:cpan
cpan[1]> o conf makepl_arg PREFIX=~/perl-lib
cpan[2]> o conf commit
cpan[3]> install INGY/YAML-0.90.tar.gz
```

```bash:terminal
$ find ~/perl-lib
```

```text:find
/home/user/perl-lib
/home/user/perl-lib/lib
/home/user/perl-lib/lib/perl5
/home/user/perl-lib/lib/perl5/5.18.2
/home/user/perl-lib/lib/perl5/5.18.2/x86_64-linux
/home/user/perl-lib/lib/perl5/5.18.2/x86_64-linux/perllocal.pod
/home/user/perl-lib/lib/perl5/site_perl
/home/user/perl-lib/lib/perl5/site_perl/5.18.2
/home/user/perl-lib/lib/perl5/site_perl/5.18.2/x86_64-linux
/home/user/perl-lib/lib/perl5/site_perl/5.18.2/x86_64-linux/auto
/home/user/perl-lib/lib/perl5/site_perl/5.18.2/x86_64-linux/auto/YAML
/home/user/perl-lib/lib/perl5/site_perl/5.18.2/x86_64-linux/auto/YAML/.packlist
/home/user/perl-lib/lib/perl5/site_perl/5.18.2/Test
/home/user/perl-lib/lib/perl5/site_perl/5.18.2/Test/YAML.pm
/home/user/perl-lib/lib/perl5/site_perl/5.18.2/YAML
/home/user/perl-lib/lib/perl5/site_perl/5.18.2/YAML/Loader.pm
/home/user/perl-lib/lib/perl5/site_perl/5.18.2/YAML/Tag.pm
/home/user/perl-lib/lib/perl5/site_perl/5.18.2/YAML/Error.pm
/home/user/perl-lib/lib/perl5/site_perl/5.18.2/YAML/Dumper.pm
/home/user/perl-lib/lib/perl5/site_perl/5.18.2/YAML/Mo.pm
/home/user/perl-lib/lib/perl5/site_perl/5.18.2/YAML/Any.pm
/home/user/perl-lib/lib/perl5/site_perl/5.18.2/YAML/Marshall.pm
/home/user/perl-lib/lib/perl5/site_perl/5.18.2/YAML/Types.pm
/home/user/perl-lib/lib/perl5/site_perl/5.18.2/YAML/Dumper
/home/user/perl-lib/lib/perl5/site_perl/5.18.2/YAML/Dumper/Base.pm
/home/user/perl-lib/lib/perl5/site_perl/5.18.2/YAML/Loader
/home/user/perl-lib/lib/perl5/site_perl/5.18.2/YAML/Loader/Base.pm
/home/user/perl-lib/lib/perl5/site_perl/5.18.2/YAML/Node.pm
/home/user/perl-lib/lib/perl5/site_perl/5.18.2/YAML.pm
/home/user/perl-lib/share
/home/user/perl-lib/share/man
/home/user/perl-lib/share/man/man3
/home/user/perl-lib/share/man/man3/YAML::Loader.3
/home/user/perl-lib/share/man/man3/YAML.3
/home/user/perl-lib/share/man/man3/YAML::Types.3
/home/user/perl-lib/share/man/man3/YAML::Dumper::Base.3
/home/user/perl-lib/share/man/man3/YAML::Marshall.3
/home/user/perl-lib/share/man/man3/YAML::Node.3
/home/user/perl-lib/share/man/man3/YAML::Dumper.3
/home/user/perl-lib/share/man/man3/YAML::Loader::Base.3
/home/user/perl-lib/share/man/man3/Test::YAML.3
/home/user/perl-lib/share/man/man3/YAML::Tag.3
/home/user/perl-lib/share/man/man3/YAML::Any.3
/home/user/perl-lib/share/man/man3/YAML::Error.3
```
AmazonS3Client#getObject使用後は必ずcloseしよう


参考: http://stackoverflow.com/questions/17782937/connectionpooltimeoutexception-when-iterating-objects-in-s3

S3のファイルの最終更新日時を取得するためにこういうコードを書くと、50回ほど実行したときにConnectionPoolTimeoutExceptionが発生します。

```java
AmazonS3Client s3 = new AmazonS3Client(引数省略);
S3Object obj = s3.getObject("backetname", "filename.txt");
long lastModified = obj.getObjectMetadata().getLastModified().getTime();
```

これは、getObjectがcloseされてないせいで、ちゃんとobj.close()を呼べば解決。

S3Object#getObjectContentを呼んだときだけcloseしなきゃならないと思っていたけれど、どうも無条件でcloseしなきゃならないようです。

ObjectMetadataはAmazonS3Clientから直接取れるので、getObjectを使わない以下のコードでもOK。

```java
AmazonS3Client s3 = new AmazonS3Client(引数省略);
long lastModified = s3.getObjectMetadata("backetname", "filename.txt").getLastModified().getTime();
```

S3ObjectはCloseableです。Closeableなインスタンスは必ずcloseしろということですね。
git logのカスタマイズ

## git logを自分用に変更することができます

もともと用意されているフォーマットもありますし、自由に自分でフォーマットを作成することもできます。

## もともと用意されたフォーマット

formatは以下のように指定することができます。

```
$git log --pretty=oneline
$git log --pretty=oneline --abbrev-commit
```

## 自由にフォーマットを定義

```
$git log --pretty=format:'%Cblue%h%Creset %C(yellow)%an%Creset [%ar] %C(auto)%d%Creset %s''
```

## より使いやすく

git エイリアスに登録することでより使いやすくなります。

- 最新の10件のみ
- graphの表示

を追加して以下のように登録してみます。

```
$git config --global alias.ll "log  -10 --graph --pretty=format:'%Cblue%h%Creset %C(yellow)%an%Creset [%ar] %C(auto)%d%Creset %s'"
```

そうするとこのように表示されます。

![スクリーンショット 2014-03-25 12.03.01.png](https://qiita-image-store.s3.amazonaws.com/0/1232/6a5897fd-7208-12d9-64f9-815eededa818.png)


## このフォーマットにした理由(なにがいいか)

- origin/masterとHEADとのコミットが見やすい
- Graph表示がされている
- 最新の10件ぐらいしか普段は見ないのにlessで開かなくてすむ(git ll -100 とかやると引きたいだけ引けます。)
- 誰のコミットかは重要なmeta情報なので載せたい


## リファレンス
使えるフォーマットは以下のコマンドか[Webリファレンス](http://git-scm.com/docs/git-log)から参照することができます。

```
$git help log
```
msysGit+Magitが遅い

Emacs,Magit,msysGitの組み合わせで M-x magit-status の実行が非常に遅い(自分の環境で約15秒)。コミット等の操作も同じように遅い。これじゃ使い物にならないのでいろいろやってみて対策方法がわかった。~/.emacs.d/init.elを以下のように修正すればいいみたい。



```el:変更前の~/.emacs.d/init.el
(setq magit-git-executable "C:/Program Files/Git/bin/git.exe")
```


```el:変更後の~/.emacs.d/init.el
(setq magit-git-executable "C:/Program Files/Git/cmd/git.exe")
```

要するに呼び出すコマンドをcmdの下のgit.exeに変更するだけ。
超簡単なTCPサーバを書く

サーバは、次のような処理の流れになる。

* 外部との遣り取りを行う為のソケットを作成する。
* ソケットとIPアドレスを関連づける。
* クライアントとの接続を準備する。
* 実際にクライアントとの接続を開始する。

```py
#!/usr/bin/env python2.7
#-*- coding: utf-8 -*-

import socket

HOST = '127.0.0.1'
PORT = 8080

# ソケットの作成
s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)

# ソケットとIPアドレスの関連づけ
s.bind((HOST, PORT))

# クライアントとの接続の準備
s.listen(1)

# クライアントとの接続
conn, addr = s.accept()

print 'Connected by', addr

# クライアントからのデータを受信
# クライアントへデータを送信
while True:
    data = conn.recv(1024)
    if len(data) == 0:
        break
    conn.send(data)

conn.close()
```
Method Swizzlingをしたくなった時用の最小限のメモ


Method Swizzlingの話をする時、みんないきなり具体例だしててそのロジック興味ないし最小限の使い方が知りたいだけなのでっていう時のメモ。

# 利用する関数について

メソッドを置き換える関数は次の通り

```objc
method_exchangeImplementations(<#置き換えられるメソッド#>, <#新しく置き換えるメソッド#>);
```

上記関数のための引数はMethod構造体であり、SELから取得するには下記の関数とその戻り値を利用する

```objc
Method method = class_getInstanceMethod(<#メソッドを取り出すクラス#>, <#SEL#>);
```

例

```objc
+ (void)switchInstanceMethodFromSelector:(SEL)fromSelector
                              toSelector:(SEL)toSelector
{
    Method fromMethod = class_getInstanceMethod(self, fromSelector);
    Method toMethod   = class_getInstanceMethod(self, toSelector);
    method_exchangeImplementations(fromMethod, toMethod);
}
```

## その他

objc/runtime.hが必要となる

```objc
#import <objc/runtime.h>
```

# 参考

AppDelegateに手を加えずPush通知を実装する
http://qiita.com/s1140227/items/233264f1ce2bf45d11f7
CocoaPods導入

昨今のiOSアプリ開発では CocoaPods を使用するのが常識なようで、
ちょうど使いたいライブラリがあったので入れてみた。

CocoaPodsとはMacアプリやiOSアプリ開発者向けのライブラリ管理ツールで、
Ruby使っている人はGemに相当するものだと思ってもらえればと。

# 導入方法
Rubyのバージョンは2.1.0で。

```text
$ ruby -v
ruby 2.1.0p0 (2013-12-25 revision 44422) [x86_64-darwin13.0]
```

CocoaPodsをインストール

```text
$ gem install cocoapods
~
$ pod --version
0.29.0
```

CocoaPodsの初期化

実態はgithubからリポジトリをcloneしている様だがここでエラー発生。
 
```text
$ pod setup
Setting up CocoaPods master repo
[!] Pod::Executable clone 'https://github.com/CocoaPods/Specs.git' master
Closing 'master'...
error: RPC failed; result=7, HTTP code = 0
fatal: The remote end hung up unexpectedly
```

通信環境が原因かと思い、しばらくした後試したところ上手くいった。

```text
$ pod setup
Setting up CocoaPods master repo
Setup completed (read-only access)
AIR:~ Yuya$ ls -ltr .cocoapods/repos/master/
Display all 4134 possibilities? (y or n)
```

Xcodeのプロジェクトのルートディレクトリに移動し、ライブラリ管理ファイルを作成。
 
```lang:Podfile
platform :ios, '7.0'
pod 'SDWebImage'
```

Podfileで指定したライブラリをインストール

```text
$ pod install
```

ライブラリファイル本体が格納されるディレクトリはバージョン管理外に。

```lang:.gitignore
Pods
```

# 注意点
CocoaPods導入後は[プロジェクト名].xcodeprojではなく、新しく生成された[プロジェクト名].xcworkspaceでプロジェクトを開かないとビルドに失敗する。
【個人メモ】2014年になって、jsbin.comという便利なサービスを知った...

# JavaScriptのお勉強

をしたいなーと思い、実行環境は簡単に揃えられないものかなあ、
とインターネッツをさまよっていたら[jsbin.com](http://jsbin.com/)というサービスを知った。
JavaScript、HTMLのテンプレートを書いていき、レンダリング結果がOutputペインに表示される。

![スクリーンショット 2014-03-25 11.00.21.png](https://qiita-image-store.s3.amazonaws.com/0/3985/e1fa2af1-d5a4-2b5e-35af-8f6d949e817f.png)

CDNを提供しているプロダクトは、大抵"Add Library"で選択できるようになっている。

このサービスはすでに3年前から稼働しており、
今まで把握していなかった...

# ざっくりした使い方

1. [jsbin.com](http://jsbin.com/)にアクセス
2. "Add Library"をクリックし、使いたいライブラリを選択する

![スクリーンショット 2014-03-25 10.58.25.png](https://qiita-image-store.s3.amazonaws.com/0/3985/a265820e-903e-ae97-d057-4a8d1d4c1062.png)

3. JavaScriptのペインについては書けば自動でロードされる
4. レンダリング結果はOutputペインに表示される

# "Add Library"に好みのライブラリが無い場合は

CDNが使われていないプロダクトのライブラリを利用したい場合、
github.comに上げられているプロダクトであれば、
[rawgithub.com](http://rawgithub.com/)を使ってJavaScriptファイルリソースを取得すると良い。

Vue.jsの場合なら、

https://github.com/yyx990803/vue/blob/v0.10.1/dist/vue.min.js のURLを
https://rawgithub.com/yyx990803/vue/v0.10.1/dist/vue.min.js に書き換えればOK。

```html
<script src="https://rawgithub.com/yyx990803/vue/v0.10.1/dist/vue.min.js"></script>
```

とする。

# 以下、適当に書いてみたサンプル

[Vue.js](http://vuejs.org/)
http://jsbin.com/pucacamo/1/edit?html,js,output

[pixi.js](http://www.pixijs.com/)
http://jsbin.com/xisam/2/edit?html,js,output

pixi.jsの場合、画像を外部リソースから読み込みたい場合は
WebGLの仕様上、Cross Originによる制限があるので
自前で[CORS](https://developer.mozilla.org/ja/docs/HTTP_access_control)を設定済みなサーバリソースを用意しないといけない。

[CoffeeScript](http://coffeescript.org/)
http://jsbin.com/hajad/2/edit?html,console

[Fontawesome](http://fortawesome.github.io/Font-Awesome/)
http://jsbin.com/finir/2/edit?html,js,output

[Reveal.js](http://lab.hakim.se/reveal-js/#/) (崩れてる…テストは難しいのかな)
http://jsbin.com/yawup/2/edit?html,js,output

[D3.js](http://d3js.org/) (データ可視化実践入門 p.123のもの)
http://jsbin.com/rutih/1/edit?html,js,output

# で、

[D3.js](http://d3js.org/)などのJavaScriptのライブラリについて、
ライブラリ選定のために実際に使ってみて評価したい時にはAPIのインターフェースの使い方を
ドキュメントを観ながら実行して学んでいく形になり、準備するためのコストを減らせるのは良いと思う。

結局、環境用意するのが面倒とかで手を付けるのが億劫になるのは
よくないのでjsbin.comを使ってアレコレ手をつけていきたい。

JavaScript界はしょっちゅう新しいものが生まれてて面白そうで、手をつけたいし。
リジェクトメモ


#アプリ名：ACON

##アプリURL
https://itunes.apple.com/jp/app/acon/id813471208?mt=8

##概要
Dropboxと連携して、アプリアイコンを実機で確認出来るアプリ
Dropbox連携必須

##リジェクト1
###Apple様
標準UIを似たUIを採用するなら、標準UIと同じような挙動をしないとユーザーが混乱しちゃうよ。

###原因
アイコンを確認する画面で、ホーム画面のスクリーンショットをそのまま背景画像として使用していたため
表示されているアイコンをタップしても何も反応しなかった。

###対応
ホーム画面のスクリーンショットを使用せずに、アプリ側で用意したサンプルアイコンを表示するように修正。

###結果
リジェクト2が発生が発生したためレビューしてもらえず。。

##リジェクト2
###Apple様
Dropboxのアカウントが必須ならテスト用アカウント教えてよ。
このままじゃレビューできないから、テストアカウント用意出来たらまた教えてね。
metadata(テストアカウント項目)だけ変更してくれればいいからバイナリアップロードの必要はないよ。

###原因
Dropboxアカウントとの連携ができないと何もできない

###対応
テスト用のDropboxアカウントを用意して、metadataに記入

###結果
申請通りました！

#アプリ名：dunkkker

##アプリURL
リジェクト中・・・

##概要
デザイナー向けサービスdribbbleのクライアントアプリ
Poplar、Everyone、Debutを閲覧可能

##リジェクト1-1
###Apple様
レビューガイドライン(3.2)
アプリの説明文が適当すぎ。これじゃユーザーは何のアプリか分からないよ。

###原因
dribbble client app
説明文に上記しか書いてなかった。もうちょっと機能的なこととかも書かないとダメっぽい。

###対応
もうちょっと機能的なことも書く

###結果
OK

##リジェクト1-2
###Apple様
レビューガイドライン(3.3)
スクリーンショットとアプリの内容が合ってないよ。
ちゃんとアプリの内容をスクリーンショットに載せなさい。

###原因
スプラッシュ画面を1枚載せただけだった。
ちゃんとアプリの中をスクリーンショットで見せないとダメっぽい。

###対応
アプリ内のスクリーンショットを追加する

###結果
OK

###リジェクト1-3
####Apple様
レビューガイドライン(18.2)
なんかエロいコンテンツ表示されてるよ

####原因
dribbbleのコンテンツの中にセクシーな作品が表示される可能性があるっぽい

####対応
レーティングを変更すればいいのかな？

####結果
以下を言われました。
・問題のある投稿に対して通報できるように「通報ボタン」を設置しなさい
・ちょっと問題のある投稿が表示される可能性がありますよ。という内容をユーザーに認識してもらう。(利用規約的な)

レビュワーさんと色々とやりとりをしましたが、上記だけは覆すことができませんでした。
通報ボタンなんか置きたくないので、このアプリはお蔵にしようかな。。
残念。もうアプリとして公開することは出来なさそうなので、GitHubに全部アップしちゃおうかな。なんて考えてます。
jquery.autoKana.jsで自動カナ入力する

# 概要
日本語入力に対応するカナ入力を自動化するライブラリautokanaの使い方メモです。

Webアプリの登録フォームで氏名に対応するカナを自動入力するライブラリについて調べたところ、
メジャーなものはAutoRuby.jsとそこから派生したautoKana.js、jquery.autoKana.jsの3つでした。
機能面ではあまり差がない模様なので、今回はJQueryプラグインであるjquery.autoKana.jsを採用しました。

|ライブラリ名|特徴|
|:-----|:-----|
|[AutoRuby.js](http://ceo.sourcelab.jp/archives/97)|prototype.jsベースのフリガナ自動変換スクリプト　　　　　　|
|[autoKana.js](http://d.hatena.ne.jp/rubricks/20080702/1215003705)|AutoRuby.jsをベースに手を加えたもの|
|[jquery.autoKana.js](https://github.com/harisenbon/autokana)　　|autoKana.jsをjQueryベースに書き換えたもの|


# 使用例

```autokana_sample.html
<script src="../../public/javascripts/jquery-1.10.2.min.js"></script>
<script src="../../public/javascripts/jquery.autoKana.js" language="javascript" type="text/javascript"></script>

<div>
    <label for="user_name" class="">氏名</label>
    <input type="text" id="user_name">
</div>
<div>
    <label for="user_name_kana" class="">カナ</label>
    <input type="text" id="user_name_kana">
</div>

<script type="text/javascript">
    $(document).ready(
        function() {			   
            $.fn.autoKana('#user_name', '#user_name_kana', {
                katakana : true  //true：カタカナ、false：ひらがな（デフォルト）
        });
    });
</script>
```


# 制約事項
使い方は至ってシンプルで、ユーザビリティの向上に役立ちますが
以下の制約事項があるようです。

* **自動入力の対象となるのは全角ひらがなでの入力のみ** 

 * 全角カナ、半角カナ、ローマ字の入力には非対応
 * コピペによる入力には非対応
 * オートコンプリートによる入力には非対応


* **【氏名】欄で文字を削除した場合、【氏名（カナ）】欄への反映が不完全** 

 * ひらがなの削除は反映される
 * 【氏名】欄の入力値をすべて削除すると【氏名（カナ）】もすべて削除される
 * 一度変換した文字の削除は反映されない（漢字、カタカナ）
 * スペースの削除は反映される場合はされない場合がある（前後の文字に影響される？）


* **【氏名（カナ）】に入力済みの状態で【氏名】を変更すると、【氏名（カナ）】の末尾にカナが追加される**
Railsをinstallしようとしたらopenssl関連ではまった



##現象

```
$ gem install rails
```
をすると以下のエラーがでた。

```
ERROR:  Loading command: install (LoadError)
	dlopen(/Users/ikemonn/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/x86_64-darwin13.0/openssl.bundle, 9): Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
  Referenced from: /Users/ikemonn/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/x86_64-darwin13.0/openssl.bundle
  Reason: image not found - /Users/ikemonn/.rvm/rubies/ruby-2.1.1/lib/ruby/2.1.0/x86_64-darwin13.0/openssl.bundle
ERROR:  While executing gem ... (NoMethodError)
    undefined method `invoke_with_build_args' for nil:NilClass
```

openssl自体はインストールしてあるのだが、Libraryをロードしている下記のパスがPC上に存在していなかった。

```
9): Library not loaded: /usr/local/opt/openssl/lib/libssl.1.0.0.dylib
```

##解決策

```
$ brew link openssl --force
```

##参考


[ruby - OpenSSL, RVM, Brew, conflicting error - Stack Overflow] ( http://stackoverflow.com/questions/21508866/openssl-rvm-brew-conflicting-error )
Objective-CでJavaの拡張for文っぽく書きたい

方法としてはObjective-Cの高速列挙と呼ばれる機能を使用する。
Javaの拡張for文に近くて書きやすい。
名前の通り普通にfor回すよりだいぶ処理速度が速いようなので、使わない理由は無い。

```objc:Demo.m
NSMutableArray *animeList = [NSMutableArray new];
for (NSDictionary *anime in jsonArray) {
    Anime *tmpAnime = [[Anime alloc] initWithJSONObject:anime];
    [animeList addObject:tmpAnime];
}
```
CSS snipet


```CSS
<div class="item-content spacing-inner-right space5">
                            <div class="area-tap js-link-avatar" data-touch="enabled" style="-webkit-user-select: none;">
                                <div class="button block x-small sentence18">
                                    <span class="sprite interactive18-5_1 top"></span>Logout
                                </div>
                            </div>
                        </div>
```
*This is in italics*
_This is also in italics._
_This_will not be in italics.
**This is in bold.**
This is also in bold.
メインスレッドで処理を実行したい

iOSアプリ開発においてUIの更新処理などはメインスレッドで行わなければならないですが、
させたい処理をわざわざメソッドで作って、セレクタで指定して呼ぶ、という流れはなかなか面倒くさい。
GDC(マルチスレッド処理が簡単にできるようになる機能)を使用すると簡潔に書けます。

```objc:Demo.m
// Viewの更新はメインスレッドで実行
dispatch_async(dispatch_get_main_queue(), ^{
    [self.tableView reloadData];
});
```
ポップオーバーなど動的コンテンツのスタイルのデバッグ方法


Bootstrapのpopoverの吹出しなど、動的コンテンツのスタイルがおかしくなって困ったときのデバッグ方法。

普段はFirebugを使っているが、ここではChromeでの方法を。

1. デバッグしたいポップオーバーをコンテキストメニューから「要素の検証」により表示。
ディベロッパーツールが同時に立ち上がる。
2. もう一度トリガー箇所にマウスを当て、ポップオーバーを表示。
3. `Command+Tab`等でChrome以外の別ウィンドウにフォーカスを当てる。
4. その状態ならポップオーバーを開いた状態でマウスが移動可能になるので、ディベロッパーウィンドウで動的コンテンツ(div class="popover"のやつ)のスタイルの調査が出来る。

### 参考
[html - How to debug a popover? - Stack Overflow](http://stackoverflow.com/questions/8640635/how-to-debug-a-popover)
jQueryでテキストボックスの変更を監視/検知する

# はじめに
テキストボックスの変更を検知したくてイベントの挙動を調べたりしたのでメモ。

# change, keypress, keyupの挙動まとめ

キー操作したときにどんなイベントが発生するのかは[日本語入力時に発生するキーイベントのテスト](http://freefielder.jp/lab/javascript/im.html)を使って確認させていただきました。

![jquery変更検知まとめ.png](https://qiita-image-store.s3.amazonaws.com/0/38582/dc493b07-a61c-30fe-da9c-0c3921c86773.png)

## ポイント
* changeはフォーカスが外れたときに発生する
* keypressは全角やdelete,backspaceを入力しても発生しない
* keyupはカーソル移動や全角・半角の切り替えなどすべてのキー操作を拾ってしまう

## change
changeイベントを使うと変更を検知できます。

```js
$('#テキストボックスのid').change(function() {
	isChange = true;
});
```

changeイベントが発生するのはテキストボックスからフォーカスが外れた後です。
テキストボックスにフォーカスがあたったままブラウザ（タブ）の閉じるボタンを押された場合、変更を検知できません。

## keypress

keypressイベントはその名の通りキーが押されたときに発生します。

```js
$('#テキストボックスのid').keypress(function() {
	isChange = true;
});
```

keypressイベントが発生するのは印刷可能文字が押された時だけです。具体的には英数とEnterです。
印刷不可能文字（delete,backspace）や日本語（IMEがオンになった状態）ではkeypressイベントが発生しません。
日本語入力や、文字の削除は検知できません。

## keyup
keyupイベントはキーを全てのキー操作で発生します。

```js
$('#テキストボックスのid').keyup(function() {
	isChange = true;
});
```

カーソル移動や半角/全角キーの操作等、テキストボックスの中身が変わっていなくても発生してしまいます。

# テキストボックスの変更を検知する方法
change, keypress, keyupイベントの挙動を踏まえると、次の3つのやり方が考えられます。

## changeイベントを使う

フォーカスがあたっている間は変更を検知できなくていい場合はchangeで充分です。

## 変更前と比較する
画面表示時に変更前の値を保持しておいて、keyupが発生するたびに比較します。

```js
$('#テキストボックスのID').keyup(checkChange(this));

function checkChange(e){
	var old = v=$(e).find('#テキストボックスのID').val();
	return function(){
		v=$(e).find('#テキストボックスのID').val();
		if(old != v){
			old = v;
			isChange = true;
			delSuccessMSG();
		}
	}
}
```
フォーカスが当たったままでも変更が検知できます。

## keypressとkeyupを組み合わせる
半角英数しか入力させないなら、keypressとkeyupを組み合わせて使うこともできます。
keypressで半角英数の入力を検知し、keyupでdeleteキーとbackspaceキーの入力を検知を検知します。

```js
// 半角英数の入力を検知
$('#テキストボックスのid').keypress(function() {
	isChange = true;
	delSuccessMSG();
});
// deleteキーとbackspaceキーの入力を検知
$('#テキストボックスのid').keyup(function(e) {
	if (e.keyCode == 46 || e.keyCode == 8){
		isChange = true;
		delSuccessMSG();
	}
});
```
フォーカスが当たったままでも変更が検知できます。

# ちなみに

セレクトボックスやチェックボックスはchangeイベントを使って簡単に検知できます。

```js
$('#セレクトボックスのid').change(function() {
	isChange = true;
});
```
XCode設定Tips 1: 独自のプロジェクト設定やマクロを活用する


# 独自のプロジェクト設定値を作成する
Xcode上でターゲットごとにで切り替える独自の設定値を作成することができます。
これを使うことでターゲットビルドごとで細かい挙動を変えれたりします。

Build Settingsの上の＋ボタンか、メニューのEditor→Add Build Settingsの
Add User-Defined Settingsを選択します。
![スクリーンショット 2014-03-25 9.27.58_120.png](https://qiita-image-store.s3.amazonaws.com/0/37731/868bab97-01f7-3b4f-f915-00e8285f3a18.png)


するとUser-Definedに新しい設定が追加されます。
![スクリーンショット 2014-03-25 9.39.26_120.png](https://qiita-image-store.s3.amazonaws.com/0/37731/19e939ac-5bd8-11cf-df3a-7d9aa2739dda.png)
ここで設定した値はプロジェクトの設定内（Info.plist)で
${定義名}でアクセスすることができます。またこの値はターゲットごとなどで切り替えることができるので、DEBUGとRELEASEで値を帰ることができます。

## 例：ターゲットごとでアプリのDisplay Nameを切り替える
使い道の例として、アプリの表示名をターゲットごとで切り替えてみます。

![スクリーンショット 2014-03-25 9.41.57_120.png](https://qiita-image-store.s3.amazonaws.com/0/37731/0ed17db1-048c-6113-94de-928eb6db5f6d.png)
このようにMY_DISPLAY_NAMEという定義を作成して

![スクリーンショット 2014-03-25 9.44.33_120.png](https://qiita-image-store.s3.amazonaws.com/0/37731/57979616-abc2-a88c-9d7e-1abd753f7d58.png)

Bundle Display Nameを${MY_DISPLAY_NAME}に変更します。
すると
![スクリーンショット 2014-03-25 10.00.43.png](https://qiita-image-store.s3.amazonaws.com/0/37731/e6bb2f83-07b6-a9e6-eec8-0037cfcb3a25.png)


ビルドごとに表示名を変更できます。ほかにもIdentifierを切り替えたりできるので、環境ごとや配布先ごとに変更するのに便利だったりします。



# 独自のマクロ定義を追加する
上記のプロジェクトの設定はあくまでプロジェクト内部の変数なので、ソースコード上で設定値を使いたい場合はマクロ定義を使用します。
![スクリーンショット 2014-03-25 9.57.27.png](https://qiita-image-store.s3.amazonaws.com/0/37731/5f98e805-9528-a6f9-61dd-fc4c08819232.png)


こちらもターゲットごとで切り替え可能です。


![スクリーンショット 2014-03-25 9.27.00.png](https://qiita-image-store.s3.amazonaws.com/0/37731/885c0ad6-2ec8-575f-e2b1-6c443a1ccd3d.png)



このように、使いこなすといろんな場面で活用できるのでぜひ憶えておきましょう。
【jQuery】ページ移動やブラウザを閉じる前にダイアログを出す

# ダイアログの出し方
beforeunload関数は、ページ移動を行おうとした場合やタブ・ウィンドウを閉じようとしたときにダイアログを表示します。

```js
$(window).on("beforeunload",function(e){
	return "任意のメッセージ";
});
```

# ダイアログの見え方
ブラウザデフォルトのダイアログが表示されます。任意のメッセージを表示することができますが、ボタンの文言を変更することはできません。
##### Chromeの場合
![chrome.png](https://qiita-image-store.s3.amazonaws.com/0/38582/ee2f7d89-a9c2-165c-fab2-d1d5178cb6b5.png)

見た目はブラウザごとに異なります。
##### IEの場合
![IE.png](https://qiita-image-store.s3.amazonaws.com/0/38582/4e528065-7074-9fdc-3331-d9e1babd0fb1.png)

ブラウザの閉じるボタンをキャンセルするにはbeforeunloadを使うしかないので、見た目がそろっていないことには目をつぶりましょう。
Rspecでcurrent_userのスタブを作ってrequire_loginをパスする

Sorcery等によって提供されるcurrent_user、require_loginを使ったrailsアプリを、rspecでテストする方法を共有します。

#実現方法
`current_user`のスタブを作ります。

##テストの記述方法

```rb:items_controller_spec.rb
before do
  @user = User.first
  allow(controller)
    .to receive(:current_user)
    .and_return(@user)
end
```

##説明
`controller`に`current_user`のスタブを作ることによって、`before_action require_login`を通過できます。


以上です。
ログイン機能を実際に経由して本物の`current_user`を呼び出す方法を確立している方がいらっしゃいましたら、方法を共有して頂けると嬉しいです。

http://stackoverflow.com/questions/5865555/how-to-do-integration-testing-with-rspec-and-devise-cancan
http://stackoverflow.com/questions/3720953/rspec-accessing-application-controller-methods-such-as-current-user