powとpowderを使おうとしたら、ずっと接続中で何も表示されなかった

という現象

powのログを見てみる。
場所は $HOME/Library/Logs/Pow/apps/your _appname.log

1
2
3
4
[Wed Feb 20 2013 17:35:57 GMT+0900 (JST)] DEBUG nack worker 2833 spawned
[Wed Feb 20 2013 17:35:57 GMT+0900 (JST)] WARNING Could not find i18n-0.6.1 in any of the sources
[Wed Feb 20 2013 17:35:57 GMT+0900 (JST)] WARNING Try running `bundle install`.
[Wed Feb 20 2013 17:35:57 GMT+0900 (JST)] DEBUG nack worker exited

むむ?ないって言われてる。と思ってアプリのルートみたら、.rvmrcおいてなかった。
置いてみたら直りましたというひどいミス・・・


ruby-1.9.3-p385入れたら、libyaml入れてと言われてしまった。

ruby-1.9.3-p385入れた。
なんかしたら以下のwarningが出た。

1
2
3
/Users/user_name/.rvm/rubies/ruby-1.9.3-p385/lib/ruby/1.9.1/yaml.rb:56:in `<top (required)>':
It seems your ruby installation is missing psych (for YAML output).
To eliminate this warning, please install libyaml and reinstall your ruby.

むむむ。
素直に入れる

1
2
3
4
5
6
7
8
9
10
rvm pkg install libyaml

Fetching yaml-0.1.4.tar.gz to /Users/user_name/.rvm/archives
Extracting yaml to /Users/user_name/.rvm/src/yaml-0.1.4
Configuring yaml in /Users/user_name/.rvm/src/yaml-0.1.4.
Compiling yaml in /Users/user_name/.rvm/src/yaml-0.1.4.
Installing yaml to /Users/user_name/.rvm/usr

Please note that it's required to reinstall all rubies:
  rvm reinstall all --force

む?
個別指定できそうだけど、時間あったので言われた通りにやる

1
rvm reinstall all --force

結構な時間がかかる。
個別にやった方が良さそう。
ちなみに調べたらこれで行ける。

1
rvm reinstall ruby-1.9.3-p385

以上で、メッセージ消えました。


いろいろなgitignore

色々な言語やフレームワークのgitignoreのテンプレート

とりあえず新規でプロジェクト作ったなら、適用してみると少しだけハッピーになれる気がしますね。
https://github.com/github/gitignore

色々あるもんです。


httpリクエストを投げまくれるRuby製のCLIツール作ってみました

Rubyでサブコマンド付きのコマンドを簡単に書けるThorを見て勉強がてらに作ってみました。

コマンドラインから指定したURLやPORTに任意のデータをつけてGET POST PUT DELETEを指定回数分投げることができるGemを作りました。
負荷をかけたい時とか、APIで同一のコンテンツを複数作成する時とかというニッチなユースケースに使うといいんではないでしょうか。

rubyはthreadプログラムを書いても、ネイティブスレッドの実行は一つという状態になってしまうようなので。
いい感じに並列処理を実行してくれるparallelというGemを使っています。

Rubyで並列実行処理を簡単に書く

使い方です。

インストール

1
gem install http_machinegun

使ってみる

1
2
3
4
5
# 一回だけgetリクエスト発行
http_machinegun fire -u http://localhost

# 80番ポートにabcdeという文字列のpostリクエストを10回とばす
http_machinegun fire -u http://localhost -p 80 -t 10  -d abcde

特に実際に使う場面があって作ったわけではないので、抜けとか多いかもしれません。
改善ポイントとか教えてもらえると嬉しいです。
あと出力される内容に微妙に変な改行が入ってしまうのは何故だろうorz

ソースはこちら
YoshitsuguFujii/http _machinegun ? GitHub


compassをこっそりと自社サービスで使ってみる

昨日のエントリの続きになります。
やっぱりcompassも使いたいということで、こっそりと入れてみました。
compassはsassのfunctionやmixinなどが便利につまったフレームワークですね。

rails3.0.5のプロジェクトで使用します。
#{RAILS _ROOT}はrailsのアプリケーションルートに適宜読み替えてください。

まずは #{RAILS _ROOT}/app/assets/stylesheets下に環境を作ってみたいと思います。

まずはGemfileにgem ‘compass'を追記して bundle install
compassはsassに依存しているので、昨日のGemfileに記述したsassの行を削除してもいいかもしれません。

compassの環境を作ります。

1
2
cd #{RAILS_ROOT}/app/assets/stylesheets
compass create

コンソールに色々ファイルが出来たと思います。
デフォルトのファイル達は使わないので消しちゃいます。

1
2
rm -r sass
rm -r stylesheets

config.rbを開いて修正します。

1
2
3
4
5
6
7
# Set this to the root of your project when deployed:
http_path = "/"
css_dir = "../../../public/stylesheets"
sass_dir = "."
images_dir = "../images"
generated_images_dir = "../../../public/images"
javascripts_dir = "../../../public/javascripts"

sass dirがコンパイル対象のscssが置かれているパス。
css
dirがコンパイル後のcssの出力先ですね。

変更を監視して自動で変換してくれるようにコンソール上でwatchスタートします。

1
2
cd #{RAILS_ROOT}/app/assets/stylesheets
compass watch

#{RAILS _ROOT}/app/assets/stylesheets/test.scssを作成してみます。

1
2
3
4
5
@import "compass/css3";

.sample {
  @include border-radius(25px);
}

#{RAILS _ROOT}/public/stylesheets/test.cssを開いてみます。

1
2
3
4
5
6
7
8
/* line 3, ../../app/assets/stylesheets/test.scss */
.sample {
  -webkit-border-radius: 25px;
  -moz-border-radius: 25px;
  -ms-border-radius: 25px;
  -o-border-radius: 25px;
  border-radius: 25px;
}

できてます。
これでこっそりcompassが使えますね!

compassのリファレンスは公式を参照です。
http://compass-style.org/

※2013年1月23日追記
css spriteの機能が使えない指定だったので、config.rb以下二つを直しました。

1
2
images_dir = "../images"
generated_images_dir = "../../../public/images"

css spriteを使う場合には。
images dirはどこにimagesがあるかを相対パスで指定し、generated images _dirはどこに結合した画像を吐き出すかの指定です。


こっそりと自社サービスでsassを使ってみる

hamlをGemfileに追加しました!と宣言し、実際にhamlを使ったら他のエンジニアに読めないヽ(゚´Д`)ノ゚と言われて数ヶ月がたちました。

今日はRails3.0.5にこっそりとsassを導入しました。

まずはGemfileに gem 'sass' を追記して bundle install
scssファイルの置き場所は将来のバージョンアップを見越して、 app/assets/stylesheets/ に作りました。
お気に入りのディレクトリに変えてもいいですね。

変更を監視して自動で変換してくれるようにコンソール上で sass --style --watch app/assets/stylesheets/:public/stylesheets を実行。
これで自動的にapp/assetstylesheets以下のscssファイルがcssにコンパイルされてpublic/stylesheetsの下に作成されます。

app/assets/stylesheets/test.scss を作成。

1
2
3
4
5
$defaultFontSize: 10px;

.test{
  font-size: $defaultFontSize;
}

watchしているコンソールを見てみると動いたっぽいメッセージが表示されていると思います。

public/stylesheets/test.cssの中身を見てみると。

1
2
3
.test {
  font-size: 10px;
}

と出来てます。
これでこっそりとsass書けますね!

ここまできたら、compassも導入したいなぁ。



文字列に二つ以上の同一指定文字が使われているかどうか?

1
2
3
4
5
6
str = "@123@56"

str.index("@") #=> 0
str.rindex("@") #=>4

str.index("@") != str.rindex("@")

左からと右からの指定文字の位置を調べて違ってたら、同じ文字が二回使われているねというだけのロジック。

僕は文系ロジックと勝手に命名しているロジックがあります。
どういったのが文系ロジック?と聞かれると困りますが。なんかにおいです。
上記は文系ロジックっぽいかなと思うのですが。どうでしょうか?


リクエストメソッドを取得

コントローラでget post put deleteを識別する方法

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
# getかどうか
request.get?

# postかどうか
request.post?

# putかどうか
request.put?

# deleteかどうか
request.delete?

# 文字列で判定
request.request_method == "get"

#シンボルで
request.request_method_symbol == :get