リノベーション・リフォームの事例カタログサイト、HOUSY(ハウジー)をリリースしました。

30min.から新サービスを開始しました。リノベーション・リフォームの事例カタログサイトでHOUSYと書いてハウジーと読みます。いい写真が大きく表示されるので見ているだけでも楽しめると思います。

最近忙しくしていたのはこれの開発に突っ込んでいたからなのでした。これから競争が激しくなる分野だと思いますが勝者が決まっていない所に突っ込んで行くのは面白いですね。

HOUSY(ハウジー) http://housy.jp/

HOUSYには複数のリノベーション・リフォーム会社の事例が大きなサイズの写真で掲載されており、ユーザー登録をすると、気に入った事例をマイページにクリップできる。また、事例の詳細が気になった会社があれば必要な項目を入力するだけでネット上から相談できる。
おしゃれリフォーム事例のカタログサイト「HOUSY」–複数会社を横断 – CNET Japan

用語としてリノベとリフォーム何が違うの、という話がありますけれどもリノベーション とあるようにリフォームが例えば台所など一部の改修を目的としているのに対して住居全体を丸ごと改修する場合リノベーションと呼びます。

YOLP JavaScriptマップAPIで複数マーカーを表示する

Yahoo地図のJavaScriptマップで複数マーカーを表示する方法を調べたのでメモ。

全体のリファレンスはこちら

複数マーカーの場合の公式サンプルはここにある(余談だがgeocitiesのドメイン、久々に見た)
http://1st.geocities.jp/yjmapstaff/yolp/jsapi/feature-marker.html


ymap = new Y.Map(mapId);

で事前に地図を表示している場合


var markers = [];
markers.push( new Y.Marker(new Y.LatLng(hoge,huga)); );
markers.push( new Y.Marker(new Y.LatLng(hoge1,huga2)); );
ymap.addFeatures( markers );

という感じ。ymap.addFeaturesにmarkersの配列を渡せば良いようだ。

#上記はポイントのみ示しています。

マーカーをクリックすると吹き出しを出す方法

この実装は採用しなかったがメモ。
http://www.hanemaru.com/itemcolumn/11yolp003.html

Railsでmigrationを何個かやり直すrake db:migrate:redo STEP=3

開発中にあ、あのフラグ必要だなとかDB構成を変えたので何個か巻き戻してやり直す場合、rake db:migrate:redo STEP=xxxが使える。テーブル丸ごと作り直したい場合はrake db:migrate:reset。

rake db:migrate:redo step=1 →1step戻る。
rake db:migrate:redo version=20111101xxxxxx →versionで指定したものが実行された所まで戻る。
rake db:migrate:reset

Railsで削除確認のconfirmダイアログを出す

Rails2で記事一覧画面から直接記事を削除するような場合。

削除リンクをクリックすると「削除してよろしいですか?」が出てOKなら削除、キャンセルなら何もしない、というよくある処理。

テンプレート:

<%= link_to_remote("削除", :url => {:controller => "article", :action => "delete", :id => article},
  :update => "article_#{article.id}", :confirm => '削除してよろしいですか?') %>

出力:

<a href="#" onclick="if (confirm('削除してよろしいですか?')) { new Ajax.Updater('article_11', '/article/delete/11', {asynchronous:true, evalScripts:true}); }; return false;">削除</a>

TwitterのURLからstatusを抜き出す正規表現

tweetのURLからstatusを抜き出す正規表現を考えていた。

tweetのURLには幾つか種類があって基本的に次の4つの要素とその組み合わせのようだ。

  • 昔の書式:
    http://twitter.com//ysakaki/status/129076541425586176
  • #!が挟まる書式:
    http://twitter.com/#!/ysakaki/status/129076541425586176
  • statusじゃなくてstatusesな書式:
    http://twitter.com/#!/ysakaki/statuses/129076541425586176
  • 更にhttps対応した書式:
    https://twitter.com/#!/ysakaki/statuses/129076541425586176

Rubyで言うと下記で(\d+)の取得結果$4でstatusが取得できた。

tweet_url = "http://twitter.com/#!/ysakaki/status/129076541425586176"
tweet_url =~ /^http(s*):\/\/twitter.com\/(.*)\/(status|statuses)\/(\d+)$/ 
puts $4
129076541425586176

FizzBuzz問題をRubyで書くと

FizzBuzz問題とはこれ。

1から100までの数をプリントするプログラムを書け。ただし3の倍数のときは数の代わりに「Fizz」と、5の倍数のときは「Buzz」とプリントし、3と5両方の倍数の場合には「FizzBuzz」とプリントすること。

Step1
vi fizzbuzz.rbして以下を記述する。100.eachはさすがに通らなかった。iだけだと0から99表示になるのでi+1する。

100.times do |i|
 puts i+1
end

ruby fizzbuzz.rbを実行すると1〜99が表示される。

完成した。

#vi fizzbuzz.rb
100.times do |i|
  i += 1
  if i % 3 == 0 and i % 5 == 0
    puts "FizzBuzz"
  elsif i % 3 == 0
    puts "Fizz"
  elsif i % 5 == 0
    puts "Buzz"
  else 
    puts i
  end
end

が、仕様は満たしているが気に入らない。重複が多い。putsが何回も出てくるしi+=1とかダサい…。@ikmさんにしたがってちょっと直した。次はif文をどうにかしたいね。

#vi fizzbuzz.rb
1.upto 100 do |i|
  t = ""
  if i % 3 == 0 and i % 5 == 0
    t += "FizzBuzz\n"
  elsif i % 3 == 0
    t += "Fizz\n"
  elsif i % 5 == 0
    t += "Buzz\n"
  else
    t += "#{i}\n"
  end
  puts t
end

RailsのViewで奇数・偶数の表示制御

何回調べても忘れるのでメモ。テーブルの行毎に背景を変えたい場合の制御方法。

Railsではcycleというhelperメソッドが用意されている。
http://api.rubyonrails.org/classes/ActionView/Helpers/TextHelper.html#method-i-cycle

@items = [1,2,3,4]
<table>
  <% @items.each do |item| -%>
  <tr class="<%= cycle("even", "odd") -%>">
    <td>item</td>
  </tr>
  <% end -%>
</table>

で出力が

<table>
  <tr class="odd">
    <td>1</td>
  </tr>
  <tr class="even">
    <td>2</td>
  </tr>
  <tr class="odd">
    <td>3</td>
  </tr>
  <tr class="even">
    <td>4</td>
  </tr>
</table>

今から始める地獄のnamed_scope

これはRuby Advent Calendar jp: 2010の参加エントリです。前日は@sasata299さんの未経験で初めてgemを作ってみたので晒してみるでした。

地「お、この話についてこれるんだー」始めに
ホントは私もミサワ風に「お、この話に付いてこれるんだ」的話をしたいんだけど今回はRailsのActiveRecordの機能、named_scopeの話をします。

最近twitterでnamed_scope便利!という声を見ました。Ruby on Rails 2.1から入った機能なのでそれ以前から触っていた人は使っていないのかな、ということで今更ながらnamed_scopeのおさらいをします。

named_scopeの機能

named_scopeの概要は以下のとおり

  • Rails2.1以降で使える
  • 検索条件をスコープごとにまとめて定義できる
  • メソッドチェーン的に集合演算が可能

ではサンプル。

class Article < ActiveRecord::Base
  named_scope( :active,
   :conditions => ["deleted=?", false]
  )
  named_scope( :public,
    :conditions => 
    ["start_date >= ? and (end_date is null or end_date =< ?)",
    Date.today,Date.today]
  )

  #named_scopeを使わない場合
  get_active
    return find(:all,
      :conditions = ["deleted=?", false],
      :order => "id desc"
    )
  end

  #named_scopeを使わない場合
  get_article(id)
    return find(:first,
      :conditions => 
      ["deleted=? and start_date >= ? and (end_date is null or end_date =< ? ) and id =?",
      false,Date.today,Date.today,id]
    )
  end
end

これらを、コントローラから呼ぶと

#named_scopeを使わない場合
articles = Article.get_active
article = Article.get_article(params[:id])

#named_scopeを使った場合
articles = Article.active(:all,:order=>"id desc")
article = Article.active.public.find(params[:id]) #集合演算


まとめ

業務上は論理削除や記事の掲載期間のようにお約束的に繰り返されるfind条件がたくさんでてきます。それらをnamed_scopeでDRYに用意しておくことで1.named_scope条件部分は検証済みになる安心 2.ソースの可読性向上が得られます。

例えば記事の掲載期間だけで一行ありますがfindの度に毎回出てくると、本来そのfindで得たい固有の条件、を見つけるのが苦痛になってきます。またフラグにはtrue/falseや0,1,2,99のように色々な持ち方がありますがactive,publicなどと名前を付けることで単純ミスを防げます。

更にincludeやorderなどもnamed_scope化できますし、引数を取って動的に処理することも可能です。

ゴクリ。これで今日からえ〜普通だと思ってた。named_scope使ってないで許されるの小学生までだよね?え〜そう?普通だと思ってた〜え〜それ普通だと思ってた〜と言えますね!
地「お、この話についてこれるんだー」

RailsDevCon開催のお知らせ

こんにちは。Mitaka.rbの榊です。

11/20(土)にRailsDevelopersConference、通称RailsDevConを開催します。詳細決定次第随時アナウンスします。

概要

  • 名称:RailsDevCon2010(れいるずでぶこん2010)
  • 日時:2010年11月20日
  • 会場:オラクル青山センター
  • 会費:無料
  • 参加登録:開始次第アナウンスします
  • 公式タグ:#RailsDevCon2010
  • 公式twitter:@RailsDevCon
  • 主催:RailsDevCon2010実行委員会(スタッフ募集中)

趣意

RailsDevConはRails関係者のためのカンファレンスです。海外のRubyConf / RailsConfに対応する存在として「日本Ruby会議」がありますが、RailsConfに対応するイベントはありませんでした。一方Rails開発者の関心として設計/アジャイル/TDD/教育/デプロイ/開発環境/プラグイン開発/etc…など多岐に渡るキーワードがあり、それぞれが一日カンファレンスできるくらいの内容を持っています。日本Ruby会議の「来年で最終回」宣言や「日本のRailsは残念」と言われる状況を受け日本でもRailsに特化したカンファレンスが必要ではと思います。

私たちはRailsが強力なツールであることを知っています。
私たちはもっと効率的に迅速にきれいに開発できると常に思っています。
私たちはRailsの普及期が終わって当たり前に仕事で使っている人が沢山いるフェーズに入ったことを知っています。

Railsのコンセプトの一つは「DRY(Don’t Repeat Yourself)」です。今回のRailsDevConがお互いのノウハウを共有し、アウトプットしていく実践的な場とすることを目指します。

Mitaka.rb#10@吉祥寺「Bistro epices」を開催しました

去る9月9日にMitaka.rb10回目を開催しました。昨年5月の初回から一年以上をかけて10回に到達。ご参加いただいている皆さん、運営に協力してくれている皆さん、会場提供している店舗の皆さんにお礼申し上げます。Rubyistがいいもん食ってさざめきながら散会していくのを見るのは私の喜びです。

自分はあまり大きなことは考えていなくて、基本的に自分がRubyKaigiやRails勉強会@tokyoで受けたホスピタリティや出会いを派生的に再生産したい。スタンド使いはスタンド使い同士勝手に惹かれ合うんだけどそれをちょっと促進する「場」になればいいな、程度です。RubyKaigiについては次のエントリで書きます。

Mitaka.rb#10開催概要

詳細はこちらより。 http://atnd.org/events/7542

昨年8月に好評だった「Bistro epices」さんを貸し切ってRubyistで懇親しようというイベントです!RubyKaigiおつかれさまでした会って感じでしょうか。

  • 日時:2010/9/9(木) 20-23時
  • 進行:20:00-22:00飲食、22:00-23:00 LT発表
  • 予算:3000円(榊が懸賞に当たったので6000円のコースの半額出すよ!→人数増えたので予算が尽きたので一人2000円ずつの補助になったよ(><)。→(株)HatchUp様の協賛により一人1000円補助が出ます!(←今ココ)

LT

  • 「群馬でWEBとRubyな生活」 by @kanayannetさん
  • 「【急募】【!緊急!】【拡散希望】【RTお願いします】【興味がなくてもリツイートを!】【賛同者求む!】【現在1人】」by 小芝(@bash0C7 )さん
  • 「美味しそうを共有するサービス『ラペコ』の紹介」by (株)KRAYの芳賀 充(@func09)さん
  • 「WordPressに足りないモノ」by 駒形 真幸(@komagata)さん
  • 「30min.(サンゼロミニッツ)で幸せな日常を」by @ysakaki

Mitaka.rb#10開催経緯

RubyKaigiも終了したしMitaka.rbやりたいがまた「でもお高いんでしょう?」と言われるのもなーと思っていたら懸賞に当たったのです。吉祥寺のいせやというのは地元ではふらっと立ち寄ってやきとりなどさくっと食べていく所として定番なんですが調べたら350席もあるらしいんですね。350席×仮に一人4000円=140万円・・・無理ヽ(´ー`)ノ。

ということでいせや貸切は諦めて吉祥寺のカジュアルフレンチ「epices」さんで開催、費用は半額補助だ!ということになりました。今回は初めての企業協賛として(株)HatchUp様から一人1000円の補助もいただき、ありがとうございました。

【速報】@coopa_ の懸賞に当たった!けど絶対10万円じゃ足りないのでスポンサー募集します!! RT: @ysakaki 当たったら吉祥寺のいせ屋を貸しきって夕方から飲み食いしたい。「来た人皆奢るよ」とか言ってみたい。それをUstしたい。 #coopa_less than a minute ago via Tweetie for Mac

@kakutaniさんから「Mitaka.rbがRubyKaigiよりお安いなんて」とのお言葉いただき感無量です(笑。

@ysakaki #rubykaigi より安いmitaka.rbだと…less than a minute ago via Echofon

Mitaka.rb#10開催風景

カウンタで談笑する@monoookiさん
カウンタで談笑

@iori0121さんと@adzuki34さん、RubyKaigiスタッフお疲れ様でした!
@iori0121 と @adzuki34さん、RubyKaigiスタッフお疲れ様でした!

カウンタ前で談笑する@ukstudioさん
カウンタ前で談笑する@ukstudioさん

@kanayannetさんLT発表中。群馬から車を飛ばして駆けつけてくださったそうです。熱い!
群馬から車を飛ばして駆けつけてくださったそうです〜!

@komagaraさんも中央線クラスタ。
@komagaraさん

@nonomuraさんと@sugamasaoさん
@nonomuraさんと@sugamasaoさん

@nogさんもご機嫌
@nogさんもご機嫌

LTでrapecoの画面をプロジェクタ投影中
rapecoの画面をプロジェクタ投影中

@komagataさんがLT発表中
@komagataさんがLT発表中

受付会計手伝っていただいた前田製作所の前田さん!いつもありがとう!
受付会計手伝っていただいた前田製作所の前田さん!

小芝さんが誕生月だったのでお祝いしましたよ!”えっ年下だったの”が拡散されて恥ずかしい(><)。

最後にepicesのシェフからご挨拶いただく。近くに二号店を出店したそうです。ごちそうさまでした!
シェフからご挨拶いただく。近くに二号店を出店したそうです!

「Bistro epices」料理

前菜

サラダの大皿。多分4人前だと思う。
サラダの大皿

前菜取り分けた所。
前菜盛り合わせ

パスタ

パスタパスタ!

メインの魚介料理

魚介料理遠景
メインの魚介料理
魚介料理取り分けてみた
魚介料理の大皿

メインの肉料理

メインの肉料理。ふたり分。

おまけ

お茶目すぎる @ukstudioさん。
お茶目すぎる@ukstudioさん

@sugamasaoさんに「一番かわいい顔して」と言ったら照れてかわいい!
「一番かわいい顔して」と言ったら照れてかわいい!

いつの間にかMacbookProに色々シール貼られてた。右上のWAVEシールと左上のなぜなぜ君。中央はtwitterのくじらさん
いつの間にかMacbookProに色々シール貼られてた。右上のWAVEシールと左上のなぞなぞ君。中央はtwitterのくじらさん

私は8月誕生日だったのに店側のサプライズでデザート盛り合わせプレートをいただいてしまった!「Bistro epices」さんありがとう!
誕生日のデザート盛り合わせプレート

写真ギャラリ

ランダム表示してます。写真は上記で使用したものと同じです。