OmniAICreator/Qiita-1.07M huggingface dataset:
totarget.c

問題はこちら
http://nabetani.sakura.ne.jp/hena/ord13updowndouble/

再帰処理でひたすら、目的の値になるルートを探すアルゴリズム。
たぶん、テストデータ全ての結果がでるまで、ものすごく時間かかりそうなので、
あまり良いアルゴリズムではないと思います。
でも、面白いコードになったので、載せてみました。

探索開始の値は0ではなく２からにして、最大でも１回の探索の計算量が3の25乗回になるようにしてます。
再帰処理で探索する深さを1ずつ増やし、毎回２から再計算しています。
このため、遅いです。

最初の条件`((v <= 2 && c > 2) || v > t+1 || c >= i)`でなるべく枝切りして、計算量を削減してます。

別解はこちら
http://qiita.com/saihon2013/items/7aad77be492ddd57c8c6

```c
#include <stdio.h>
#include <stdlib.h>

int solve(const int t, const int v, const int c, const int i)
{
  return 
    ((v <= 2 && c > 2) || v > t+1 || c >= i) ? 0:
    (t == v) ? 1:
    (solve(t,v<<1,c+1,i)) ? 1:
    (solve(t,v +1,c+1,i)) ? 1:
    (solve(t,v -1,c+1,i)) ? 1: 0;
}

void test(const char * const input, const char * const ans)
{
  int t = atoi(input), i;
  for(i=2; solve(t,2,2,i+1)!=1; i++);
  printf("%d\t%s\n", i, (atoi(ans) == i) ? "OK": "NG");
}

int main()
{
/*0*/ test( "59", "9" );    
/*1*/ test( "10", "5" );    
/*2*/ test( "11", "6" );    
/*3*/ test( "12", "5" );    
/*4*/ test( "13", "6" );    
/*5*/ test( "14", "6" );    
/*6*/ test( "15", "6" );    
/*7*/ test( "16", "5" );    
/*8*/ test( "17", "6" );    
/*9*/ test( "18", "6" );    
/*10*/ test( "27", "8" );    
/*11*/ test( "28", "7" );    
/*12*/ test( "29", "8" );    
/*13*/ test( "30", "7" );    
/*14*/ test( "31", "7" );    
/*15*/ test( "32", "6" );    
/*16*/ test( "33", "7" );    
/*17*/ test( "34", "7" );    
/*18*/ test( "35", "8" );    
/*19*/ test( "41", "8" );    
/*20*/ test( "71", "9" );    
/*21*/ test( "1023", "12" );    
/*22*/ test( "1024", "11" );    
/*23*/ test( "1025", "12" );    
/*24*/ test( "1707", "17" );    
/*25*/ test( "683", "15" );    
/*26*/ test( "123", "10" );    
/*27*/ test( "187", "11" );    
/*28*/ test( "237", "12" );    
/*29*/ test( "5267", "18" );    
/*30*/ test( "6737", "18" );    
/*31*/ test( "14796", "20" );    
/*32*/ test( "18998", "20" );    
/*33*/ test( "23820", "20" );    
/*34*/ test( "30380", "21" );    
/*35*/ test( "31119", "21" );    
/*36*/ test( "33301", "20" );    
/*37*/ test( "33967", "21" );    
/*38*/ test( "35443", "22" );    
/*39*/ test( "35641", "22" );    
/*40*/ test( "43695", "23" );    
/*41*/ test( "44395", "23" );    
/*42*/ test( "44666", "22" );    
/*43*/ test( "987", "14" );    
/*44*/ test( "1021", "13" );    
/*45*/ test( "1019", "13" );    
/*46*/ test( "1015", "13" );    
/*47*/ test( "1007", "13" );    
/*48*/ test( "1011", "14" );    
/*49*/ test( "1003", "14" );    
/*50*/ test( "983", "14" );    
/*51*/ test( "999", "14" );    
/*52*/ test( "2731", "18" );    
/*53*/ test( "6827", "20" );    
/*54*/ test( "10923", "21" );    
/*55*/ test( "27307", "23" );    
/*56*/ test( "43691", "24" );    
/*57*/ test( "109227", "26" );    
/*58*/ test( "174763", "27" );
  return 0;
}
```
git commit したときにfatal: could not open '.git/COMMIT_EDITMSG': Permission denied が出た場合

`git commit ` してコメントを書こうとしたら 
> fatal: could not open '.git/COMMIT_EDITMSG': Permission denied 

が出てきてしまうときは COMMIT_EDITMSG を別のディレクトリに移動してからふたたび行うと正常になります。
COMMIT_EDITMSG は前回のログなので破棄しても問題ない と思います……
cap deploy でる エラー No such file or directory public/images 等をなくす


最近はもっぱらデプロイ:[capistrano](https://github.com/capistrano/capistrano) にお世話になっています。
そして、カラーリングに [capistrano_colors](https://github.com/stjernstrom/capistrano_colors) を使っている。
( 今みたら、capistrano のバージョン 2.13.5 からは内包されてrequire する必要がなくなったんですね。)

deploy もコマンド1発で出来て非常に捗るんですが、1点だけ不満なことがありました。


### `cap deploy` 

するとでるこの public/images, javascripts, stylesheets がないというエラー

```
*** [err :: hitofukumori01.local] find:
*** [err :: hitofukumori01.local] `/home/vagrant/apps/application/releases/20130904103001/public/images'
*** [err :: hitofukumori01.local] : No such file or directory
*** [err :: hitofukumori01.local]
*** [err :: hitofukumori01.local] find:
*** [err :: hitofukumori01.local] `/home/vagrant/apps/application/releases/20130904103001/public/stylesheets'
*** [err :: hitofukumori01.local] : No such file or directory
*** [err :: hitofukumori01.local] find: `/home/vagrant/apps/sidebar/releases/20130904103001/public/javascripts': No such file or directory
```

ターミナルが真っ赤になってドキッとするので、なんとかならないかなと思っていました。

調べたら[こちら](http://stackoverflow.com/questions/9468912/missing-folder-errors-during-capistrano-deploy)で解決できました。

deploy.rb に以下の文を1行いれれば解決。

```ruby:deploy.rb
set :normalize_asset_timestamps, false
```

よかった。
Qiita/Kobito要望


# 個人的な要望一覧

今後要望はここにまとめることにする

## 2013/10/10 Qiita Evernoteのクリップに最適化する

EvernoteのChrome拡張を使うと、ウェブページを部分的にクリップできる。Qiitaの投稿をクリップするとき、範囲選択で記事だけをクリップしたり、記事+コメントをクリップしたりできるようにしてほしい。現時点では、タイトルがデフォルトで入らず、タイトルまで含めようとすると、ページ全体をクリップすることになる。コメントやサイドバーを取り除きたい場合がある。


![Ruby_-_【まとめ】Qiita_API_ライブラリ_ラッパー_-_Qiita-2.png](https://qiita-image-store.s3.amazonaws.com/0/889/e2593368-ee51-f5db-484c-86319272e95a.png "Ruby_-_【まとめ】Qiita_API_ライブラリ_ラッパー_-_Qiita-2.png")



## 2013/09/05 Kobito 同期完了のフィードバックをポップアップから別の形式に変更する

同期完了のフィードバックが下記図のようにポップアップで出る。

![Screen_Shot_2013-09-05_at_14.16.57.png](https://qiita-image-store.s3.amazonaws.com/0/889/35a8ed23-6736-c083-6408-cdd14ab2552f.png "Screen_Shot_2013-09-05_at_14.16.57.png")

これを、ポップアップではなく、別の形式にしてほしい。例えば、レスポンスバー(Qiitaでログインしたら「ログインしました」と一時的に画面上部に出るようなもの)や、通知センターのGrowl的なUIや、ツールバーに出るなどの形式。

理由は、書きながら頻繁に同期するときに、Alt+Command+Sを押して実行するが、毎回OKを押すのがめんどくさく感じるため。


## 2013/09/04 Team 日時をYYYY/MM/DD HH:MM 形式で表示する

業務では正確な日時を把握したい場合がある。
「N日前」「Nヶ月前」などより、日時のほうがいい。

## 2013/09/04 Team コメントを検索できるようにする

コメントも検索したい。

## 2013/09/03 Kobito ファイル連携したファイルのフルパスを表示してほしい

http://qiita.com/suin/items/3e681f5f0671db4f9314

## 2013/09/03 Kobito open -a Kobito で連携済みファイルも開けるようにしてほしい

http://qiita.com/suin/items/6b53f2c3e896582c6057

## Kobito 印刷余白設定できるようにする

http://qiita.com/suin/items/0a113049b2d8d5a499ce

## Kobito blockquoteの色を濃くする

http://qiita.com/suin/items/0a113049b2d8d5a499ce

## Kobito プレビューのリンクのリンク先URLを分かるようにしてほしい

http://qiita.com/suin/items/c95f6fcdfbd2e20b795b

## Qiita ストックした記事をランダムで表示してほしい

http://qiita.com/suin/items/9fdc92a92438c9dba1f9

## Qiita タグごとの人気投稿一覧、関連度が高いユーザ一覧がほしい

http://qiita.com/suin/items/ecb590318bd8ce7a789b

## Kobito 見出し番号自動付番

http://qiita.com/suin/items/016277984d15bb02d75f

# 実装いただいた機能

ありがとうございます :smile:

## Kobito open -a Kobito README.md でファイルと連携できるようにしてほしい

http://qiita.com/suin/items/f821a29ee140446734f0
tmuxでセッションの有無を判別して起動するスクリプト

既に誰か書いていそうだけど備忘録代わりに。
tmuxで毎回アタッチすべきセッションがあるかどうかとか気にする事がないように簡単なシェルスクリプトにしてみた。

```
#!/bin/bash

tmux ls > /dev/null
if [ $? -eq 1 -a -z "$TMUX" ]; then
    exec tmux
elif [ -z "$TMUX" ] ; then
    exec tmux attach
else
    echo "sessions should be nested with care."
fi
```

これをPathの通った場所に保存して実行するとセッションが残っている場合は最後のモノから利用し、なければ新規で使うようになります。
jQueryとUnderscoreのextend()でundefinedの扱いが違う

jQueryは`undefined`のときは元の値を使用するが、Underscoreは`undefined`という値で上書きする。ZeptoはjQueryと同様。

```js
jQuery.extend(
  { key1:'value1', key2:'value2', key3:'value3' },
  { key1:null,     key2:undefined }
);  // => { key1:null, key2:'value2',  key3:'value3' }

_.extend(
  { key1:'value1', key2:'value2', key3:'value3' },
  { key1:null,     key2:undefined }
);  // => { key1:null, key2:undefined, key3:'value3' }
```
スゲい簡単なPerl入門  10th Day: 演算子: qwとかqqとかqとか

perlの演算子にある q//, qq//, qw// という演算子。
分かるようなわかんない様なだったんですけど、一応分かったんで下にまとめます。
 
# q/hoge1/;

これは、 **'hoge1';** と同じ。
**Single Quotation** ってことですね。
当然内部に変数を書いても展開しないやつです。

# qq/hoge2/;

これは、 **"hoge2";**  と同じ。
**Double Quotation** で囲んだ状態と同じ。
**qが2つあるから**ダブルコーテーション....
内部で変数も展開します。

# qw/hoge1 hoge2 hoge3/;

これは、 **('hoge1', 'hoge2', 'hoge');** と同じ。
**配列の要素に文字列を含んだ状態**と同じ。
**要素は Single Quotation で囲まれています**。

配列の初期化するときなんかに便利だったりします。

```pl
@hoge = qw/hoge1 hoge2 hoge3/
```
@hoge = ('hoge1','hoge2','hoge3'); よりは楽かな(^_^;)

# ちなみに qw/ hoge / でなくてもいい

```pl
qw( 対象となる文字列 )
qw{ 対象となる文字列 }
qw[ 対象となる文字列 ]
qw< 対象となる文字列 >
```

これらは全部一緒だそうです。

参考: http://www.perlplus.jp/perl/array/index6.html
gnu の tree コマンド

gnu tree  コマンドは数多くのオプションがあります。
 　　http://mama.indstate.edu/users/ice/tree/
 
 
 便利そうなオプションを紹介します。
 
     $ tree -fapugsQD  .
     "."
    ├── [-rw-r--r-- youichik staff            430 May 28 13:26]  "./.gitignore"
    ├── [-rw-r--r-- youichik staff            766 May 28 13:26]  "./Gemfile"
    ├── [-rw-r--r-- youichik staff           2508 May 28 13:37]  "./Gemfile.lock"
    ├── [-rw-r--r-- youichik staff           9220 May 28 13:26]  "./README.rdoc"
    ├── [-rw-r--r-- youichik staff            272 May 28 13:26]  "./Rakefile"
    ├── [drwxr-xr-x youichik staff            272 May 28 13:26]  "./app"
    │   ├── [drwxr-xr-x youichik staff            170 May 28 13:26]  "./app/assets"
    │   │   ├── [drwxr-xr-x youichik staff            102 May 28 13:26]  "./app/assets/images"
      ...  以下省略 ...
     83 directories, 93 files
 

 H  をオプションに追加すれば、これらが HTML  形式で出力されます。
 C を追加指定すれば、色も付きます。
 
 ある　Directory 以下を apache の directory-index をつかわずに公開したかったら、
この tree コマンドをつかって html を生成すると良さそうです。
 
 X をオプション指定すれば、XML形式で出力を得られます。
 
XML形式を利用して、なにかツールを作れそうな気もします。
 # rails で作成したファイル群から、最小限 必要なファイル/ディレクトリだけをサーバーに
 # ftp 転送し、permission, owner, group を設定するとか  ...
/dev/loop を動的作成

## 前提知識

+ CentOS-6.xの初期状態は、合計8つ

## 状況

+  システム起動時に作成される設定を忘れた
+ 追加してたが、更に追加したい

## 追加手順(スクリプト)

### 仕様

+ /dev/loop8 ～ /dev/loop127 まで作成

```bash
#!/bin/bash

set -e
set -x

for i in {8..127}; do
  loopdev=/dev/loop${i}
  if [[ -b ${loopdev} ]]; then
    continue
  fi
  mknod -m 660 ${loopdev} b 7 ${i}
  chgrp disk ${loopdev}
done
```

### 改良点

+ 127では足りない場合、255などへ変更

## あとがき

時々困るだけだけども、大切な作業。
C言語のmainの型はvoidじゃなくてintに


タイトルで言い切った。

久々にC言語で遊ぼうと思って下記コードをgccでコンパイル。

```cpp:test.c
#include <stdio.h>

void main(void) {
	printf("Hello World!\n");
}
```

するとワーニングが・・・

```
warning: return type of 'main' is not 'int'
```

え、voidだめなの？昔々こう書けと教わった気が・・・

おとなしくintに書き直しました。

```cpp:test.c(修正後)
#include <stdio.h>

int main(void) {
	printf("Hello World!\n");

	return 0;
}
```

ISOの規格（よくわかってない）ではintじゃないとダメとなっているっぽい。知らなかった。

- - -
> Blog URL : http://www.utano.jp/ (Syntax Error.)
sox で音声をあれこれ

音ズレが発生してしまっている動画を修正する時に音声部分の先頭を数秒削除したり、逆に数秒追加したい時があります。

そんな時に Audacity を使ってもいいのですが、せっかくなのでCUIで扱える sox を使った方法を記録しておきます。

## 音声の先頭を少し削除

音声が映像に対して遅れてしまっている時は音声の先頭をその分だけ切り取って再合成します。
どのくらいズレてるかを確認する時はVLCの[ツール]->[トラックの同期化] の中の [オーディオトラックの同期化]を使うと便利です。というか他には方法を知りません。

仮に1.2秒ずれてしまっているなら
`$ sox audio.wav audio_fixed.wav trim 1.2`
とすればなおります。

## 無音部分を音声に追加

逆に音声が映像よりも早くなってしまってる場合は少しだけめんどくさくなります。

仮に3秒ずれてたなら、まず3秒の無音の音声を作成して

`$ sox -n -r 44100 -c 2 silence.wav trim 0.0 3.0`

その無音音声を元の音声に連結します。

`$ sox silence.wav audio.wav audio_fixed.wav`

ちなみに「合成(merge)」だと二つの音声が同時に聞こえるように結合して、「連結(concatenate)」だと2つの音声を順番に結合しますが、2つの用語は頻繁にこんがらがって使われています。

日本語圏でも英語圏でも、どちらでも。

## 参考

Padding an audio file with silence using sox - ActiveArchives
http://activearchives.org/wiki/Padding_an_audio_file_with_silence_using_sox
hubコマンドを使ってforkしていないリポジトリでmaster branchではないbranchにpull-requestを送る


```bash
$ hub pull-request "comment" -h repo:from-branch -b repo:to-branch`
```

マニュアルに載っている。

```bash
git pull-request "I've implemented feature X" -b defunkt:master -h mislav:feature`
```

もうこれでブラウザでpull-requestを送る生活からオサラバだぜ！
Qiitaの記事内のコード部分を楽にコピペするユーザースクリプト

```js
// ==UserScript==
// @name           Qiita: Select code block
// @description コードの右上のアイコンをクリックすると選択される
// @version        1.1
// @match          http://qiita.com/*
// @namespace      http://qiita.com/vzvu3k6k/
// @license        Public Domain
// ==/UserScript==

var style = document.createElement("style");
style.textContent = 
    '.code-frame .__select-code {' +
    '   display: none;' +
    '}' +
    '.code-frame:hover .__select-code {' +
    '   display: block;' +
    '   background: none repeat scroll 0 0 #EEEEEE;' +
    '   border-bottom: 1px solid #CCCCCC;' +
    '   border-left: 1px solid #CCCCCC;' +
    '   border-radius: 0 3px 0 3px;' +
    '   cursor: pointer;' +
    '   padding: 3px;' +
    '   float: right;' +
    '}';
document.head.appendChild(style);

document.addEventListener("DOMNodeInserted", function(e){
    var node = e.target;
    if(node.nodeType == Node.ELEMENT_NODE && node.classList.contains("code-frame"))
        if(!node.querySelector(".__select-code"))
            addSelectButton(e.target);
});

Array.prototype.forEach.call(document.querySelectorAll(".code-frame"), addSelectButton);

function addSelectButton(elmCodeFrame){
    var elmSelectButton = document.createElement("div");
    elmSelectButton.setAttribute("class", "__select-code");
    elmSelectButton.addEventListener("click", function(){
        select(elmCodeFrame.querySelector("pre"));
    });
    elmSelectButton.insertAdjacentHTML("afterbegin", '<i class="icon-paper-clip"/>');
    elmCodeFrame.insertBefore(elmSelectButton, elmCodeFrame.firstChild);
}

function select(elm){
    var select = window.getSelection();
    select.removeAllRanges();
    var range = document.createRange();
    range.selectNodeContents(elm);
    select.addRange(range);
}
```

[qiita-select-code-block.user.js](https://gist.github.com/vzvu3k6k/6433767/raw/qiita-select-code-block.user.js)

コード上にマウスカーソルを乗せると右上にクリップアイコンが表示される。クリックするとテキストが選択される。

  * JavaScriptだけでクリップボードにコピーする方法が見つからなかった。
  * DOMの更新監視はMutationObserverでやりたかったけど、Firefoxにはsubtreeの監視が実装されてないので諦めた。
  * 途中までスクロールしてから「やっぱコピーしよう」と思い直したら上までスクロールしなおさないといけないのが面倒な気がする。Firefoxを使ってる人は[コンテキストメニューをいじるバージョン](https://gist.github.com/vzvu3k6k/6433767/raw/1eb529398f14fe59304f6172c84e179ea73f22a1/qiita-select-code-block.user.js)を使ったほうが便利だと思う。

元ネタ: [Qiita - 【要望】ボタンクリックでコードをコピーしたい - Qiita [キータ]](http://qiita.com/koryuohproject/items/431a0bb9c640f194c982)
壊れたwavファイルを修復

コマンドラインから壊れたwavを修復したかったので調べたら出てきたコマンド。

`$ mplayer -quiet -vo null -vc dummy -ao pcm:waveheader:file="audio_FIXED.wav" audio_BROKEN.wav`

再生せずにヘッダの修復だけしてるっぽいけど、詳しくはよくわからない。

## 参考

George's Website - Fix Broken wav Files
http://www.georgetoft.com/?Linux:Sound_Processing:Fix_Broken_wav_Files
CSSで3Dなやつ

![space_box.gif](https://qiita-image-store.s3.amazonaws.com/0/10765/17a70b6c-4bf9-cabe-a47a-38fb53f0091a.gif)

`perspective:100`と`transform-style:preserve-3d`というのを知らずに困ってた。

http://jsfiddle.net/ginpei/aLTp4/

```html
<div class="canvas">
    <div class="space">
        <div class="measure x"></div>
        <div class="measure y"></div>
        <div class="measure z"></div>
        <div class="box">
            <div class="face face0">0</div>
            <div class="face face1">1</div>
            <div class="face face2">2</div>
            <div class="face face3">3</div>
            <div class="face face4">4</div>
            <div class="face face5">5</div>
            <div class="face face6">6</div>
        </div>
    </div>
</div>
```

```css
.canvas {
    background-color: #eee;
    height: 100%;
    overflow: auto;
    -webkit-perspective: 500;
    position: relative;
    width: 100%;
}
.space {
    height: 400px;
    -webkit-transition: -webkit-transform .5s;
    -webkit-transform:
        rotateX(-10deg)
        rotateY(-10deg)
        rotateZ(0deg);
    -webkit-transform-style: preserve-3d;
    width: 400px;
}
.on .space {
    -webkit-transform:
        rotateX(-40deg)
        rotateY(30deg)
        rotateZ(0deg);
}
…
```
setTimeoutで、準備が整うまで待機するパターン

デモ:

* http://jsfiddle.net/ginpei/uR4GY/

# スニペット

```js
/**
 * Repeat setTimeout until callback returns truthy.
 * @param {Function} callback
 * @param {Number} interval
 */
function waitFor(callback, interval) {
    var f = function() {
        if (!callback()) {
            setTimeout(f, interval);
        }
    };
    f();
}
```

# 例

```js
var threshold = 1000;
var startedAt = Date.now();
waitFor(function() {
    var past = Date.now() - startedAt;
    if (past > threshold) {
        console.log('done.');
        return true;
    }
    else {
        console.log('progressing…', past);
    }
}, 100);
```
うっかり手元で色々変えてしまった変更を、こう、サクッと、「過去の」コミットにamendしたい

大した手順ではないのだが：

```bash
$ git stash
$ git rebase -i HEAD~3
# ここで、混ぜ込みたい対象のコミットを「edit」にしておく
$ git stash pop
$ git commit --amend
$ git rebase --continue
```

こんな感じが一番サクっと感が高い……のか？
macでmecab-rubyをビルドせずにインストールする

### 背景

rubyからMeCabを利用しようとすると、
ソースを取得し、makeしてinstallしなければならないし、
場合によってはMakefileの修正も必要なのであまり好きではありませんでした。

しかしふと`gem search mecab`してみると

```
*** REMOTE GEMS ***

mecab (0.98)
mecab-ext (1.0.2)
mecab-light (0.2.2)
mecab-modern (0.0.2)
mecab-mora (0.0.5)
mecab-syllable (0.0.5)
```

なんとgemからインストールできそうではありませんか。

### インストールを試みる

brewでmecabをインストールして

```
brew install mecab mecab-ipadic
```

`bundle init`
して`Gemfile`に
`gem 'mecab'`を追加し、
`bundle install`してみると・・・

盛大なエラーが・・・

brewでインストールしたmecabのバージョンが0.996で、
gemのmecab-rubyのバージョンが0.98であることが原因です。

### brewでバージョンを指定してインストール

brewでmecabをバージョン指定してみます。  
まず、mecabが登録されているバージョンを調べてみます。

```
brew versions mecab
```

0.98はちゃんと存在しました。

```
0.996    git checkout ee21df2 /usr/local/Library/Formula/mecab.rb
0.995    git checkout 1c6ad82 /usr/local/Library/Formula/mecab.rb
0.994    git checkout 4844910 /usr/local/Library/Formula/mecab.rb
0.993    git checkout 642c664 /usr/local/Library/Formula/mecab.rb
0.992    git checkout bb95f13 /usr/local/Library/Formula/mecab.rb
0.99     git checkout 01788c0 /usr/local/Library/Formula/mecab.rb
0.98     git checkout 0476235 /usr/local/Library/Formula/mecab.rb
```

このバージョン0.98を利用するには`/usr/local`に移動して、指定のバージョンをチェックアウトします。

```
git checkout 0476235 /usr/local/Library/Formula/mecab.rb
```

改めて`brew install mecab`してインストールしてみましょう。

```
==> Downloading http://downloads.sourceforge.net/project/mecab/mecab/0.98/mecab-0.98.tar.gz

curl: (22) The requested URL returned error: 404
Error: Download failed: http://downloads.sourceforge.net/project/mecab/mecab/0.98/mecab-0.98.tar.gz
```

だめだ、リンク死んでる・・・  
回避するために`brew edit mecab`してbrewのformulaファイルを書き換えます。

```ruby
require 'formula'

class Mecab < Formula
  # url 'http://downloads.sourceforge.net/project/mecab/mecab/0.98/mecab-0.98.tar.gz'
  url 'https://mecab.googlecode.com/files/mecab-0.98.tar.gz'
  homepage 'http://mecab.sourceforge.net/'
  # md5 'b3d8d79e35acf0ca178e8d885309f5fd'
  sha1 '8977d7760638ec65132e1f9bfc66655ac761f964'

  def install
    system "./configure", "--disable-debug", "--disable-dependency-tracking", "--prefix=#{prefix}"
    system "make install"
  end
end
```

いったん`brew uninstall mecab mecab-ipadic`して、
改めて`brew install mecab mecab-ipadic`すると無事mecab 0.98が使えるようになり、
`bundle install`でmecab-rubyもビルド出来ました。

### rubyからmecabを使うテスト

簡単なサンプルコードを動かしてみます。

```ruby
require "mecab"

node = MeCab::Tagger.new.parseToNode("本日は晴天なり")
while node
  puts "#{node.surface}\t#{node.feature}"
  node = node.next
end
```
実行結果

```shell
　　　BOS/EOS,*,*,*,*,*,*,*,*
本日　名詞,副詞可能,*,*,*,*,本日,ホンジツ,ホンジツ
は　　助詞,係助詞,*,*,*,*,は,ハ,ワ
晴天　名詞,一般,*,*,*,*,晴天,セイテン,セイテン
なり　助動詞,*,*,*,文語・ナリ,基本形,なり,ナリ,ナリ
　　　BOS/EOS,*,*,*,*,*,*,*,*
```

動作しました。  
バージョンの一致には気をつける必要がありますが、
bundle管理でgemからインストールできるようになっただけでも便利になりました。
直前のコミットメッセージをそのままでエディタ開かずに git commit --ammend する

直前のコミットをやり直す `git commit --amend` は便利なんだけど、同じコミットメッセージでいい時でもいちいちエディタ立ち上がるので、:shit: だなって思うとき度々ありました

同じコミットメッセージでよくて、エディタ立ち上げるの :shit: なときは

```
$ commit --amend -C HEAD
```

で直前のコミットメッセージでamendしてくれるので、 :innocent:

さらに、`reamend` として エイリアス登録すればマジ :innocent::innocent::innocent::innocent:

```~/.gitconfig
[alias]
  reamend = commit --amend -C HEAD
```
PromotionらしくUIImagePickerControllerを使う方法

PromotionにはModalなViewControllerの呼び出しと、それが閉じた時に開いた側のViewControllerに値を渡す作法として``on_return``メソッドが用意されている。

https://github.com/clearsightstudio/ProMotion/wiki/API-Reference:-ProMotion::Screen

その作法を、既存のUIViewControllerのサブクラスでも使う方法の説明。
といっても、UIImagePickerControllerでしかまだ試していない。

```ruby:image_picker_screen.rb
class ImagePickerScreen < UIImagePickerController
  include ProMotion::ScreenModule

  def init
    if super
      self.delegate = self
    end
    self
  end

  def imagePickerController(picker, didFinishPickingMediaWithInfo:info)
    close value: :ok, picker: picker, info: info
  end

  def imagePickerControllerDidCancel(picker)
    close value: :cancel, picker: picker
  end

end
```

中身はdelegateで終了時に呼ばれるメソッドの中で、ProMotionのcloseをよんで、必要なパラメータを渡しているだけ。
今回はUIImagePickerCotrollerなので、UIImagePickerControllerDelegateのメソッドを実装している。
delegateを自らに実装してもにょもにょするのは問題ないのだろうか... 問題を指摘して欲しくて、とりあえず書いた。
backbone.marionetteのview関連まとめ

個人的まとめ

# 各種view要素
## item view
例えば「ユーザー」の構成要素としてユーザー名やメールアドレスがあるとして、この２つを含む「ユーザー詳細」と呼べるような最小単位の画面要素。ユーザー名を一つのitemviewにするのは多分やり過ぎ。

itemviewには一塊のhtmlの部品が対応していて、itemviewではその部品をタグ（tagNameで指定される）でラップして返してくれる。

## collection view
item viewを繰り返すためのview。collection viewは自分自身のhtml部品を持たないためtrに対応したitem viewを繰り返すのには向かない。この目的のためにはcomposit viewを使う。

[参考](https://github.com/marionettejs/backbone.marionette/wiki/Use-cases-for-the-different-views)

## composit view
item viewを何かでラップし、繰り返しなどをするためのview。テーブルやツリーなどはこちらを使う。

## region
画面上の領域のための画面要素。それ自体は表示するものを持たず、内部にitem view/collection view/composit view/layoutを持つ。
ヘッダー、フッター、サイドバー、メインコンテンツなどに使われる。

## layout
複数のregionを持つもの。

# 上記内容を考慮すると・・・
```

body　<- htmlファイル
  layout  <- template
    region
      view <- template
    region
      layout <- template
        ...
```
こんな感じに作られる。これらのview要素をちゃんと作れば再利用可能なviewができる・・・はず。
PHP curlでjsonとってくるヤツ

file_get_contents（）でもいいんだろうけど。。。
エラーとか細かく取れそうなので。

function getJson($url) {

      if (empty($url)) {
        $error = "Internal error";
        throw new Exception($error);
      }
    
      try{
        // セッションを初期化
        $ch = curl_init();
    
        curl_setopt($ch, CURLOPT_URL, $url);
        curl_setopt ($ch, CURLOPT_RETURNTRANSFER, TRUE);
        curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
    
        // 転送を実行
        $json = curl_exec($ch);
    
        // エラー番号を取得
        $curlErrno = curl_errno($ch);
        if($curlErrno){
          $curlError = curl_error($ch);
          throw new Exception($curlError);
        }
    
        // セッションを終了
        curl_close($ch);
    
      } catch (Exception $e) {
        echo "Exception-".$e->getMessage();
      }
    
      return $json;
  }
backbone.marionetteでの第一歩

個人的なまとめ

# 公式サイト
[marionettejs公式](http://marionettejs.com/)
[yeoman公式](http://yeoman.io/)
[generator-marionette github](https://github.com/mrichard/generator-marionette)

# xxとは
## marionetteとは
Backbone.jsをラップしたライブラリ。

## yeomanとは
webフロントエンド周りのビルドツール？rakeとかantとかmavenとかに似てる。内部ではbowerやgruntと連携していい感じにしてくれる。

## generator-marionetteとは
yeomanのmarionetteのジェネレーター。marionetteはもちろん、mongoDBやexpress（node.jsのフレームワーク）の環境も作ってくれる。
backbone.js and expressの組み合わせ環境を簡単に作ってくれるので、これを使い始めた。

# 導入
yeomanを入れる。generator-marionetteを入れる。generator-marionetteの説明通りにインストールする。
はまりどころは特にない。

2013/9/4時点では対応しているtwitter bootstrapが2.3.2だが3系にしても動くんじゃないだろうか・・・。

# 癖
yeomanのジェネレータが特定のディレクトリ構成を強制してしまうのでとりあえずファイル移動している。

```
yo marionette:itemview xxxx
```

これはapp/views/item/配下に作られる。

```
yo marionette:itemview user/xxx
```

とやってもapp/views/item/user/配下に作られる。app/views/user/配下に作ってくれると嬉しかった。
githubにあるソースをgemでインストールする方法

Gemfileに下記の用に入力して、```bundle install```を実行する。

```rb
gem 'devise', github: 'plataformatec/devise', branch: 'rails4'
```

インストールされる場所は、普通にgemからインストールしたライブラリとは少し違い、
指定したパスのbundler内にcloneされている。

例)
```./vendor/bundler/ruby/2.0.0/bundler/gems/```
CakePHPで多言語対応ファイルの更新が反映されない時の対処法


app/tmp/cache/persistentにあるファイルを削除すると多言語ファイルの変更が反映されます。

リリース時とかに要注意かな。

あと、多言語対応でpoeditとかでpoファイルを編集してmoファイルができてるときは、poよりmoが優先する。

優先順位的には、キャッシュ→moファイル→poファイル という順みたい。

試しにmoファイル削除したらpoファイルだけでもちゃんと動作してくれたので、開発中はmoファイル削除して作業した方が楽かもね。
日付を指定してCSVを取得する方法。

```html:
<script>
       $(function(){
        $('#table').csv2table('.../files/20130904.csv');
     });
</script>
```

上記script内の20130904に
下記のPHPの **$ｃｓｖ** を代入して毎日の日付を取得してcsvファイルを読み込んでcsv2tableで表示させたいのですがうまくいきません。
どうすればscript内にPHPをかけるのでしょうか？

```html:
<!doctype html>
<html lang="ja">
<head>
<?php
$sD = date('Ymd');
@mkdir($sD[0]);
$csv = (".../files/$sD.csv");
</head>
</html>
```

宜しくお願い致します。
[セキュリティ] ファイルにDBのパスワード等を書かない方法


データベースのユーザ、パスワードをファイルに書いている場合ありませんか?

こんな問題ありますよね?

- 誤ってコミットしてパスワードがバレバレかつ履歴に残ってしまった!
- 共有サーバでsymlink攻撃されて、他のユーザから見られて漏洩、攻撃された!
- 一部の人にしか、ユーザ名、パスワードなど重要な情報を教えたくない

対策を調べてまとめました。
良い方法ありましたら、教えて下さい!

## 別ファイルに保存して、読み込む

```php
<?php
$db_password = system('cat /somewhere/db_passwd_file');
```
注意) セーフモード が有効な場合、 safe_mode_exec_dirの中にある実行プログラムのみ実行可能です。

上記パスワードが書かれたファイル読まれたら終わりじゃん! というのはあります。
Wordpress の wp-config.php のように自動でファイルの場所を決め打ちで狙われない程度には役に立つかも?

## 環境変数に書く

実行ユーザのシェルの環境変数にパスワードを書いて、プログラム内で環境変数を読み込むという方法です。

### Apacheの環境変数に書く

Apacheの環境変数の場合, 
(apache.conf|httpd.conf) or .htaccess に以下を書く

```
SetEnv DB_PASSWORD pasuwa-do
```

.htaccess は特に公開ディレクトリでは危険すぎるので、現実的ではないと思います。

### プログラム側でApache環境変数を読む: PHPの場合

```php
$db_password = apache_getenv('DB_PASSWORD');
```

.htaccessは現実的でない気がするので、apacheの環境変数を設定できる権限がないとできません。
共有サーバでできるところは、おそらくないでしょう。

## シェル変数に書く

以下、全くの推測です。試してもいません。

どのようにシェル変数に書くかは、Webサーバの実行ユーザやsuEXECの設定による?
ユーザが、 apache なら apache ユーザのシェルに書く? 

```php
$db_password = getenv('PASSWORD');
$db_password2 = @$_ENV['PASSWORD'];
```

共有サーバで、自分のユーザで実行している場合は、自分のシェル変数を設定すると、もしかして使える?

以下のページによると、さくらの共有サーバでは、suEXECに阻まれるので、iniファイルに設定を書いて、ファイルを読んでパースして、$_SERVERにマージして取り出すようです。

<a href="http://qiita.com/cognitom/items/e74cfee1af8ef16278a5">PHP - SAKURAの共有サーバで環境変数を使う - Qiita [キータ]</a>

## その他

以下、勝手な想像です。
本当にできるかわかりません。

- 起動時にパスワードを入力させて、メモリ等に保存しておく。
- deamon や KVS に(暗号、復号して)保存してプログラム側から読む

より良い、セキュアな方法ありましたら、教えて下さい!


## 参考URL

<a href="http://security.stackexchange.com/questions/20461/how-can-i-avoid-putting-the-database-password-in-a-perl-script">How can I avoid putting the database password in a perl script? - IT Security Stack Exchange</a>
BibTeXインストールのための備忘録

私はUbuntu 12.04を使っているのですが.bibファイルを用意して.texファイルにプリアセンブルなどを書くだけでは巧くいかなかったので、BibTeXのインストール手順を記します。

##0. LaTeX環境のインストール
参考にさせて頂いたページ
![Qiita](http://qiita.com/favicon.png "Qiita") [Qiita / Ubuntu 12.04でLaTeX環境を構築する](http://qiita.com/muniere/items/a468d4673d7bb7105dc7)

##1. 必要になったモノ
日本語で引用するので`jbibtex`コマンドが必要

>$ sudo apt-get install jbibtex-bin

##2. 環境変数の設定
私の場合は

>$ jbibtex report
>This is JBibTeX, Version 0.99c-j0.33 (Web2C 7.5.4)
>The top-level auxiliary file: report.aux
>I couldn't open style file jplain.bst
>---line 2 of file report.aux
> : \bibstyle{jplain
> :                 }
>I'm skipping whatever remains of this command
>I found no style file---while reading file report.aux
>(There were 2 error messages)

というように`.bst`ファイルが見つけてもらえないようだったので

```bash:.bashrc
export BSTINPUTS=$BSTINPUTS:/usr/share/texmf/jbibtex/bst
```

##3. お作法(.bib)
ここでは書誌情報ファイルのフォーマットについて詳しく書きません。
Google Scholar,ACM,CiteSeerなどのページでBibTeXを表示してくれますので、それをコピペ

```:ref.bib
@book{knuth1986texbook,
  title={The texbook},
  author={Knuth, Donald Ervin and Bibby, Duane},
  volume={1993},
  year={1986},
  publisher={Addison-Wesley Reading, MA, USA}
}
```

##4. お作法(.texファイル)
`\bibliographystyle{jplain}`とするとアルファベット順に、`\bibliographystyle{junsrt}`とすると引用した順番に参考文献をソートしてくれる。

```tex:report.tex
\documentclass[a4j,12pt]{jarticle}
\bibliographystyle{junsrt} %プリアセンブル的なナニカ
\begin{document}
hogehoge\cite{knuth1986texbook} %.bibファイルの文献参照名
\bibliography{ref.bib} %.bibファイル自体の名前
\end{document}
```

##5. コンパイル手順

>$ platex report

>$ jbibtex repor

>$ platex report

>$ platex report

>$ dvipdfmx report

##6. 現在...

`jbibtex` ではなく `pbibtex` で良いみたい。
No SkeltonでDocPadのプロジェクトを作る

[BEGINNER GUIDE](http://docpad.org/docs/begin)の内容を途中まで簡単になぞってみる。わかりやすく説明してくれてるので詳しく知りたいはそちらをご覧ください。

## DocPadのプロジェクトを作る

terminal.app を立ち上げ、適当なフォルダ内で下記コマンドを入力する。

```
$ docpad run
```

するとterminal.appの画面上でskeltonを選択できるようになるので、「No Skelton」の番号を入力する。

自動的にプロジェクトのファイルのダウンロードが始まるので、フォルダ内は下記のような構成になる。

```
|-- docpad.coffee
|-- node_modules
|   |-- node_modules
|   |-- docpad
|
|-- package.json
|-- README.md
|
|-- src
|   |-- documents
|   |-- files
|   |-- layouts
```

## ページを作る

srcフォルダ内にある ` documents`  ` files`  ` layouts`  フォルダの中身は空の状態になっている。まずは ` documents`  フォルダ内に下記のような内容のindex.htmlを作る

```html:index.html
<html>
<head>
    <title>Welcome! | My Website</title>
</head>
<body>
    <h1>Welcome!</h1>
    <p>Welcome to My Website!</p>
</body>
</html>
```

するとプロジェクトフォルダの直下に ` out`  フォルダが出来上がり、その中にもindex.htmlが出来上がっている。[http://localhost:9778/](http://localhost:9778/)とブラウザで入力すると、この ` out` フォルダ内のファイルが表示されるようになる。

## layouts を作る

次に、ページの共通部分などの外枠部分を layouts としてまとめる方法について。  
  
` layouts`  フォルダ内に下記のような内容のdefault.html.ecoを作る。

```html:default.html.eco
<html>
<head>
    <title><%= @document.title %> | My Website</title>
</head>
<body>
    <h1><%= @document.title %></h1>
    <%- @content %>
</body>
</html>
```

続いて、` documents`  内のindex.htmlを下記のように編集する。

```html:index.html
---
title: "Welcome!"
layout: "default"
isPage: true
---

<p>Welcome to My Website!</p>
```

でもこのままではHTMLのWebページとしてちゃんと表示されないので、[eco](https://github.com/docpad/docpad-plugin-eco)というプラグインをインストールする。

```
$ docpad install eco
```

そうすることで ` layouts`  内のファイルと ` documents`  内のファイルを組み合わせて表示させることができる。[http://localhost:9778/](ttp://localhost:9778/) を見てみると、ちゃんとWebページとして表示されていることが確認できると思う。試しにindex.htmlのp要素の中身を編集してブラウザをリロードすると編集内容が反映される。

こうすることでページ内のコンテンツを index.htmlの例のように簡潔に書くことができるし、共通部分とかは ` layouts`  に持たせておくことで、メンテナンスがしやすくなる。

DocPadでは、こういう感じでページを作っていくのがひとつのやり方になる。他にも便利なプラグインがたくさんあるので必要に応じてインストールすることで、効率的に制作をすすめることができる。

という感じ。
またそのうち[BEGINNER GUIDE](http://docpad.org/docs/begin)の続き書く。
Esc と ~ を入れ替えてノート PC 本体のキーボードとタッチパッドはオフにする (HHKB Pro2 用設定)

## Esc と ~ を入れ替える

```.xmodmap
keycode   9 = grave asciitilde grave asciitilde
keycode  49 = Escape NoSymbol Escape
```

昔からこういうの見た時に「どうやって keycode の値だの grave asciitilde だの調べるねん？」って思ってたんですが，

```bash
xmodmap -pke
```

で一覧が出てくるんですね…　他にも

```bash
xmodmap -pm
```

で Ctrl や Alt みたいな特別なキーの名前が分かるとか．

あと `xev` というコマンドで keycode 調べることも出来ますね．

ちなみに `.xmodmap` ファイル内でのコメントは `!` で始まる行らしいですよ．`#` とか `;` じゃないです．

## ノート PC のキーボードとタッチパッドをオフにする

HHKB Pro2 をノート PC に乗っけて使うとき，ノート自体に付いてるキーボードとタッチパッドを無効化しておかないと誤動作がよく起こるじゃないですか．で，本日それらをオフにする方法も知りました．

こういうの，知ってる人には当たり前なんでしょうけど知らないと知らないままで居てしまうんですよね．で知らないままでもそう大して困らないというのも困ったもんです．そもそもノートに外付けキーボードを置いて使うとかしなければいいだけですしね．

```bash
xinput disable '<device name>'
xinput enable '<device name>'
```

これで無効，有効の切り替え (オフとオンの切り替え) が出来ます． `'<device name>'` とさらっと書きましたがこいつを調べるには，

```bash
xinput --list
```

とすれば良いです．一覧が出てきます．

```text
(前略)
    ↳ Topre Corporation HHKB Professional       id=10   [slave  keyboard (3)]
(後略)
```

例えばこう出力された場合は，`'<device name>'` は `'Topre Corporation HHKB Professional'` になります．ちなみに `10` と指定しても大丈夫です．

ところでなんで Topre なんでしょうか…？PFU では…　余談でした．

なお，今回に限った話ではなくキーボードをオフにするときは気をつけてやりましょう．オフにしたままになるとオンにする手立てが無くなると思います (多分)．なのでテストをする際には，

```bash
sleep 0.1; xinput disable '<device name>'; sleep 5; xinput enable '<device name>'
```

とコマンドを叩いて，5 秒間入力を受け付けなくなることを確認しましょう．5 秒後には必ず復帰します．

最初の `sleep 0.1` は，Enter の入力を受け付けてもらうためだとか何だとかだそうで．

## References

* http://cs.gmu.edu/~sean/stuff/n800/keyboard/old.html

なんか the old way とか書かれてるのでもしかしたら今は何か違う何かがあるのかも？最近のことは分からん…

* http://askubuntu.com/questions/23491/how-to-change-capslock-key-to-produce-a
* http://d.hatena.ne.jp/kenbeese/20120214/title

* http://blog.yjl.im/2010/12/using-xinput-to-disable-keyboard-mouse.html
* http://ubuntuforums.org/showthread.php?t=1663298

`xinput enable` と `xinput disable` は `xinput` コマンド自身に教えてもらいました．何かミスしたときに使えるサブコマンド一覧が出てきたのです．

* http://qiita.com/ka_/items/44c6f3c044846eed4c2e
CentOS5でxdebugを使う

今回試したのはCentOS 5.2 64bit版。

xdebugソースのダウンロード
======================

1. http://xdebug.org/files/ から http://xdebug.org/files/xdebug-2.2.7.tgz をダウンロード

* xdebug 2.5 : php5.5以降
* xdebug 2.4 : php5.4以降
* xdebug 2.3.3 : php5.2対応の最終版？しかしmakeが成功しなかった。
* xdebug 2.2.7 : makeが成功した。

1. 解凍

```bash:configureファイルを作成
phpize
./configure \
 --prefix="/usr/local/php/lib/php/extensions/no-debug-non-zts-20060613/"
make
ls -lh modules/*.so
```
* ./modules/xdebug.so ができる。

設定
======================
1. xdebug.so を好きな場所に配置。（例: /opt/xdebug.so）
1. /etc/php.d/xdebug.ini に以下記載

```bash:/etc/php.d/xdebug.ini
zend_extension="/opt/xdebug.so"
xdebug.remote_enable= on
xdebug.remote_handler=dbgp
;xdebug.remote_host=localhost
xdebug.remote_host=192.168.100.51
xdebug.remote_port=9000
xdebug.remote_autostart = on
xdebug.remote_mode=req
xdebug.dump.GET = *
xdebug.dump.POST = *
```

* remote_host で指定するIPは、デバッグ情報を利用したい端末のIPを指定。

反映
==========

```bash:
$ sudo servce httpd restart
```

確認
==========
1. phpinfoでxdebugの項目があることを確認。
1. IDE側でブレイクポイント設置し待受け開始
1. WEBページにアクセスするとブレイクポイントで止まる。

----

# netbeansを動かしてみる

* [jre](http://java.com/ja/download/linux_manual.jsp)をインストールしておく。

```bash:
sudo yum install -y \
  xrdp xterm fonts-japanese
```

```bash:
sudo sh netbeans-8.0.2-php-linux.sh
/usr/local/netbeans-8.0.2/bin/netbeans
```

* デバッグ > ファイルをデバッグ
  * F8: ステップアウト
  * F7: ステップイン
jsdo.itのfavをRSS化する方法


[Qiitaのストック一覧をRSS化する方法](http://qiita.com/typista/items/35ddedc4c8cdec989857)と同じく、今度は[jsdo.it](http://jsdo.it/)のfavをRSSで一覧化する方法です。

[RSS Creater](http://rssc.dokoda.jp/)にアクセスして、RSS化したいユーザのURLを入力し、下記のXPathを入力します。

```:XPath
//p[@class="ttl"]/a
```

たいした手順ではないですが、キャプチャやメリット、その他免責事項などなどは「[Qiitaのストック一覧をRSS化する方法](http://qiita.com/typista/items/35ddedc4c8cdec989857)」と同様なので割愛します。
【要望】ボタンクリックでコードをコピーしたい

たまにすぐ実行できるように書いてくれてあるコードがありますが、とりあえず動作が見たい
コード書いてる時間は惜しい
って時にコピペしますよね？

行数多いとコピーしにくいですよね。
かといってctrl+Aとかはいらないとこまで入って消す手間が・・・

なので

マークダウンされてる場所の右上をクリックするだけでクリップボードに対象のコードをコピーしてくれる機能があると便利じゃないかと思います。
Backbone.jsのModelとCollectionに同じイベント名をつけてはまったこと


Collectionに紐付けされたModel双方に同じイベント名をつけてModelのイベントにはひも付いたView単体のイベント、Collectionには関連View全てのイベントを発行するということをしたかったのですが上手くいきませんでした。

上手くいかないというかModel側からイベントを呼び出すとCollectionのイベントも呼び出されます

Backbone.js側を読み込んでいくとCollection側に
Modelを追加する際にmodelのイベントを全て読み取る_onModelEventというプロキシが設定されていました。



```js:Backbone.js
    _onModelEvent: function(event, model, collection, options) {
      if ((event === 'add' || event === 'remove') && collection !== this) return;
      if (event === 'destroy') this.remove(model, options);
      if (model && event === 'change:' + model.idAttribute) {
        delete this._byId[model.previous(model.idAttribute)];
        if (model.id != null) this._byId[model.id] = model;
      }
      this.trigger.apply(this, arguments);
    }
  });
```

この仕組みによってModelのイベントは一部を除いてCollectionでも発行されるみたいです。

一応動いているがイベント発行数が合わないと悩まされていた箇所がようやく解決した気がします・・・。（書き換えないといけない箇所がたくさんある・・・）

知っていれば部分的に上書きするなりCollection側をModelの挙動に合わせたイベントを設定すれば問題なく動きそうです。

詳細は[Backbone.jsのannotated source code](http://backbonejs.org/docs/backbone.html#section-114)を参照。
KwikでFlashパスアニメーションをインポート

kwikのAnimationでPath(パス）に沿ったアニメーションの機能がありますが、ここではFlashで作成したパスアニメーションの情報をKwikにExternal(外部）コードとして、インポートしてみたいと思います。

元ネタは、こちら http://developer.coronalabs.com/code/animation-along-path-flash
FlashのCircular Path Animationはこちらを参照 http://www.cgshelf.com/circularpathanimation.php

1.まずkwikで画面を作ります。PSDファイルを保存して、Flashでインポートします。レイヤーを維持して、インポートします。
![kwk_fl01.jpeg](https://qiita-image-store.s3.amazonaws.com/0/28956/b352bbf1-a46d-747a-add2-e05d459a1fda.jpeg)

2.アニメーションさせたいレイヤーに対して、ガイドレイヤーを作成、モーショントゥイーンを作成します。ここでは、そのムービクリップにobjectとインスタンス名を付けました。

![kwk_fl02.jpeg](https://qiita-image-store.s3.amazonaws.com/0/28956/5dcc4fa0-0194-11e1-a3e1-8faba8997d33.jpeg)

3.フレーム１と最終フレームに、以下のアクションスクリプトを設定して、座標データを取得します。

```
//フレーム１
var tracking = true;
var xcoords = "";
var ycoords = "";
var rotations = "";
addEventListener(Event.ENTER_FRAME,myFunction);
function myFunction(event:Event) {
        if (tracking) {
                xcoords += (object.x + ",");
                ycoords += (object.y + ",");
			    rotations +=(object.rotation + ",");
        }
}
```

```
//最終フレーム
tracking = false
trace( "xcoords = { " + xcoords.slice( 0, -1 ) + " }");
trace( "ycoords = { " + ycoords.slice( 0, -1 ) + " }");
trace( "rotations = { " + rotations.slice( 0, -1 ) + " }");

stop();
```

4.再生（Test)を実行
出力されたOutputをコピペする

```
xcoords = { ##### }
ycoords = { ##### }
rotations = { #### }
```

5.フォトショップ Kwikに戻り、下記のExternal Codeを設定する。アニメーションさせるレイヤー名は、Shape_1です。

```
local xcoords = { ##### }
local ycoords = { ##### }
local rotations = { #### }

local coordCount = 1
local function moveObject()
        if coordCount <= #xcoords then
                Shape_1.x = xcoords[ coordCount ]
                Shape_1.y = ycoords[ coordCount ]
                Shape_1.rotation = rotations[coordCount]
                coordCount = coordCount + 1
        else
                Runtime:removeEventListener( "enterFrame", moveObject )
                coordCount = 1
        end
end
Runtime:addEventListener( "enterFrame", moveObject )
```
CakePHP2系でModelのmessageを多言語対応(localization)

CakePHPのModelでの多言語対応パターンをまとめてみました。

多言語対応についてはこちら
*マニュアル*
http://book.cakephp.org/2.0/en/core-libraries/internationalization-and-localization.html

まずは言語の切り替え方法

``` php

Configure::write('Config.language', 'ja'); # 日本語
Configure::write('Config.language', 'en'); # 英語

```

次に、言語ごとのメッセージを定義

``` app/Locale/jpn/LC_MESSAGES/default.po

msgid "validate_error_empty"
msgstr "必須項目です"

```

``` app/Locale/eng/LC_MESSAGES/default.po

msgid "validate_error_empty"
msgstr "Required field"

```



## ここからが本題。


validationのメッセージ出力方法は3パターンあります。

1,default.poに定義した内容をそのまま利用
2,別ファイル[validate.po]を作成して利用
3,別ファイル[validate.po]を作成するけどパターン1と同じ方法で多言語対応


### パターン1

一番シンプルなパターンです。

``` php

    public $validate = array(
        'test' => array(
            'notEmpty' => array(
                'rule' => array('notEmpty'),
                'message' => 'validate_error_empty' # [msgid]で設定した文字列
            )
        ),
    );


```

これだけでConfigureの設定に従って言語ごとのエラーメッセージを取得可能です。



### パターン2

defaulut.poに全てをまとめると肥大化しすぎてしまうため、
同じ階層に別ファイル[validate.po]を作成し、そちらで定義する。


```Model

    public $validate = array();

    public function beforeValidate($options=array()) {
        $this->validate = array(
            'test' => array(
                'notEmpty' => array(
                    'rule' => array('notEmpty'),
                    'message' => __d('validate', 'validate_error_empty')
                )
            ),
        );
        return parent::beforeValidate($options);
    }

```

別ファイルの場合、__d()関数でファイル名を指定する関係でbeforeValidate()で定義します。



### パターン3

パターン2の用にするのは嫌だ!!という場合、AppModelのbeforeValidate()で強制的に上書きします。
validateの定義はパターン1と同じです。

``` app/Model/AppModel.php

    public function beforeValidate($options=array()) {
        foreach ($this->validate as &$validate) {
            foreach ($validate as &$column) {
                if (!empty($column['message'])) {
                    $column['message'] = __d('validate', $column['message']);
                }
            }
        }
        return parent::beforeValidate($options);
    }

```

### 最後に

多言語対応の方法はControllerでもViewでも同じです。
もしサイト全体を多言語対応する可能性がある場合は、default.poだけでは肥大化しすぎるため、
適切にファイルを分けて全てのメッセージをapp/Locale以下に定義するようにしておくと幸せになれると思います。
ActiveRecordを使って DB Drop / Create


##drop -> create -> 接続まで

```ruby
require "active_record"

config = {
  :adapter   => "mysql2",
  :encoding  => "utf8",
  :reconnect => true,
  :pool      => 5,
  :database  => "__test__"
}

ActiveRecord::Base.establish_connection(config.merge(:database => "mysql"))
ActiveRecord::Base.connection.drop_database config[:database] rescue nil
ActiveRecord::Base.connection.create_database config[:database]
ActiveRecord::Base.establish_connection(config)
```
圧縮、解凍速度が早いlzop圧縮を使おう

```bash:インストール
$ sudo apt-get install lzop
```

圧縮
--------

```bash:
$ tar --lzop -cf ~/sample.tar.lzo sample
```

解凍
--------

```bash:解凍
$ tar --lzop -xf ~/sample.tar.lzo
```

CentOS5の場合
==============

* [lzo-2.06-1.el5.rf.x86_64.rpm](http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/lzo-2.06-1.el5.rf.x86_64.rpm)
* [lzop-1.03-1.el5.rf.x86_64.rpm](http://apt.sw.be/redhat/el5/en/x86_64/rpmforge/RPMS/lzop-1.03-1.el5.rf.x86_64.rpm)

```bash:
$ tar --use-compress-program=lzop -cf ~/sample.tar.lzo sample
$ tar --use-compress-program=lzop -tvf ~/sample.tar.lzo
$ tar --use-compress-program=lzop -xf ~/sample.tar.lzo
```
NetCommons2で、uploadsテーブルにデータを流し込んだらuploads_seq_id.idも更新


タイトルで言い切ったが、これしてないと、画像がUPできなくなったり、UPした画像と違う画像がプレビューで表示されるとか面白い現象に遭遇することになる。

なんでわざわざuploads_seq_idなんてテーブルがあるかわからないが、uploads_seq_id.idとuploads.upload_idは連動してるっぽい。

改めて確認してみるとuploads.upload_idはAUTOINCREMENTじゃない。

気になってよくテーブル名みると *_seq_idテーブルが大量にある。
PostgreSQL風にしたかったのかな？ちょっとよくわからない。

他にも、uploadsはMyISAMでuploads_seq_idはInnoDBというのも意図がよくわからない。

両方ともInnoDBならトランザクション切れるからコーディング楽かなぁとか思うんだが一方だけというのはどういう意図なんだろう…


というわけでコードまで追っかけたわけじゃないので、意図は不明だが、気をつけないとねぇってことでメモ
tar.gz や tar.bz2 の展開は tar xf でOKです。

Linuxを触り始めた頃に `tar xvzf compress.tar.gz` などと出てきて、
オプションが4つもあるとそれぞれの意味を調べる気も喪失し、そのままコピペしたのを思い出したので書いておきます。

## `-` はつけてもOK

まず戸惑うのが tar のオプションはオプションのくせに `-` がついていない、変！
これは別につけてもいいらしいです。 `-xvzf` みたいに。

man にも書いてある。
> A function letter need not be prefixed with ``-'', and may be combined with other single-letter options.

つまり書かないといけないぐらいちょっと風変わりな動作なわけですね。
古くからあるコマンドなんで「 `-` を打つのさえめんどくさい、ファッキュー！」な人がこんな事をしたんだと思います。多分。

# tar xf だけで foo.tar.gz や foo.tar.bz2 は解凍できる

んでよく使うオプション xvzf 、ちなみに順番はどうでもいいんですが、それぞれの意味は
x : eXtract(展開)
v : verbose(言葉の多い、展開内容を表示)
z : gzip対応
f : file から展開(デフォルトはテープデバイスになってるので。)

正直「未だにテープデバイスがデフォルトのコマンドをファイルの圧縮展開に使い続けるのはどうなのよ」と思うのですがLinux界隈の古参の人達にそんなこと言うと10倍ぐらいの量のありがたいお話を聞かされてしまいそうなので言いません。

話がそれました。

上記のオプションの中で必須なのは解凍の `x` とfile の `f` だけです。

gzip が `z` で bzip2 を解凍する時には `j` をつけたりもするのですが、両方共なくても自動的に判断してくれるので圧縮形式の指定は展開時には必要ありません。

`v` はどこにファイルが展開されたかをズラ～と表示してくれますが、個人的には上のログが見づらくなって困るぐらいの効果しかありません。

ですので圧縮ファイルを展開する時は

`$ tar xf foo.tar.gz`

を使うことをオススメします。この方が楽ですから。

以上、昔の自分に教えてあげたいちょっとした知識でした。
Vagrant 内のコードを、ローカルの SublimeText で編集したい


下記設定で、Mac と Vagrant 環境でファイルが共有される

# synced_folder を使う（複数指定可）
```
  config.vm.synced_folder "[host_file_path1]", "[gust_file_path1(vagrant)]", nfs: true
  config.vm.synced_folder "[host_file_path2]", "[gust_file_path2(vagrant)]", nfs: true
  config.vm.synced_folder "[host_file_path3]", "[gust_file_path3(vagrant)]", nfs: true
```


# 以前の方法(Sublime SFTPを使ってた)
## Vagrant  側の準備
- `vagrant ssh`
- git clone hoge しておく ★A

## ローカルの設定 
- Sublime SFTP パッケージをインストール
  - http://wbond.net/sublime_packages/sftp
  - Trial で無料で使えるけど、有料(16$)。購入するとメールに書いてある設定をするとポップアップがでなくなるみたいです。

- SublimeText でプロジェクトフォルダを右クリック、`SFTP/FTP` -> `Map to Remote` すると `sftp-config.json` が生成される。

### sftp-config.json の編集
-  "upload_on_save": true, // 保存時にファイルを送信してくれる
- 下記項目を vagrant ssh-config などを参照して設定する
  - "host": "127.0.0.1",
  - "user": "vagrant",
  - "port": "2222",
  - "remote_path": "/home/vagrant/hoge/",  // ★A で指定したパス
  - "ssh_key_file": "~/.vagrant.d/insecure_private_key",
設定ファイルを分割してみるテスト2


grunt.task.loadTasks の使い方間違ってる気がしてならない…

```Gruntfile.js
/*global module:false*/
module.exports = function(grunt)
{
  'use strict';
  grunt.task.loadTasks('tasks');
};
```

tasks ディレクトリを作り、設定を追加

```tasks/jshint.js
module.exports = function(grunt)
{
  'use strict';

  grunt.config('jshint', {
    options: {
      curly: true,
      eqeqeq: true,
      immed: true,
      latedef: true,
      newcap: true,
      noarg: true,
      sub: true,
      undef: true,
      unused: true,
      boss: true,
      eqnull: true,
      browser: true,
      globals: {
        jQuery: true
      }
    },
    gruntfile: {
      src: 'Gruntfile.js'
    },
    lib_test: {
      src: ['lib/**/*.js', 'test/**/*.js']
    }
  });

  grunt.loadNpmTasks('grunt-contrib-jshint');
};
```

後はターミナルで下記を実行

```example.sh
grunt jshint
```
shell: lsの結果をforで処理する

lsの結果をforで処理する方法。
grepで特定の拡張子に限定してから処理することも可能。

例）指定のディレクトリ内のすべてのtxtファイルの行数を表示する

```bash
for txt in $( ls . | grep .txt$ ); do   
    echo ${txt}  `cat $txt | wc -l`
done
```
次の○曜日の日付を取りたい〜


next_weekで出来なかったので、以下みたいにやった。(@tkawa氏に教えてもらった)

```ruby
Time.current.beginning_of_week(:friday).since(1.week)
```

## 2013年9月のカレンダー

|日|月|火|水|木|金|土|
|:------------:|:------------:|:------------:|:------------:|:------------:|:------------:|:------------:|
|1|2|3|4|5|6|7|
|8|9|10|11|12|13|14|
|15|16|17|18|19|20|21|
|22|23|24|25|26|27|28|
|29|30||||||

## 月曜日からみた次の金曜日

```ruby
Time.parse('2013-09-02').beginning_of_week(:friday).since(1.week)
# => 2013-09-06 00:00:00 +0900
```

## 金曜日からみた次の金曜日

```ruby
Time.parse('2013-09-06').beginning_of_week(:friday).since(1.week)
# => 2013-09-13 00:00:00 +0900
```

できた〜
ARCオン設定でローカル変数のUIDocumentInteractionControllerから外部アプリケーションを起動しようとするとクラッシュする

詳しい内部動作はわからないけど、以下を呼び出してメニューアイコンをタップすると落ちる。

```objc:
// UIBarButtonItemのアクション
- (IBAction)onButton:(id)sender
{
  NSURL* url = [[NSBundle mainBundle] URLForResource:@"DocumentInteraction_TopicsForIOS.pdf" withExtension:nil];
  UIDocumentInteractionController* interactionController = [UIDocumentInteractionController interactionControllerWithURL:url];
  [interactionController presentOptionsMenuFromBarButtonItem:(UIBarButtonItem *)sender animated:YES];
}
```

インスタンス変数にすると回避できる。

```objc:
@property(nonatomic) UIDocumentInteractionController* interactionController;

// ...

// UIBarButtonItemのアクション
- (IBAction)onButton:(id)sender
{
  NSURL* url = [[NSBundle mainBundle] URLForResource:@"DocumentInteraction_TopicsForIOS.pdf" withExtension:nil];
  self.interactionController = [UIDocumentInteractionController interactionControllerWithURL:url];
  [self.interactionController presentOptionsMenuFromBarButtonItem:(UIBarButtonItem *)sender animated:YES];
}
```

* [ios - UIDocumentInteractionController opening pdf in iBooks crashes - Stack Overflow](http://stackoverflow.com/questions/15664058/uidocumentinteractioncontroller-opening-pdf-in-ibooks-crashes "ios - UIDocumentInteractionController opening pdf in iBooks crashes - Stack Overflow")
設定ファイルを分割してみるテスト1


備忘録的な

```Gruntfile.js
/*global module:false, require:false*/
module.exports = function(grunt)
{
  'use strict';

  var config = {};

  grunt.file.expand('.grunt/**/*.js').forEach(function(file) {
    require(file)(grunt, config);
  });

  grunt.initConfig(config);
};
```

Gruntfile.js と同階層に .grunt ディレクトリ（名前は適当）に作り、適当に以下のファイルを作成。
.grunt 以下を git などで管理すると便利かも？

```.grunt/jshint.js
module.exports = function(grunt, config)
{
  'use strict';

  config['jshint'] = {
    options: {
      curly: true,
      eqeqeq: true,
      immed: true,
      latedef: true,
      newcap: true,
      noarg: true,
      sub: true,
      undef: true,
      unused: true,
      boss: true,
      eqnull: true,
      browser: true,
      globals: {
        jQuery: true
      }
    },
    gruntfile: {
      src: 'Gruntfile.js'
    },
    lib_test: {
      src: ['lib/**/*.js', 'test/**/*.js']
    }
  };

  grunt.loadNpmTasks('grunt-contrib-jshint');
};
```

後はターミナルから以下を実行

```example.sh
grunt jshint
```

ちなみに、個別で js を読み込ませたいなら配列での指定もできる

```Gruntfile.js

'use strict';

/*global module:false, require:false*/
module.exports = function(grunt)
{
  'use strict';

  var config = {};

  // 個別
  grunt.file.expand([
    '.grunt/jshint.js',
    '.grunt/**/jshint.js', // ↑同じ
    // ...
  ]).forEach(function(file) {
    require(file)(grunt, config);
  });

  grunt.initConfig(config);
};
```
コマンドラインで現在実行中の処理を終了させずにバックグラウンドに移す方法

長時間かかる処理を動かした時や別のWindowが開くプログラムをターミナルから立ち上げたけど、後からバックグラウンドに切り替えたい時の対処方法。

1. `Ctrl+z`で処理を一時停止する
2. `bg`[background]コマンドで処理をバックグラウンドに移す
3. バックグラウンドで処理中のプロセスを確認する時は`jobs`を使う。

ちなみにffmpeg でエンコード中に一旦止めて再開したらちゃんと続きからエンコードしてくれましたが、バックグラウンドで処理中も処理内容をずっと画面に吐き出し続けてくれるのでまともにCUIで作業することはできませんでした。

もうちょっと出力の少ないプログラムを動かしてる時に使いましょう。

ちなみにこの `bg`とか`jobs` とか `fg` などはbash限定のコマンドらしくマニュアルが見たい場合は `man bg` とかではなく `man bash` して "bg" などで検索してください。

もしくは `help bg` してください。コメントで指摘いただきました。こちらの方が一般的な方法です。

## 参考

ITmedia エンタープライズ : Linux Tips「現在動作中の処理（ジョブ）をバックグラウンドに回したい」 
http://www.itmedia.co.jp/help/tips/linux/l0179.html
【要望】Kobitoでファイル連携したファイルのフルパスを表示してほしい

Kobitoは、GitHubに最もフレンドリーなMarkDownエディタだと思います。
なので、README.mdを編集するときに、Kobitoを使ってますが、
↓図のようにすべて「README.md」になっていて区別がつきにくいです。

![Screen Shot 2013-09-03 at 14.51.25.png](https://qiita-image-store.s3.amazonaws.com/0/889/ca6d3f38-c02d-5d6e-9a52-f232a6df68aa.png)

マウスオーバーすれば表示されるは知っているのですが、
ファイルのフルパスを直接表示してほしいです。
emacs にsolarized（color theme）を導入する

## emacs-color-theme-solarizedをclone


Solarized Colorscheme for Emacs
https://github.com/sellout/emacs-color-theme-solarized/tree/master

上記にemacs用のカラーテーマがあるので、themesフォルダの中で

```shell-session
$ git clone https://github.com/sellout/emacs-color-theme-solarized.git
```

する。そして

```shell-session
$ mkdir emacs.d/themes
```

とかでディレクトリを作って、.emacsに

```el
(add-to-list 'custom-theme-load-path "~/.emacs.d/themes/emacs-color-theme-solarized")
(load-theme 'solarized-dark t) ;; または　(load-theme 'solarized-light t)
```

と追加する。これでOK。