OmniAICreator/Qiita-1.07M huggingface dataset:
Octopressの記事にはてなブックマークのボタンを設置してみよう！

今回は、記事にはてなブックマークのボタンを設置してみましょう。

## シェアファイル編集

TwitterやFacebookなどのシェア機能が記載されているファイルを編集します。

```ruby:source/_includes/post/sharing.html
<div class="sharing">
  <a href="http://b.hatena.ne.jp/entry/{{ site.url }}{{ page.url }}" class="hatena-bookmark-button" data-hatena-bookmark-layout="standard" title="このエントリーをはてなブックマークに追加"><img src="http://b.st-hatena.com/images/entry-button/button-only.gif" alt="このエントリーをはてなブックマークに追加" width="20" height="20" style="border: none;" /></a><script type="text/javascript" src="http://b.st-hatena.com/js/bookmark_button.js" charset="utf-8" async="async"></script>
  {% if site.twitter_tweet_button %}
  <a href="http://twitter.com/share" class="twitter-share-button" data-url="{{ site.url }}{{ page.url }}" data-via="{{ site.twitter_user }}" data-counturl="{{ site.url }}{{ page.url }}" >Tweet</a>
  {% endif %}
  {% if site.google_plus_one %}
  <div class="g-plusone" data-size="{{ site.google_plus_one_size }}"></div>
  {% endif %}
  {% if site.facebook_like %}
    <div class="fb-like" data-send="true" data-width="450" data-show-faces="false"></div>
  {% endif %}
</div>
```

これだけです。
Rails界隈でよくチェックしているサイトまとめ！

個人的に、Rails界隈でよくチェックしているサイトをまとめておきます。

## プラグイン

### [The Ruby Toolbox](http://www.ruby-toolbox.com/)

プラグインの情報を探す時は、大概ココから入ります。プラグインに関するドキュメント、スクリーンキャスト、ブログエントリー等を、皆でプラグインに紐付けられるようになっているので便利です。また、そのプラグインがどのくらい人気があるのか視覚的に分かるようになっているので、最近急に人気が出ているプラグインとか発見出来たりします。単純にブラブラと徘徊していても楽しいサイトです。

## 技術情報／チュートリアル

### [Ruby5](http://ruby5.envylabs.com/)

海外の有名な企業[Envy Labs](http://envylabs.com/)が情報を掲載しているサイトです。主に、RubyやRails界隈の最新情報、トピックス等を1週間置きくらいに更新しています。

### [Coding Edge](http://www.atmarkit.co.jp/fcoding/rails/)

@ITで取り上げられているカテゴリ。情報量は少なめです。

### [Ruby on Rails Tutorial](http://ruby.railstutorial.org/)

言うまでもなく、Rails初心者は絶対に通過すべし。最新のRailsにもすぐに対応してくれるし、とても親切で分かりやすい。

### [RailsCasts](http://railscasts.com/)

あるテーマに沿った内容のスクリーンキャストをお届けする超有名サイト。

### [ASCIIcasts](http://asciicasts.com/)

RailsCastsの文字だけバージョン。動画見るのが辛い環境とか、こっちだけ見たりもしますね。

### [ASCIIcasts(日本語)](http://ja.asciicasts.com/)

ASCIIcastsの日本語訳サイト。全て網羅している訳ではないけど、どうせ読むなら日本語が良いよね。

### [PeepCode](http://peepcode.com/)

色んなスクリーンキャストが置いてあるサイト。Rails以外にも、Vimとか、TextMateとか、ダウンロードし放題プランに入っているので、たまに覗いて根こそぎダウンロードしてます。

### [RAILS RUMBLE](http://archive.railsrumble.com/)

毎年海外で開催されている48時間以内にチームでRailsを使ったWEBサービスを開発するというコンテストのサイト。応募作品やチーム、使ってるプラグインなども見れるので楽しいです。

### [PlanetRubyOnRails](http://www.planetrubyonrails.com/)

色んなRubyやRails界隈の情報を引っ張ってきて掲載しているサイト。このサイトだけ見てても、割りと色んな情報が入ってくるので便利です。

### [SCREENCASTS.ORG](http://screencasts.org/)

色んなスクリーンキャストがあるサイト。Railsも少しだけあって、HamlとかSassとか勉強する時に活用したきりかもですね。今見ると結構たくさんスクリーンキャストがあります。

## Eラーニング

### [Rails for Zombies](http://railsforzombies.org/)

これ知らない人には是非プレイしてみて欲しい。無料だし。キャラクターがゾンビなので少し気が引けるんだけど、内容は至ってまとも。分かりやすいスクリーンキャストに加えて、クイズ形式でRailsの問題を解いて行くだけ。スクリーンキャストはもちろん英語だけど、分かりやすい動画になっているので、英語が分からなくても全く問題無い。

### [Rails for Zombies2](http://www.codeschool.com/courses/rails-for-zombies-2)

こっちは続編で有料。

### [Rails Best Practices](http://railsbest.com/)

こっちも別編で有料。これもぬぉー！と唸らせるようなテクニックが満載。楽しいです。

***

んー、あんまり、日本語サイト無いですね。
Railsに詳しいエンジニアなら、皆よく知っているサイトだと思いますけど、少しでも参考になればと。
逆に皆はどんなサイトをチェックしているか知りたいですね。
どうやって情報収集してますか？

こんにちわ。
ノウハウじゃないのですが、どのような仕方で情報を集めてるのか気になって投稿させて頂きました。
（タグは色々つけましたが適当です、申し訳ございません。）

自分がやってるのだと、

・**twitterとかマイホットエントリとか見る**
・**はてブのタグ(JavaScriptとか)を引っ掛けて5User以上ブクマしたものをRSSで見る**
・**各種メーリングリスト**

といった方法です。

こういうのやってるよー、みたいのありましたら教えて頂けませんでしょうか？

よろしくお願いします。
Ruby1.9とRailsでCSV出力（SJIS)

Usersテーブルの中身をすべてCSVで書き出す例

```ruby
UserModel < ActiveModel::Base
  def self.csv
    require 'tempfile'
    require 'csv'

    csv_string = CSV.generate do |csv|
      csv << ['グループID','名前','メールアドレス']
      self.all.each do |m|
        csv << [m.group_id, m.name, m.email]
      end
    end
    csv_file = Tempfile.new('download', :encoding => Encoding::CP932)
    csv_file.puts csv_string
    csv_file.close
    csv_file.path
  end
end

User.csv #=> csv出力されたファイルのパス名
```
RailsでTwitterBootstrapを使う

##インストール

GemFileに下記を追加。

```ruby
gem 'twitter-bootstrap-rails'
```

```sh
bundle install
```

```sh
rails g bootstrap:install
```

```
insert  app/assets/javascripts/application.js
create  app/assets/javascripts/bootstrap.js.coffee
create  app/assets/stylesheets/bootstrap_and_overrides.css.less
  gsub  app/assets/stylesheets/application.css
  gsub  app/assets/stylesheets/application.css
```
##レイアウト作成

全体のレイアウトを可変で作成する。

```sh
rails generate bootstrap:layout application fluid
```

##scaffold

普通にscaffoldする。

```sh
rails g scaffold Product title:string description:text price:decimal
rake db:migrate
```

作成されたレイアウトにTwitterBootstrapを適用。

```sh
rails g bootstrap:themed Products
```

[twitter-bootstrap-railsのREADME](https://github.com/seyhunak/twitter-bootstrap-rails/blob/master/README.md)
JavaScriptで知ってHappyになる型変換

###Stringでキャストする
```js:
// 空の文字列の付加により値を簡単に文字列にキャストできます。
'' + 10 === '10'; // true
```
###Numberでキャストする
```js:
// 単項プラスオペレーターを使うと数値にキャストすることができます。
+'10' === 10; // true
+'010' === 10; // true
Number('010') === 10; //true ※Numberの前にnewを使っていないことに要注意。
parseInt('010', 10) === 10; //true ※引数の10は10進数の意味です。

+'010.2' === 10.2 // true
Number('010.2') === 10.2 // true ※Numberの前にnewを使っていないことに要注意。
parseInt('010.2', 10) === 10 // true ※引数の10は10進数の意味です。
```
###Booleanでキャストする
```js:
// notオペレーターを2回使うと、値はブーリアンに変換できます。
// 「!!0」、「!!''」と「!!false」以外は全部trueになっていますね
!!'hoge';  // true
!!'';      // false
!!0;       // false
!!'0';     // true
!!1;       // true
!!'1';     // true
!!-1;      // true
!!'-1';    // true
!!{};      // true
!!true;    // true
!!'true';  // true
!!false;   // false
!!'false'; // true
```
JavaScriptで知ってHappyになるtypeofの使用とデータ型取得

```js
// hogeが実際に宣言されたかどうかをチェックします。
typeof hoge !== 'undefined'

// Object.prototype.toStringは標準形式の文字列を返すため、型の判断にこれが使えます。
Object.prototype.toString.call("hoge");                     // "[object String]"
Object.prototype.toString.call(new String("hoge"));         // "[object String]"
Object.prototype.toString.call(1.0);                        // "[object Number]"
Object.prototype.toString.call(new Number(1.0));            // "[object Number]"
Object.prototype.toString.call(true);                       // "[object Boolean]"
Object.prototype.toString.call(new Boolean(true));          // "[object Boolean]"
Object.prototype.toString.call(new Date());                 // "[object Date]"
Object.prototype.toString.call(new Error());                // "[object Error]"
Object.prototype.toString.call([1,2]);                      // "[object Array]"
Object.prototype.toString.call(new Array(1,2,3));           // "[object Array]"
Object.prototype.toString.call(new Function(""));           // "[object Function]"
Object.prototype.toString.call(/abc/g);                     // "[object RegExp]"
Object.prototype.toString.call(new RegExp("/abc/g"));       // "[object RegExp]"
Object.prototype.toString.call({});                         // "[object Object]"
Object.prototype.toString.call(new Object());               // "[object Object]"
Object.prototype.toString.call([]);                         // "[object Array]"
// IE8
Object.prototype.toString.call(null);                       // "[object Object]"
Object.prototype.toString.call(undefined);                  // "[object Object]"
// Firefox 4
Object.prototype.toString.call(null);                       // "[object Null]"
Object.prototype.toString.call(undefined);                  // "[object Undefined]"

// オブジェクトの型を取得するためには
// Object.prototype.toString.call(obj).slice(8, -1)を使えば良い
Object.prototype.toString.call([]).slice(8, -1);            // "Array"
Object.prototype.toString.call({}).slice(8, -1);            // "Object"
Object.prototype.toString.call(8).slice(8, -1);             // "Number"
```

「JavaScriptの全ての要素は2つの例外を除いて、オブジェクトのように振る舞います。 その2つとはnullとundefinedです。」と言われていますが、これが正しいであれば、IE8の戻り値が気に入らないですね。
NHKネットラジオをVLCで録音するスクリプト

そんでもってcronで定期予約をして語学勉強したい。

[VLC](http://www.videolan.org/vlc/)でストリームをmp3に変換してファイル出力するスクリプト。
第一引数に、録音時間を指定できます。

```recording.sh

#! /bin/bash

DEST_FILE_NAME_BASE=`date +%Y%m%d-%H%M`

## 録音時間
if [ $# = 0 ]
then
  RECORDING_MINUTES=15
else
  RECORDING_MINUTES=$1
fi

DEST_DIR="/Users/flo_jack/NHK_Radio"

DEST_FILE="$DEST_DIR/$DEST_FILE_NAME_BASE.mp3"

# ストリームには10〜20秒のタイムラグがあるため、30秒余分に保存
RECORDING_TIME=$(($RECORDING_MINUTES * 60 + 30))

# らじる★らじるのラジオ第2放送ストリーム
STREAM_SOURCE="mms://a57.l12993246056.c129932.g.lm.akamaistream.net/D/57/129932/v0001/reflector:46056"
# ラジオ第1ストリーム
#STREAM_SOURCE="mms://a33.l12993146032.c129931.g.lm.akamaistream.net/D/33/129931/v0001/reflector:46032"
# NHK-FMストリーム
#STREAM_SOURCE="mms://a52.l12993346051.c129933.g.lm.akamaistream.net/D/52/129933/v0001/reflector:46051"

if [ ! -e "$DEST_DIR" ]
then
  mkdir "$DEST_DIR"
fi

/usr/local/bin/vlc -I rc $STREAM_SOURCE :sout="#transcode{acodec=mp3}:std{access=file,mux=raw,dst=$DEST_FILE}" --run-time $RECORDING_TIME vlc://quit
```

録音時間以外の指定、たとえば保存場所の指定などを引数から行うことは、このスクリプトではできません。シェルスクリプトに不慣れなものですみません。
パスはMacな感じで書いてあるため、使用している環境に応じて書き換える必要があります。VLCのパスも同様です。Macの場合、VLCはVLCを右クリックして『パッケージの内容を表示』してから `Contents/MacOS/VLC` に存在します。VLCをアプリケーションフォルダにインストールしていれば `/Applications/VLC/Contents/MacOS/VLC` となるでしょう。私はこのシンボリックリンクを `/usr/local/bin/vlc` になんとなく作りました。

10分番組を記録する使い方。

```
recording.sh 10
```

ラジオ英会話（月～金曜日の6:45から15分間)を保存する場合のcrontab例

```
45	6	*	*	1-5	/Users/flo_jack/NHK_Radio/recording.sh 15
```

当然ながら、この時間にコンピュータを起動しておく必要があります。
放送は実際の時間より10〜20秒の時間差をもって送信されますので、時間ちょうどにcronを設定しても、うまいぐいあいに開始より先に記録が始まります。
ググるよりもまずはpry

Rubyといえば動的型付け言語なので、IDEサポートがほとんど皆無です。
それはしょうがないんですが、やはりIDEサポートはけっこうなアドバンテージに思うわけで。
例えばC#+Visual Studioは素晴らしいです。膨大なBCLも、IntelliSenseがあると結構なんとかなったりします。
もちろんruby環境にも補完機能がないわけではないですが、やはり弱いです。
なのでどうしてもtypo→エラー→ググるというプロセスをよく歩んでしまいます。

**そこでpryですよ**

pryはirb（rubyの標準インタプリタ）の上位版です。
irbで出来ることはpryでも大抵は可能です。
pryにはシンタックスハイライト機能とかもありますが、一番はlsコマンドとcdコマンドです。
例えば適当なstringオブジェクトをlsしてみると
![ls "hello pry!"](http://cache.gyazo.com/b953833091a748b944b146a09e81a00d.png)

`"hello pry!"`オブジェクトのメソッドが一覧されます。
また、同じstringオブジェクトの中に入ってみます。
![cd "hello pry!"](http://cache.gyazo.com/0172c3b1d9f88196dc426171ab8de69b.png)
同じlsでも内容が変わってますね。そう、lsの内容が先ほどの`ls "hello pry!"`と同じ内容になりました。
つまり、cdで中に入ったわけです。

しかし、メソッドだけわかったところであまり旨くないですね。
pryは`?`コマンドでドキュメントを、$コマンドで定義元のコードを見ることができます。

![? 1.upto](http://cache.gyazo.com/a82c25ca621edb1aa76dfe4c8a815415.png)
![$ 1.upto](http://cache.gyazo.com/c8bab16e7f44acb71af7ccb315eae724.png)

また、pryのlsは--grepオプションで*正規表現で*grep可能です。
![ls "hogehoge" --grep to_.*](http://cache.gyazo.com/30a3f0ac63058aae39aa74f6eb521ff0.png)

最後に、pry内で.の後にシェルコマンドが使えます。

また、railsを使う際も、pryならrailsの独自拡張メソッドを全てドキュメントとソースを一緒に見れます。
railsでpryを使うには以下をGemfileに書いて`bundle install`するだけです。
`rails console`がirbでなくpryで起動します。

```file:Gemfile
group :development, :test do
  gem 'pry-rails'
  gem 'pry-doc'
end
```

Enjoy Cording!
FileUtils.cp_r()で*(アスタリスク、ワイルドカード)が使いたい

ディレクトリの中身だけコピーしたい時

```ruby
FileUtils.cp_r("hoge/*","foo/") # これではだめ
FileUtils.cp_r(Dir.glob("hoge/*"),"foo/") #こうすれば同じ結果が得られる
```
[Away3D 4.0 beta] 透過するTextureMaterialを作る

var bitmapData:BitmapData = new BitmapData(32, 32, true, 0x00000000);
bitmapData.draw(shape);
var material:TextureMaterial = new TextureMaterial(new BitmapTexture(bitmapData));
material.alphaBlending = true;
sprite = new Sprite3D(material, 32, 32);
JavaScriptでsprintf

[はてブChrome公式拡張](https://github.com/hatena/hatena-bookmark-googlechrome-extension) で使われている sprintf は単体でも使える。便利。

```javascript:sprintf.js
var sprintf = function (str) {
    var args = Array.prototype.slice.call(arguments, 1);
    return str.replace(/%0(\d+)d/g, function(m, num) {
        var r = String(args.shift());
        var c = '';
        num = parseInt(num) - r.length;
        while (--num >= 0) c += '0';
        return c + r;
    }).replace(/%[sdf]/g, function(m) { return sprintf._SPRINTF_HASH[m](args.shift()) });
};
sprintf._SPRINTF_HASH = {
    '%s': String,
    '%d': parseInt,
    '%f': parseFloat
};
```

この拡張内で使われているUtility関数は他のケースでも便利に使いまわせるものが多い。ダイジェストは以下で解説してます。

[JSの開発効率を上げる便利関数メモ](http://cside.g.hatena.ne.jp/Cside/20110427/p1)

JSerなら [ソース](https://github.com/hatena/hatena-bookmark-googlechrome-extension) はひととおり目を通しておくと良いでしょう。
.htaccess


```apache:
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule ^$ /error.php [L,QSA]
```

.htaccess触るのは初めてなのでメモ。
RewriteCond はRewriteRuleの条件指定に使う
上記の場合は、
リクエストされたファイルが存在しなくて
ディレクトリが存在しない場合は
error.phpを表示
Railsのcontroller, view内でURLを取得する

```ruby
root_url(only_path: false) #=> http://localhost:3000/
request.host_with_port #=> localhost:3000
request.fullpath #=> /posts/index
url_for(only_path: false) #=> http://localhost:3000/posts/index
```

追記：Rails5での動作を確認しました。（より良い方法があるかどうかは未確認）
配列にもリストにも使えるmember関数

Tclを使っていて、ある添字に対しての配列の要素や、リストにある値が存在するか調べたいときがあります。
配列の場合は array get arr $foo 、リストの場合は lsearch $l $foo を使えば目的は達成できますが、配列とリストで書き方を変えないといけません。特に、配列は$が不要で、リストは$がいるというのがややこしいです。そこで、配列に対しても、リストに対しても使えるmember関数を作りました。

特に、別の人が作ったTclソースをメンテする時に活躍します。

```tcl:member.tcl
# container の中に 要素 elememt があるとき1を返す。無い時は0を返す。
proc member { container elememt } {
    upvar $container upver_container
    
    if [array exists upver_container] {
        # array の処理
        if {[array get upver_container $elememt] != ""}  { return 1 } else { return 0}
    }
    
    # list の処理
    if {[lsearch $upver_container $elememt] != -1} {return 1} else {return 0}
}
    
# 使い方
# 配列の場合
set arr(a) 1
set arr(b) 2
set arr(c) 3
set arr(d) 4
set arr(e) 5
set arr(f) 6

# 1 1 1 0が正解
puts [member arr a]
puts [member arr b]
puts [member arr f]
puts [member arr g]

# リストの場合
set lt {a b c d e f}

# 1 1 1 0が正解, リストに$不要
puts [member lt a]
puts [member lt b]
puts [member lt f]
puts [member lt g]
```
RSenseで"server is not running"が出た場合の対処

VimでRSenseが補完してくれないので確認のため

```sh
rsense version
```

と、したところ

```
server is not running
```

と、出力され起動できない。

あれやこれやと調べていたところ、/tmp配下にあるrsense関連のファイルを削除したら直った。

```sh
sudo rm /tmp/rsense-pid
sudo rm /tmp/rsense-socket
```
jqueryで一部の要素を対象外にする

サイト共通で設定してしまったセレクタから一部を非対象にしたい場合

[使いどころ]
後から共通処理を追加する場合等で、対象にしたくない要素がある場合。

$('a[href^=#]').click(function() { console.log('here'); });

class='hoge'を除くには

$('a[href^=#]:not(.hoge)').click(function() { console.log('here'); });

※マニュアルにあったが備忘。
すごい乱暴な方法で Haskell の小数を正確数にする

そもそも Haskell の Prelude で `toRational :: Real a => a -> Rational` が宣言されているので，これを使えば小数を有理数として扱えはするけれど，以下のように望ましくない動きをする

```haskell
import Data.Ratio ((%))
11 % 10  -- Haskell での 11/10 (= 1.1) の有理数表現
fromRational $ 11 % 10 -- 1.1 これは期待通り
fromRational $ toRational 1.1 -- 1.1 これも期待通り
(toRational 1.1) == (toRational 1.1) -- True これも期待通り
toRational 1.1 -- 2476979795053773 % 2251799813685248 えっ
(toRational 1.1) == (11 % 10) -- False そんな…
```

`fromRational` と `toRational` を連続して適用する場合は割と望ましい結果が得られるが，`toRational` のみを利用して，他の有理数との算術演算をしたりするとどうもおかしい事になりがち．
なので多少乱暴な方法で正確数を `Real a` ( 実数型クラスのインスタンス ) から得る関数を書く

```haskell::ExactNum.hs
import Numeric ( floatToDigit, fromRat )
import Data.Ratio ( (%), denominator )

-- | exact ratio number from Real `a`
-- example
-- > exact 1.1 -- 11 % 10
-- > (exact 1.1) == (11 % 10) -- True
-- > fromRational $ exact 1.1 -- 1.1
exactFromReal :: Real a => a -> Rational
exactFromReal x
  | asInt      = ratio
  | otherwise  = numer % denom
  where
  asInt  = denominator ratio == 1
  ratio  = toRational x
  numer  = round $ ratio * (denom % 1)
  denom  = 10 ^ (uN - iN)
  iN     = snd digits
  uN     = length $ fst digits
  digits = floatToDigits 10 $ fromRat ratio
```
ただし，ここで利用している `Numeric.floatToDigits` が，十進で17桁以上は切ってしまうので,  精度はそこまで良いわけではない．
QuickCheck でテストした場合．だいたい ±10^(-12) (ピコ) の精度は保証できている
Octopressで新規記事を作成してみよう！

今回は、新規記事を作成してみましょう。
公式ドキュメントは、[Blogging Basics](http://octopress.org/docs/blogging/)にあります。

## 新規記事作成

新規記事がMarkdown形式で自動生成されます。

```bash
$ rake new_post[test]
Creating new post: source/_posts/2012-03-29-test.markdown
```

## 新規記事編集

新規記事を編集します。
コメント有無や、カテゴリも付けられます。

```bash
---
layout: post
title: "test"
date: 2012-03-29 23:49
comments: true
categories: Octopress
---

どうも初めまして、FakeStarBabyです。

これは、Octopressのテスト記事です。
```

以上で、ローカル環境で新規記事が表示されればオッケーです。
PHPから画像を送信する際にキャッシュを有効にしておく

認証が必要な画像を送信する際に、PHPでチェックをした上で、送信するが、
何度もリクエストされると嫌なので、ブラウザのキャッシュを有効にして送る。

PHPは標準機能がキャッシュ無効ヘッダ(pragma :no-cache)を送るので、明示的に上書きしないと効果がでない。


```php:send_image.php
<?php
$file_name = some_function();
//画像タイプ判別
$type_id   = exif_imagetype($file_name);
$type_name = image_type_to_mime_type($type_id);
//var_dump($type_name);

//最終更新日を作成（キャッシュ用）

$last_modified = filectime($file_name);

///もしキャッシュ更新確認リクエストなら
if(isset($_SERVER["HTTP_IF_MODIFIED_SINCE"])){
    $str_time = $_SERVER["HTTP_IF_MODIFIED_SINCE"];
    $last_modified_since = strtotime($str_time);
    if($last_modified_since == $last_modified){
        //ファイル更新がなければ、キャッシュ有効を返す。
        header("HTTP/1.1 304 image not modified");
        header('Pragma: cache');
        header("Cache-Control: max-age=".(60*60*24*100)); // １００日キャッシュしていい
        exit;
    }
}

//画像を返す。
header("Last-Modified: " . date('r', $last_modified));
header("Content-type: " . $type_name);
//キャッシュを有効にする
header('Pragma: cache');
header("Cache-Control: max-age=".(60*60*24*100)); // １００日キャッシュしていい
echo file_get_contents($file_name);

```
Octopressで新規ページを作成してみよう！

新規記事ではなくて、新規ページです。
今回はプロフィールページを作成してみよう！

公式ドキュメントは、[Blogging Basics](http://octopress.org/docs/blogging/)にあります。

## 新規ページ作成

新規ページがMarkdown形式で自動作成されます。

```bash
$ rake new_page[about]
Creating new page: source/about/index.markdown
```

## 新規ページ編集

まずは、ナビからプロフィールページへのリンクを追加します。

```html:source/_includes/custom/navigation.html
<ul class="main">
	<li><a href="{{ root_url }}/">Blog</a></li>
	<li><a href="{{ root_url }}/blog/archives">Archives</a></li>
	<li><a href="{{ root_url }}/about">About</a></li>
</ul>
```

そして、肝心のプロフィールページを編集します。

```bash:source/about/index.markdown
---
layout: page
title: "About"
date: 2012-03-29 09:59
comments: false
sharing: true
footer: true
---

新規事業に従事するRailsエンジニアです。

嫁と娘(3歳)と息子(0歳)がいます。

興味のあるテーマ:

Ruby/Rails/Git/Heroku/jQueryMobile/iPhoneApps/Agile/TDD...

* [GitHub](https://github.com/FakeStarBaby)
* [Qiita](http://qiita.com/users/fakestarbaby)
* [Twitter](https://twitter.com/#!/fakestarbaby)
* [Another Blog](http://fakestarbaby.hatenablog.com/)
```

以上で、ローカル環境のナビにプロフィールページへのリンクが追加され、プロフィールページが表示されればオッケーです。
Play & Scalaで"import models_"がtest環境では有効だが本体では有効でない

調査中です。ご存知の方いたら教えてください。
play & scalaで、テストコードからデータベースにデータを投稿することはできるのですが、本体からデータを投稿することができません。
下記は、問題に関係しているとおぼしきソースコード群です。

1.コンパイルエラーの内容
2.models.scala
3.controllers.scala
4.Tests.scala

```scala:エラーの内容.scala
//Compilation error
//The file /app/controllers.scala could not be compiled. Error raised is : not found: value Reserve
//In /app/controllers.scala (around line 12)

 object Application extends Controller {
   import views.Application._
   def index = html.index()
   def reserve = {
     ↓Reserve.create(Reserve(NotAssigned, "tarou@gmail.com", "テスト太郎", "201205101111", "test dome2"))
     Json("{message:'hey'}")
   }
 }
```

```scala:project/app/models.scala
package models
 
import play.db.anorm._
import play.db.anorm.SqlParser._
import play.db.anorm.defaults._
 
//Reserve 
 
case class Reserve(
  id:Pk[Long],
  user_id:String, user_name:String, date_time:String, place:String
)

object Reserve extends Magic[Reserve]
```


```scala:project/apps/controllers.scala
package controllers

import play._
import play.mvc._
import models._ 
import play.db.anorm._

object Application extends Controller {
  import views.Application._
  def index = html.index()
  def reserve = Json("{message:'hey'}")
}
```

```scala:project/test/Tests.scala
import play._
import play.test._

import org.scalatest._
import org.scalatest.junit._
import org.scalatest.matchers._

class BasicTests extends UnitFlatSpec with ShouldMatchers {
  import models._    
  import play.db.anorm._

  it should "create and retrieve a Reserve" in {
    Reserve.create(Reserve(NotAssigned, "tarou@gmail.com", "テスト太郎", "201205101111", "test dome2"))

    val tarou = Reserve.find(
      "user_id={user_id}").on("user_id" -> "tarou@gmail.com"
    ).first()

    tarou should not be (None)
    tarou.get.user_name should be ("テスト太郎")
  }
}
```

####参考文献
#####チュートリアル
http://playscalaja.appspot.com/documentation/0.9/home
上記では、"import models._を忘れないように"という記述しかありません。


######上記チュートリアルの完成形とおぼしきソース
https://github.com/FabioBatSilva/scala-play-yabe
git cloneしてDB構築しましたが、ルーティングに関する下記のエラーが出ました。
ソースコードを読んだところ、import models._以外に特別オブジェクトを読み込んでいるとおぼしきソースはありませんでした。
Not found
Application.index action not found
These routes have been tried, in this order :
YAMLでデータの定義と参照

Railsのテストデータを作るときに役に立ちそう。

```yaml
# 有効なデータを定義
valid_data:
  title: &valid_title
    ValidTitle
  image_url: &valid_image_url
    Valid.jpg

# エラーデータ
invalid_title:
  title: slafsjfksajsfajfjaljfl
  image_url: *valid_image_url

invalid_image_url:
  title: *valid_title
  image_url: slafjksfjasdkja
```
localhostのサブドメインにワイルドカード

hostsとかだとワイルドカード指定できないので、ApacheのVirtualHostで云々とか思っていたんですが、
ググってみると皆さん普通にプロキシでやってました。

ローカルのテスト用だし、再起動云々とかも必要無いので便利ですね。

```.proxy.pac

function FindProxyForURL(url, host) {
  if (shExpMatch(host, "*.localhost")) {
    return "PROXY localhost";
  }
  if (shExpMatch(host, "localhost")) {
    return "PROXY localhost";
  }
  return "DIRECT";
}

```

Rails(WEBric)とかならデフォのポートは3000なので、
`return "PROXY localhost:3000";`でおｋです。

あとはこれを適当な場所において、ブラウザで指定するだけ。

自分はFireFoxでしかやってませんが、FireFoxならこんな感じ。

#####ConnectionのSettingsをクリック
![ConnectionのSettingsをクリック](http://gyazo.com/020809bbb98ba87da6400aa826d4ff8f.png?1333000241)

#####fileのURLはLinuxの場合(WinやMacだとちょっと変わります)
![fileのURLはLinuxの場合(WinやMacだとちょっと変わります)](http://gyazo.com/075b8a4a2f732694c87b94e1a390bc90.png?1333000320)

URLはfileプロトコルでもhttpプロトコルでもおｋでした。
ただ余計なもの上げてもアレなので普通にfileプロトコルでいいんじゃないでしょうか。
mysqlの設定ファイルシンタクスチェック

```sh
$ sudo /usr/libexec/mysqld --help --verbose > /dev/null
120329 11:58:52 [Note] Plugin 'FEDERATED' is disabled.
```
関連
[apacheの設定ファイルのシンタックスチェック](http://qiita.com/items/0b92086aedcbdfae56d4)
[nginxで設定ファイルチェック](http://qiita.com/items/bd6774888a790c00e6fd)
Octopressにて、ローカル環境でサクサク確認作業をするには？

Octopressで新規記事を書いたり、テーマを変更したりした時、ローカル環境でサクサク確認作業をする方法をメモる。
基本的な操作は、[Blogging Basics](http://octopress.org/docs/blogging/)の"Generate & Preview"を参照すると良い。

## 自動生成

以下のコマンドでファイルを自動生成する。

```bash
$ rake generate
## Generating Site with Jekyll
unchanged sass/screen.scss
Configuration from /Users/y-hirasawa/Projects/rails/fakestarbaby.github.com/_config.yml
Building site: source -> public
Successfully generated site: source -> public
```

## ファイル監視

以下のコマンドでファイルを監視する。

```bash
$ rake watch
Starting to watch source with Jekyll and Compass.
Configuration from /Users/y-hirasawa/Projects/rails/fakestarbaby.github.com/_config.yml
Auto-regenerating enabled: source -> public
[2012-03-29 09:23:12] regeneration: 117 files changed
>>> Compass is watching for changes. Press Ctrl-C to Stop.
```

## WEBサーバー起動

以下のコマンドでWEBサーバーを起動する。

```bash
$ rake preview
Starting to watch source with Jekyll and Compass. Starting Rack on port 4000
Configuration from /Users/y-hirasawa/Projects/rails/fakestarbaby.github.com/_config.yml
[2012-03-29 09:24:55] INFO  WEBrick 1.3.1
[2012-03-29 09:24:55] INFO  ruby 1.9.2 (2011-07-09) [x86_64-darwin11.3.0]
[2012-03-29 09:24:55] INFO  WEBrick::HTTPServer#start: pid=7792 port=4000
Auto-regenerating enabled: source -> public
[2012-03-29 09:24:55] regeneration: 117 files changed
>>> Compass is watching for changes. Press Ctrl-C to Stop.
```

この状態でゴニョゴニョすれば、ファイルの変更を自動的に検知して、即時に確認作業を行う事が出来るようになる。
便利ですね。
MANPATH を設定して man の検索パスを追加する

アプリケーションを個別の場所にインストールした場合、manを参照できるように環境変数 `MANPATH` で man の検索パスを設定することがある。
しかし、`MANPATH` に値を設定するとシステム全体の検索パスが無視されてしまう。
これを防ぐためには `MANPATH` に `:` を含めるようにする。

例

```sh
MANPATH=${HOME}/share/man:
```

末尾に `:` を記述した場合、`MANPATH` の後ろにシステム全体の検索パスが追加され、それが検索パスとして使用される。
先頭に `:` を記述した場合、`MANPATH` の前にシステム全体の検索パスが追加される。
`::` とコロンが二つ含まれている場合、システム全体の検索パスが二つのコロンの間に挿入される。

参考 `manpath(1)`
Sinatra で get '/*/' 時に public/*/index.html を返す

```app.rb
require 'sinatra'

get '/' do
  send_file File.join(settings.public_folder, 'index.html')
end

get '/*/' do |path|
  send_file File.join(settings.public_folder, path, 'index.html')
end
```

##参考
http://stackoverflow.com/a/6957323/1006253

##課題

http://localhost:4567/a/b/ とすれば public/a/b/index.html が取れるのはいいが http://localhost:4567/a/b でも同様に動作して欲しい．さてどうしようかな？

##所感

主な目的が静的な HTML ファイルのサーバなのだが，それに Sinatra を選んでいるのがそもそも間違いか？
Heroku を使ってやりたいので安直に Sinatra を選んだのだが Sinatra 以外，Heroku 以外に何か選択肢は無いか？
モバイルからのリクエストのCSRF検証をスキップする

以前書いた内容が動かなかったので、再投稿。

```ruby:Gemfile
gem 'which_browser'
```

```ruby:application_controller.rb
class ApplicationController < ActionController::Base
  protect_from_forgery

  protected

  # Override
  def verified_request?
    request.mobile? || super
  end
end
```

- `protect_from_forgery`内ではCSRF検証を行うアクション`verify_authenticity_token`をfilterにはさんでる。
- そのアクションの中で実際にCSRF検証を行う条件として使われているメソッドが`verified_request?`。
- というわけで、こいつをオーバーライドしてあげればCSRF検証の条件を追加することができる。

---
### 追記

which_browserをフォークしてtitaniumのiOSシミュレータからのリクエストにも対応させた。

```ruby:Gemfile
gem 'which_browser', :git => 'git://github.com/naoty/which_browser.git', :branch => 'titanium_prototype'
```

```ruby:application_controller.rb
class ApplicationController < ActionController::Base
  protect_from_forgery

  protected

  # Override
  def verified_request?
    request.ti_iphone? || super
  end
end
```
Octopressのテーマを変更してみよう！

Octopressは、テーマ機構を持っている為、簡単にテーマを変更する事が可能です。
但し、現在ではテーマは少なめです。

利用可能な公式のテーマリストは、[3rd Party Octopress Themes](https://github.com/imathis/octopress/wiki/3rd-Party-Octopress-Themes)に掲載されています。
今回は、"Slash"というテーマに変更したいと思います。

Demo Site: [http://zespia.tw/Octopress-Theme-Slash/](http://zespia.tw/Octopress-Theme-Slash/)
GitHub: [https://github.com/tommy351/Octopress-Theme-Slash](https://github.com/tommy351/Octopress-Theme-Slash)

## テーマインストール

[README](https://github.com/tommy351/Octopress-Theme-Slash/blob/master/README.md)に記載されている通りにインストールするだけです。

```bash
$ git clone git://github.com/tommy351/Octopress-Theme-Slash.git .themes/slash
Cloning into .themes/slash...
remote: Counting objects: 730, done.
remote: Compressing objects: 100% (365/365), done.
remote: Total 730 (delta 400), reused 675 (delta 345)
Receiving objects: 100% (730/730), 221.25 KiB | 86 KiB/s, done.
Resolving deltas: 100% (400/400), done.
$ rake install['slash']
A theme is already installed, proceeding will overwrite existing files. Are you sure? [y/n] y
## Copying slash theme into ./source and ./sass
$ rake generate
## Generating Site with Jekyll
overwrite source/stylesheets/screen.css 
/Users/y-hirasawa/.rvm/gems/ruby-1.9.3-p0@fakestarbaby.github.com/gems/maruku-0.6.0/lib/maruku/input/parse_doc.rb:22:in `<top (required)>': iconv will be deprecated in the future, use String#encode instead.
Configuration from /Users/y-hirasawa/Projects/rails/fakestarbaby.github.com/_config.yml
/Users/y-hirasawa/.rvm/gems/ruby-1.9.3-p0@fakestarbaby.github.com/gems/ffi-1.0.9/lib/ffi/platform.rb:27: Use RbConfig instead of obsolete and deprecated Config.
Building site: source -> public
Successfully generated site: source -> public
```

プレビューで確認してテーマが変更されていれば成功です。
簡単ですね！

欲を言えば、もっとテーマ増えて欲しいですけどね。
OctopressでGoogleアナリティクスを使おう！

Octopressは、デフォルトでGoogleアナリティクスを使う事が可能です。

## Googleアナリティクス情報は、_config.ymlに追記します。

```ruby:_config.yml
# ----------------------- #
#   3rd Party Settings    #
# ----------------------- #

# Google Analytics
google_analytics_tracking_id: UA-XXXXXXXX-X
```

後は例の如く、以下の要領で自動生成させて、デプロイします。

```bash
$ rake generate
## Generating Site with Jekyll
unchanged sass/screen.scss
/Users/fakestarbaby/.rvm/gems/ruby-1.9.3-p0@fakestarbaby.github.com/gems/maruku-0.6.0/lib/maruku/input/parse_doc.rb:22:in `<top (required)>': iconv will be deprecated in the future, use String#encode instead.
Configuration from /Users/fakestarbaby/Projects/rails/fakestarbaby.github.com/_config.yml
/Users/fakestarbaby/.rvm/gems/ruby-1.9.3-p0@fakestarbaby.github.com/gems/ffi-1.0.9/lib/ffi/platform.rb:27: Use RbConfig instead of obsolete and deprecated Config.
Building site: source -> public
Successfully generated site: source -> public
$ rake deploy
## Deploying branch to Github Pages 

## copying public to _deploy

## Commiting: Site updated at 2012-03-28 03:43:40 UTC
[master 8d8a8aa] Site updated at 2012-03-28 03:43:40 UTC
 3 files changed, 25 insertions(+), 1 deletions(-)

## Pushing generated _deploy website
Counting objects: 13, done.
Delta compression using up to 2 threads.
Compressing objects: 100% (5/5), done.
Writing objects: 100% (7/7), 934 bytes, done.
Total 7 (delta 4), reused 0 (delta 0)
To git@github.com:FakeStarBaby/fakestarbaby.github.com.git
   b45b1ca..8d8a8aa  master -> master

## Github Pages deploy complete
```

後は、Googleアナリティクス側でトラッキングコードが確認出来ればオーケーです。
簡単ですね！
Octopressでツイートを表示させよう！

Octopressは、デフォルトでツイートを表示させる事が可能です。

## Twitter情報を追記

Twitter情報は、_config.ymlに追記します。

```ruby:_config.yml
# ----------------------- #
#   3rd Party Settings    #
# ----------------------- #

# Twitter
twitter_user: fakestarbaby
twitter_tweet_count: 10
twitter_show_replies: false
twitter_follow_button: true
twitter_show_follower_count: false
twitter_tweet_button: true
```

後は例の如く、以下の要領で自動生成させればオシマイです。

```bash
$ rake generate
## Generating Site with Jekyll
unchanged sass/screen.scss
/Users/fakestarbaby/.rvm/gems/ruby-1.9.3-p0@fakestarbaby.github.com/gems/maruku-0.6.0/lib/maruku/input/parse_doc.rb:22:in `<top (required)>': iconv will be deprecated in the future, use String#encode instead.
Configuration from /Users/fakestarbaby/Projects/rails/fakestarbaby.github.com/_config.yml
/Users/fakestarbaby/.rvm/gems/ruby-1.9.3-p0@fakestarbaby.github.com/gems/ffi-1.0.9/lib/ffi/platform.rb:27: Use RbConfig instead of obsolete and deprecated Config.
Building site: source -> public
Successfully generated site: source -> public
```

簡単ですね！
OctopressでGitHubリポジトリを表示させよう！

Octopressは、デフォルトでGitHubリポジトリを表示させる事が可能です。

## GitHubリポジトリ情報を追記

GitHubリポジトリ情報は、_config.ymlに追記します。

```ruby:_config.yml
# ----------------------- #
#   3rd Party Settings    #
# ----------------------- #

# Github repositories
github_user: fakestarbaby
github_repo_count: 3
github_show_profile_link: true
github_skip_forks: true
```

後は例の如く、以下の要領で自動生成させればオシマイです。

```bash
$ rake generate
## Generating Site with Jekyll
unchanged sass/screen.scss
/Users/fakestarbaby/.rvm/gems/ruby-1.9.3-p0@fakestarbaby.github.com/gems/maruku-0.6.0/lib/maruku/input/parse_doc.rb:22:in `<top (required)>': iconv will be deprecated in the future, use String#encode instead.
Configuration from /Users/fakestarbaby/Projects/rails/fakestarbaby.github.com/_config.yml
/Users/fakestarbaby/.rvm/gems/ruby-1.9.3-p0@fakestarbaby.github.com/gems/ffi-1.0.9/lib/ffi/platform.rb:27: Use RbConfig instead of obsolete and deprecated Config.
Building site: source -> public
Successfully generated site: source -> public
```

簡単ですね！
Octopressの初期設定をしよう！

Octopressをインストールした直後に行う初期設定について、簡単にまとめとこう。

## ブログ基本情報を変更

ブログの各種設定は、_config.ymlに記載されています。
ブログ基本情報として、以下を更新しておこう。

```ruby:_config.yml
# ----------------------- #
#      Main Configs       #
# ----------------------- #

url: http://FakeStarBaby.github.com
title: SCRABBLE NOTE
subtitle: 思うがままに書き殴るブログ
author: Yoshinori Hirasawa
simple_search: http://google.com/search
description: 
```

## ローカル環境で確認

Octopressでファイルを作成、更新したら、以下の手順でローカル環境で確認する事が出来ます。

```bash
$ rake generate
## Generating Site with Jekyll
unchanged sass/screen.scss
/Users/fakestarbaby/.rvm/gems/ruby-1.9.3-p0@fakestarbaby.github.com/gems/maruku-0.6.0/lib/maruku/input/parse_doc.rb:22:in `<top (required)>': iconv will be deprecated in the future, use String#encode instead.
Configuration from /Users/fakestarbaby/Projects/rails/fakestarbaby.github.com/_config.yml
/Users/fakestarbaby/.rvm/gems/ruby-1.9.3-p0@fakestarbaby.github.com/gems/ffi-1.0.9/lib/ffi/platform.rb:27: Use RbConfig instead of obsolete and deprecated Config.
Building site: source -> public
Successfully generated site: source -> public
$ rake preview
Starting to watch source with Jekyll and Compass. Starting Rack on port 4000
[2012-03-28 10:36:20] INFO  WEBrick 1.3.1
[2012-03-28 10:36:20] INFO  ruby 1.9.3 (2011-10-30) [x86_64-darwin11.2.0]
[2012-03-28 10:36:20] INFO  WEBrick::HTTPServer#start: pid=44781 port=4000
/Users/fakestarbaby/.rvm/gems/ruby-1.9.3-p0@fakestarbaby.github.com/gems/maruku-0.6.0/lib/maruku/input/parse_doc.rb:22:in `<top (required)>': iconv will be deprecated in the future, use String#encode instead.
Configuration from /Users/fakestarbaby/Projects/rails/fakestarbaby.github.com/_config.yml
/Users/fakestarbaby/.rvm/gems/ruby-1.9.3-p0@fakestarbaby.github.com/gems/ffi-1.0.9/lib/ffi/platform.rb:27: Use RbConfig instead of obsolete and deprecated Config.
Auto-regenerating enabled: source -> public
[2012-03-28 10:36:21] regeneration: 94 files changed
/Users/fakestarbaby/.rvm/gems/ruby-1.9.3-p0@fakestarbaby.github.com/gems/fssm-0.2.7/lib/fssm/support.rb:40: Use RbConfig instead of obsolete and deprecated Config.
>>> Compass is watching for changes. Press Ctrl-C to Stop.
```

ブラウザで、"http://localhost:4000/" へアクセスしてみましょう。
期待した通りに表示されていれば問題無しです。
GitHubへコミットするのもお忘れなく。

***

後は、記事を投稿するだけですね！
ファイル・ディレクトリコピー


```bat
xcopy ..\ABC HOGE\ABC  /Y /I /S
```

Visual Studioのビルド後のイベントなんかでけっこう使うかもしれない
/Y　上書きの確認メッセージなし
/I　コピー先にディレクトリがない場合は作る
/S　ファイルが存在する場合、ディレクトリ毎コピー
Boolean.getBoolean(String)は便利

booleanのオブジェクト型BooleanのgetBoolean(String arg)メソッドは、
` Long.longvalue()` 
みたいにボクシング用と思いきや、
引数に入れたシステムプロパティのtrue/falseを判定してくれるという
メソッドでした。
つまり、eclipseなどの起動構成でVM引数に
`  -Dhogehoge.property.key=true` 
とでも入れておけば、ソース上から
`  Boolean.getBoolean("hogehoge.property.key")` 
の値trueが取れるわけです。

しかもキーがなかったり、あっても右辺値がtrueじゃない場合(変な文字列とか)
の場合はちゃんとfalseを返してくれます。(NullPointerExceptionじゃない)
デバッグ用に処理を分岐させたい時とか便利です。

やりすぎると謎オプションが増えて管理できなくなるかもですが。
Rails で javascript が2回読み込まれる

config.asset.debug=true にするとデバッグ用に個々に読み込んでいる javascript ファイルとプリコンパイルされていた application.js を読み込んでしまうため重複してしまう。

以下のように  ``config.serve_static_assets = false`` を設定し、application.js の中身を消去（必要ないかも）すると重複が避けられる。

``` ruby:config/environments/development.rb
  # Do not compress assets
  config.assets.compress = false

  # Expands the lines which load the assets
  config.assets.debug = true

  # 静的ファイルを保持しないようにする
  config.serve_static_assets = false
```
IE6でjqueryでajaxを使うときに気をつけたいこと

jqueryでajaxを利用する際、

```
$.ajax({
 async:    true,
 type:     'GET',
 url:      'http://hoge.co.jp/',
 dataType: 'text',
 success:  function(response) {
    // something to do
 }
});
```
と普通に取ろうとしても(パラメータは適当)、IE6のバージョンによっては、
successイベントが呼び出されないことがあります。
errorもダメな模様。
completeはいけるらしいが。。。
もしIE6ユーザーが「ロードが終わらない」と言ってきたら確認してみましょう。
ちなみに、僕はIE6用にxmlhttprequestで取得するソースを書きました。
おのれIE6...
if が 関数じゃないだって?

```
sub if {
  $_[0] ?  return $_[1]->() : $_[2] eq 'else' ?  return $_[3]->() : return ''; 
}
sub else  { 
'else';
}

&if ( ( '1' eq '1' ),  
sub { 
  my $hoge = 'hoge';
  print $hoge; 
}, 
&else, 
sub { 
  my $fuga = 'fuga';
  print $fuga;
});

&if ( ( '1' eq '0' ),  
sub { 
  my $hoge = 'hoge';
  print $hoge; 
}, 
&else, 
sub { 
  my $fuga = 'fuga';
  print $fuga;
});
```
FlashPlayer11.2で右クリックメニューを非表示にする。

Flash Player 11.2の待望の新機能。
右クリックしたときにでてくるコンテキストメニューを完全に消去。

``` as3:Main.as
package {
	import flash.display.Sprite;
	import flash.events.MouseEvent;
	public class Main extends Sprite {
		public function Main():void {
			stage.addEventListener( MouseEvent.CONTEXT_MENU, onContextMenu );
		}
		public function onContextMenu( e:MouseEvent ):void {}
	}
}
```

リスナーを登録するだけでいいらしい。
mysql外部接続設定

下記のサイトからのコピペ
http://goo.gl/PwIqL
無事接続できた

```sh
mysql> GRANT ALL PRIVILEGES ON *.* TO user1@"%"
    -> IDENTIFIED BY 'decoy' WITH GRANT OPTION;
mysql> GRANT ALL PRIVILEGES ON *.* TO user1@localhost
    -> IDENTIFIED BY 'decoy' WITH GRANT OPTION;
mysql> FLUSH PRIVILEGES;
mysql> SET PASSWORD FOR user1@"%" = OLD_PASSWORD('decoy');
mysql> SET PASSWORD FOR user1@localhost = OLD_PASSWORD('decoy');
spork + capybaraでcapybaraがexample.comにアクセスしようとする

http://groups.google.com/group/ruby-capybara/browse_thread/thread/1cc28220324003ac
でいろいろ議論されているが、自分の環境ではsporkのバージョンを0.9から1.0にしたら直った。

どちらにしても、現象がでている人はsporkを切って試すといいと思う。
【やや解決】heroku create -s cedarの挙動がわからない。 

詳しい方教えてください。

####何が知りたいか
heroku create -s cedarをすると何が起こるのか
cedarとは何か　cedar以外にあるのか それはどういう使い分けをするのか
git push heroku masterすると、どこにpushされるのか(git push foo.gitと使い分ける理由は？)

####今の認識
下記の説明のだいたい130%くらいは勘による説明だが、今heroku create -s cedarに対して持っている正直な気持ちを吐露する。
heroku上にいわば.gitのパスのスタックがある。その(一般的な？デフォルトの？)名前がcedar。cedarってなんだよ。何を意味しているのか、全くわからない。
heroku create -s cedarされるたびにそのスタックに新しいアプリケーションとそのpush先である.gitが作られる。
そして、git push heroku masterされるたびにそのスタックは解決される。
さらに、heroku openをすると、最後に解決されたスタックのトップページをデフォルトブラウザでopenしてくれる(?)
heroku create -s cedarしまくっていたらいつのまにか知らないアプリケーションが大量に作られていた。
apacheの設定ファイルのシンタックスチェック

apacheを再起動しようとしたら設定ファイルが変で停止後に起動できなかった・・・というのはまずいので、実行する前にシンタックスチェックを行う習慣をつけた方がよい

```sh
apachectl configtest
apachectl -t  # 同じ
```

- 参考: [apachectl - Apache HTTP Server Control Interface](http://httpd.apache.org/docs/2.0/programs/apachectl.html)
生＆死＝？

https://gist.github.com/2212589 のc#版。もっと短くかけないかな？

```c#:lifedetah.cs
using System;
using System.Linq;
using System.Text;

namespace ConsoleApplication
{
    class Program
    {
        static void Main(string[] args)
        {
            var life = Encoding.UTF8.GetBytes("生");
            var death = Encoding.UTF8.GetBytes("死");
            var x = life.Select((b, i) => (byte)(b & death[i])).ToArray();
            Console.WriteLine(Encoding.UTF8.GetString(x));
        }
    }
}
```
zshでログイン・ログアウト時に実行されるファイル

今まではバカの一つ覚えのように何でもかんでも`$HOME/.zshrc`に書いていたけど、サーバ管理をよくするようになってきて、複数アカウントの共通設定とかをしたくなったので調べた。

#順番

以下の`$ZDOTDIR`は指定されていない場合`$HOME`になる。

ログイン時

1. /etc/zshenv
2. $ZDOTDIR/.zshenv
3. /etc/zprofile
4. $ZDOTDIR/.zprofile
5. $ZDOTDIR/.zshrc
6. /etc/zlogin
7. $ZDOTDIR/.zlogin

ログアウト時

8. $ZDOTDIR/.zlogout
9. /etc/zlogout

言うまでもなく、個人的な設定は`$ZDOTDIR`に、汎用的な設定は`/etc`に書く。

#各種説明

##zshenv

必ず実行される。`/etc/zshenv`は上書き不可で`$PATH`や`$MANPATH`の設定がされる。
`$ZDOTDIR/.zshenv`にはいかなる場合も設定したい項目を設定する感じ。manファイルではできるだけ小さくシンプルに保つように勧めている。
`ssh`コマンドの引数でログイン後に行うコマンドを指定すると、それだけを実行してssh接続を直ぐに切るが、そのような場合も`zshenv`は実行される。この場合以下のやつは全部実行されない。

##zprofile

ログイン時に一回だけ実行される。なのでzshの関数の定義とかはここに書くといいのかも知れない。あと、外部の設定ファイルを読み込むのもここに書くとよさそう。


##zshrc

インタラクティブシェルの時に実行される。つまり

```sh:zsh
# ログイン時は4種類とも実行される
$ zsh # 既にログインしている状態で改めてzshを起動する
# /etc/zshenv
# $HOME/.zshenv
# /etc/zshrc
# $HOME/.zshrc
$ # zprofileとzloginは実行されない
```

##zlogin

ログイン時に一回だけ実行される。`zprofile`があるのにわざわざ用意されているということは`zshrc`で行ったなにかしらの設定に依存するが、一回だけでいいような処理を書く場所だと思われる。イマイチそういう状況が思い浮かばないがきっとそう。

##zlogout

基本的にログインシェルから抜ける時に実行される。ただし、別プロセスに明け渡す形で終了する場合（`execve`システムコールを呼ぶとか？）は実行されないらしい。

#利用例

例えばマルチユーザモードでrvmをインストールした場合、rvmは標準で`/etc/profile.d/rvm.sh`を作成する。Linuxの`/etc/profile`では`/etc/profile.d/*.sh`が読み込まれるように設定されており、bashがこれを読むので、結果的に`rvm.sh`が読み込まれるけど、zshだと読み込んでくれない。そこで`/etc/zprofile`に以下を追記する

```sh:/etc/zprofile
for i in /etc/profile.d/*.sh ; do
    [ -r $i ] && source $i
done
```

こうすればこのサーバでログインシェルとしてzshを使っている人全員がrvmを使えるようになる。
タブレットorスマートフォンのフラグをリソースに定義する

res/values/bools.xml

```xml:qiita.rb
<bool name="isTablet">flase</bool>
```

res/values-sw600dp/bools.xml

```xml:qiita.rb
<bool name="isTablet">true</bool>
```

値取得元ソース

```java:qiita.rb
public static boolean isTablet(Context context) {
    return context.getResources().getBoolean(R.bool.isTablet);
}
```
Terminalでの簡易WordPressインタラクティブシェル


WordPressディレクトリにて

```bash
php -a
php > require('./wp-blog-header.php');
php > ob_end_clean();
php > get_post <TAB>
get_post                         get_post_ancestors               get_post_class                   get_post_comments_feed_link      get_post_custom                
get_post_custom_keys             get_post_custom_values           get_post_field                   get_post_format                  get_post_format_link           
get_post_format_slugs            get_post_format_string           get_post_format_strings          get_post_meta                    get_post_mime_type             
get_post_modified_time           get_post_permalink               get_post_reply_link              get_post_stati                   get_post_status                
get_post_status_object           get_post_statuses                get_post_taxonomies              get_post_thumbnail_id            get_post_time                  
get_post_type                    get_post_type_archive_feed_link  get_post_type_archive_link       get_post_type_capabilities       get_post_type_labels           
get_post_type_object             get_post_types                   get_postdata                     get_posts                        get_posts_by_author_sql        
get_posts_nav_link 
```
android.app.Application クラスを拡張する


Manifest の <application に、android:name で、android.app.Application の拡張クラスを定義

```xml:Manifest.xml
    <application android:name=".MyApplication" android:icon="@drawable/icon" android:label="@string/app_name">
        <activity android:name=".MainActivity">
        …
    </application>
```


```java:MyApplication.java
public class MyApplication extends android.app.Application {

	private int myField;

	public void setMyField(int field){
		this.myField = field;
	}
	public int getMyField(){
		return this.myField;
	}

}
```

使う時はこんな感じで使う。

```java:MainActivity.java
public class MainActivity extends Activity {
    /** Called when the activity is first created. */
    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        // set my activithy to Application context
        MyApplication app = (MyApplication)getApplication();
        app.setMyField(1);
        …
    }
}
```
Log.d などの時の TAG の設定方法

この書き方はいいかも。と思ったが、 TAG = "HogeActivity" と書くのと変わんないか。スペルミスしてたらコンパイルエラーになる分少しマシか。

```java:HogeActivity.java
public class HogeActivity extends Activity {
	private static final String TAG = HogeActivity.class.getSimpleName();

    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
		Log.d(TAG, "HogeActivity onCreate" );
    }
}
```
yumで明示的に使用するレポジトリを指定する方法

Fedora EpelとかremiとかRPMForgeとかレポジトリを追加したあと意図しないときに使われないようにこれら用の`/etc/yum.repos.d/hoge.repo`ファイルの`enable`の項目を0に設定し、無効化しておくという管理方法もあるようです。

で、この時に無効化したreposからソフトウェアパッケージをインストールするには

```Bash:
# yum --enablerepo=rpmforge install package-to-install
```

と`--enablerepo=`で使いたいレポジトリ名を指定すればいい

##逆に無効化するには

`--disablerepo=`で無効化できる。
Mac OS 10.7 Lion でやたらネットワークが遅い、切れるときは、 IPv6 を切ってみよう

やたら ネットワークが遅い、接続が切れる、再接続が遅い
----------------------------------------------------

ネットワークに詳しい知人にみてもらったら、どうやら __IPv6__ が悪さをしてるらしい。
IPv6の構成を Automatically から Link-local only にしてみたら、劇的に速度回復！

### 手順
WiFi 設定の Advanced... > TCP/IP > Configure IPv6 を Link-local only に変更

世の中は IPv6 への移行がちゃくちゃくと進んでいるようですが、まだいろいろと整っていないようですね。

Mac OS 10.7 Lion は IPv6 がデフォルトで有効になっている
----------------------------------------------------

IPv6 なんて、一般化してから対応しよう、なんて思っていたので盲点でした。
デフォルトで有効になっているとは知らなかった。

### ちなみに、完全に Off「切」にするには、コマンド操作が必要

上記の対応で、なぜ完全に Off にしてしまわないのか。
それは、[OS X 10.7 Lion で IPv6 を無効にして「切」にする | Macとかの雑記帳](http://tukaikta.blog135.fc2.com/blog-entry-175.html) によると、デフォルトでは IPv6設定に Off「切」の選択肢がないとのこと。
とりあえず、今回の対応においては Link-local only 「リンクローカルのみ」で問題ないようだが、完全に切りたい人はリンク先を参考にどうぞ。

参考 : ネットワーク遅い現象
-----------------------------------------------------

私の場合は、↓の現象が著しかったです。そんなときは、IPv6 の設定を切ってみよう。

* WiFi の強度は最強なのに、サイト接続が極端に遅い
* さらに、頻繁にネットワーク接続が切断される
* 再接続するにも遅い
* 再接続の様子を見てると、IPv6 のアドレス接続の表示から、IPv4 接続までの時間が異様に長く感じる
* iTunes Store のページ遷移が極端に遅い
* iTunes Store の Preview 再生がブツ切れ ( ReBuffer 頻発 )
循環参照を回避する


参照：http://d.hatena.ne.jp/dice-t/20101215/1292392076


×

```objectivec:classA.h
#import "classB.h"

@interface classA {
  classB objB;
}
```

```objectivec:classB.h
#import "classA.h"

@interface classB {
  classA objA;
}
```

→`error: expected specifier-qualifier-list before 'ClassA'` とかのコンパイルエラーになる。

◯

```objectivec:classA.h
@class classB;

@interface classA {
  classB objB;
}
```
```objectivec:classA.m
#import "classB.h"

@implementation classA 
…
@end
```


```objectivec:classB.h
@class classA;

@interface classB {
  classA objA;
}
```
```objectivec:classB.m
#import "classA.h"

@implementation classB 
…
@end
```

C++といっしょだぬ。
まぁ循環参照が必要な時点でちょっと行けてない設計なわけだが。
VimのPlugin


## 概要

Vimのプラグインは様々なプラグインが存在する。
私も色んなプラグインを入れているのだが、増えてくるにつれて
どんなプラグインを入れていたか、どうやって使うかを忘れてしまう。
そこで、自分用に導入しているプラグインのメモを書いておく。

## プラグイン

### yankring.vim

vimエディタ上のコピーや削除の履歴を参照できる様にするプラグインである。

```ファイル
~/.vim/plugin/yankring.vim
~/.vim/doc/yankring.txt
```

//使用法
Control-Pでより古い履歴を見る。
Control-Nでより新しい履歴をみる。




### autoclose.vim

“({[などを自動的に閉じてくれるプラグインである。 

```ファイル
~/.vim/plugin/autoclose.vim
```

//2012/04/27 やっぱり閉じ系は自分で打ちたいので削除




### EnhancedCommentify.vim

ビジュアルモードで選択した範囲をコメントアウトしてくれるプラグインである。


```ファイル
~/.vim/plugin/EnhancedCommentify.vim
~/.vim/ftplugin/ocaml_enhcomm.vim
~/.vim/ftpluginphp_enhcomm.vim
```

//使用法
ビジュアルモード(v)で選択した後
\xとコマンドすると自動的にコメントアウトする。







### mru.vim

開いたファイルの履歴を残し、最近開いたファイルに素早くアクセスできるプラグインである。

```ファイル
~/.vim/plugin/mru.vim
```

//使用法
`:MRU`とタイプし、開きたいファイルの上でENTERで開く。
`o`で新規ウィンドウで開き`u`でファイルリストを更新、`q`でウィンドウを閉じる。





### changed.vim

最後に保存してから変更を加えられた行を`+`、`-`、`*`で表示する。
`+`は追加された行、`-`は削除された行のあった位置、`*`は変更の加えられた行である。

```ファイル
~/.vim/plugin/changed.vim
```

//使用法
`:Changed`とタイプするか、しばらく操作を行わないでいると目印が表示される。




### UnMtchBracket.vim

括弧の閉じ忘れをハイライト表示してくれるプラグインである。
半角波括弧{}、半角角括弧[]、半角丸括弧()に対応している。

```ファイル
~/.vim/plugin/UnMtchBracket.vim
```

//ペアの組み合わせ追加方法
//「<>」の例
:set matchpairs+=<:>





### NERD_tree.vim

ディレクトリ、ファイルをツリー表示してくれるプラグインである。

```ファイル
~/.vim/plugin/NERD_tree.vim
~/.vim/doc/NERD_tree.txt
~/.vim/nerdtree_plugin/exec_menuitem.vim
~/.vim/nerdtree_plugin/fs_menu.vim
~/.vim/syntax/nerdtree.vim
```

//最低限必要なコマンド
:NERDTree //起動
`q` //閉じる




### closetag.vim

マークアップ言語のタグを自動的に閉じてくれるプラグインである。

```ファイル
~/.vim/plugin/closetag.vim
```

//最低限必要なコマンド
control-_ //閉じタグを挿入





### acp.vim(AUTOComplPop)

自動補完を自動的に呼び出してくれるプラグインである

```ファイル
~/.vim/plugin/acp.vim
~/.vim/doc/acp.jax
~/.vim/doc/acp.txt
~/.vim/autoload/acp.vim
```





### python_pydiction.vim 

pythonの自動補完を強化してくれるプラグインである

```ファイル
~/.vim/after/ftplugin/python_pydiction.vim
~/.vim/pydiction/complete-dict
~/.vim/pydiction/pydiction.py
```

```.vimrc
autocmd FileType python let g:pydiction_location = '~/.vim/pydiction/complete-dict'
```





### molokai.vim

Vimのカラースキーマである

```ファイル
~/.vim/colors/molokai.vim
```
RSpec小ネタ的メモ

##レシーバの省略

Memberがモデル。
この場合、subjectで指定しなくてもshouldのレシーバはMember.newしたインスタンスとなる。

```ruby

decribe Member do
 it { should_not be_nil }
end

```

##be_a_newマッチャ

対象が指定したクラスのインスタンスかつ未保存レコードであることを検証する。

```ruby
decribe Member do
 it { should be_a_new(Member) }
end
```

##have_at_least(n).errors(attr)マッチャ

指定した属性のエラーの数を検証。
have_at_least以外にもhaveとかが使える。

```ruby
decribe Member do
 it { should have_at_least(1).errors_on("name") }
end
```

##レスポンスの検証

```ruby
be_success
be_redirect
be_client_error
be_server_error
```

##レスポンスヘッダの検証

```ruby
response['hogehoge'].should =~ %r(hogehoge)
```
GitHubでフォーク元の差分を取り込む

GitHubでフォークした後にフォーク元の差分を取り込む時の手順です。

ローカル環境で該当プロジェクトのディレクトリに移行して、フォーク元のリポジトリを登録します。

```
$ git remote add upstream git://github.com/octocat/Spoon-Knife.git
```

`git://github.com/octocat/Spoon-Knife.git`はフォーク元のURLになります。

フォーク元からの内容を取得して、自分のmasterにマージします。

```
$ git fetch upstream
$ git merge upstream/master
```
WebViewの中身を更新したときスクロール位置をリセットさせない方法

これを実装する class を frameLoadDelegate にしておく。

```objc

//_savedPosition は CGPoint;

//現在のスクロール位置を記憶するメソッド
- (void)rememberScrollPosition {
    WebView* webView = self.webView;
    NSScrollView* sv = [[[[webView mainFrame]frameView]documentView]enclosingScrollView];
    if (sv) {
        NSRect currentRect = [sv documentVisibleRect];
        //前回の読み込みが完了していないときの対策で y==0 なら記録しない
        //読み込み中じゃなくても y==0 なら何もしなくてよいのでスルー
        if (currentRect.origin.y > 0) {
            _savedPosition=currentRect.origin;
        }
       //isFlipped が NO なら計算必要？　おそらく常に YES なので origin そのまま保存
    }else{
        _savedPosition = NSZeroPoint;
    }
}

//frameLoadDelegate にしておくと呼ばれるメソッド
- (void)webView:(WebView *)sender didFinishLoadForFrame:(WebFrame *)frame {
    WebView* webView = self.webView;
    CGFloat savedY = _savedPosition.y;
    if (frame == [webView mainFrame] && savedY > 0) {
        NSPoint pt = NSMakePoint(0, savedY);
        [[[[webView mainFrame]frameView]documentView]scrollPoint:pt];
        _savedPosition = NSZeroPoint;
    }

    //origin.x はとりあえず無視した
}
```

データ更新する前に上記 rememberScrollPosition を呼べばいいと思います。

```objc
- (void)updateContents:(NSString *)string {
    //記憶
    [self rememberScrollPosition];

    //更新実行
    [self.webView loadHTMLString:string baseURL:nil];
    
    //ここで復元してもタイミングが早いので意味がない
}
```