daemontoolsのログ表示

daemontoolsのログは一瞬???ってなりますよね。

$ tail /var/log/foo/current

@4000000050880600165e7a84 [5633] hogehoge
@40000000508806043a77d794 [5633] pogepoge
@40000000508806043a7a0dfc [5633] fugefuge

みたいな。
@400000...は「TAI64N形式」らしく、tai64nlocal コマンドを使えば正しく表示できます。

tail /var/log/foo/current | tai64nlocal

2012-10-25 00:15:02.375290500 [5633] hogehoge
2012-10-25 00:15:06.980932500 [5633] pogepoge
2012-10-25 00:15:06.981077500 [5633] fugafuga

すぐに忘れそう・・・。

git コンフリクトへの対応

$ git merge dev-branch
Auto-merged dev-branch
CONFLICT (content): Merge conflict in file
Automatic...

まず、競合ファイルを見つける
$ git status

$ git ls-files -u

次に競合の調査(まぁgitは直接ファイルにだめだしをする)
$ cat file

競合時のdiffでは
$ git diff
$ git diff HEAD
$ git diff MERGE_HEAD

そして不思議な事に、どちらかのリビジョンに内容を書き換えると、
$ git diff
の差分がなくなります

競合時のgit log
$ git log --merge --left-right -p
※--mergeは、競合を引き起こしたファイルに関するコミットだけを表示する
※--left-rightは、コミットがマージの左右を表示する
※-p パッチを作成

$ git ls-files -s
100644 ce013625030ba8dba906f756967f9e9ca394464a 1 file
100644 e63164d9518b1e6caf28f455ac86c8246f78ab70 2 file
100644 562080a4c6518e1bf67a9f58a32a67bff72d4f00 3 file

※競合しているファイルを見る場合-uを使う

$ git cat-file -p e63164
中身が見れる

どちらかの修正にする場合
HEADにする場合
$ git checkout --ours file
マージ元にする場合
$ git checkout --theirs file

競合を解決する(rebaseの場合)
$ git add file

マージの中断
コッミット前
$ git reset --hard HEAD

iOS Blocks

Blocksとは

無名関数みたいなもの

記述方法

^(引数){ /* 処理 */ }
^(void){ /* 処理 */}
^(int arg){ /* 処理 */}

処理を保存している!!


void (^sample)(int) =  ^(int arg){ print "%d", arg; }

処理 print "%d", arg; はdataセクション

int localA = 1;
void (^sample)(int) =  ^(int arg){ print "%d:%d", arg, localA; }

処理 print "%d:%d", arg, localA; はスタックに保存される

copyを使うとヒープ領域に保存される

循環参照させないために

ブロックないではselfを使わない
プライベート変数(ivar)も直接使わない

nilチェックを行うために一旦strong変数に代入する
__blockはARC無効の場合、retainカウントされる

iOS4と5以降では記述の仕方が違う

iOS4では__weakが使えないため__unsafe_unretainedを使う

DataStoreの辛いところ

# DataStoreの限界 FacebookやインスタグラムのようなSNSで、投稿、公開範囲、お気に入りなどの機能をDataStoreで実現しようとするとどうしても辛くなる。 ## DataStoreで実現可能? - users - id - feeds - i...