OmniAICreator/Qiita-1.07M huggingface dataset:
とりあえず php 上で MySQL が動くかチェック用スクリプト

接続できるか、文字化けしてないかなどをチェックするために

```php
<?
$host    = 'localhost';
$user    = 'hoge';
$pass    = 'fuga';
$db      = 'foo';
$table   = "bar";
$charset = "cp932";

d(mysql_select_db($db, d(mysql_connect($host, $user, $pass))));
d(mysql_query("set names $charset"));
$r = d(mysql_query("select * from $table limit 10"));
while ($row = mysql_fetch_assoc($r)) {
    foreach($row as $k => $v){
        echo "$k => $v".PHP_EOL;
    }   
    echo PHP_EOL;
}
function d($r){
    if(!$r) die(mysql_error());
    return $r; 
}
```
Markdown/HTMLの相互変換「Pandoc」


HTMLでかかれたものをQiitaにあげるのに、Markdown形式に変換したくて調べていたところ、Pandocというツールがいい感じだったので、Pandocのインストールから簡単な使い方をまとめておきます。

## インストール

私の場合、Ubuntuだとパッケージがあったので、apt-getでインストールします。

```
$ sudo apt-get install pandoc
```

## HTML->Markdown変換

コマンドラインで、

```
$ pandoc -s test.html -o out.txt
```

また、直接サイトのHTMLを変換することもできます。

```
$ pandoc -s -r html http://www.gnu.org/software/make/ -o example.txt
```

## おわりに

ちゃんと構造化されているようなHTMLだと期待通りの変換ができました。他にもLaTeXやmanなども相互変換できるようです。
TypedArrayに便利なメソッドをつける

TypedArrayを使っているときに、これあったら便利だよね的なメソッド(本当はこういうことはやらないほうがいいんだけど)。

```:javascript
(function(){

function TypedArrayMixin(){
    this.forEach = function(callback){
        for(var i = 0, n = this.length; i < n; ++i) callback(this[i], i);
    };
    
    this.map = function(callback, context){
        var ret = new this.constructor(this.length),
            i, n;
        for(i = 0, n = this.length; i < n; ++i) ret[i] = callback.call(context, this[i], i);
        return ret;
    };
    
    this.reduce = function(callback, initialValue){
        var current = this[0], i = 1, n;
        if(initialValue != null){
            current = initialValue;
            i = 0;
        }
        for(n = this.length; i < n; ++i) current = callback(current, this[i], i, this);
        return current;
    };
    
    this.copy = function(){
        return new this.constructor(this);
    };
    
    this.concat = function(){
        var length = this.length, offset = length, ret;
        Array.prototype.forEach.call(arguments, function(array){
            length += array.length;            
        });
        ret = new this.constructor(length);
        ret.set(this);
        Array.prototype.forEach.call(arguments, function(array){
            ret.set(array, offset);
            offset += array.length;
        });
        return ret;
    };
    
    this.toString = function(){
        var i, n, a = [];
        for(i = 0, n = this.length; i < n; ++i) a[i] = this[i];
        return a.toString();
    };
}

function setMixin(constructor, mixin){
    mixin.call(constructor.prototype);
}

var constructors = [
    Int8Array,
    Int16Array,
    Int32Array,
    Uint8Array,
    Uint16Array,
    Uint32Array,
    Float32Array
];
this.Float64Array || constructors.push(Float64Array);
this.Uint8ClampedArray || constructors.push(Uint8ClampedArray);

constructors.forEach(function(constructor){
    setMixin(constructor, TypedArrayMixin);
});

}).call(this);
```

`forEach`,`map`,`reduce`は速度的にあまり使えなさそうだけど、`copy`,`concat`は使いどころがあるかも。

たとえば`copy`だと

```:javascript
var bytes = new Uint8Array(8);
bytes.set([1,2,3,4]);
var bb = new BlobBuilder;

//元のbufferを参照しているので想定とは違う結果に…(エラーでないし)。
bb.append(bytes.subarray(0, 4).buffer);
//byteLengthが4の新しいbuffer
bb.append(bytes.subarray(0, 4).copy().buffer);
```

`concat`だと

```:javascript
//arr = [bytes1, bytes2, bytes3, ...] こんな感じのUint8Arrayの配列があったとする
var bb = BlobBuilder;

//これよりも
arr.forEach(function(bytes){
    bb.append(bytes.buffer);
});

//大体こっちの方が速い
bb.append(Uint8Array.prototype.concat.apply(new Uint8Array(0), arr).buffer);
```
Weinre使うならrack-weinre入れとけ


[weinre](http://people.apache.org/~pmuellr/weinre/)はスマホ向けJavaScriptリモートコンソールで、スマホ用のウェブアプリを作る時に凄く便利だ。だけどリモートコンソールを使いたいページに&lt;script&gt;タグを書かなきゃいけない。このとき、接続元から見たアプリのホスト名も意識しないといけない。しかも、必要がなくなったら消さないといけない。これは面倒。

そこで[rack-weinre](https://github.com/irohiroki/rack-weinre)ですよ。

rack-weinreはrack middlewareで、適切なホスト名の入った&lt;script&gt;タグを自動的に挿入してくれる。

例えば、下のようなconfig.ruを書いて、

```ruby:config.ru
require 'sinatra'
require 'rack/weinre'

class Foo < Sinatra::Base
  get '/' do
    <<-HTML
      <html>
        <head></head>
        <body>foo</body>
      </html>
    HTML
  end
end

use Rack::Weinre
run Foo
```

rackupしてhttp://localhost:9292/を開けばこうなる（空白は調節した）。

```html
<html>
  <head><script src="http://localhost:8080/target/target-script-min.js#anonymous"></script></head>
  <body>foo</body>
</html>
```

&lt;script&gt;タグをオン／オフするには、`:switch`オプションでスイッチとなるファイル名を指定する。例えば下のように書いて

```ruby
use Rack::Weinre, :switch => 'bordeaux'
```

「bordeaux」という空ファイルをconfig.ruと同じフォルダに作れば&lt;script&gt;タグが入るが、bordeauxを消せば&lt;script&gt;タグも入らなくなる。

また、8080はweinreサーバのデフォルトポートだが、これを変更して使っているようならrack-weinreにも`:port`オプションを渡せばいい。

```ruby
use Rack::Weinre, :port => 9090
```

Railsで使うなら、config/environments/development.rbに下のように書く。オプションは上に書いたのと同じ。

```ruby:config/environments/develpment.rb
  config.middleware.use 'Rack::Weinre'
```
Mac の Chrome で AutoPatchWork の 「読み込みを開始する位置」を 8000 くらいにしたい


1. Chrome 機能拡張のディレクトリに移動する

	```bash
cd ~/Library/Application\ Support/Google/Chrome/Default/Extensions/
```
2. フォルダ名がメチャクチャなので AutoPatchWork のディレクトリを探して移動する

	```bash
find ./ -name AutoPatchWork.js
cd [みつかったディレクトリ]
```

3. 中にある options.html の 2000 となっている箇所を 8000 にする
4. AutoPatchWork の設定画面を開いてすきにする
マルチバイト文字がそのままのjson_encode

print json_jap(array("jap"=>"あいうえお","intType"=>1234567890,"strInt"=>"1234567890"));
{"jap":"あいうえお","intType":1234567890,"strInt":"1234567890"}

```php:json_jap.php
<?php
function json_jap($obj){
	$str=json_encode($obj);
	$str=preg_replace_callback('{\\\\u([0-9a-f]{4})}',function($m){return mb_convert_encoding(hex2bin($m[1]),'UTF-8','UTF-16');},$str);
	$str=str_replace(['\/','&gt;','&lt;','&apos;','&amp;'],['/','>','<','\'','&'],$str);
	return $str;
}
?>
```
【Ruby で GUI】 wxRuby のインストール

Ruby で GUI をするなら、現時点では wxRuby がベストな選択肢の一つだと思う。
Ubuntu11.10、Ruby1.9.2 という環境なら以下のコマンドでインストールできる。

```sh
sudo apt-get install libwxbase2.8-{0,dev}
sudo apt-get install libwxgtk2.8-{0,dev}
sudo gem install wxruby-ruby19
```

以下のコマンドで窓が出てきたら成功。ディレクトリは環境によって異なるかも。

```sh
ruby -rubygems /usr/lib/ruby/gems/1.9.1/gems/wxruby-ruby19-2.0.1-x86-linux/samples/minimal/minimal.rb
```

ついでに、コードをより Ruby らしく書けるようになる wxSugar もインストールしておくといいかも。

```sh
sudo gem install wx_sugar
```
文字化けしないfgetcsv

setlocale(LC_ALL,'ja_JP');
してから、以下関数呼び出し。
http://yossy.iimp.jp/wp/?p=56

```
function fgetcsv_reg (&$handle, $length = null, $d = ',', $e = '"') {
  $d = preg_quote($d);
  $e = preg_quote($e);
  $_line = "";
  while ($eof != true) {
     $_line .= (empty($length) ? fgets($handle) : fgets($handle, $length));
     $itemcnt = preg_match_all('/'.$e.'/', $_line, $dummy);
     if ($itemcnt % 2 == 0) $eof = true;
 }
 $_csv_line = preg_replace('/(?:\\r\\n|[\\r\\n])?$/', $d, trim($_line));
 $_csv_pattern = '/('.$e.'[^'.$e.']*(?:'.$e.$e.'[^'.$e.']*)*'.$e.'|[^'.$d.']*)'.$d.'/';
 preg_match_all($_csv_pattern, $_csv_line, $_csv_matches);
 $_csv_data = $_csv_matches[1];
 for($_csv_i=0; $_csv_i<count($_csv_data); $_csv_i++) {
    $_csv_data[$_csv_i] = preg_replace('/^'.$e.'(.*)'.$e.'$/s','$1',$_csv_data[$_csv_i]);
     $_csv_data[$_csv_i] = str_replace($e.$e, $e, $_csv_data[$_csv_i]);
 }
 return empty($_line) ? false : $_csv_data;
}
```
アクセス修飾子

ちょっと勘違いしていたところもあるのでメモ

private・・・同じクラス内
修飾子をつけない・・・**同じパッケージ内**
protected・・・**同じパッケージ内**もしくはそのサブクラス内
public・・・どこからでも可
opacityとrgbaを使った場合の透過の仕方の差


opacityを使って透過するとネストした要素まで透過状態になる。rgbaだとならない。

```html:html
<div class="example">Hello World</div>
```

以下の方法だと背景だけでなくHello Worldの文字も透過する

```css:中の文字も透過
.example {
  background-color: #fff;
  opacity: 0.5;
}
```

以下の方法だと背景のみ透過する

```css:中の文字は透過しない
.example {
  background-color: rgba(255, 255, 255, 0.5);
}
```
Mac OS X Lionで内蔵辞書を引く


単語を選択した状態で `control`-`command`-`d` キーを押す。

もしくは、ターミナルから以下のようにコマンドを入力して、単語を渡してURLスキームから起動する。

```sh:
$ open dict://炬燵
```

こんな感じで内蔵辞書が起動します。便利！

![内蔵辞書画面](https://lh4.googleusercontent.com/-m3FNClomfJI/T5h3ka2apoI/AAAAAAAAD-I/gSfiyfw66eE/s400/120426-0001.png)
Unix Toolbox でUnixの基本的なコマンドを学ぶ


[Unix Toolbox](http://cb.vu/unixtoolbox.xhtml)

![unix_toolbox](http://cdn-ak.f.st-hatena.com/images/fotolife/t/tuto0621/20120426/20120426023011_original.jpg?1335375036)

システム管理に便利なコマンドが色々と載ってます。
cdやlsの使い方は色々な所にあるけど、こういうのはあんまりないです。

いくつか役立ったものを抜粋。

```sh
uname -a                           # カーネルのバージョンを取得
uptime                             # 起動時間を表示
man hier                           # OSのディクレクリ構成の説明
cat /proc/cpuinfo                  # CPUスペック
```

勉強になりそうだから翻訳してみようかな。
2DMatrixのrotate、scaleメソッドを使う時の注意


SDKバージョン1.8.2での話。
create2DMatrixでオブジェクトを作ってrotate、scaleメソッドでアニメーションポイントを指定するとき

```JS:
	var t = Ti.UI.create2DMatrix();
	t.scale(1.5);
	t.rotate(20);
```

と、すると動かない。

```JS:
	var t = Ti.UI.create2DMatrix().scale(1.5).rotate(20);
```

と、すると動く。

なぜだ( ；∀；)
scalaでfor使った構文色々


to を使って1から10まで出力する

```Scala:
for (i <- 1 to 10) {
    println(i)
}
```

by を使って0, 10, 20 のように10おきに100まで出力する

```Scala:
for (i <- 0 to 100 by 10) {
    println(i)
}
```

2重ループを使って九九

```Scala:
for (i <-1 to 10; j <- 1 to 10) {
    println(i * j)
}
```

yieldを使ってすべての要素に処理を行う

```Scala:
val params: Array[String] = Array("test", "test2")
val newParams = for (s <- params) yield {
    "*" + s + "*"
}
for (s <- newParams) {
    println(s)
}
```
shouldOverrideUrlLoadingでURL遷移がフック出来ないことがある


* フォームのボタンのsubmitでの遷移

* 同ページ内のリンクへの遷移

* リダイレクト時

2.x系、3.x系での確認。4.x系は未確認。

※ただし、端末によってはメーカーが修正しているらしく、ちゃんと取れるものもある。

4.x系はリダイレクト時には呼ばれたという報告もあり。
https://groups.google.com/forum/?fromgroups#!topic/android-group-japan/2yDpnniNyTM
TextViewにHTMLタグを使用して表示する

`<font color>`タグなどが使える。
`<img>`タグも使える。サイズは解像度に応じて要調整かも知れない。

改行はもちろん`<br>`にしておく必要あり。
strings.xmlでの記述は要注意。

```Java:例
// 文字列データ
static final String sampleHtml ="色を<font color=\"red\">変える</font>サンプル";

TextView text = (TextView)findViewById(R.id.text1);
text.setText(Html.fromHtml(sampleHtml));

// strings.xml
TextView text2 = (TextView)findViewById(R.id.text2);
String src = getString(R.string.htmlstring);
text2.setText(Html.fromHtml(src));
```

```Java:strings.xml
<string name="htmlstring">リソース文字列は&lt;font color=&quot;green&quot;&gt;タグ記号に要注意&lt;/font&gt;。</string>
```

`img`タグの場合、srcに指定したものに応じた処理を書く必要がある（ImageGetterインターフェースを実装すする）。
R.drawableのidを指定することももちろんできる。

```Java:ic_launcher.pngを埋め込む場合のstrings.xml
<string name="imgstring">イメージは&lt;img src="ic_launcher" &gt;ファイル名をそのままでおｋ</string>
```

```java:使用例：imgタグの場合
// htmlタグを解析してイメージを返すために必要。
ImageGetterImpl imageGetter = new ImageGetterImpl(getApplicationContext());

// img.png
TextView text3 = (TextView)findViewById(R.id.text3);
String html = getResources().getString(R.string.imgstring);
Spanned message = Html.fromHtml(html, imageGetter, null);
text3.setText(message);
```

```java:ImageGetterImpl.java

/**
 * htmlタグを解析してイメージを返せるようにする
 * @author S.Kamba
 *
 */
public class ImageGetterImpl implements ImageGetter {

	Context mContext = null;

	public ImageGetterImpl(Context context){
		mContext = context;
	}

	@Override
	public Drawable getDrawable(String source) {
		// sourceにimgタグの src=""で指定した内容が渡される

		Resources res = mContext.getResources();
		// 画像のリソースIDを取得
		int id = res.getIdentifier(source, "drawable", mContext.getPackageName());

		// リソースIDから Drawable のインスタンスを取得
		Drawable d = res.getDrawable(id);

		// 取得した元画像のサイズを取得し、必要なら、表示画像のサイズを調整する
		int w = d.getIntrinsicWidth();
		int h = d.getIntrinsicHeight();
		if(source.equals("ic_launcher")){
			w = (int)(w*0.58f);
			h = (int)(h*0.58f);
		}
		d.setBounds(0, 0, w, h);

		return d;
	}
}
```

aタグのリンクに反応させるには、次の一文が必要。

```
textview.setMovementMethod(LinkMovementMethod.getInstance());
```
Herokuで独自ドメインを割り当てる(お名前.com)

## はじめに

Herokuでアプリを公開する際には、appname.heroku.comというHeroku URLで接続ができます。これをお名前.com等のレジストラで取得した好きなドメイン名で公開する方法について書きます。

私のブログをLokkaというブログアプリを使って、Heroku上で動作したときの設定をベースに手順をご紹介します。

## お名前.comの設定

まず、hirotaka.meというドメインを取得します。お名前.comでドメインを取得すると、無料でレンタル[DNSレコード設定]というDNSサーバのサービスを利用できます。ここでは、この[DNSレコード設定]というサービスを使った設定をします。

また、設定するドメインは下記の通りになります。

Heroku URL: blog-hirotaka.heroku.com
設定する独自ドメイン: hirotaka.me, www.hirotaka.me, blog.hirotaka.me

Rootドメイン(hirotaka.me)はTypeをAとして登録し、サブドメイン(www.hirotaka.me, blog.hirotaka.me)はHeroku URLのCNAMEとして登録します。

まず、ドメインNaviにログインをして、[ドメイン設定]から[ネームサーバの設定]-&gt;[レンタルDNSレコード設定]の画面を開きます。設定するドメイン名のラジオボタンを選択し、[入力画面へ進む]を押すとDNSレコード入力画面が表示されます。

下記のとおりレコードを登録します。

ホスト名: (空欄).hirotaka.me
TYPE: A
VALUE: 75.101.163.44
優先: (空欄)
状態: 有効

ホスト名: (空欄).hirotaka.me
TYPE: A
VALUE: 75.101.145.87
優先: (空欄)
状態: 有効

ホスト名: (空欄).hirotaka.me
TYPE: A
VALUE: 174.129.212.2
優先: (空欄)
状態: 有効

ホスト名: blog.hirotaka.me
TYPE: CNAME
VALUE: blog-hirotaka.heroku.com
優先: (空欄)
状態: 有効

ホスト名: www.hirotaka.me
TYPE: CNAME
VALUE: blog-hirotaka.heroku.com
優先: (空欄)
状態: 有効<

これらのIPアドレスは<a href="http://devcenter.heroku.com/articles/custom-domains#dns_setup" target="_blank">Herokuのドキュメント</a>に記載されているIPアドレスになります。

以上のレコードを追加し、[確認画面へ進む]を押して内容を確認します。問題がなければ「設定する」を押して設定を反映します。

設定した内容を手元のPCで確認します。DNSレコード設定のみの場合はすぐに確認できますが、ドメインを取得した直後だと設定の反映に時間がかかるかもしれません。

Rootドメインを確認します。

```
$ host hirotaka.me
hirotaka.me has address 75.101.163.44
hirotaka.me has address 174.129.212.2
hirotaka.me has address 75.101.145.87
```

サブドメインを確認します。

```
$ host blog.hiraka.me
blog.hirotaka.me is an alias for blog-hirotaka.heroku.com.
blog-hirotaka.heroku.com is an alias for proxy.heroku.com.
proxy.heroku.com has address 174.129.20.208
proxy.heroku.com has address 184.73.171.204
proxy.heroku.com has address 50.16.215.20
proxy.heroku.com has address 50.16.215.67
$ host www.hirotaka.me
www.hirotaka.me is an alias for blog-hirotaka.heroku.com.
blog-hirotaka.heroku.com is an alias for proxy.heroku.com.
proxy.heroku.com has address 174.129.20.208
proxy.heroku.com has address 50.16.215.20
proxy.heroku.com has address 50.16.215.104
proxy.heroku.com has address 107.22.233.248
```

## Herokuの設定

次にHeroku側の設定をします。画面から設定する方法もありますが、ここではコマンドラインから設定する方法をご紹介します。

アプリに受け付けるドメインを追加します。

```
$ heroku domains:add hirotaka.me
$ heroku domains:add blog.hirotaka.me
$ heroku domains:add www.hirotaka.me
```

もし、間違って登録してしまった場合はremoveで削除します。

```
$ heroku domains:remove test.hirotaka.me
```

追加したドメインを確認します。

```
$ heroku domains
Domain names for blog-hirotaka.heroku.com:
www.hirotaka.me
blog.hirotaka.me
hirotaka.me
```

以上で設定したドメインで接続できるようになりました。

## おわりに

.meドメインが年間980円で、それ以外は無料です。年間980円で独自ドメインのこんなすてきな環境が手に入るとは素晴らしすぎです。
Titaniumのバージョンとxcodeのバージョンの関係

Titanium studio? SDK? どちらがネックかわからないけど2.0からxcode4.3しか対応してないっぽい。4.3もインストールしたらビルドできた。とりあえず安心。1系まではxcode4.2しか対応してなかったのに。
AWS RDSのMysql設定がインスタンス立ち上げた状態ではUTF-8になってなく、文字化けで困った時の対処メモ

RDSの設定は「DB Parameter Groups」と紐付いている。
そのためAWS Management Console等でParameterグループを事前に作る必要がある。

Amazon RDS Command Line ToolkitをAWSからダウンロードしてきてインストール

Amazon RDS Command Line Toolkit設定

設定(.bashrc内)

```
export AWS_RDS_HOME=$HOME/aws/RDSCli-1.6.001
export EC2_HOME=$HOME/aws/ec2-api-tools-1.5.2.5
export PATH=$AWS_RDS_HOME/bin:$EC2_HOME/bin:$PATH
export EC2_CERT=$HOME/aws/cert-XXX.pem
export EC2_PRIVATE_KEY=$HOME/aws/pk-XXX.pem
export EC2_URL=https://ec2.us-east-1.amazonaws.com
export EC2_REGION=us-east-1
export AWS_CREDENTIAL_FILE=$HOME/aws/AwsCredentials.properties
```

EC2_CERT、EC2_PRIVATE_KEY、AWS_CREDENTIAL_FILE中身はAccount Activityからダウンロード。


設定ファイルをsourceした後、以下のコマンド実行

※ここではParameter Group名を「profuction」にしてる

```
rds-modify-db-parameter-group production -p "name=character_set_client, value=utf8, method=immediate"
rds-modify-db-parameter-group production -p "name=character_set_connection, value=utf8, method=immediate"
rds-modify-db-parameter-group production -p "name=character_set_database, value=utf8, method=immediate"
rds-modify-db-parameter-group production -p "name=character_set_results, value=utf8, method=immediate"
rds-modify-db-parameter-group production -p "name=character_set_server, value=utf8, method=immediate"
```

作ったParameter GroupをインスタンスのDB Parameter Groupに設定し (DB InstancesのModify等)再起動したら適用される。
インスタンスに
MacBook AirのCAPSキーをESCキーにしてみる

![MacBook Airのキーボード](https://lh5.googleusercontent.com/-zxblEWVZnGE/T5h7tLXYDwI/AAAAAAAAD-o/pxwabvEpHdg/s800/skitched-20120426-073223.png)

MacBook Airのキーボードは、ESCキーが押しにくいので、めったに使わないCAPSキーをESCキーとして使えるようにします。

[PCkeyboardhack](http://pqrs.org/macosx/keyremap4macbook/extra.html.ja)をインストールし、CAPSキーのキーコードを53(ESC)に変更します。
これで、CAPSキーを押したら、ESCキーを押したとみなされるようになります。

![設定画面の呼び出し方](https://lh6.googleusercontent.com/-I_XzJFUnVzY/T5h5yLNROjI/AAAAAAAAD-U/JonQ-vpPP5c/s400/120426-0003.png)

![設定項目](https://lh6.googleusercontent.com/-_0IR47IuXAM/T5h5x_FSgrI/AAAAAAAAD-Q/PjNc6sWTmT8/s400/PCKeyboardHack.png)
bundle install するときに vendor/bundle を省略する方法


bundle install するときに毎度 vendor/bundle を付け加えるのが面倒な人達へ

~/.bundle/config を作り下記の内容を書いておくとok

```
---
BUNDLE_PATH: ./vendor/bundle
```

Bundler は bundle コマンドを実行する際のカレントディレクトリから参照できる .bundle/config を local な設定
 ~/.bundle/config にある設定を global として拾ってくれる

なお、設定は local の方が優先されるっぽい

また bundle config で設定の内容を確認できる
MySQLのデータをphpMyAdminからExcelにエクスポートするときに文字化けするのを防ぐ方法


1. 出力でファイルの文字セット：SHIFT_JISを選択
2. フォーマット：CSV
3. エンコーディングへの変換：SJISをチェック

* 少なくともボクの環境では動作しました
RailroadyでRailsの図化

##必要なツールの確認とインストール

```sh
which dot
which neato
which sed
sudo yum install graphviz
```

##設定

```ruby:Gemfile
gem 'railroady'
```

```sh
bundle install
```

##出力

```sh
rake diagram:all
```

doc配下のSVGファイルが出力される。

その他、様々なオプションあり。
https://github.com/preston/railroady
rails3_acts_as_paranoidで論理削除

Rails 3.2.2、[rails3_acts_as_paranoid](https://github.com/goncalossilva/rails3_acts_as_paranoid) 0.2.2、SQLite3にて確認。

##インストール

```ruby:Gemfile
gem 'rails3_acts_as_paranoid'
```

```sh
bundle install
```

##設定

削除の判定に使用する列を追加する。
```deleted_at:timestamp```がデフォルト。

```sh
rails g migration add_deleted_at_to_hoges deleted_at:timestamp
rake db:migrate
```

モデルでrails3_acts_as_paranoidの使用を宣言。

```ruby:app/models/hoge.rb
class Hoge < ActiveRecord::Base
  acts_as_paranoid
```

以上の作業のみで使用可能となる。

##論理削除

```ruby
Hoge.find(1).destroy
```

##物理削除

```ruby
Hoge.find(1).destroy!
```

もしくは一度```destroy```したレコードに対し再度```destroy```を実行する。

##論理削除されたレコードのみ抽出

```ruby
Hoge.only_deleted
```

##論理削除されたレコードも含めて抽出

```ruby
Hoge.with_deleted
```

##復元

```ruby
Hoge.only_deleted.where(id: 1).recorver
```

##deleted_atの型を変える

```ruby
add_column :hoge, :deleted_at, :boolean, null: false, default: false
```

```ruby:app/models/hoge.rb
class Hoge < ActiveRecord::Base
  # 'boolean'はシンボルでは指定できない
  # date、stringも指定できる
  acts_as_paranoid column_type: 'boolean'
```

deleted_atはデフォルトだと日付型。
抽出時に```deleted_at IS NULL```となるのが嫌だったので```boolean```にしようとしたけど、変更後も```deleted_at IS NULL```だったのでデフォルトのままとした。

また```deleted_at IS NULL```で抽出するので当然、NOT NULL制約は使用できない。

##使用する列名を変更する

```ruby:app/models/hoge.rb
class Hoge < ActiveRecord::Base
  acts_as_paranoid column: 'hogehoge'
```

##関連するモデルの削除

```ruby
has_many :hogehoge, dependent: :destroy
```

とある場合、参照先でも```acts_as_paranoid```を使用しているなら論理削除。
使用していないなら物理削除。

この後、```recover```を実行すると関連するモデルも復元される。
復元したくない場合は```:recover_dependent_associations```オプションに```false```を設定する。

##validatesのuniqueness

論理削除も考慮する場合は、下記を使用する。

```ruby
validates_as_paranoid
validates_uniqueness_of_without_deleted :name
```

##使用上の注意

開発途中で追加すると```rake db:migrate```時に```deleted_at```が無いために失敗することがある。
その場合は一時的に```acts_as_paranoid```をコメントアウトなどして再度、実行すること。
StaticLibraryにあるUIView派生クラスを直接xibで指定すると参照がうまくいかない？


* static library

```objectivec:sub1View.h
@interface sub1View : UIView{
}

(void) testMethod;
@end
```
```objectivec:sub1View.m
@implementation sub1View
(void) testMethod{
   // なんか処理
}
@end
```

* アプリ側のプロジェクト

```objectivec:TestViewController.m
@implementation TestViewController

-(void) sample{
    sub1View *view = (sub1View*)self.view;
    
    [view testMethod]; // 落ちる
}

@end
```

* xib

TestViewControllerをFile's Ownerに持つxibの、ルートView(Objectsリストの一番上にあるView)のCustom Classをsub1Viewにする。

# 回避方法

sub1Viewをさらに派生したクラスをアプリ側に定義してrootViewのCustom Classにそちらを指定する。
仕様なのかなー？
ちなみに、上記例のsetMatrixを、同じライブラリプロジェクト内から呼び出すのは問題ないっぽいです。
UIViewController#initWithなんちゃらで特殊な処理がいるんだろうか・・・
xcode 4でSVNに接続できない時

`Authentication realm: <svn://**********.net:3690>`
とかで出て接続できない時はターミナルで
`svn list svn://～～～～`
         ↑ここはレポジトリのパス
と叩いて、ユーザIDとパスワード打つとつながるようになる。
CSSのclearfix問題を解決する

cssでネストしたdiv要素をfloatさせたばあい、子要素が親要素を突き破る問題を解決する。
（これいついては以下の記事などが詳しい）

http://archiva.jp/web/html-css/clearfix.html
http://norisfactory.com/stylesheetlab/000038.php

今までずっとこの問題に苦しんできたので音速でメモしておく。
cssのclearをよく理解していなかったのがすべての現況なのだけど…。
解決策は簡単。以下のcssクラス.clearfixを子要素をもつfloat divに追加するだけ。

```css:css
* html .clearfix {
    display: inline-block;
}
.clearfix:after {
    clear: both;
    display: block;
    height: 0;
    content: " ";
    visibility: hidden;
}
```
apt-get で ddskk をインストールすると発生するエラーを解決

ddskk をインストールすると以下のようなエラーが出力されて困っていた．

```
...
ddskk (14.3-1) を設定しています ...
install/ddskk: Handling install for emacsen flavor emacs23
install/ddskk: Handling install for emacsen flavor xemacs21
emacs-package-install: /usr/lib/emacsen-common/packages/install/ddskk xemacs21 emacs23 xemacs21 failed at /usr/lib/emacsen-common/emacs-package-install line 30, <TSORT> line 1.
dpkg: ddskk の処理中にエラーが発生しました (--configure):
 サブプロセス インストール済みの post-installation スクリプト はエラー終了ステータス 255 を返しました
MaxReports にすでに達しているため、レポートは書き込まれません
以下のパッケージの処理中にエラーが発生しました:
 ddskk
E: Sub-process /usr/bin/dpkg returned an error code (1)
```

原因は apel を remove してしまったことらしい．apel をインストールすれば解決する．

```
sudo apt-get install apel
```
CentOS-5 Fasttrack Testing がなくなっている…

yumのリポジトリ設定ファイル自体はあるけれど、対象が消えている。

```ini:http&#58;//dev.centos.org/centos/5/CentOS-5-ft-Testing.repo
[c5-ft-testing]
name=CentOS-5 Fasttrack Testing 
baseurl=http://dev.centos.org/centos/$releasever/testing/$basearch/ft/
enabled=0
gpgcheck=1
gpgkey=http://dev.centos.org/centos/RPM-GPG-KEY-CentOS-testing
```

http://dev.centos.org/centos/5/testing/i386/ にも、http://dev.centos.org/centos/5/testing/x86_64/ にも、「ft」というディレクトリは存在しなくなっている。

CentOS 6 の方に Fasttrack Testing が移行している、というわけでもなさそうだし（実際、6の方にもftディレクトリはない）、廃止された、ということでいいのかな…？
残ってしまったプロセスを名前から複数探してkillするスクリプト

たまにNode.jsのプロセスだけ残してしまって、プロセスを自前で何個もkillしていることがあったので面倒になりました。シェルはそんなに書かないのですが、調べてこんな風に書いています。

```sh
#!/bin/sh
kill `ps aux | grep node | egrep -v grep | awk '{print $2}'`
```


下記参照しました。ありがとうございます。
http://www.syboos.jp/linux/doc/kill-process-from-process-name.html
Macにて、Google日本語入力で英数キーをことえりのように使う

# 概要

![画像1](https://lh3.googleusercontent.com/-2o_afan3br0/T5ctD_qsNZI/AAAAAAAAD98/cv0eRZlKw1A/s800/Google%2520%25E6%2597%25A5%25E6%259C%25AC%25E8%25AA%259E%25E5%2585%25A5%25E5%258A%259B%2520%25E3%2582%25AD%25E3%2583%25BC%25E8%25A8%25AD%25E5%25AE%259A-1.jpg)

KeyRemap4MacBookをインストールして、少し設定するだけで、以下のようにことえりと同じように使えるようになります。

* 「かな」キーを押せばIME ON
* 「英数」キーを押せばIME OFFもしくは半角英数

# 手順

1. [KeyRemap4MacBook](http://pqrs.org/macosx/keyremap4macbook/index.html.ja)をインストール

2. ~/Library/Application\ Support/KeyRemap4MacBook/private.xml を下記内容で作成もしくは既にある場合は適切な位置に追記します。

```xml:private.xml
<?xml version="1.0"?>
<root>
  <list>
    <item>
      <name>Local Hacks</name>
      <list>
        <item>
          <name>KANA Key</name>
          <list>
            <item>
              <name>KANA to KANA/EISUU (toggle)</name>
              <appendix>(Except VMware Fusion, Parallels Desktop, Remote Desktop Connection)</appendix>
              <identifier>remap.kana_to_kana_eisuu_toggle</identifier>
              <not>VIRTUALMACHINE, REMOTEDESKTOPCONNECTION</not>
              <autogen>--KeyToKey-- KeyCode::JIS_KANA, KeyCode::VK_JIS_TOGGLE_EISUU_KANA</autogen>
            </item>
          </list>
        </item>
        <item>
          <name>EISUU Key</name>
          <list>
            <item>
              <name>EISUU to Option+ESC</name>
              <appendix>(Except VMware Fusion, Parallels Desktop, Remote Desktop Connection)</appendix>
              <identifier>remap.eisuu_to_option_esc</identifier>
              <not>VIRTUALMACHINE, REMOTEDESKTOPCONNECTION</not>
              <autogen>--KeyToKey-- KeyCode::JIS_EISUU, KeyCode::ESCAPE, ModifierFlag::OPTION_L</autogen>
            </item>
          </list>
        </item>
      </list>
    </item>
  </list>
</root>
```

参考：こちらの記事のjadoさんの投稿

[Google プロダクトフォーラム › Google 日本語入力 › MacOSで英数キー（Eisu）にキー割り当てできない](http://productforums.google.com/forum/#!category-topic/ime-ja/問題の報告/tEgiTwLxEq4)

3.KR4MBの設定ダイアログでReload XMLを押下後、Local Hacks以下にある「EISUU to OPTION+ESC」をチェック

![画像2](https://lh4.googleusercontent.com/-0qgCCDsB43Y/T5cr8fDrwjI/AAAAAAAAD9s/DyEOF8c7NLI/s640/KeyRemap4MacBook-1-1.jpg)

これで、英数キーを押すと、Option+ESCが押されたとみなされるようになります。

4.あとは、Google日本語入力のキー設定で、Option+ESCに半角英数に変換、もしくはIME　OFFを割り当てれば、ことえりと同じ感覚で、「かな」キーを押せばIME ON、「英数」キーを押せばIME OFFもしくは半角英数に変換が出来るようになります。

5.入力キーに「Eisu」と書かれているものは不要なので削除してください

![画像3](https://lh3.googleusercontent.com/-BB1c6gfF_Wk/T5cqnDWLqhI/AAAAAAAAD9c/J1LdAzVccdY/s800/Google%2520%25E6%2597%25A5%25E6%259C%25AC%25E8%25AA%259E%25E5%2585%25A5%25E5%258A%259B%2520%25E3%2582%25AD%25E3%2583%25BC%25E8%25A8%25AD%25E5%25AE%259A-1-1.jpg)

以上です。

# 補足

Google日本語入力の設定で、

* キー設定の選択＝ことえりを選択
* 横の編集ボタンを押して、上記4.の設定を行います
* ついでに、Windowsから移行した人は、\キーで入力する文字を「バックスラッシュ」にするとよいです。

![画像4](https://lh6.googleusercontent.com/-z8_Tj7odmAA/T5cshXhJk7I/AAAAAAAAD90/uxdYAYoreh0/s800/Google%2520%25E6%2597%25A5%25E6%259C%25AC%25E8%25AA%259E%25E5%2585%25A5%25E5%258A%259B%2520%25E3%2583%2595%25E3%2582%259A%25E3%2583%25AD%25E3%2583%258F%25E3%2582%259A%25E3%2583%2586%25E3%2582%25A3.jpg)
Codaのzen-codingのプラグインTEA-for-Codaで、展開コマンドを変更する方法


[前回に引き続きCoda関連](http://qiita.com/items/ea1c9856324135e65606)ですが、展開コマンド[^(コントロールキー)]+[,])のショートカットコマンドを自分好みのものに変えてしまおうというものです。

1. ショートカットコマンドは、以下に登録されています。
「/Users/username/Library/Application Support/Coda/Plug-ins/TEA for Coda.codaplugin」を右クリックし、「パッケージの内容を表示」を選択します。

2. 表示されたパッケージの中からさらに階層を潜り、
「Contents/Resources/English.lproj/TextActions.plist」
へとアクセスします。

展開コマンドはこちらの35行目あたりにある「Expand Abbreviation」に登録されています。

```html:35行目あたり
		<key>Expand Abbreviation</key>
		<dict>
			<key>action</key>
			<string>TEASnippetWithWord</string>
			<key>options</key>
			<dict>
				<key>alpha_numeric</key>
				<true/>
				<key>bidirectional</key>
				<true/>
				<key>extra_characters</key>
				<string>_-#.&gt;+*:$!@</string>
				<key>mode</key>
				<string>zen</string>
				<key>snippet</key>
				<string>&lt;$SELECTED_TEXT&gt;$0&lt;/$WORD&gt;</string>
			</dict>
			<key>shortcut</key>
			<string>^,</string>
			<key>submenu</key>
			<string>Zen</string>
		</dict>
```


デフォルト設定(^,)では以下のようになっているはず

```
<key>shortcut</key>
<string>^,</string>
```

この<string>の中身を好きなものにすればオッケー。

ちなみに、キー登録時の記法ですが、
*「^=control」$=shift」「@=command」「~＝option」*
となっています。
Codaのzen-codingプラグイン(TEA for Coda)を好きに編集して便利な展開タグを追加する方法


TEA-for-CodaはCodaにzen-codingを入れるプラグインです。
[ダウンロードはこちら](http://onecrayon.com/tea/coda/)

こちらのプラグインにデフォルトで入っているzen-coding以外を好き勝手追加する方法を紹介します。

### Codaを知らない方はこちら
紹介サイト: [DreamweaverからCodaに変えました-webクリエイターボックス](http://www.webcreatorbox.com/tech/dreamweaver-to-coda/)
公式サイト: http://www.panic.com/jp/coda/

### zen-codingを知らない方はこちら
参考サイト: [Zen-Codingが楽しい-ぱせらんメモ](http://d.hatena.ne.jp/pasela/20100223/zencoding)

## 好き勝手に編集する

TEA-for-CodaをCodaにインストールしたあと、
「/Users/username/Library/Application Support/Coda/Plug-ins/TEA for Coda.codaplugin」を右クリックし、「パッケージの内容を表示」を選択します。

表示されたパッケージの中からさらに階層を潜り、
「Support/Library/zencoding/zen_settings.py」
へとアクセスします。
こちらの「zen_settings.py」ファイルに、展開コマンド(デフォルトでは[コマンドキー]+[,])を押した場合に展開する内容が記述されています。

```javascript:内容例(25行目~のcssの展開コマンド一覧一部抜粋)
	'css': {
		'extends': 'common',
		'snippets': {
			"@i": "@import url(|);",
			"@m": "@media print {\n\t|\n}",
			"@f": "@font-face {\n\tfont-family:|;\n\tsrc:url(|);\n}",
			"!": "!important",
			"pos": "position:|;",
			"pos:s": "position:static;",
			"pos:a": "position:absolute;",
			"pos:r": "position:relative;",
			"pos:f": "position:fixed;",
			……
```

ちなみに、500行目あたりからhtml関連の内容が記述されています。

ようは、この形式にしたがって記入すれば、どんなものもzen-codingコマンドで展開できるわけです。

たとえば、スマートフォンサイトのコーディングをする方は、メディアクエリを登録しておくとか、css3のベンダープレフィックスを登録しておくとか、いろいろ方法があると思います。

```javascript:例:ベンダープレフィックスの追加
//追記後はCodaの再起動が必要っぽい
"bdrs:mz": "-moz-border-radius:|;",
"bdrs:wk": "-webkit-border-radius:|;",
"bdrs:op": "-o-border-radius:|;",
"bdrs:ms": "-ms-border-radius:|;",
```

もちろん、こういったお固いタグじゃなくても、なんでも自分の好きなものを登録できます。
これでCodaを強化して、作業効率をさらにアップしましょう！
EventTriggerでSetterを使いたかった

もちろん使えないです。

なのでアニメーションしないアニメーションで対応。

```EventTriggerWuthSetter.xaml
<EventTrigger RoutedEvent="UIElement.HogeEvent">
  <BeginStoryboard>
    <Storyboard>
      <ObjectAnimationUsingKeyFrames Storyboard.TargetProperty="HogeProperty">
        <DiscreteObjectKeyFrame KeyTime="0">
          <DiscreteObjectKeyFrame.Value>
            <!-- セットしたい値 -->
          </DiscreteObjectKeyFrame.Value>
        </DiscreteObjectKeyFrame>
      </ObjectAnimationUsingKeyFrames>
    </Storyboard>
  </BeginStoryboard>
</EventTrigger>
```

int 100とかは　xmlns:sys="clr-namespace:System;assembly=mscorlib"
で<sys:Int32>100</sys:Int32>とかでOK。
Rubyの日本語リファレンスマニュアルが読めるサイト一覧


![ruby-sakusaku](http://cdn-ak.f.st-hatena.com/images/fotolife/t/tuto0621/20120425/20120425030302_original.png?1335290654)

- [サクサク引けるRubyリファレンスマニュアル](http://miyamae.github.com/rubydoc-ja/) : キーボードだけでサクサク引ける。
- [最速Rubyリファレンスマニュアル検索！ | るりまサーチ](http://rurema.clear-code.com/) : 本文の内容などから検索出来る
- [るりま - Ruby reference manual (beta)](http://doc.okkez.net/) : マニュアル総本山

普段は[サクサク引けるRubyリファレンスマニュアル](http://miyamae.github.com/rubydoc-ja/)を使い、もっと詳細に検索したい時に[るりまサーチ](http://rurema.clear-code.com/)を使うと大抵の場合でこと足ります。
Ubuntu で mruby を動かしてみたよ

##追記

もう以下のサンプルは古くなってます．foo.c からのビルド時にコケます．
こちら http://qiita.com/items/f54f12db3d5eac45f871 に新しいエントリ書いてます．(追記終了)

##以下本文

Ubuntu 10.04 amd64 on さくら VPS 1G (v3) で実験．

```
sudo aptitude install git-core build-essential zlib1g-dev libssl-dev libreadline6-dev
# zlib1g-dev, libssl-dev, libreadline6-dev は必要なのかどうか分からない (けどうちの環境には以前に入れてあったので一応記載)
```

```
git clone https://github.com/mruby/mruby.git
cd mruby
# この時点では bin lib ディレクトリが空っぽ
make
... # ズラズラーっとビルドの結果が出力される
bison -o ../../src/y.tab.c ../../src/parse.y
make[2]: bison: Command not found
make[2]: *** [../../src/y.tab.c] Error 127
make[1]: *** [../bin/mrbc] Error 2
make: *** [src/mrblib/mrblib.o] Error 2
```

bison が必要らしい．

```
sudo aptitude install bison
make clean
make
```

これで OK．bin ディレクトリ内に mrbc mruby mrubysample，lib ディレクトリ内に ritevm.a が出来ているはず．

そしたら http://mattn.kaoriya.net/software/lang/ruby/20120420121729.htm の foo.c をコピペ．include とか lib と同じ階層にとりあえず作る．

```
gcc -Iinclude -Isrc foo.c lib/ritevm.a -lm
```

-Isrc しないといけないのは変な感じです…　あと -lm 必要です．pow とか sqrt とかが無いよーって言われるので気付く人は気付くはず．そしたらこれで a.out が出来るので

```
./a.out
1
2
3
```

やったねたえちゃん！mruby が動くよ！

##参考にした所・今後なりそうな所
* https://github.com/mruby/mruby
* http://mattn.kaoriya.net/software/lang/ruby/20120420121729.htm
* http://d.hatena.ne.jp/miyohide/20120420/1334924789
* http://d.hatena.ne.jp/MrShoz/20120423
call Twitter API with rubytter


this example is using [pit](http://rubygems.org/gems/pit).

```ruby
#!/usr/bin/env ruby
require 'pit'
require 'oauth'
require 'rubytter'

config = Pit.get('twitter.com', require: {
                   'consumer_key'        => '',
                   'consumer_secret'     => '',
                   'access_token'        => '',
                   'access_token_secret' => '',
                 })
consumer = OAuth::Consumer.new(config['consumer_key'], config['consumer_secret'], :site => 'https://api.twitter.com')
token = OAuth::AccessToken.new(consumer, config['access_token'], config['access_token_secret'])
client = OAuthRubytter.new(token)

profile = client.verify_credentials
client.user_timeline(profile.id, { count: 50, include_rts: true }).each do |tweet|
  puts "#{ tweet.created_at } - #{ tweet.text.gsub(/\n/, ' ') }"
end
```
zsh で0埋め連番リネーム

zmv で「${(l:e::s1::s2:)param}」を利用する。eは全体の長さ、s1は埋める文字、s2はparam左に挿入する文字列であり、s1とs2はオプションである(s1省略時はスペース埋め、s2はs1がある時のみ使用可能)。

zsh で以下を評価すればだいたいの挙動がわかると思う。

```sh
n=1
echo ${(l:10:)$((n))}
echo ${(l:10::0:)$((n))}
echo ${(l:10::0::5:)$((n))} 
```

さて、0埋め連番リネームだが、これをzmvの第2引数に使えばいい。jpgファイルを1から始まる3桁0埋めしたいなら以下のようにできる。ファイル名を辞書順で並べた上から、001.jpg、002.jpg、…… というファイル名にリネームされる。

```sh
(n=1; zmv '*.jpg' '${(l:3::0:)$((n++))}.jpg')
```

ただし、リネーム前に 001.jpg などのファイルがあるとエラーが出るので、その場合は適当なプレフィックスなどを付けて連番リネームした後プレフィックスを削除する。

```sh
(n=1; zmv '*.jpg' 's${(l:3::0:)$((n++))}.jpg')
zmv 's(*).jpg' '$1.jpg'
```
rjavaのインストールメモ＆rincanterの設定(OSX,Ubuntu)


=======

OSX10.7 lion編
=======
rincanterを使用しようとして苦労したので設定をメモ

まずRはhomebrewからインストールしたものを使う前提とします。
## jdkのインストール
jdkが必要なのでインストールするのですが、デベロッパサイトからのダウンロードが必要です。デベロッパー登録が必要なので登録しましょうデベロッパー登録したら
デベロッパサイト
https://developer.apple.com/jp/resources/
へ行きMac OS X DownloadsからJava for OS X Developer Packageの最新版をダウンロードしてインストールします。
すでにjreをインストールしていた場合、jdkを使用する必要があるので
ユーティリティからJava Preferenceを起動し優先する順位を最初にします。

## Rの設定
次にRにjvm関連の変更を再設定するためにターミナルを立ち上げ

```Shell
$ R CMD javareconf 
```

と入力しますrootで実行せよとなっていますがhomebrewではユーザ権限でOKです。
Rを起動しrjavaパッケージをインストールします。

```R
install.packages('rJava')
```

confiureが走りコンパイルが始まりますエラーが出ずインストールが終了すればOK
コンパイルが失敗する場合、
R_HOMEの設定をする
homebrewでは不要ですがPackage版では必要なようです

jdkがインストールされていないとjnilibがコンパイルできずjni.hが見つからないというエラーがでます。

## rincanterのインストール
これでrincanterのインストール準備が完了します。
Clojureへのインストールはleiningenから行うことにすると
project.cljはこんな感じ
incanterとrincanterは最新版をclojars.orgで検索して最新版を指定します。


 ```clojure:project.clj
(defproject rincantersamp "1.0.0-SNAPSHOT"
  :description "FIXME: write description"
  :dependencies [[org.clojure/clojure "1.3.0"]
                 [incanter "1.3.0"]
                 [org.clojars.guv/rincanter "1.1.0"]]
  :dev-dependencies [[swank-clojure "1.4.1"]])

 ```

ここからはad-hocなやり方ですが、
lein deps後rjavaのラブラリをlibsコピーします。
対象は
> /usr/local/Cellar/r/{Rのバージョン}/R.framework/Resouces/library/rJava/jri
のJRI.jar,REngine.jar,JRIEngine.jar
をプロジェクトのlibsへコピーします。
このままだとlein swank時に実行ライブラリが見つからないと怒られるので
libjri.jnilibをproject.cljと同一のディレクトリへコピーします
そして

```Shell
$ lein swank
```

で実行

Ubuntu編
==========
手順は、ほぼOSX編と同じですライブラリ関連とパッケージマネージャーからJDKをインストールすることぐらいが違いとなります。

## RとJDKのインストール
パッケージマネージャからRとJDKをインストールする。


## 共有ライブラリの設定(環境変数)

libjvm.soが無いと怒られるので、ありかの指定をする
.profile　または.bashrc等に環境変数の設定をする



```環境変数LD_LIBRARY_PATH
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:/usr/lib/jvm/default-java/jre/lib/i386/jamvm
```

を追加

## Rの設定
OSX編と同様に
Rにjvm関連の変更を再設定するためにターミナルを立ち上げ

```Shell
$ R CMD javareconf 
```

と入力します
Rを起動しrjavaパッケージをインストールします。

```R
install.packages('rJava')
```

confiureが走りコンパイルが始まりますエラーが出ずインストールが終了すればOK


## rincanterのインストール
lein new {project}
でプロジェクトを作成後OSX編と同様に
project.cljを作り

 ```clojure:project.clj
(defproject rincantersamp "1.0.0-SNAPSHOT"
  :description "FIXME: write description"
  :dependencies [[org.clojure/clojure "1.3.0"]
                 [incanter "1.3.0"]
                 [org.clojars.guv/rincanter "1.1.0"]]
  :dev-dependencies [[swank-clojure "1.4.1"]])

 ```

ターミナルから

```Shell
lein deps
```

を実行します
## rJava関連のjarをコピー

lein deps後rjavaのラブラリをlibsコピーします。


rJava関連のjarファイルは

~/R/i686-pc-linux-gnu-library/2.13/rJava/jri

以下にあるので、このディレクトリのJRI.jar, JRIEngine.jar, REngine.jar
をleinで作成したプロジェクトのlibへコピー。


## lein swankのための設定
このままではlibjri.soを見つけられないと怒られるので、
leinで作成したプロジェクトのディレクトリへ

~/R/i686-pc-linux-gnu-library/2.13/rJava/jri

から libjri.soをコピーします


そして

```Shell
$ lein swank
```

で実行
watchrで監視しつつMD5 Hashで同一性をチェックし、変更がない時はRSpecを走らせない


## 問題: watchがファイル更新時刻を見てしまう

watchrでapp/以下もしくはspec/以下のファイル変更を監視して、変更されたファイルのテストを実行するという設定をしている方は多いと思います

* 参考1. http://d.hatena.ne.jp/secondlife/20110121/1295609110
* 参考2. http://qiita.com/items/6ac9bef18c35dd92580c


~~~~ruby:rspec.watchr
watch('app/(.*)\.rb') {|code|
  puts "Saved: #{code[0]}"
  system "bundle exec rspec spec/#{code[1]}_spec.rb"
}
watch('spec/(.*)_spec\.rb') {|code|
  puts "Saved: #{code[0]}"
  system "bundle exec rspec #{code[0]} #{annoying}"
}
~~~~

が、この方法の問題点は**「ファイル内容に変更がなく、単に保存しただけでもRSpecが走る」**という点。特に僕はvimに居るときは`<space>+w`で保存するのが手癖になっている（考え事をしながらパチパチ保存を叩いている）ので、そのたびRSpecが走るのは煩わしい。

## 解決策: MD5 Hash値

MD5でファイルのHash値を取っておき、watchでファイルの変更が検知されたときにMD5で内容の同一性をチェックして、更新されていたときのみRSpecを走らせるようにした。

~~~~ruby:rspec.watchr
require 'digest/md5'
def calc_md5(filename)
  Digest::MD5.hexdigest(File.open(filename, 'rb').read)
end

def main
  @md5 = {}
  Dir.glob("app/**/*.rb").each  { |f| @md5[f] = calc_md5(f) }
  Dir.glob("spec/**/*.rb").each { |f| @md5[f] = calc_md5(f) }
end

main

watch('app/(.*)\.rb') {|code|
  if @md5[code[0]] == calc_md5(code[0])
    puts "Saved: #{code[0]}"
  else
    puts "Saved & Changed: #{code[0]}"
    system "bundle exec rspec spec/#{code[1]}_spec.rb"
    @md5[code[0]] = calc_md5(code[0])
  end
}
watch('spec/(.*)_spec\.rb') {|code|
  if @md5[code[0]] == calc_md5(code[0])
    puts "Saved: #{code[0]}"
  else
    puts "Saved & Changed: #{code[0]}"
    system "bundle exec rspec #{code[0]}"
    @md5[code[0]] = calc_md5(code[0])
  end
}
~~~~

~~~~bash:起動。
% bundle exec watchr rspec.watchr
~~~~

これでだいぶ快適になったんだけど、さらに贅沢を言えば、空白とか改行程度の変更も無視するような設定に出来ないものかな。
Interporator覚書

AccelerateDecelerateInterpolator・・・加速と減速
AccelerateInterpolator・・・加速
AnticipateInterpolator・・・開始時に逆方向に溜める
AnticipateOvershootInterpolator・・・開始時に逆方向に溜め、終了時にはみ出す
BounceInterpolator・・・終了時にバウンド
CycleInterpolator・・・設定したアニメーションの負の方向も使用しながら繰り返す
DecelerateInterpolator・・・減速
LinearInterpolator・・・変化を加えない
OvershootInterpolator・・・終了時にはみ出す

http://www.atmarkit.co.jp/fsmart/articles/android20/android20_3.html
find_or_create_by_hoge

Rails 3.2.2にて動作。

```ruby
# name = 'huga'のレコードを検索し
# 存在しなかったら新規に作成
Hoge.find_or_create_by_name('huga')

# 検索対象以外の項目も更新したい場合
Hoge.find_or_create_by_name('huga') do |h|
  h.description = 'hohohohoh'
end
```
jQueryで要素の配列から特定の要素のみ削除する方法


例えば table id="myTable" から最後の行を削除する場合

```javascript
$('#myTable tr:last').remove();
```

n 番目の行を削除する場合

```javascript
$('#myTable tr:eq(n)').remove();
```




参考
http://jquery-howto.blogspot.jp/2009/05/remove-bottom-table-row-using-jquery.html

http://semooh.jp/jquery/api/selectors/

http://semooh.jp/jquery/api/manipulation/remove/[expr]/

オブジェクトは削除しないらしいので delete しておいた方が良いのかしら？
emacsの起動時にemacs: Cannot open termcap database fileというエラーが出る

emacs23.4をさくらVPSのCentOSにソースからコンパイルしてインストールする

$./configure --without-x
$make
$make install

しかし実行時
$emacs
emacs: Cannot open termcap database file

となって起動できない。
調べるとlibncurses5-devが必要らしいがyumにない。
yumだとncurses-develが対応しているらしい
$sudo yum install ncurses-devel
再コンパイル
$./configure --without-x
$make
$make install

無事起動できた
PivotalTrackerとGitHubの連携

ほとんどGitHubで完結するのですが、要件を整理するところだけは何か欲しいなとと思いPivotal Trackerを使い始めてみました。Pivotal Trackerの使い方自体はまた別の機会でまとめるとして、ここでは、PivotalTrackerのストーリーと関連するGitHubのコミットを紐づける方法をご紹介します。

## PivotalTrackerの設定

まず、PivotalTrackerに接続できるように、APIトークンを発行します。

[PROFILE]ニューから選択して、[API Token]のセクションに[Create New Token]というリンクをクリックします。そうすると、[API Token]が生成され表示されるのでコピーしておきます。


## GitHubの設定

次に、GitHub側でリポジトリの[Admin]をクリックして管理画面を表示します。[Service Hooks]タブを選択します。連携できるサービスの一覧が表示されるので、一覧からPivotalTrackerを探して選択します。[Token]欄に先ほどコピーした、[API Token]をペースとします。[Active]にチェックをして、[Update Settings]をクリックして設定を保存します。

以上で連携の設定は完了です。

## コミットメッセージ記述の仕方

実際のコミットメッセージの表記の仕方は、Pivotal Trackerの<a href="https://www.pivotaltracker.com/help/api?version=v5#GitHub">ヘルプページ</a>を和訳したものを記載します。

和訳：

SCMのコミットと特定のTrackerストーリーを関連付けるには、コミットメッセージにストーリーID（複数可）とストーリーの状態変更を示した専用の記述を含めます。ハッシュマーク(#)の後にストーリーIDを記載して大括弧([])で囲んだコミットメッセージを記載します。もし、ストーリーが開始していなければ（状態が"Not Yet Started"のもの）、コミットメッセージは自動で開始状態にします。例えば、ScottyがSCMのリビジョン54321で下記のメッセージをコミットしたとします。

```
[#12345677 #12345678] Diverting power from warp drive to torpedoes.
```

 Trackerのストーリー12345677と12345678に下記のコメントが追加されます。もし、ストーリーが開始されていなければ、状態を"Started"にします。

```
Commit: Scotty
54321

[#12345677 #12345678] Diverting power from warp drive to torpedoes.
```

コミットメッセージを使ってストーリーを自動で終了するには、大括弧内でストーリーIDに加えて、"fixed", "completed", "finished"を含めます。また、ストーリーIDの前や後に"Fix"や"FIXES"を記載したり、別の動詞の格や形も使うこともできます。注記: "features"の場合は、状態を"finished"にします。"chores"の場合は、状態を"accepted"にします。

例:

```
[Fixes #12345678] Torpedoes now sufficiently powered.
```

環境によっては、コードがコミットされたタイミングで自動でデプロイする事でしょう。そのような環境では、"delivers"を含めれると、そのストーリーの状態を"delivered"にします。

```
[Delivers #12345679] Scotty can beam up Captain Kirk.
```

## おわりに

これで、コミットメッセージに所定の形式で記載すれば、Pivotal Tracker上で、ストーリーから関連するコミットがリンクされるようになりました。

Pivotal Trackerは非常にシンプルで使い勝手がよくて気に入りました。また、もう少し運用してみて、慣れてきたらPivotal Tracker自体に関しても書いていきたいと思います。

いままではRedmineを使っていたのですが、これからはPivotal Tracker + GitHubがいいですね。
Nginxでフィーチャーフォンからのアクセスの場合専用サイトにリダイレクトする方法


例えばフィーチャーフォン専用のmobile.example.comへリダイレクトするにはこんな感じ。

```Nginx:
if ($http_user_agent ~ ^DoCoMo) {
    rewrite ^(.*) http://mobile.example.com$1;
}

if ($http_user_agent ~ ^KDDI) {
    rewrite ^(.*) http://mobile.example.com$1;
}

if ($http_user_agent ~ ^SoftBank) {
    rewrite ^(.*) http://mobile.example.com$1;
}

if ($http_user_agent ~ ^J-PHONE) {
    rewrite ^(.*) http://mobile.example.com$1;
}

if ($http_user_agent ~ ^vodafone) {
    rewrite ^(.*) http://mobile.example.com$1;
}

if ($http_user_agent ~ ^Up.Browser) {
    rewrite ^(.*) http://mobile.example.com$1;
}
```
MBAに入れてるアプリと作業環境

MBAが故障して新しいMBAに引っ越しししてるので、Android SDKをインストール中（長い…）ヒマなので作業環境をメモる。

## 各種アプリケーション

- ブラウザ：Firefox（アドオン：vimperator、Firebug、はてブ）
- 通知：Growl
- Twitter：Twitter for Mac
- メーラー：sparrow
- チャット：skype
- メモ：[Mou](http://mouapp.com/)（マークダウンエディター）
- ウィンドウ最前面化：[afloat](http://infinite-labs.net/afloat/)（`[Command][Ctrl]a`でウィンドウを最前面）
- ランチャー：[spark](http://www.shadowlab.org/Software/spark.php)（`C-0`でFirefox、`C-9`でiTermを起動/移動などショートカットキーを設定する）
- バックアップ：dropbox
- IME：Google IME
- マシン情報：[menu meters](http://www.ragingmenace.com/software/menumeters/index.html)

「キーボードだけで作業の9割をこなせる環境」を目指してる。

Sparkでアプリケーション間を移動を簡略化し、ブラウザもvimpでキーボードのみで操作してる。twitterやsparrowもhjklで移動できるなど慣れたキーバインドで操作できるから使ってる。また、afloatを使うと、ターミナルを最前面に置きつつブラウザを操作するとかできて便利。

スタイルを編集できて、dropboxで同期できるようになればMouからKobitoに移行します。

---
### 追記

- Todoリスト：[fruid](http://fluidapp.com/) + Google Tasks

Todoリストは数多あるけど、一番シンプルかつ使い勝手がいいのがGoogle Tasksだった。ただ、webアプリだと消しちゃうので、fruidでデスクトップアプリにする。fruidはwebアプリをデスクトップアプリにするツール。デスクトップアプリ化したGoogle Tasksはafloatで常にウィンドウの最前面において使ってる。

## 開発環境

- iTerm2
- Command Line Tools
- Homebrew
- tmux
- git + tig

Xcodeはいまのところ使わないしインストールに時間がかかるので、Command Line Toolsだけ使う。tig便利。
vimとかzshは入ってるものをそのまま使う。dotfilesは[github](https://github.com/naoty/dotfiles)で管理してるので、それをcloneして使う。

### Rails開発

- rvm
- Ruby 1.9.3, 1.9.2
- bundler
- mongodb
- imagemagic

gemにはbundlerだけ入れて、プロジェクトに必要なgemsはすべてbundleで管理する系男子。

### Android開発

- Android SDK 2.3.2, 2.2
- Eclipse（日本語化、vrapper、Eclipse Color Scheme）

vrapperでEclipseでもvimのキーバインドをある程度使えるようになる。
Arelで色々行う例


### 参考になるサイト
- http://d.hatena.ne.jp/suginoy/20120605/p3

### whereを使って完全一致の比較を行う

```ruby:
Model.where(:column => param)
```

### Arelは常に結果を配列で返すようなので一つだけとりだしたい場合(ユニークキーで検索する時とか)は.firstを使うと良い

```ruby:
Model.where(:column => param).first
```

### whereを使って大小の比較を行う

```ruby:
Model.where('column > param')
```

### groupby してカウント

```ruby:
Model.count(:group => :column)
```

### datetimeをDATE_FORMATを使ってgroupbyしてカウント (年でgroupby)

```ruby:
Model.count(:group => "DATE_FORMAT(colmun, '%Y')")
```

### ModelAをModelBと(inner)join

```ruby:
ModelA.joins(:modelb)

ModelA.joins(:modelb).to_sql
# => "SELECT `modelas`.* FROM `modelas` INNER JOIN `modelbs` ON `modelbs`.`id` = `modelas`.`modelb_id`"
```

### ランダムソード

```ruby:
ModelA.order("RAND()")
```

### where in
where in したい場合は単純に値に配列を与えれば良い

```ruby:
Modela.where(:id => [1, 2])
```
ライブラリパスをファイルからの相対パスで追加する方法


たとえば/home/example/test.rb内で/home/example/libをライブラリを置くパスとして追加する場合は以下の様にかけば良い。

```ruby:test.rb
# $:は$LOAD_PATHと等価
$:.unshift(File.dirname(__FILE__) + "/lib")
```
appcfg.pyでデプロイしたファイルをダウンロードする



```sh
appcfg.py download_app -A <your_app_id> -V <your_app_version> <output-dir>
```

2012年4月24日現在日本語ドキュメントに書いてない情報

Google-App-Engine-Japanで質問しました
https://groups.google.com/forum/?hl=ja&fromgroups#!topic/google-app-engine-japan/1d3ZJGWFjgY

該当の英語ドキュメント
https://developers.google.com/appengine/docs/python/tools/uploadinganapp#Downloading_Source_Code
Bash(コンソール画面)のlsコマンドにhomebrewにあるcoreutilsを使って簡単に色をつける方法(+lsの便利なalias設定)

homebrewのfomula(パッケージ)として、coreutilsというunixカラーを適用するものが落ちているのでこれを利用する

```bash:lsに色をつける
※homebrewの動作環境を前提として
brew install coreutils
```

インストールすることで、glsというコマンドが利用可能になる

その後、.bashrcなどに以下を記述

```Bash:.bashrc
# glsのaliasをlsに設定してオプション追加
alias: ls="gls --color"
```

これで色付きになります。
`export LS_COLORS=`と組み合わせることで、unixカラーで色を自由に変更できます
カラー表はこちらを参考にどうぞ: http://linux-sxs.org/housekeeping/lscolors.html

> 上記サイトのサンプル
> LS_COLORS='di=1:fi=0:ln=31:pi=5:so=5:bd=5:cd=5:or=31:mi=0:ex=35:*.rpm=90'

せっかくlsコマンドにalias設定をするので、この際に便利なオプションもつけてしまいます。以下私の設定

```Bash:.bashrc
alias ls='gls -AFh --color'
# A:「.」や「..」を表示せずに非表示ファイルも出力
# F:ファイルは後ろにバックスラッシュ、シンボリックリンクは後ろに@マークなどの表示オプションがつく
# h:見やすいように表示を整形
# --color:colorあり

alias ll='gls -slhAF --color' 
# s:ファイルサイズを数字で表示(キロバイト単位)
# l:パーミッションの権限などの情報も表示
# h:見やすいように表示を整形(sで表示させた数字に小数点や単位がついて見やすくなる)
# A:「.」や「..」を表示せずに非表示ファイルも出力
# F:ファイルは後ろにバックスラッシュ、シンボリックリンクは後ろに@マークなどの表示オプションがつく
```

表示例はこちら

```Bash:表示例(色は反映されてないけど……)
$ ls
   0 drwx------+  6 username staff  204  4 24 11:05 Desktop/
   0 drwx------+ 17 username staff  578  4 23 22:07 Documents/
   0 drwx------+ 29 username staff  986  4 24 10:54 Downloads/
   0 drwx------  22 username staff  748  4 24 00:03 Dropbox/
   0 drwx------+ 42 username staff 1.4K  4 22 04:05 Library/

$ ll
.bash_profile@       .gem/          Desktop/       Pictures/
.bashrc@             .gemrc@       .ssh/           Documents/
```
Authenticode署名を行う無料ツール


激安コードサイニング証明書で知られる k software が，コード署名用のツールを無償配布している．
他の類似ツールとは異なり，SignTool.exe などの外部プロセスが不要．
setup.exe に署名したいだけなのに，600MB超える Windows SDK をダウンロードせにゃイカンなんて殺生な．という時にはオススメ．

http://codesigning.ksoftware.net/#ksign
クラスメソッドを alias_method_chain

## 2017/11/22追記

Rails5から`alias_method_chain`は非推奨なので `Module#prepend`を使いましょう。

## メソッドをオーバーライドしたいけど元のメソッドを残したい時

ActiveSupport の alias_method_chain を使う。

```ruby
class A
  def foo
    "foo"
  end
end

class B < A
  def foo_with_bar
    "foo bar"
  end
  alias_method_chain :foo, :bar
end

a = A.new
p a.foo              #=> "foo"

b = B.new
p b.foo              #=> "foo"
p b.foo_without_bar  #=> "foo bar"
```

alias_method_chain はインスタンスメソッド用なのでクラスメソッドに適用したい場合は以下のように記述する。

```ruby
class A
  def self.foo
    "foo"
  end
end

class B < A
  class << self
    def foo_with_bar
      "foo bar"
    end
    alias_method_chain :foo, :bar
  end
end

p A.foo              #=> "foo"
p B.foo              #=> "foo"
p B.foo_without_bar  #=> "foo bar"
```
ScalaでHello Worldまで+vim設定 on Mac


~~~~bash
[15435]hash% brew install scala
Warning: You have Xcode 4.1, which is outdated.
Please install Xcode 4.3.
~~~~

いきなりぐぬぬ。でも一応インストールは始まる。後でバージョン上げとこう。

~~~~bash
==> Downloading http://www.scala-lang.org/downloads/distrib/files/scala-2.9.2.tgz
######################################################################## 100.0%
==> Downloading https://raw.github.com/scala/scala-dist/27bc0c25145a8/completion.d/2.9.1/scala
######################################################################## 100.0%
==> Caveats
Bash completion has been installed to:
  /usr/local/etc/bash_completion.d
==> Summary
/usr/local/Cellar/scala/2.9.2: 38 files, 26M, built in 2.1 minutes
~~~~

~~~~bash
% which scala
/usr/local/bin/scala

% scala -version
Scala code runner version 2.9.2 -- Copyright 2002-2011, LAMP/EPFL
~~~~

ほむ。irb的な対話shellがあるよ。

~~~~
% scala
Welcome to Scala version 2.9.2 (Java HotSpot(TM) 64-Bit Server VM, Java 1.6.0_29).
Type in expressions to have them evaluated.
Type :help for more information.

scala> print("heyhey")
heyhey
~~~~

ふむふむ。

~~~~scala:hello.scala
object HelloWorld {
  def main(args: Array[String]) {
    println("Hello Scala!!")
  }
}
~~~~

見た感じあかぬけたJavaって感じ。scalacでコンパイル, scalaで実行。

~~~~
% scalac hello.scala
% ls
HelloWorld$.class  HelloWorld.class   hello.scala
~~~~

クラスファイルができた。なんだ"$"って。

~~~~bash
% scala HelloWorld
Hello Scala!!
~~~~

## vim設定

scalaのsyntax highlight -- [Scala Bazaar System -- 通称sbaz](http://www.scala-lang.org/node/93)という、scalaにとってのgemを使いたい。なんか他のトコ見てるとbrewでscala入れたら当然入ってるよね的な空気で泣きたい。

sbaz探してさまよってたけど、どうもsyntax highlightについては公式(?)のscala.vimを入れれば事足りそう。

~~~diff:.vimrc
+ Bundle 'scala.vim'

augroup MyAutoCmdFileType
  autocmd! MyAutoCmdFileType 
+ autocmd BufRead,BufNewFile *.scala set filetype=scala
~~~~
NDEFフォーマットのタグからIDを読む


```Activity.java
@Override
public void onCreate() {
	TextView textView = (TextView)findViewById(R.id.tag_id);
	String action = getIntent().getAction();
	if(NfcAdapter.ACTION_NDEF_DISCOVERED.equals(action)) {
      	byte[] extraId = intent.getByteArrayExtra(NfcAdapter.EXTRA_ID);
		textView.setText(extraId.toString());
	}
}
```

ACTION_NDEF_DISCOVEREDインテントをフィルタする場合（text/plainのMIMEタイプを付加）

```AndroidManifest.xml
    <uses-feature android:required="true" android:name="android.hardware.nfc" />
    <uses-permission android:name="android.permission.NFC" />

    <application
		...
        <activity
			...
            <intent-filter>
                <action android:name="android.nfc.action.NDEF_DISCOVERED" />
                <category android:name="android.intent.category.DEFAULT" />
				<data android:mineType="text/plain" />
            </intent-filter>
        </activity>
    </application>
```

ACTION_NDEF_DISCOVEREDインテントをフィルタする場合（URIに対して）

```AndroidManifest.xml
<intent-filter>
	<action android:name="android.nfc.action.NDEF_DISCOVERED" />
	<category android:name="android.intent.category.DEFAULT" />
	<data android:scheme="http"
			android:host="developer.android.com"
			android:pathPrefix="/index.html" />
</intent-filter>
```