2012-02-14

rails_best_practicesで指摘されたから、末尾の空白を一括で除去する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
Railsでの開発でのベストプラクティスをまとめた以下のサイトがあるということを知りました。

http://rails-bestpractices.com/

ここで紹介されているベストプラクティスに自分のコードが従っていない部分をしてくれる

rails_best_practices

というのもあるということを知ったのです。

インストールは、
gem install rails_best_practices
でOKらしいですが、私の環境ではripperというのも必要な感じでしたので
gem install ripper
もやっておきました。


利用は、確認したいRailsアプリのRAILS_ROOTに移動して

rails_best_practices

とすれば、いろいろ指摘してくれます。

いろいろ指摘してくれるのですが、私の場合は、
./app/views/layouts/application.html.erb:4 - remove trailing whitespace
という感じで、末尾に空白があるよ~~というのが、うんざりするほど出てきました。

なので以下のような感じで一括で変更してみました。

rails_best_practices --without-color |grep 'remove trailing whitespace' | awk -F":" '{print $1}' | xargs ruby -p -i -e '$_.sub! /\s+$/,"\n"'

あと、
./app/views/layouts/application.html.erb:6 - remove tab, use spaces instead
という感じでタブじゃなくて、スペースを使いなさ~~いというのも、ちょっと出たので同じように以下のように一括で対応してみました。

rails_best_practices --without-color |grep 'remove tab, use spaces instead' | awk -F":" '{print $1}' | xargs ruby -p -i -e '$_.sub! /\t/," "'

タブをスペース2つに置換しています。

他のベストプラクティスは、今のところ個別対応をしてみています。


2012-02-13

綿花の種をもらってみようと思ってみた

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
ふと衝動的に綿花を育ててみたいと思ってみて調べてみたところ
ちょうどいい具合に綿花の種をプレゼントしていただけるものがあるのを発見したのです。
http://cotton.or.jp/pr2012-01-30.htm

というわけで申し込んでみることにしてみたのです。

2012-02-08

WBS「トレたま」で放送された商品をAmazonで検索してみた(201201放送分)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
WBSのコーナーの「トレたま」で放送された商品をAmazonで検索してみました。

「ギボン スラックライン」という綱渡り用の紐みたいなものがキニナル感じです。


消しゴムサイズのマウス (放送:1月31日)
見つかりませんでした

電子マネー付きマラソン用腕時計 (放送:1月30日)
見つかりませんでした

スマートウォッチ (放送:1月27日)
見つかりませんでした

はんこの自動販売機 (放送:1月26日)
見つかりませんでした

最強のタブレット (放送:1月25日)
見つかりませんでした

次世代自販機 (放送:1月24日)
見つかりませんでした

収納付きまな板 (放送:1月23日)
amazonにありました


雨でも快適 電動パラソル (放送:1月20日)
見つかりませんでした

切らずにスクラップ (放送:1月19日)
見つかりませんでした

瞬間を切り取るムービー (放送:1月18日)
見つかりませんでした

のどの振動を拾うマイク (放送:1月17日)
見つかりませんでした

紙バイオ電池 (放送:1月16日)
見つかりませんでした

空気清浄ライト! (放送:1月13日)
見つかりませんでした

かざせば翻訳! (放送:1月12日)
見つかりませんでした

車いすエアバッグ! (放送:1月11日)
見つかりませんでした

巻いて防寒! (放送:1月10日)
見つかりませんでした

カバンにピアノ?! (放送:1月9日)
amazonにありました


綱渡りで鍛える (放送:1月6日)
ギボン スラックラック(スラックライン)
amazonにありました


靴ひも用スプレー (放送:1月5日)
見つかりませんでした

8mm風のトイカメラ (放送:1月4日)
amazonにありました

2012-02-07

sinatraでファイルアップロードのテストをする

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
sinatraでファイルをアップロードさせるよなアプリのテストをする場合です。

ファイルアップロードは、以下が参考になります。
http://d.hatena.ne.jp/yamamucho/20100620/1277003595

抜粋かつちょっと改造ですが、こんな感じでfileという名前のパラメータでファイルを受け取るとします。
require 'rubygems'
require 'sinatra'

post '/upload' do
  if params[:file]
    content_type params[:file][:type]
    f = params[:file][:tempfile]
    f.read f.size
  end
end

このようなアプリのテストをする場合は、以下のような感じです。 rspecでテストする場合は、以下のような感じです。
require 'rubygems'
it "アップロードしたらファイルの中身が帰ってくる" do
  upload_file = File.dirname(__FILE__) + "/foo.txt"
  post_file   = Rack::Test::UploadedFile.new(upload_file)
  post "/upload", "file" => post_file
  last_response.body.should == "foo"
end


sinatraをpassengerで使う

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
rubyで簡単なwebプログラムを組みたいなぁ、Rails使うほどの規模でもないなぁというときは軽量フレームワークのSinatraがステキです。

Sinatraの詳しい使い方は、以下を見ればOKです。
http://www.sinatrarb.com/intro-jp.html

本当に簡単に試すならばファイルがひとつあればいいお手軽さなのですが、
Sinatraで作ったものをPassengerを使って公開するときには、ちょっと準備が必要です。
具体的には、以下が参考になります。SubURIで動かしています。
http://d.hatena.ne.jp/seiunsky/20090614/1244978847

Sinatraアプリとしては、以下のファイルとディレクトリが必要になります。

+public(空ディレクトリ)
+tmp(空ディレクトリ)
+app.rb(アプリ本体 たとえばこういうやつ)
+config.ru(おまじないファイル。こんな感じ)

これだけでOKです。
sinatra_appというSubURLで公開するならば
publicディレクトリをhtdocs/sinatra_appにリンクを張って
Passengerの設定で
RackBaseURI /sinatra_app
と書けばOKです。

これでとりあえずOKなのですが、さくっと作ったプログラムだとなんで作ったのかとか忘れがちなのでドキュメント用のディレクトリも使いした方がよいかなぁとか思います。
そしてさくっと作ってもrspecでテストをしておいた方がよいよなぁと思うわけなので、上記にさらにいくつか追加して以下のような感じにします。


+doc(ドキュメント格納用ディレクトリ)
+public
+spec
| |-app_spec.rb(テストファイル)
| |-spec.opts(rspecのオプション情報)
| |-spec_helper.rb(テスト用helper)
+tmp
+README(ざっくり説明用。これだけあればよいときも多いと思います)
+Rakefile(rake specとやるために準備)
+app.rb
+config.ru

sinatraでrspecを使うためには、以下が参考になります。
http://d.hatena.ne.jp/amacou/20100221/1266768409
http://labs.unoh.net/2009/07/bdd_on_sinatra.html

こちらを元に以下のファイルを作成してみました。


+spec
| |-app_spec.rb
| |-spec.opts
| |-spec_helper.rb
+Rakefile

ということで、これらのサンプルをとりあえず
https://github.com/vivahiraj/sinatra_template
に置いてみました。



2012-02-04

iRemoconがキニナル

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク


http://i-remocon.com/ 

家のあるリモコンを学習させておいて、外からスマホとか使って操作できる便利リモコンでキニナルのです。
エアコンも使えるようです。エアコンは使えると便利そうだなぁと思うわけです。

お値段がまだちょいと高めなので、お安い機種が出ることを期待するのです。

2012-01-24

Polaroidのインスタントモバイルプリンターがキニナル

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク


Polaroid GL10インスタントモバイルプリンターがキニナルのです。

スマートフォンがだいぶ高性能になってきて何でもできるようになってきているのですが、さすがに印刷はできません。

そこでモバイルプリンターです。

インクがいらないのです。なんかキニナルのです。

印刷するぐらいならばデータを送ればよいのでは?
って感じで実際に印刷するシーンてあまりないような気がしなくはないのですが、

データで送る

よりも

手渡し

というのがオシャレな気もするので、やっぱりキニナル、モバイルプリンターです。

2012-01-11

ActiveScaffoldの一覧画面で長いテキストの省略の長さを変える

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
ActiveScaffoldで一覧画面に長めのテキストカラムを表示するとある程度長いテキストは、


長いテキストをActiveScaffoldで表示しようとすると途中で切れてしまうことがあ...

のように最後が...となって省略されます。
デフォルトでは50文字(?)以上で省略されるようです。

この長さを変えるには、以下のようにします。
ここではlong_msgカラムの省略サイズを500文字にしています。

config.columns[:long_msg].options[:truncate] = 500
設定する値を0またはnilにした場合は、デフォルト50が適用されるようです。

WBS「トレたま」で放送された商品をAmazonで検索してみた(201112放送分)

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
WBSのコーナーの「トレたま」で放送された商品をAmazonで検索してみました。
今回は一つも見つかりませんでした。

爪とぎニャン (放送:2011年12月23日)
見つかりませんでした

天候で自動省エネ (放送:2011年12月22日)
見つかりませんでした

そろってピカリ (放送:2011年12月21日)
見つかりませんでした

居眠り防止シート (放送:2011年12月20日)
見つかりませんでした

筒入りキーボード (放送:2011年12月19日)
見つかりませんでした

生ゴミを早く分解 (放送:2011年12月16日)
見つかりませんでした

新米の缶詰 (放送:2011年12月14日)
見つかりませんでした

見た目が分かります (放送:2011年12月13日)
見つかりませんでした

ネット履歴書サービス (放送:2011年12月9日)
見つかりませんでした

スプレー型液体消火器 (放送:2011年12月8日)
見つかりませんでした

デジタル変換ペン (放送:2011年12月7日)
見つかりませんでした

後付け電動車椅子 (放送:2011年12月6日)
見つかりませんでした

緩まないネジ (放送:2011年12月5日)
見つかりませんでした

究極の茶柱 (放送:2011年12月2日)
見つかりませんでした

未来の着ぐるみ (放送:2011年12月1日)
見つかりませんでした

2011-12-19

railsでconfirm画面を表示する

このエントリーをブックマークに追加 このエントリーを含むはてなブックマーク
今どきなシステムだと、あんまり確認画面って感じではないとは思うのですが、
登録前に確認画面を出して欲しい
と言われることが、まぁあります。

railsでconfirm画面を表示する方法はいろいろあるようなのですが、
とりあえず以下のようにしてみました。
使うアクションとviewは一つずつにしてみています。
まずはコントローラーは以下のような感じです。
class AaaController < ApplicationController

  def aaa
    #最初の表示
    unless params[:commit]
      params.delete(:confirm)
      return
    end
    #postされたら、まずはvalidateする
    @err = Hash.new
    @err[:val] = 1 if params[:val].blank?
    #validateでエラーがあったら返す
    unless @err.size == 0
      flash.now[:error] = "validate error"
      return
    end
    #確認画面表示
    unless params[:confirm]
      params[:confirm] = 'confirm'
      return
    end
    #確認後の登録処理をこれ以降に書く
    params.delete(:confirm)
    flash[:notice] = "登録したよ[#{params[:val]}]"
  end

end

そしてviewは以下のような感じです。
<% if params[:confirm] %>
  <h1>確認</h1>
<% else %>
  <h1>登録</h1>
<% end %>
<%= form_tag(:action => "aaa") %>
  <%= label_tag(:val, "val") %>:
  <% if params[:confirm] %>
    <%= params[:val] %>
    <%= hidden_field_tag :val,params[:val] %>
  <% else %>
    <%= text_field_tag("val",params[:val]) %>
  <% end %>
  <br />
  <p class="form-footer">
  <% if params[:confirm] %>
    <%= hidden_field_tag :confirm %>
    <%= submit_tag '作成', :class => "submit" %>
    <%= submit_tag 'キャンセル', :name => "cancel" ,:class => "submit" %>
  <% else %>
    <%= submit_tag '確認', :class => "submit" %>
  <% end %>
  </p>
</form>

通常入力用と確認用のテンプレートを用意するのでもよいと思います。

実際に表示させると以下のような感じです。

validateで失敗すると以下のような感じ。

以下のようにちゃんと入力して「登録」をクリックすると

以下のような確認画面になります。

「キャンセル」をクリックすると確認前の画面に戻って、「作成」をクリックすると以下のように登録完了になります。