OmniAICreator/Qiita-1.07M huggingface dataset:
アプリ独自にフォントファイルを適用するUtilクラス

```java:FontMod.java
package com.test;

import java.io.File;
import java.io.FileOutputStream;
import java.io.InputStream;
import java.util.zip.ZipEntry;
import java.util.zip.ZipInputStream;

import android.content.Context;
import android.content.res.AssetManager;
import android.graphics.Typeface;
import android.view.View;
import android.view.ViewGroup;
import android.widget.TextView;

public class FontUtil {

	static private Typeface font = null;

	public static void loadFont(String fontFileName, Context context) {
		font = getFontFromZip(fontFileName,context);
	}

	public static void setFont2TextView(View vg) {
		setFont2TextView(vg,font);
	}

	/**
	 * View のフォントを指定する。　ViewGroupの子要素のフォントをすべて一致させる。
	 * 
	 * @param vg
	 * @param font
	 */
	private static void setFont2TextView(View vg, Typeface font) {
		if (font==null)
			return;

		if (vg instanceof ViewGroup) {
			int childCnt = ((ViewGroup) vg).getChildCount();
			if (childCnt > 0) {
				for (int i = 0; i < childCnt; i++) {
					setFont2TextView(((ViewGroup) vg).getChildAt(i), font);
				}
			}
			//ListViewの子要素には適応できない
		} else if (vg instanceof TextView) {
			((TextView) vg).setTypeface(font);
		}
	}

	/**
	 * zip圧縮されているフォントファイルをassetから解凍し、dataフォルダに格納する
	 * assetのファイルはある程度大きいとzip圧縮されていないとAndroidで認識してくれない
	 * @param am
	 * @param fontFileName
	 * @param context
	 * @return
	 */
	private static Typeface getFontFromZip(String fontFileName,Context context) {
		Typeface ret = null;
		File zipFile = null;
		try {
			AssetManager am = context.getAssets();
			InputStream is = am.open(fontFileName,
					AssetManager.ACCESS_STREAMING);

			ZipInputStream zis = new ZipInputStream(is);
			ZipEntry ze = zis.getNextEntry();
			if (ze != null) {
				zipFile = new File(context.getFilesDir(), ze.getName());

				//フォントがすでに解凍されていればなにもしない
				if(zipFile.exists()){
					return Typeface.createFromFile(zipFile.getPath());
				}
				FileOutputStream fos = new FileOutputStream(zipFile, false);
				byte[] buf = new byte[1024];
				int size = 0;
				while ((size = zis.read(buf, 0, buf.length)) > -1) {
					fos.write(buf, 0, size);
				}
				fos.close();
				zis.closeEntry();
				ret = Typeface.createFromFile(zipFile.getPath());
			}
			zis.close();
		} catch (Exception e) {
			Log.e("FontUtil", "font extract fail",e);
			if (zipFile!=null && zipFile.exists())
				zipFile.delete();
		}
		return ret;
	}

}
```
Python 3.3 rc1 のインストール


これ。
http://www.python.org/getit/releases/3.3.0/

## MacPorts にある Python 3.3 rc1 をインストール

```
% port search python33
python33 @3.3.0rc1 (lang)
    An interpreted, object-oriented programming language

% sudo port install python33
```

インストール先はデフォルトだと

```
/opt/local/Library/Frameworks/Python.framework/Versions/3.3/
```

になる。

試しに起動。

```
% /opt/local/Library/Frameworks/Python.framework/Versions/3.3/bin/python3
                                 
Python 3.3.0rc1 (default, Aug 26 2012, 07:20:12) 
[GCC 4.2.1 Compatible Apple Clang 3.1 (tags/Apple/clang-318.0.58)] on darwin
Type "help", "copyright", "credits" or "license" for more information.
>>> 
```

```
% which python3.3
/opt/local/bin//python3.3
```

## venv

あとで書く。

オプションが多いなーという印象。
IEの描画モード(ドキュメントモード)を指定する方法

`<head>` の先頭に `<meta http-equiv=X-UA-Compatible ...` を使って指定します。

例

```html
<head>
    <meta http-equiv="X-UA-Compatible" content="IE=edge" >
```

`content` の中身と描画モードは次の通り
    - IE=IE5 -> Quirks モード強制
    - IE=IE7 -> IE7 標準モード強制
    - IE=IE8 -> IE8 標準モード強制
    - IE=IE9 -> IE9 標準モード強制
    - IE=Edge -> 常に最新の描画モードを強制する
    - IE=EmulateIE7 -> DOCTYPE 宣言の内容によって IE7 標準モードにするか IE5 モードにするかを判定する
    - IE=EmulateIE8 -> DOCTYPE 宣言の内容によって IE8 標準モードにするか IE5 モードにするかを判定する
    - IE=EmulateIE9 -> DOCTYPE 宣言の内容によって IE9 標準モードにするか IE5 モードにするかを判定する

参考:
    - [IE 各バージョンの描画モード(英語版MSDN)](http://msdn.microsoft.com/en-us/library/ff406036%28v=vs.85%29)
    - [IE の描画モード互換性と描画モード指定方法(英語版MSDN)](http://msdn.microsoft.com/en-us/library/cc288325%28VS.85%29.aspx#SetMode)
FactoryGirlでコールバックをスキップする

FactoryGirlでテストデータを作るとき、`before_create`などのコールバックも実行されて、いろいろめんどくさいときがある。

```ruby
FactoryGirl.define do
  factory :user do
    name 'naoty'
    age  18

    after(:build) do
      User.skip_callback(:create, :before, :hoge_method, :fuga_method)
    end
  end
end
```

- `skip_callback`はメソッドごとにスキップするか設定できる。
- 似たようなものに`reset_callbacks`があるけど、これはイベントに設定されてるコールバックメソッドの**すべて**をスキップする。
- `after(:build)`のところはスキップしたいコールバックのタイミングによって、調整する必要あると思う。

---

### バージョン
- factory_girl (3.3.0)
- factory_girl_rails (3.3.0)

---

### 参考
- [skip_callback](http://apidock.com/rails/ActiveSupport/Callbacks/ClassMethods/skip_callback)
- [reset_callbacks](http://apidock.com/rails/v3.2.8/ActiveSupport/Callbacks/ClassMethods/reset_callbacks)
Node.compareDocumentPositionで、要素の位置を比較する


要素の位置関係を簡単に比較する。（DOM Level3）
`nodeA.compareDocumentPosition(nodeB)`
でnodeAとnodeBの位置関係を比較する。

サンプルは以下。

```javascript
var elm = document.getElementById("elm");
document.addEventListener("click", function (e) {
  var res = elm.compareDocumentPosition(e.target);

  if (res === 0 || res & res.DOCUMENT_POSITION_CONTAINED_BY) {
    // elmまたはelm内のノードがクリックされた時の処理
  }
}, false);
```

また返り値はビットになっていて、以下の値が返ってくる。
複数の状態があり得る（例えば、「含まれていて」「後に存在する」など）ので、
ビットの理論積を利用して判別する。

## 値の意味

* DOCUMENT_POSITION_PRECEDING
	otherはnodeより前にあります。 (2)

* DOCUMENT_POSITION_FOLLOWING
	otherはnodeより後にあります。 (4)

* DOCUMENT_POSITION_CONTAINS
	otherはnodeを含んでいます。 (8)

* DOCUMENT_POSITION_CONTAINED_BY
	otherはnodeに含まれています。 (16)

* DOCUMENT_POSITION_DISCONNECTED
otherとnodeは、同じ木構造にありません。 (1)

* DOCUMENT_POSITION_IMPLEMENTATION_SPECIFIC
	位置関係は実装依存です。 (32)

```javascript
//実際の値
DOCUMENT_POSITION_DISCONNECTED = 0x01;
DOCUMENT_POSITION_PRECEDING = 0x02;
DOCUMENT_POSITION_FOLLOWING = 0x04;
DOCUMENT_POSITION_CONTAINS = 0x08;
DOCUMENT_POSITION_CONTAINED_BY = 0x10;
```
sedコマンドで文字列を改行に置換する、しかもスマートに置換する。

# 概要

1. sedコマンドで任意の文字列を改行に置換する方法
2. 知ってはいるけど記述が汚いのでもっと綺麗に書きたい。

# そもそも改行ってどーやるの？

例えば、\nって書いてあるところを全部本物の改行に置換したいならこーやります。

```shellscript:nl.sh
echo "hogehoge\nfoo\nbar" | sed 's/\\n/\
/g'
```

sedの置換コマンド後半部分に、エスケープ用のバックスラッシュと、実際の改行コードを書くわけです。
でもこれって汚い！コマンドの途中で改行されちゃうのはイヤんな感じ。

# スマートにいきましょ。

綺麗に書きたければ改行文字をシェル変数に入れておき、実際の改行を書く代わりに使えばいいのです。つまり、シェル変数$LFなどを作ってそこに'\'と'\<0x0A\>'の2文字を格納し、これを使えばいいのです。

## まずは$LFに'\'と'\<0x0A\>'を入れましょ。

が！素直にはシェル変数には入ってくれません。

### 一筋縄ではいかない。

printfコマンドを使うとキーボードから打てないコントロール文字も生成できます。(ただし、**printfは8進数**で指定してくださいね。そうしないとLinux以外でエラーになります) だから'\'と'\<0x0A\>'の2文字分ということで、

```shellscript:makelf_bad.sh
LF=$(printf '\\\012')
```

と書くと……、2文字目に指定した改行コードが$LFに入りません。理由は、**文字列の最後に改行コードがあると、シェル変数に入る前にカットされてしまう**からです。じゃあどうするか？？？

### こうやるといい

だから、シェル変数に入れる時には最後の文字を改行にしなければいいのです。そして、入った後でトリミングするという寸法です。

```shellscript:makelf_good.sh
LF=$(printf '\\\012_')
LF=${LF%_}
```

2行目の%は右からのトリミング。右の'_'をトリミングせよという意味です。これでめでたく$LFには'\'と'\<0x0A\>'が入りました。

## これでよーやく、スマートにイケます。

$LFを作るところからまとめて正解を書きます。sedで$LFを使う時は、置換コマンドを前半と末尾に分解し（＝シングルクォーテーションで切り）、その間に"$LF"(ダブルクォーテーションも含む)を挿しこめばいいのです。

```shellscript:nl2.sh
LF=$(printf '\\\012_')
LF=${LF%_}

echo "hogehoge\nfoo\nbar" | sed 's/\\n/'"$LF"'/g'
```

理屈を覚えるのはちょっと複雑ですが、覚えてしまえば綺麗なシェルスクリプトが書けます。
変数への再代入を避けたいのは何故か


##記事の想定読者
* コードレビューで困ったことのある方
 * 感覚的な経験を他人に納得させるための言葉が必要な方

##一言で答えると
再代入は参照透過性を壊すため

##参照透過性って何さ
以下のような性質のこと

* 関数は同じ引数に対して常に同じ値を返す
* 値は最初に定義した値から常に変わらない

##参照透過性を確保したい理由

* 関数やクラスの仕様を一意に定められるため、バグの混入を避けやすい。
* テストが容易になる。
 * 状態の変化を考慮する必要がないため、パターンの組み合わせ爆発が起きにくい。

##まとめ : 再代入を許容すると何が起きるのか

言い換えてみるとわかりやすい

* hoge = fuga だった値が、**いつのまにか** hoge = piyo に変更されている状況では
  * 値が変わった場合でも正しく動作するということを再度テストする手間と
  * 値が変わったことを検出する手間と
  * それを見落としてしまうリスクが生じる
* つまり最初から再代入を避けておくという判断のほうが合理的

##補足

* 実際には、多くの言語ではパフォーマンスとの兼ね合いがあるので一概には判断できない
 * なので現実的には「特殊な理由がない限りは避けておくべき」という表現に落ち着く
ruby+rspec+guardでテストを自動実行

TDDBCでGuardを使った開発環境が素晴らしかったので
自分の環境構築(MacBookAir)手順をメモしておきます。

# 1.環境構築
 1.1. gem install guard
 1.2. gem install guard-rspec
 1.3. growl使う場合
   gem install growl
   GrowlNotifyインストール(CLIからの通知を受け取れるようにする)
   http://growl.info/downloads

# 2.設定ファイルを作成
 2.1. 開発プロジェクトへカレントを移動
 2.2. guard init (Guardfile(設定ファイル)が作成されます)

# 3.自動実行を開始
 3.1. Guardfileの置いてあるディレクトリへカレントを移動
 3.2. guard start

プロジェクト内のファイルに変更が発生すると自動でrspecが動きます。
child_process.fork()は全然fork(2)じゃないけど面白い。



親子は"message"イベントを通じて通信できる。通信できるデータはプリミティブ値の他、JSONオブジェクトが許されている。プロセスは2つできているけどゾンビ化したりしないしちゃんとwaitpidするみたいだ。

欠点としては、UNIX的なfork(2)と違ってdaemon化には使えないこと。cihld_process.exec()もexec(2)とは全く違うのでUNIX的なプロセス管理はまったくできなくなっている。手軽だけど細かな制御ができないのは困るなあ。

以下は1秒ごとにメッセージを送りあうスクリプト。

親プロセス parent.js：

```javascript
#!/usr/bin/env node
var child_process = require("child_process");

var child = child_process.fork("./child");

child.on("message", function (msg) {
	console.log(msg);

	setTimeout(function () {
		child.send({ message: "from parent" });
	}, 1000);
});

child.send({ message: "from parent" });

```

子プロセス child.js：

```javascript
console.log("child start");

process.on("message", function (msg) {
	console.log(msg);

	setTimeout(function() {
		process.send({ message: "from child!" });
	}, 1000);
});

process.on("exit", function () {
	console.log("child exit");
});

```

実行結果：

```
child start
{ message: 'from parent' }
{ message: 'from child!' }
{ message: 'from parent' }
{ message: 'from child!' }
{ message: 'from parent' }
{ message: 'from child!' }
{ message: 'from parent' }
{ message: 'from child!' }
```
シェルスクリプトでの正規表現マッチ

シェルスクリプトで正規表現でのマッチングを使いたい場合，少しぐぐってみると `case` 文を使えという内容のものがよくヒットするようですが，`expr` コマンドでも正規表現が使えます．

```sh
#!/bin/sh

if expr "aaabbc" : "b+c$" > /dev/null; then
    echo "hoge"
fi
# => hoge
```

正規表現を用いた場合，`expr` はマッチした位置や`()`でグループ化した結果を出力するので，要らない場合は `/dev/null` に捨てます．

ちなみに， `zsh` では `[[ ]]` を用いて自然に正規表現が書けます．

```zsh
#!/usr/bin/zsh

if [[ "aaabbc" =~ "b+c$" ]]; then
    echo "hoge"
fi
```

`bash` の 3.1 以降ではクォートを付けてはいけないらしいです（コメント参照）
情報ありがとうございます．
"function func() {...}"と"var func = function() {...}"の違い

## functionの違い
* 文（function文）か式（function演算子）かという違いがある。
* 書き方はどちらも同じだが振る舞いが少し異なる。

## 関数文の場合
### 1. そのスコープ内に関数名と同じ名前の変数が作られる。
```js
func(); // ok!! スコープ内だったら宣言より前の部分でも使える
function func() {...}
func(); // ok!!
```

## 関数式の場合
### 1. 変数に代入するまでは使えない。

```js
func(); // error
var func = function(){...};
func(); // ok!!
```

### 2. 関数名と同じ名前の変数は作られない。

```js
var func = function test(){...};
test(); // error
func(); // ok!!
```

### 3. 内部で自身の名前を使うことは可能。

```js
// 再帰的な処理の例
var calc_fib = function fib(n) {
	if ( n == 0 ) return 0;
	if ( n == 1 ) return 1;
	return fib(n-1) + fib(n-2);
};
fib(10); // error, 関数式の関数名は内部でのみ使用できる。
calc_fib(10); // ok!!
```

## 参考
* [関数](https://developer.mozilla.org/ja/docs/JavaScript/Reference/Functions_and_function_scope)
* [function 文](https://developer.mozilla.org/ja/docs/JavaScript/Reference/Statements/function?redirectlocale=ja&redirectslug=Core_JavaScript_1.5_Reference%2FStatements%2Ffunction)
* [function 演算子](https://developer.mozilla.org/ja/docs/JavaScript/Reference/Operators/function?redirectlocale=ja&redirectslug=JavaScript%2FReference%2FOperators%2FSpecial_Operators%2Ffunction_Operator)
letを作ってLet's 1行プログラミング

リスト内包記法とか使ってて、なんとしてでも1行で書きたいのに、変数定義したいときってありますよね？はい、こんな感じに書けたらうれしいですよね。

```py3
homu.let(lambda mami: (mami[0], mami[1] if len(mami) > 1 else None))
```

それを半分実現しようという話です。

参考：[PythonでLINQライクなリスト処理ライブラリを実装する - TIM Labs](http://labs.timedia.co.jp/2011/07/linq-like-list-library-in-python.html)

| 演算子をオーバーロードしちゃえば拡張メソッドっぽいことができるということらしいです。同じ方法を使えば let も作れますね！

```py3
class let:
	def __init__(self, action):
		self.action = action
	
	def __ror__(self, source):
		return self.action(source)
```

そうすると

```py3
homu | let(lambda mami: (mami[0], mami[1] if len(mami) > 1 else None))
```

と書けちゃいます！素敵！
VPSからgithubにpushする

githubのリポジトリのURLは3種類あって
・HTTPS             →https://github.com
・SSH                 →git@github.com
・Git ReadOnly　→git://github.com
字のごとくHTTPS,SSHは読み書き(clone,push)が可能で、GIt ReadONlyは読む(clone)のみが可能になっています。

githubにpushする方法としてSSHを利用しましょう

やり方は簡単でVPSで生成した公開鍵をgithubアカウントに貼り付けるだけです！

まずは鍵の生成

~~~terminal
ssh-keygen -C "your_email@your_email.com"
~~~

~/.ssh/内のid_rsa.pubをエディターで開き、コピーします

~~~
cd ~/.ssh
vim id_rsa.pub
~~~

開くとこんな感じになります

~~~
ssh-rsa AAAAB3NzaC1yc2EAAAABIwAAAQEAvxjyZUGF0VWJEBjDM7fzSY6pzqBf/C5nhOn86jLRqTEolSa7fJinkPqnLTDmysKZE3MQ3vpnauX4rX/rV7BdyY4BPrVgcicFcGiuGOZiZ8Cd2a/kdg7HzWfAD3V8baKb95QX+BDr5xKz9ya1///nMNLxQPNBEvRsJT7Pge6r5vdL/xU7fnxMyQO/fpsws6bcWJNwGrSd74hfXS+mueHMoCiIBVnCCd6L2pTYsHr62QuPGL6KxO2wCrd8JEsAy8XbQDrvYvTxdIGi7SRDP7reJH7Tpe+ACSgQfjyyj06Np/xzyFM7vj0d7pCpHkShQjMhzNYTI7kbnZfMtp9Lc9NBvQ== your_email@your_email.com
~~~

これをコピーして、githubのアカウントページから右上の"Account Settings"を選びます

次にテーブルから"SSH Keys"を選び"Add SSH key"をクリック

ここにコピーしたものを貼り付け、登録完了。


これでpushできるようになりました。めでたしめでたし
オフラインリアルタイムどう書く第四回の参考問題。rubyで。

オフラインでリアルタイムに「どう書く」をやるイベント。
http://atnd.org/events/32191
の参考問題
http://qiita.com/items/9c514267214d3917edf2
の実装例。
まずは ruby。これは、出題前に書いた最初の実装ほぼそのまま。

```ruby
#!ruby
#coding:utf-8

def move( state, dir )
    y,x=( state[-1].ord-'a'.ord ).divmod(5)
    x+=dir[0]
    y+=dir[1]
    return nil unless (0...5)===x && (0...5)===y
    ('a'.ord+y*5+x).chr
end

def can_move( nextpos, state, de )
    ! state.include?( nextpos ) && ! de.include?( state[-1]+nextpos )
end

def count_path( state, dir, de )
    nextpos = move( state[-1], dir)
    return 0 unless nextpos && can_move( nextpos, state, de )
    return 1 if nextpos=='y'
    s=state+nextpos
    [ [1,0], [-1,0], [0, 1], [0, -1] ].map{ |dir|
        count_path( s, dir, de )
    }.inject( &:+ )
end

def solve(q)
    cur = 'a'
    de=q+' '+q.reverse
    count_path( cur, [1,0], de) + count_path( cur, [0,1], de)
end

DATA.each{ |line|
    if /^"(?<q>.*)"\s*\-\>\s*(?<ex>\d+)/=~line
        actual = solve(q)
        puts( %Q!"%s" -> %d! % [q,actual] )
        puts "**EXPECTED : #{ex} **" unless actual==ex.to_i
    else
        puts( "skipped : "+ line )
    end
}
__END__
"" -> 8512 #そのまま。これが最大値。
"ch hi mn kp mr rs sx" -> 50 #6*3+4*8 
```

本当はもっとたくさんテストデータがある。
行き止まりのリストを単一の文字列にして持っているあたりがやっつけっぽい。
iOS6で追加されたSocial.frameworkの使い方入門


Social.frameworkはiOS6で追加されたFacebookやWeiboとの連携機能を開発者が利用するためのフレームワークです。
（Twitterとの連携機能もTwitter.frameworkだけでなく、Social.frameworkからも利用することが可能です。）

基本的な使い方は、iOS5で追加されたTwitter.frameworkと一緒ですがインスタンスの生成方法などが一部異なっています。以下は、フレームワークから提供されているUIを利用して、URLとコメントをFacebookに投稿する場合の例です。

``` objectivec:Sample.m

- (void)postFacebookSample {
    SLComposeViewController *slComposeViewController = [SLComposeViewController composeViewControllerForServiceType:SLServiceTypeFacebook];
    [slComposeViewController setInitialText:@"hogefuga"];
    [slComposeViewController addURL:[NSURL URLWithString:@"http://qiita.com"]];
    [self presentModalViewController:slComposeViewController animated:YES];
}

```

上記のコードを実行すると、こんな感じのUIが表示されます。
![FacebookUI画像](http://cdn-ak.f.st-hatena.com/images/fotolife/h/happy_ryo/20120923/20120923054553.png?1348346779)

URLやコメント以外に、画像を共有することも可能ですがFacebookへ投稿する場合、画像とURLを同時に設定すると画像が優先され、URLはコメントの一部として末尾に挿入されます。（画像をFacebook上のどのアルバムにアップロードするかは、ユーザーが自分で選択する事が出来ます）
 

インスタンス生成時に渡す引数は、Social.framework内のSLServiceTypes.hに定義されているので、こちらを参考にすることで各種サービスを切り替えることが出来ます。

``` objectivec:Type

SOCIAL_EXTERN NSString *const SLServiceTypeTwitter;
SOCIAL_EXTERN NSString *const SLServiceTypeFacebook;
SOCIAL_EXTERN NSString *const SLServiceTypeSinaWeibo;

```

独自のUIを利用して、各種APIを利用したい場合はSLRequestを利用して、NSURLRequestを生成する事が出来ます…が、そこまでするならFacebookなんかはFacebookSDKを使った方が楽に済むかも知れません。
MySQLにログインしようとすると"Can't connect to local MySQL server through socket"と言われた際の対処法

くだらないけど少しハマったのでメモ

普通にログインしようとすると

```Bash
$ mysql -u root -p
```

>Enter password: 
ERROR 2002 (HY000): Can't connect to local MySQL server through socket '/tmp/mysql.sock' (2)

と表示されたのでパスワードを間違えたかと思っていろいろ試したけど無理。結局MySQLの再インストールとかまでしちゃったのだけれど、原因はMySQLサーバがそもそも起動していなかった...

```Bash
$ mysql.server start
```

こうですね。

こういうことにならないためにも、MySQLは起動時に自動的に開始する設定にしておくのがベストかと。
homebrewでインストールした場合は、下記の方法でLaunchAgentsに登録できます。

```Bash
$ cp /usr/local/Cellar/mysql/<version>/homebrew.mxcl.mysql.plist ~/Library/LaunchAgents/
```

<version>にはお使いのMySQLのバージョンを指定してください。
DMM.com商品情報検索APIを叩くライブラリ


* [suin/php-dmm](https://github.com/suin/php-dmm)
* [DMM.com商品情報検索APIの仕様](https://affiliate.dmm.com/api/)

下記のようなコードを書くと、配列で検索結果が返ってきます。

```php
<?php
$apiId = 'あなたのAPI ID';
$affiliateId = 'あなたのアフィリエイトID';

$client = new \DMM\Client($apiId, $affiliateId);
$result = $client->request(array(
    'keyword' => 'ハリーポッター',
));

print_r($result);
```

Python版はこちら: [DMMのAPIを叩くクラス #Python - Qiita](http://qiita.com/items/2edf404397543322aaa1)
「A Tour of Go」でGo言語を学ぶ(~#13) 

今回は変数です。ネタがないのでコピペで。

``` go:variables.go
package main

import "fmt"

var x, y, z int
var c, python, java bool

func main() {
	fmt.Println(x, y, z, c, python, java)
}
```

結果
* * *

```
0 0 0 false false false
```

感想
* * *
Pascalみたいな変数の書き方らしい。正直慣れない。
初期化するには型名の後ろに"="をつけて、

```go
var x, y, z int = 1,2,3
var c, python, java = true, false, "no!"
```

ってふうに書けるらしい。
もっと慣れない。てか初期化したら型名を省略出来るのもスゴイな。型名がない時は省略できないらしい。動的型付けってわけじゃないんだね。設計思想とかもいつか読んでみようかな。

前回出てきた":="は関数内で使える代入文らしい。var宣言を使わずに、暗黙的な型宣言ができるとのこと。これは気に入った。
URIのエンコーディング

意外に適切なライブラリがありません。そのため、自分で書いてしまったりしがちです。

[application/x-www-form-urlencoded](http://ja.wikipedia.org/wiki/%E3%83%91%E3%83%BC%E3%82%BB%E3%83%B3%E3%83%88%E3%82%A8%E3%83%B3%E3%82%B3%E3%83%BC%E3%83%87%E3%82%A3%E3%83%B3%E3%82%B0#application.2Fx-www-form-urlencoded)に限れば[Drakma](http://weitz.de/drakma/)や[URL-REWRITE](http://weitz.de/url-rewrite/)のurl-encodeが使えますが、

```cl
(drakma:url-encode "a b+c$d(e)f/" :utf-8)
;=> "a+b%2Bc$d(e)f%2F"
```

空白を+に変換してしまうため、URIのパスコンポーネントやフラグメントコンポーネントにはそのまま流用できません。

[Hunchentoot](http://weitz.de/hunchentoot/)のurl-encodeはパスコンポーネントなどにも使うことができますが、URIのエンコーディングのためにウェブサーバをロードするのに抵抗を感じる場合があるかもしれません。

```cl
(hunchentoot:url-encode "a b+c$d(e)f/")
;=> "a%20b%2Bc$d(e)f%2F"
```

また、こちらはDrakmaなどと対照的に、パーセントエンコーディングだけに対応していて、application/x-www-form-urlencodedには対応していません。この辺りの違いは、サーバとクライアントという両者の違いによるものと思われます。

予約文字などを割と真面目に処理してくれるのは[Puri](http://puri.b9.com/)のencode-escaped-encodingですが、エクスポートされていない内部関数という扱いです。こちらもパーセントエンコーディングにのみ対応しています。

```cl
(puri::encode-escaped-encoding "a b+c$d(e)f/"
                               puri::*reserved-path-characters*
                               t)
;=> "a%20b+c$d(e)f%2f"
```

また、バージョン1.5.4の時点では128以上のオクテットを素通ししてしまうバグがあります。

```cl
(puri::encode-escaped-encoding "日本語"
                               puri::*reserved-path-characters*
                               t)
;=> "日本語"
```

SBCLに依存しても構わなければ、[URLエンコード/デコード - sileの日記](http://d.hatena.ne.jp/sile/20091216/1260980935)も利用できます。
Arch Linux インストールメモ

Arch Linux のインストーラが抹殺されたようなので、メモがてら晒してみる。

# 前提

/dev/sdb が、SSD で、こちらに Arch Linux を入れる。
/dev/sda が、プリインストール Windows が入っている HDD で、こいつはそのままにしておく。


# はじめ

/boot (sdb1) と LVM 用 (sdb2) のパーティションを作る
/boot は 83 Linux
LVM は 8e Linux LVM

```
# fdisk /dev/sdb
```

## LVM

LVM の物理ボリュームを作る

```
# pvcreate /dev/sdb2
```

LVM のボリュームグループを作る

```
# vgcreate VolGroup00 /dev/sdb2
```

device-mapper モジュールのロード

```
# modprobe dm-mod
```

とりあえず、/ に全割り当て

```
# lvcreate -l +100%FREE VolGroup00 -n lvolroot
```

ファイルシステムを作る

```
# mkfs.ext3 /dev/sdb1
# mkfs.ext4 /dev/mapper/VolGroup00-lvolroot
```

マウント

```
# mount /dev/mapper/VolGroup00-lvolroot /mnt
# mkdir /mnt/boot
# mount /dev/sdb1 /mnt/boot
```

## ネット

ネットにつなげられるようにする
(/etc/network.d/examples/ に各種サンプルあり)

```
# vi /etc/network.d/my
...
# vi /etc/resolv.conf
...
# netcfg up my
```

## パッケージのインストール

システムのインストール

```
# pacstrap /mnt base base-devel
```

GRUB2

```
# pacstrap /mnt grub-bios
```

## ネット設定コピー

今使っている設定を、コピー
これで、インストール後、すぐにネット接続できる

```
# pacstrap /mnt netcfg
# cp /etc/network.d/my /mnt/etc/network.d/my
# cp /etc/resolv.conf /mnt/etc/resolv.conf
```

## fstab

fstab の生成確認
マウントオプションとかチェックしておく

```
# genfstab -p /mnt
```

fstab を書き加える
足りなかったオプションとかは追加しとく
(discard とか)


```
# genfstab -p /mnt >> /mnt/etc/fstab
# vi /mnt/etc/fstab
```

## インストール先の環境に入る

良い感じに chroot してくれる

```
# arch-chroot /mnt
```

## 基本的な設定とか

ここら辺は、後でもいいだろうが…。

ホスト名設定
単純にホスト名だけを書く
デフォルトでは存在しないっぽい

# vi /etc/hostname

タイムゾーン

```
# ln -s /usr/share/zoneinfo/Asia/Tokyo /etc/localtime
```

Locale

```
# vi /etc/locale.conf
LANG="en_US.UTF8"
LC_COLLATE="C"
export LANGUAGE="en_US:en"

# vi /etc/locale.gen
en_US.UTF-8 UTF-8
ja_JP.UTF-8 UTF-8

# vi /etc/vconsole.conf
KEYMAP="us"

# locale-gen
```

## 起動用イメージ

mkinitcpio
LVM を使うので "lvm2" を "HOOKS" に追加

```
# vi /etc/mkinitcpio.conf
HOOKS="base udev autodetect pata scsi sata lvm2 filesystems usbinput fsck"

# mkinitcpio -p linux
```

## ブートローダ

grub2 
Windows を起動できるようにする

```
# vi /etc/grub.d/40_custom
menuentry "Windows 7"{
  set root=(hd0,1)
  chainloader +1
}

# grub-install --root-directory=/ --recheck /dev/sdb
# grub-mkconfig -o /boot/grub/grub.cfg
```

ついでに fdisk で、/dev/sdb1 をアクティブに、
元々アクティブだった /dev/sda2 を非アクティブにしておく。

## root のパスワード

```
# passwd
```

## umount

```
# exit
# umount /mnt/{boot,}
```

## おわり

```
# reboot
```

あとは、普通に起動するので、好きなパッケージいれたりする。

## コンテニューコマンド

なにかやらかしてたら、また CD なんぞから起動して…

```
# modprobe dm-mod
# vgchange -ay
# mount /dev/mapper/VolGroup00-... /mnt
# mount /dev/sdb1 /boot
# arch-chroot /mnt
```

# 感想

割と時間がかかってしまったが、2 度目からはそう問題ないかと思う。
もともと、あまり親切なインストーラじゃなかったので、これはこれで良いかと思う。

しかし、systemd のことはすっかり忘れていた。

あとは、zsh とか諸々のツールの設定をうまく共有&バージョン管理できるようにしたいところ。
まだ、メイン環境からサブ環境へコピーすることを前提にした、中途半端なスクリプトしかない。
VisualStudio2012のヘルプビューアを単独で起動する

Visual Studio 2012 をインストールして、そのヘルプビューアが思ったより使いやすかったので、単独で起動するようにショートカットを作ってみた。
引数なしで起動しようとすると、/?で引数見ろよ！と怒られるのだけど、非常にわかりにくい。

```Command
"C:\Program Files (x86)\Microsoft Help Viewer\v2.0\HlpViewer.exe" /catalogName VisualStudio11 /locale ja-JP
```
Zend\Formで任意のフォームに twitter bootstrap horizontal 対応クラス属性を追加する。

```php:bugController.php
<?php
$form = new \Application\Form\ContactForm;
foreach ($form as $element) {
    $labelAttributes = $element->getLabelAttributes();
    if (isset($labelAttributes['class'])) {
        if (false === strpos('control-label', $labelAttributes['class'])) {
            $labelAttributes['class'] .= ' control-label';
        }
    }
    else {
        $labelAttributes['class'] = 'control-label';
    }
    $element->setLabelAttributes($labelAttributes);
}

if ($class = $form->getAttribute('class')) {
    if (false === strpos('form-horizontal', $class)) {
        $form->setAttribute('class', $class . ' form-horizontal');
    }
}
else {
    $form->setAttribute('class', 'form-horizontal');
}
```
bind

[JavaScript.Next Returns](http://www.slideshare.net/dynamis/javascriptnext-returns) のスライドを読んでいて
Function.prototype.bind がよくわからなかったので書いてみました。
[MDN の bind のページ](https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Function/bind) も参考にしました。
ブラウザのコンソールに張り付ければ実行できます。

```javascript:bind_sample.js
// Callback でも this を継承
var test = {
    msg: 'hello from test',
    hello: function () {
        console.log(this);
        console.log(this.msg);
    }
};
setTimeout(test.hello, 1000); // bind しないと this は window オブジェクト
setTimeout(test.hello.bind(test), 1000);

// メソッドを関数に
var slice = Function.prototype.call.bind(Array.prototype.slice);
var toArray = function () {
    return slice(arguments);
};
var ret = toArray(1, 2, 'foo');
console.log(ret); // -> [1, 2, 'foo']
console.log(Array.isArray(ret)); // -> true

// 引数を固定
var toArray2 = toArray.bind(undefined, 1000, 2000);
console.log(toArray2(1, 2, 3, 4)); // -> [1000, 2000, 1, 2, 3, 4]
console.log(toArray(1, 2, 3, 4)); // -> [1, 2, 3, 4] あたらしいオブジェクトを作っているので元の関数に影響はない
```
argumentsにArrayのメソッドを適用する

##例
```js
Array.prototype.メソッド.call(arguments, 引数);
```

##参考
argumentsをArrayに変換する - okuParadise
URL: http://d.hatena.ne.jp/okuharakensuke/20070820/1187625399
arguments を直接的に配列化 - IT戦記
URL: http://d.hatena.ne.jp/amachang/20070202/1170383547
YASONでのJSONオブジェクトのキーの扱い

YASONでは基本的にJSONオブジェクトのキーを文字列で表現しますが、

```cl
(yason:parse "{\"x\":0}" :object-as :alist)
;=> (("x" . 0))
```

キーワードシンボルやシンボルで表現したい場合、動作をカスタマイズすることができます。

```cl
;; キーワード引数で動作を変更
(yason:parse "{\"x\":0}"
             :object-as :alist
             :object-key-fn (lambda (x) (intern x :keyword)))
;=> ((:\x . 0))

;; スペシャル変数で動作を変更
(let ((yason:*parse-object-key-fn* (lambda (x) (intern x :keyword))))
  (yason:parse "{\"x\":0}" :object-as :alist))
;=> ((:\x . 0))
```

JSONオブジェクトのキーは大文字と小文字を区別するため、名前に小文字を含むシンボルが作られることがあることに注意してください。

encode-alistやencode-plistはシンボルのキーと文字列のキーの両方を扱えます。（YASON 0.5.2以前ではシンボルのキーしか扱えませんので気を付けてください）

```cl
(yason:encode-alist '(("x" . 0)))
(yason:encode-alist '((|x| . 0)))
(yason:encode-alist '((:|x| . 0)))
;-> {"x":0}
```

encodeでオブジェクトをエンコードする場合、シンボルをエンコードするためのメソッドを定義します。

```cl
(defmethod yason:encode ((object symbol) &optional (stream *standard-output*))
  (yason:encode (symbol-name object) stream))

(let ((ht (make-hash-table :test #'equal)))
  (setf (gethash :|x| ht) 0)
  (yason:encode ht))
;-> {"x":0}
```
Zend Framework 2 で Validatorのメッセージを変更する

ZF2では、ZF1と同様にAbstractValidatorがTranslatorAwareですので、Zend\I18nコンポーネントに含まれるTranslatorをセットし、メッセージの変更を摘要します。なお、I18nコンポーネントはext-intlが必要です。

```php
<?php
use Zend\Loader\StandardAutoloader;

require_once __DIR__.'/library/Zend/Loader/StandardAutoloader.php';
$dir = __DIR__.'/library/Zend/Validator';

$autoloader = new StandardAutoloader(array('autoregister_zf' => true));
$autoloader->register();

$digits = new Zend\Validator\Digits;
$digits->setTranslatorTextDomain('validator');

$translator = new Zend\I18n\Translator\Translator;
$file = __DIR__.'/resources/languages/ja/Zend_Validate.php';
$translator->addTranslationFile('phparray', $file, 'validator', 'ja_JP');
$digits->setTranslator($translator);
$digits->isValid("string");
var_dump($digits->getMessages()); // 上記ファイルにて英語キーにヒットする訳があった場合に翻訳が摘要されています。
```

実際にZendSkeletonApplicationを用いたアプリケーションでは、TranslatorServiceFactoryを通じてTranslatorをサービスとしてもっているためそちらを使うことになるでしょう。

参照 ZF2 Translating　http://framework.zend.com/manual/2.0/en/modules/zend.i18n.translating.html

// 追記 12月15日
2.0.４では、zf2用の日本語リソースが利用可能になりました。

また、translatorTextDomainのデフォルトは"default"であるため、
上の例は以下の通り置き換えられます。

```php
<?php
$translator = new Zend\I18n\Translator\Translator;
$file = __DIR__.'/resources/languages/ja/Zend_Validate.php';
$translator->addTranslationFile('phparray', $file, 'default', 'ja_JP');

$digits = new Zend\Validator\Digits;
$digits->setTranslator($translator);
$digits->isValid("string");
var_dump($digits->getMessages()); 
```

また、ZF2のモジュール機構を用いる場合は、ServiceManagerのインスタンスを利用することになるでしょう。ZF2では、ZF１でのPluginLoaderからServiceLocatorを利用した形態へとアップデートされたPluginManagerがあるのでそちらを利用します。

```php
<?php
$sm = new Zend\ServiceManager\ServiceManager;
$sm->setService('translator', $translator);
$validatorPluginManager = new Zend\Validator\ValidatorPluginManager();
$validatorPluginManager->setServiceLocator($sm);

$digits = $validatorPluginManager->get('digits');
$digits->isValid("string");
var_dump($digits->getMessages());
```
「A Tour of Go」でGo言語を学ぶ(~#10)

今日も関数について。
今回はちょっと試してみた。

``` go:func2.go
package main

import (
	"fmt"
	"math"
)

func parameter(radius,angle float64) (x,y float64) {
	x = radius * math.Cos(angle)
	y = radius * math.Sin(angle)
	return
}

func main() {
	fmt.Println(parameter(1.0,math.Pi))
}
```

結果
* * *

```
-1 1.2246467991473515e-16
```

感想
* * *
とりあえずCos(π)の値が-1になってるからちゃんと動いてるんだと思う。
parameter関数のところは別の書き方もできて、


``` go:
func parameter(radius,angle float64) (float64,float64) {
	x := radius * math.Cos(angle)
	y := radius * math.Sin(angle)
	return x,y
}
```

ともかけるみたい。
戻り値を省略できないから最初に書いたほうがいいかなと思った。
「:=」の演算子がいきなり出てきたけど。変数名を宣言していなかったのを宣言するときに使う演算子なのかな？ と推測。きっと後でもでてくるからそこで確認してみる。
任天堂Code Puzzle表1問目


```py:nin1.py
m=2
while pow(m,17)%3569!=915:
   m+=1
else:
   print m
```

短縮する必要は全くないのですが、

```py:nin1s.py
m=2
while pow(m,17)%3569!=915: m+=1
else: print m
```

より改行を省略できず。力尽きる。。。。おあとlambdaはわからないので使いませんでした。
Xcode4.5でRubyMotion1.23を動かす時のメモ


【注意：1.24では対応されていました】
RubyMotion1.23を使用するときは、RubyMotionのRakefileを編集して、`rake update`する必要があります。
手順は以下のとおり

* /Library/RubyMotion/data/6.0/Rakefile の6行目あたりを以下のように修正

```ruby:/Library/RubyMotion/data/6.0/Rakefile
xcode = '/Applications/Xcode.app' 
```

* ターミナルで `cd /Library/RubyMotion/data/6.0 && rake update` を実行
 * rvmを使っている人は後半の `rake update` を `rvmsudo rake update` に変更 
 * nokogiriが必要と言われるので、`gem install nokogiri --no-ri --no-rdoc` を実行しておく
* ビルド対象のRakeファイルに以下を追加

```ruby:Rakefile
app.sdk_version = "6.0" 
```

参考:[How to use iOS 6 with Rubymotion NOW](https://groups.google.com/forum/?fromgroups=#!topic/rubymotion/-f6kMIQPErE)
ChillaxでCouchDBを使う

Chillaxを使うと簡単にCouchDBを利用できます。

```common-lisp:chillax.lisp
;; サーバオブジェクトを作る
(defparameter *server*
  ;; yason-serverはJSONをYASONでエンコード・デコードする
  (make-instance 'chillax:yason-server
                 ;; JSONをalistにデコードする
                 :object-as-alist-p t
                 ;; JSONオブジェクトのキーをキーワードシンボルに変換する
                 :parse-object-key-fun (lambda (x) (intern x :keyword))))

;; データベースの一覧をリストで
(chillax:all-dbs *server*)
;=> ("_replicator" "_users"),
;   :OK

;; データベースにアクセスするときはensure-dbで
;; 存在しない場合は自動的に作られる
(defparameter *db* (chillax:ensure-db *server* "test"))

;; testというデータベースが作成された
(chillax:all-dbs *server*)
;=> ("_replicator" "_users" "test"),
;   :OK

;; データベースに属するドキュメントの一覧をリストで
;; まだドキュメントは存在しない
(chillax:all-documents *db*)
;=> ((:|rows|) (:|offset| . 0) (:|total_rows| . 0))

;; ドキュメントをPOSTメソッドで追加する
(chillax:post-document *db* '((:x . 0) (:y . 1)))
;=> ((:|rev| . "1-2c7bf904079545d844eaecd6b2b86324")
;    (:|id| . "2aad3ee4a1b1be1f1d746629f1001e2b") (:|ok| . T))

;; 作成したドキュメントが増えている
(chillax:all-documents *db*)
;=> ((:|rows|
;     ((:|value| (:|rev| . "1-2c7bf904079545d844eaecd6b2b86324"))
;      (:|key| . "2aad3ee4a1b1be1f1d746629f1001e2b")
;      (:|id| . "2aad3ee4a1b1be1f1d746629f1001e2b")))
;    (:|offset| . 0) (:|total_rows| . 1))

;; ドキュメントの内容を得る
(chillax:get-document *db* "2aad3ee4a1b1be1f1d746629f1001e2b")
;=> ((:Y . 1) (:X . 0) (:|_rev| . "1-2c7bf904079545d844eaecd6b2b86324")
;    (:|_id| . "2aad3ee4a1b1be1f1d746629f1001e2b"))

;; ドキュメントを更新する
(let* ((id "2aad3ee4a1b1be1f1d746629f1001e2b")
       (rev `(:|_rev| . ,(chillax:get-document-revision *db* id))))
  (chillax:put-document *db* id `(,rev (:x . 1) (:y . 2))))
;=> ((:|rev| . "2-e5db5dc048432fb2c980de010d280645")
;    (:|id| . "2aad3ee4a1b1be1f1d746629f1001e2b") (:|ok| . T))

;; 内容が変更されている
(chillax:get-document *db* "2aad3ee4a1b1be1f1d746629f1001e2b")
;=> ((:Y . 2) (:X . 1) (:|_rev| . "2-e5db5dc048432fb2c980de010d280645")
;    (:|_id| . "2aad3ee4a1b1be1f1d746629f1001e2b"))
```

注意点としては、[現時点の最新リビジョン](https://github.com/sykopomp/chillax/tree/d60e5ef538c88d904326bd99786bb96db9155cdc)ではDrakmaのurl-encode関数と干渉する不具合があります。開発者も問題は把握していて、一応GitHubに報告もしているので、近いうちに修正はされると思われます。
PowerShellでファイルの途中を取り出す方法


PowerShellでファイル途中の部分を切り出しするときどうするかのメモ
HTMLのファイルからタグに囲まれた内容切り出すのとかに作ったので。

##Select-Stringでファイルの該当場所を取り出し

```perl:headタグに該当する場所を持ってくる
$FilePath = "どっかのファイル.html"
$CutStartNum = (Select-String -Path $FilePath -Pattern '\s*<head.*>').LineNumber
$CutEndNum = (Select-String -Path $FilePath -Pattern '\s*</head.*>').LineNumber
```

これでheadタグがファイルのどの場所にあるかが取得出来る。
headタグだとファイルに一つしかないからこれでいいけど、複数あるような場合はちょっと面倒になる。
`Select-String`は該当箇所のリストを返して来たりするので上手くやってください。

##該当箇所の取り出し

```perl:headタグの間を取ってくる。
$HeadContents =  (Get-Content $FilePath)[($CutStartNum-1)..($CutEndNum-1)]
```

これで取ってこれる。
`(Get-Content $FilePath)[-1]`とかすると、ファイルの最終行を取ってこれたりして便利。
ActiveRecordでbinary型をblob以外の型にする


ユーザーアイコン設定しようとして

`$ rails g model User (略） icon:binary`

ってしてたら
MySQLにblob型（最大64kb)で定義されてしまった。容量の大きいアイコンだと途中で切れてしまう事態に。

##対応
例えばアイコンの上限値を700kbまで許可するように変更するのであれば、migrationファイルに以下のように書けばOK。

```YYYYMMDDMMSS_change_user_icon_binary.rb
def up
  change_column :users, :icon, :binary, :limit => 700.kilobyte
end
```
もちろんCreateのときにやってもOK。
これで blob => mediumblob になってくれます。

ただし、ここで700KBと指定したからといって701KB以上をエラーにしてくれるわけではなさそう。（未検証）
DBのテーブルににそんな制限はかかってないし、生成される`User.rb`にもそんな記述はないため。
そこはちゃんとModelにValidation処理を書かないとダメかなと思います。

あくまでここで指定された"limit"を許容する型にしてくれるというだけの動きだと思われます。

ちなみに

>    blob             ラージバイナリ(最大 65535 bytes)
    mediumblob       ラージバイナリ(最大 1677215 bytes)
    largeblob        ラージバイナリ(最大 4294967295 bytes)

らしい。

[PHP + MySQL 編1 - 項目型、テーブル作成、項目削除、件数制限問い合わせ - SAK Streets](PHP + MySQL 編1 - 項目型、テーブル作成、項目削除、件数制限問い合わせ - SAK Streets)
Object.create のショートカット的なやつ

`Object.create` 第２引数のハッシュ書くのたるい

    function createObject (org, options) {
        return (typeof org === 'undefined' || org === null) ?
            null :
            Object.create(org, Object.keys(options || {}).reduce(function (def, key) {
                def[key] = { value: options[key], enumerable: true };
                return def;
            }, {}));
    }

でも、これだと `writable` と `configurable` が false のまま。もう少し手を加えたい。
RingoJSでのBase64エンコード

# バイト配列を用意します

```
var bytearray = new ByteArray();
```

# バイナリデータを入れていきます

```
var ch;
...    
bytearray.push(ch);
```

# さぁ、Base64エンコードします

```
var base64 = require('ringo/base64');
var base64str = base64.encode(bytearray);
```
sudo: unable to resolve host が表示されたら

`sudo: unable to resolve host`が表示されたら、`/etc/hosts`にホスト名を追加します。

# 手順
## まずは、`/etc/hosts`を確認します。
`sudo: unable to resolve host`が表示されています。

```bash
$ sudo cat /etc/hosts
sudo: unable to resolve host foobar
127.0.0.1       localhost
127.0.1.1       hostname.domainname hostname
```

## `/etc/hosts`にホスト名を追加します

```bash
$ sudo sh -c 'echo 127.0.1.1 $(hostname) >> /etc/hosts'
```

## もう一度、`/etc/hosts`を確認します。
ホスト名が追加されたので、`sudo: unable to resolve host`が表示されません。

```bash
$ sudo cat /etc/hosts
127.0.0.1       localhost
127.0.1.1       hostname.domainname hostname
127.0.1.1 foobar
```
WordPress で JavaScript の依存関係を管理


テンプレートに script タグを直接書くよりも良い方法があります。

まず functions.php で利用するスクリプトの依存関係を定義します。

```functions.php
function set_script_dependencies() {
  wp_register_script('underscore', get_cu_url('js/underscore-min.js'));
  wp_register_script('backbone', get_cu_url('js/backbone-min.js'), array('underscore'));
  wp_register_script('jquery.sort', get_cu_url('js/jquery.sortElements.js'), array('jquery'));
  wp_register_script('foo', get_cu_url('js/koto.js'), array('jquery', 'backbone', 'jquery.sort'));
}
add_action('wp_enqueue_scripts', 'set_script_dependencies');
```

これで、以下のようにするだけで依存するスクリプトを全て読み込むことができます。

```php
wp_enqueue_script('foo');
```

サイト全体で読み込む場合は `wp_enqueue_scripts` フックで、一部のテンプレートだけで読み込む場合は、テンプレート内の `get_header()` の前で `wp_enqueue_script()` すると良いようです。

参考
http://codex.wordpress.org/Function_Reference/wp_enqueue_script
start-process でプロセスの起動ディレクトリ(current directory)を変更する方法

default-directory に値を設定してからstart-processを呼び出す。

```lisp
(defun run-dir () 
  (interactive)
  (let ((default-directory "c:/home/"))
    (start-process "dir" "*dir*" "dir")))

(run-dir)
```
.sha1 ファイルでなくハッシュ値だけあるときに verify する方法

いままで目で確認とかプログラマとしては恥ずべき行為を行なっていたことをこの場を借りて反省します。

.sha1 ファイルが提供されるときは対象のファイルがあるディレクトリで

~~~:sh
$ shasum foo.tar.bz.sha1
foo.tar.bz: OK
~~~

でよいのですが、ハッシュ値だけ提供されている場合はファイルを作成せずにコマンドライン一発で終わらせたいので、

~~~:sh
$ echo "6393BA8BC2DD3CBD7B55D00B9D9587843BDB05CD  Windows8-ReleasePreview-64bit-Japanese.iso" | shasum -c /dev/stdin
Windows8-ReleasePreview-64bit-Japanese-1.iso: OK
~~~

[注意] 入力の ハッシュ値とファイル名の間は必ず `2スペース` である必要があります [注意]
#未解決 gobject-introspectionをPython3でコンパイルしたい件

# 問題
gobject-introspectionの最新版と思われるソース

gobject-introspection-1.33.14.tar.xz

をコンパイルしたいが、上手くいかない

```
./configure
```

すると、

```
print sys...
```

の様にPython3でのprint(sys...)という書き方になっていないので、
こける。

されらに

```
vi configure
```

で修正しても今度はソースがコンパイルできない。。

# 2013年になってもまだ駄目だー
どうやら1.35系辺りからがPython3でも./configureでエラーとならなくなった。
が、makeでこける

```shell-session:
Making all in .
CCLD libcmph.la
CCLD libgirepository-gthash.la
CCLD libgirepository-1.0.la
CCLD libgirepository-internals.la
CCLD libgiscanner.la
CC _giscanner_la-giscannermodule.lo
giscanner/giscannermodule.c:43: warning: return type defaults to 'int'
giscanner/giscannermodule.c:43: warning: no previous prototype for 'DL_EXPORT'
giscanner/giscannermodule.c: In function 'DL_EXPORT':
giscanner/giscannermodule.c:43: error: expected declaration specifiers before 'init_giscanner'
```
RubyMotionを1.24にしたらBubbleWrapが動かなくなった


<font color=red>【9/26 対応方法1を追記しました】
[tosik@github](http://qiita.com/users/tosik@github)さんありがとうございます！</font>

bubble-wrap (1.1.3)で確認されています。

## 対応方法1
Gemfileに以下のように追記し、`bundle install`すると動くようになります。

```ruby:Gemfile
gem 'bubble-wrap', '~> 1.1.3', :git => "git://github.com/Watson1978/BubbleWrap.git", :branch => "configs"
```
##対応方法2
以下のように変更すると動くようになります。

```ruby:bubble-wrap-1.1.3/lib/bubble-wrap/ext/motion_project_app.rb
-            configs.each_value &bw_config
-            config.validate
+            config.setup_blocks << bw_config
```

##原因
RubyMotionの1.24ではconfigsをサポートしなくなったからのようです。
参考：[Do not use `configs' which is used by RubyMotion internal](https://github.com/rubymotion/BubbleWrap/pull/143#issuecomment-8737197)
POCOでDBの型を指定する

POCOでEntityを定義する際、例えばnvarcharの範囲を超えた文字列としたい、varbinaryの範囲を超えたbyteシーケンスとしたい、又はrowversion/timestampを取得したい場合のメモ。

##属性で処理する場合

```csharp:Attributes.cs
	public class AttributeSample
	{
		[Key]
		public int Id { get; set; }

		//Size=4000のnvarcharになる。
		public string NVarchar { get; set; }

		//size=10のncharになる。
		[Column(TypeName = "nchar")]
		[MaxLength(10)]
		public string NChar { get; set; }


		//ntextになる。
		[Column(TypeName = "ntext")]
		public string Text { get; set; }


		//Size=4000のvarbinaryになる。
		public byte[] VarBinary { get; set; }

		//Size=200のbinaryになる。
		[Column(TypeName = "binary")]
		[MaxLength(200)]
		public byte[] Binary { get; set; }

		//imageになる。
		[Column(TypeName = "image")]
		public byte[] Image { get; set; }

		//uniqueidentifierになる。
		public Guid Uuid { get; set; }

		//重複させる必要は無い。何れかを付与すればrowversionになる。
		//8byteだからといってlongは指定出来ない。
		[Column(TypeName = "rowversion")]
		[Timestamp]
		public byte[] Rowversion { get; set; }


	}
```

#FluentApiで定義する場合

```csharp:Fluent.cs
	public class　FluentApiSample
	{
		[Key]
		public int Id { get; set; }


		//size=10のncharになる。
		public string NChar { get; set; }

		//ntextになる。
		public string Text { get; set; }



		//Size=200のbinaryになる。
		public byte[] Binary { get; set; }

		//imageになる。
		public byte[] Image { get; set; }


		//rowversionになる。
		//8byteだからといってlongは指定出来ない。
		public byte[] Rowversion { get; set; }
	}

	public class Context : DbContext
	{
		public Context(string path)
			: base(path)
		{

		}

		public IDbSet<AttributeSample> AttributeSamplesSamples { get; set; }

		public IDbSet<FluentApiSample> FluentApiSamples { get; set; }

		protected override void OnModelCreating(DbModelBuilder modelBuilder)
		{
			var entity = modelBuilder.Entity<FluentApiSample>();

			//[Column(TypeName = "nchar")]
			//[MaxLength(10)]と同じ。
			entity.Property(_ => _.NChar).HasColumnType("nchar").HasMaxLength(10);

			//[Column(TypeName = "ntext")]と同じ。
			entity.Property(_ => _.Text).HasColumnType("ntext");

			//[Column(TypeName = "binary")]
			//[MaxLength(200)]と同じ。
			entity.Property(_ => _.Binary).HasColumnType("binary").HasMaxLength(200);

			//[Column(TypeName = "image")]と同じ
			entity.Property(_ => _.Image).HasColumnType("image");

			//[Column(TypeName = "rowversion")]
			//[Timestamp]
			//と同じ。
			entity.Property(_ => _.Rowversion).HasColumnType("rowversion");

			base.OnModelCreating(modelBuilder);
		}

	}
```
REPLでUnderscore.jsを使うと困ったことになる

node.jsのRead-Eval-Print-Loop (REPL) は手軽にコードを試せて便利ではあるのですが、少し癖があるので注意も必要です。

たとえば、REPL Features を読むと、
http://nodejs.jp/nodejs.org_ja/docs/v0.8/api/repl.html#repl_repl_features
「特別な変数である _ (アンダースコア) は一番最後の式の結果を保持します。」

と書いてあります。

そこで、数あるnpmパッケージで最もDependedされているパッケージであるUnderscore.jsを使うとどうなるのでしょう？

#インストール

```
npm install underscore
```

問題なく入ります。

#REPL起動して読み込む

```
$ node
> var _ = require('underscore');
undefined
> 
```

はい、ここまでは問題ありません。

#さて、では、mapとかやってみます

```
> _.map([1, 2, 3], function(num){ return num * 3; });
TypeError: Cannot call method 'map' of undefined
    at repl:1:3
    at REPLServer.self.eval (repl.js:111:21)
    at rli.on.e (repl.js:260:20)
    at REPLServer.self.eval (repl.js:118:5)
    at Interface.<anonymous> (repl.js:250:12)
    at Interface.EventEmitter.emit (events.js:88:17)
    at Interface._onLine (readline.js:199:10)
    at Interface._line (readline.js:517:8)
    at Interface._ttyWrite (readline.js:735:14)
    at ReadStream.onkeypress (readline.js:98:10)
```

#あれ？

まったく同じコードを、Underscore.jsを読み込んだブラウザChromeのコンソールでも試してみます。

```
>_.map([1, 2, 3], function(num){ return num * 3; });
[3, 6, 9]
```

ちゃんと動いてます。
#REPLにもどります

じゃ、_の中身はどうなってるんだ？

```
> _
undefined
```

そうです。REPLでは、
＞_ (アンダースコア) は一番最後の式の結果を保持します。

```
$ node
> var _ = require('underscore');
undefined ←これ?
> 
```

#じゃ var とったら?

```
> _ = require('underscore')
{ [Function]
  _: [Circular],
  VERSION: '1.3.3',
  forEach: [Function],
  each: [Function],
  collect: [Function],
  map: [Function],
  inject: [Function],
  foldl: [Function],
  reduce: [Function],
   (略)
```

#おおっ

```
> _.map([1, 2, 3], function(num){ return num * 3; });
[ 3, 6, 9 ]
```

#やれば出来るじゃないか！

念のためにもう一回

```
> _.map([1, 2, 3], function(num){ return num * 3; });
TypeError: 1,2,3 is not a function
    at Array.map (native)
    at repl:1:3
    at REPLServer.self.eval (repl.js:111:21)
    at rli.on.e (repl.js:260:20)
    at REPLServer.self.eval (repl.js:118:5)
    at Interface.<anonymous> (repl.js:250:12)
    at Interface.EventEmitter.emit (events.js:88:17)
    at Interface._onLine (readline.js:199:10)
    at Interface._line (readline.js:517:8)
    at Interface._ttyWrite (readline.js:735:14)
```

#ダメでした(^^;;

というわけで、仕様には素直に従いましょう。

#REPLでは、特別な変数である _ (アンダースコア) は一番最後の式の結果を保持します。

ということで、どうしてもアンダースコアを使いたければ、_ (アンダースコア)ではなく、他の変数名を使えばよいのです。

もちろん、REPLではなく、node.jsの普通のコード内で使うときは何の問題もありません。

#それにしても、できれば、こういう「公共的？」ツールでグローバルに余計な変数を使わないで欲しいです。

まぁ、使いたければ、慣れれば良いのでしょうけれど、、、
「A Tour of Go」でGo言語を学ぶ(~#8)

今回は関数です。関数を作れるようになればかなり楽をできます。同じようなメソッドをたくさん書かなくても済むのです。
今回は特にネタを思いつかなかったからコピペになります。

```go:func.go
package main

import "fmt"

func add(x int, y int) int {
	return x + y
}

func main() {
	fmt.Println(add(42, 13))
}
```

結果
* * *

```
55
```

型が変数名のあとに来るんですね。Pascalだっけ? も型を後に記述してた気がする。
また、引数の型が同じ場合は省略もできて、

`add(x,y int)int`

ってふうにも書ける。

感想
* * *
型をあとに宣言するのは違和感があるなぁ。これの方がいい理由があるのかないのか...。
まぁどうせすぐ慣れるんだろうけどね。

次は関数の続きか変数について見てみる。
SourceTree は git-svn したリポジトリも使えます

Mac 最強の git/Mercurial クライアントである [SourceTree](http://www.sourcetreeapp.com/) ですが、git-svn した Subversion リポジトリもほとんどシームレス い扱うことができます。

以下、方法です。

## 追記

現在の SourceTree では、ソースパスに SVN リポジトリのパスを入力すれば、SourceTree 側で勝手に git svn clone してくれます。つまり下の I. の手順は不要です。(コメント頂いた YukiAsu  さん、ありがとうございました。)

## 手順

I. Terminal で git svn clone する。※リポジトリがデカイと結構時間かかります。

```sh:
git svn clone -s http://osmdroid.googlecode.com/svn osmdroid
```
-s オプションをつけているので、最後 /trunk としない所がミソ。
 
II. SourceTree の ファイル → 開く で I. のフォルダを作業フォルダとして開く。

III. ごらんの通り、普通に SourceTree で開けました。

![sourcetree](https://dl.dropbox.com/u/264530/qiita/sourcetree01.png)

* プッシュは ```git svn dcommit``` と同じ、つまり SVN へのコミットになります。
* プルは ```git svn rebase``` つまり SVN からの Update になります。
* ブランチは少し注意が必要で、git のローカルブランチとして作成するか、SVN のブランチとして作成するかを選択するダイアログが表示されます。前者を選択した場合は、SVN へは手動でマージしなければなりません。
![sourcetree_branch](https://dl.dropbox.com/u/264530/qiita/sourcetree02.png)

git svn のコマンドは普通の git と少し違うのですが、SourceTree がそのあたりを吸収してくれて、SVN をリモートリポジトリと見立てて動作します。

あわよくば、SVNリポジトリの URL を直接 SourceTree で開けると尚便利でしたが、まあいいでしょう。

SVN の不便なところに気軽にローカルブランチが作れないというのがあったので、git-svn を使うことでローカルブランチ作り放題です。

Mac の SVNクライアントで「これだ！」というのがなかったのですが、これで満足です。

##参考
* [git-svnの使い方を覚えた - idesaku blog](http://d.hatena.ne.jp/idesaku/20090323/1237825080)
* [SourceTree](http://www.sourcetreeapp.com/) - なんか "Supports SVN via git-svn or hgsubversion" って書いてあるので git-svn の代わりに hgsubversion でもいけそうですね。
CodeFirstする時にちょっと注意すべきコト

クライアントアプリケーションを作成するときなど、インプロセスなRDBMSとして有用なSQL Server CompactEditonとEntityFrameworkを使用することで、SQLを考えること無くデータベースを生成、利用出来ます。

これらの手法は非常に便利かつLINQも扱えるので強力ですが、いくつか注意しなければならないことがあります。

##INSERT・DELETE・UPDATE相当の処理が遅い
これは、1レコード毎にSQL文が生成されてしまうことに起因します。
ユーザーの応答に応じた比較的少量のこれらの操作を行うことは特に問題とはならないでしょうが、例えば初期生成時に大量のレコードをINSERTする時などは、処理の非同期化・Commandを利用したExecute等考慮が必要かもしれません。

##クエリの結果参照されたレコードはローカルビューに格納される
生成されたIDbSetを対象にLINQによる問い合わせを多数回行うことは比較的良くあるでしょう。
しかし、アプリケーションのライフサイクルと、DbContextから派生させたカスタムコンテキストクラスのインスタンスのライフサイクルを一致させてしまうのはあまり好ましくないかもしれません。
マップ先テーブルのレコード数がさして多くない、又はアプリケーションライフサイクル中に参照されるレコード範囲が局所化されているというシナリオであればライフサイクルを一致させても問題にはなりにくいと考えます。しかし、レコード数が大量で、問い合わせ毎の範囲が広範に及ぶ場合、主にメモリリソース、副次的にはSaveChangeメソッドの実行にインパクトを与え得ます。

この理由は、任意のレコードを参照した場合、カスタムコンテキストのインスタンスが破棄されるまで、ローカルビューに格納され続けます。従って、問い合わせ単位の参照数が少量でも、頻度が多くかつクエリの結果に重複が少ない場合、結果として大量のローカルビューを抱え込むコトになってしまうのです。

また、SaveChanbeメソッド実行時にローカルビューに格納済みの値が変化したか否か網羅的に検査する必要があることから、結果としてSaveChangeの実行効率が悪化する可能性があります。

ローカルビューにどのくらいのレコードが格納されているか確認するには、カスタムコンテキストに作成したIDbSet<TEntity>.Local.Countで取得可能です。

また、この問題の解決方法として、処理単元ごとに、カスタムコンテキストのインスタンスに対する生成と破棄を行う、又は先に挙げたCountを監視することで、肥大化した場合にカスタムコンテキストのインスタンスの生成と破棄を行う等が上げられるかと思います。

また、変更を伴わない、問い合わせのみの場合、AsNotraking()を利用することで、ローカルビューに格納されること無く、結果を受け取ることが可能です。
(後に@okazuki先生に教えていただきました。ありがとうございます。）

##まとめ
EntityFrameworkを利用して、コードファーストでデータベースを操作することは、インピーダンスミスマッチを解消し、重要なテーマにフォーカスを当て続けることが出来るという面において非常に有用かつ強力な手段だと思います。ですが、一般的なデータベースへの操作、又はLINQtoObjectと同じ操作を行ってしまった場合、理論的には問題は無くとも、パフォーマンスが悪化する、リソースを過度に消費してしまう問題はどうしても避けて通れないと思います。

但し、EntityFrameworkの持つパフォーマンス的な制約をある程度理解するコトで、効率的で保守がしやすく、拡張性の高い開発が行えるのではないでは無いかと考えています。
AlfredからDashで検索する


DashはURLスキーム(``dash``)を持っているのでそれを利用して下の画像のように設定する。

![Alfred設定画面](http://f.cl.ly/items/0m2c1N123u18092t1M1n/スクリーンショット 2012-09-20 21.28.44.png)

また、特定の docset だけを対象にした検索設定を作成したい場合は、``{query}`` の前に ``android:`` のように docset の識別子を挿入することで実現出来る。

![Alfred設定画面2](http://f.cl.ly/items/2l2G3Z2U1T28202x2r36/search_android_in_dash.png)

``android:`` の部分は、 Dash の設定画面の ``Docsets`` タブで確認可能。

![Dash設定画面](http://f.cl.ly/items/0R133E2n3b0z2b3d1Z13/Dash_docsets.png)
CocoaのURL読み込みエラー検知段階から何かしらがんばる


NSError参照から来た人に聞く。
以下はUIWebViewDelegate(UIKit)。

```objc:MyWebViewController
- (void)webView:(UIWebView *)_webView didFailLoadWithError:(NSError *)error
{
  if([error.domain isEqualToString:NSURLErrorDomain]){

    NSURL *failingURL = [[error userInfo] objectForKey:@"NSErrorFailingURLKey"]; // エラー発生したURLのNSURL
    NSString *failingURLString = [[error userInfo] objectForKey:@"NSErrorFailingURLStringKey"]; // エラー発生したURLのNSString

    switch (error.code) {
      // http://developer.apple.com/library/ios/#DOCUMENTATION/Networking/Reference/CFNetworkErrors/Reference/reference.html の CFURError のへん
      case kCFURLErrorTimedOut:
        // エラーの内容によって処理を切り分ける
        break;
        
      default:
        break;
    }
  }
}
```
なぜか Net::SSLeay でコンパイルエラー

こんな感じの意味不明なコンパイルエラーで Net::SSLeay がインストールできなくなって困ってたんだけど、

```
/usr/bin/perl "-Iinc" local/perl-5.10.1/pm/lib/perl5/ExtUtils/xsubpp  -typemap /usr/share/perl/5.10/ExtUtils/typemap -typemap typemap  SSLeay.xs > SSLeay.xsc && mv SSLeay.xsc SSLeay.c
cc -c  -I/usr/include -D_REENTRANT -D_GNU_SOURCE -DDEBIAN -fno-strict-aliasing -pipe -fstack-protector -I/usr/local/include -D_LARGEFILE_SOURCE -D_FILE_OFFSET_BITS=64 -O2 -g   -DVERSION=\"1.48\" -DXS_VERSION=\"1.48\" -fPIC "-I/usr/lib/perl/5.10/CORE"   SSLeay.c
{standard input}: Assembler messages:
{standard input}:94001: Warning: end of file not at end of a line; newline inserted
{standard input}:94025: Error: open CFI at the end of file; missing .cfi_endproc directive
cc: Internal error: Killed (program cc1)
Please submit a full bug report.
See <file:///usr/share/doc/gcc-4.4/README.Bugs> for instructions.
make[1]: *** [SSLeay.o] Error 1
```

システム (Debian) の Perl じゃなくて自前でコンパイルした Perl (どっちも 5.10.1) にしたらちゃんとコンパイルできた。わけわからん。
UIWebViewの読み込みのタイムアウト値を変更する


```objc:MyWebViewController
// static NSTimeInterval kDefaultTimeout = 30; // sec

#pragma mark - UIWebViewDelegate
- (BOOL)webView:(UIWebView *)webView shouldStartLoadWithRequest:(NSURLRequest *)request navigationType:(UIWebViewNavigationType)navigationType
{
  if(request.timeoutInterval != kDefaultTimeout){
    // timeoutIntervalを修正して再発行
    NSMutableURLRequest* mutableRequest = (NSMutableURLRequest*)request;
    mutableRequest.timeoutInterval = kDefaultTimeout;
    [webView loadRequest:mutableRequest];
    return NO;
  }

  return YES
}
```
リモートのブランチをcloneする

いつもコマンドを忘れるので覚書。

```sh:
git clone /var/cvs/test
```

とかって感じでリモートのリポジトリをcloneしてきたとする。
で、`git branch`すればわかるんだけど、このままだとmasterブランチしかローカルにcloneできてない。別のブランチ(developmentとする)もローカルにcloneしたい。

という時はまず

```sh:
git branch -r
```

でリモートのブランチ名を調べる。
そうすると以下のような感じで表示される。

> $ git branch -r
>  origin/HEAD -> origin/master
>  origin/development
>  origin/master

で、この中からお目当てのブランチ名を探し（この場合は「origin/development」）、こいつを以下のようにしてcloneすればOK。

```sh:
git checkout -b development origin/development
```

checkoutの第一引数にローカルリポジトリでのブランチ名を、第二引数にリモートの落としていたいブランチ名を指定する。