トップ 最新 追記

Route 477



2010-02-01

[mac] そういえばMacBookのメモリ1GBx2が余ってるんですが

どうやって活用しよう…。

欲しい方とかいますか?


2010-02-06

[ruby] Tab Sweep

http://github.com/rubiii/rspec_attr_extensions

it_should_have_an_attr_reader_for :date_of_birth みたいな

http://github.com/snitko/mmmenu

Railsで複数階層のメニューを生成するらしい

http://github.com/schacon/showoff

Rubyで書かれた、HTMLなプレゼンツール

http://github.com/jnicklas/capybara

webratの後継?cucumberで、@javascriptタグが付いてるところだけculerityで動かす とかできるのはいいね

http://www.rubyinside.com/cramp-asychronous-event-driven-ruby-web-app-framework-2928.html

Rubyのための非同期Webサーバ

http://www.engineyard.com/blog/2010/rails-3-beta-is-out-a-retrospective/

Rails 3 beta出ました!


2010-02-08

[rails] Rails 3 Beta リリースノートと和訳

最近(ついに)BetaがリリースされたRails 3のリリースノートです。

英:

日:

さらに、guides.rails.infoで、Rails 3のチュートリアルが始まっているようですよ。


2010-02-09

[sinatra] Sinatra 1.0がまもなく登場

プレリリースノート

バージョン1.0について

テストの書き方など、若干の非互換がある模様。その代わり、今後、1.xの間は新たな後方非互換は入れないそうです。

0.9.xを使い続けたい人は、

gem 'sinatra', '< 1.0'

とすればOK。0.9系も、セキュリティ関係の修正は行うそうです。


2010-02-11

[ruby] わかりにくいバグ わかりました

以下のコード、どこがバグか分かるだろうか?

class Foo
  def initialize(path)
    @path = path
  end

  def src
    @src ||= File.read(@path)
  end

  def save!
    File.open(@path, "w"){|f| f.write modify(src)}
  end

  private
  def modify(s)
    s.gsub(/hello/, "Hello") # 例
  end
end
Foo.new("tmp.txt").save!

正解は「modifyに空文字列が渡る」でした。なんでこうなるんだろう?

(追記:コメント欄で指摘いただきましたが、File.openを呼んだ時点でファイルの内容がクリアされるからでした。 寝不足はデバッグの敵!)

[ruby][event] 「Rubyの作者だけど何か質問ある?」

1 名無しさん(西日本) 2010/02/10(水) 12:36:24.29 ID:ZA5dvn9p
特定されない範囲で

そりゃあ無理だ!

というわけで(は、勿論ないですが)今週末に行われる 松江Ruby会議02で、 「まつもとさんに聞いてみよう(仮)」というイベントが行われます。

Ruby開発者のまつもとさんに、Rubyを使っていて気になったことや、Rubyの実装に関する分からないことを質問してみましょう。当日、気軽に質問していただけるように配慮します。また、事前に質問内容を matsue02 _at_ rubykaigi.org に送っていただければ、当日、司会からまつもとさんに質問いたします。

[http://regional.rubykaigi.org/matsue02より引用]

質問の投稿はメールで受け付けています。 (あるいは、Twitterで「#matrk02」を付けて発言するとかでも良いと思います。メールの方が確実ですが)

本日のツッコミ(全3件) [ツッコミを入れる]

まつもと [もうお気づきかもしれませんが、評価順序の関係でopen(path, "w")が先に行われるため、ファイル内容がクリア..]

なかむら(う) [どっちかというとわかりやすいバグというか。 むしろsaveがないのにsave!というメソッドがあるのが仕様バグっぽ..]

knu [sort file > file ってやっちゃって「あっ!」みたいな。]


2010-02-18

[javascript][link] .sort.call(null)の深淵 - 素人がプログラミングを勉強するブログ

JavaScriptで、

[].sort.call(null)

がwindowに評価されるのはなぜ?という話。

  • callにnullを渡すと、thisがwindowになる
  • Arrayのsortは、ソートするものがないとき(つまり、lengthがundefinedか0か1のとき)はthisを返す

ということからwindowになると。へぇ。

ただしフレームを使ったサイトの場合、window.lengthが2以上になって上のような挙動にならなかったりするらしい。

[ruby] Hash、Mash、Dash

Hashieは、Hashと似たような(?)MashとDashというクラスを提供する。

Mashはostructみたいなオブジェクト。「?」で存在チェック、「!」で強制定義ができる。

conf = Hashie::Mash.new
conf.foo?  #=> false
conf.foo = 1
conf.foo    #=> 1

conf.bar!.baz = 2

例えばJSON返すAPIとかで、

res_hash["responseData"]["translatedText"]

Hashie::Mash.new(res_hash).responseData.translatedText

と書ける。書き捨てスクリプトとかでは楽。

(訂正:Hash#to_mashはありませんでした)

Dashはデフォルト値の書けるStructみたいな感じ。

class Person < Hashie:: Dash
  property :name
  property :email, :default => "no mail" 
end

me = Person.new(:name => "yhara")
me.email  #=> "no mail"

[ruby] Tilt

前に

Webサーバ・Webフレームワーク間をつなぐものとしてRackがあるわけだけど、 それならWebフレームワーク・テンプレートエンジン間をつなぐライブラリもあってしかるべきではないかと思った。

[20090208#p01より引用]

と書いたことがあるんだが、rtomaykoがやってくれました。

使い方は、viewのファイルを食わせて、renderを呼ぶだけ。

template = Tilt.new('templates/foo.erb')
output = template.render(Object.new, :x => 1, :y => 2) #=> String

これでさらに新しいweb frameworkが書きやすくなりましたね。

[javascript] CoffeeScript

RubyとPython的な記法でJavaScriptを単純化したようなスクリプト言語。 Rubyで書かれたJavaScriptへのトランスレータがある模様。

「CoffeeScript is just for fun and seriously alpha.」とのこと。

クロージャを使った関数定義の例(代入は「:」らしい)。

square: x => x * x
cube:   x => square(x) * x

2010-02-19

[scala] foursquareが半年かけてScala+Liftに移行した話

foursquareLiftに切り替えたという話を聞いてびっくりしましたが、どうやら本当だった模様。

以下、内容抜粋

  • もとはPHP+Apache+MySQLだったが、エンジニアが書いたものじゃなく、これからの拡張のためには書き直すべきだった
  • 静的型・コンパイル言語が好き。Wicketを試したけど、Object型使いすぎなのと関数がfirst-classでないのがちょっと
  • Javaの頃からなるべく関数的に書くようにしてたんで、Scalaは自然
  • コールバック書くだけでAjaxになるのはいいね!
  • まあせっかくスタートアップなんだし、変わった・面白いものを使ってみたかったってのはある

リライトについて

  • (書き換え中は?)PHPとセッションの共有とか試してみたけど、あんまりうまく行かず
  • リライト3日目からLiftのコードがproductionで動くようになったけど、リライト90%に3ヶ月かかった。
  • 残りの10%はiPhoneアプリも修正が必要だったので、2ヶ月かかった。今日終わりました!
  • LiftとMySQLは相性が悪い。PostgreSQL使うべき

(実際のコードを交えた解説がいくつか)

よかったこと

  • ほぼ全ページが前よりいい感じになったぜ!
  • いまのAjaxが難しいとは言わないけど、LiftのAjaxはほんとに楽。ていうかこうなるべき
  • コードは短く、わかりやすくなったし、バグも減り、機能は増えた。
  • @rasmus曰く:ちゃんと見ても脆弱性が一つも見つからなかったのはfoursquareが初めてだわ。4つ星

よくないこと

  • Liftはステートフルだから、productionでそのうち問題になるかも、今のところ悪くはないけど。(編注:性能の問題?)
  • Mapper(LiftのORMレイヤ)はまだ未成熟なとこが…
  • Lift SiteMapは我々の用途にはオーバースペック。もっとシンプルでいい
  • マイナーなものを使ってるんで、これからスケールアップする途中でいろいろ問題があると思う。けど、Liftコミュニティはとっても親切だよ。

状態

  • Scalaで14000行くらい。モバイルサイト・API+OAuthサーバを含む
  • マークアップが6000行くらい
  • フル機能のスタートアップとしては、小さくね?

これから

  • データベースはPostgreSQLが1インスタンスだけだけど、いつかは増やさないといけないかも
  • MapperがJSON対応するので、JSONの置き場所を考えないと(Memcached, Casandra, Goat Rodeo?)
  • Scalaという新しいものを使い始めたけど、たぶんうまくやれるんじゃないかと思う。(アルゴリズムとか)計算機科学的な概念は、どの言語を使おうと同じわけだし

2010-02-21

[rails] Rails3に関するさまざまないろいろ

Rails勉強会@東京です(講師:松田さん)

準備

$ gem install rails3b
$ gem install rails --pre
$ gem update

プロジェクト作る

 $ rails books --edge
  • Gemfileに、依存ライブラリ(gem)の情報を書くように。Bundler
  • --edgeなので、「gem "rails", :git => "git://github.com/rails/rails.git"」になっている
  • script/*がscript/railsに
  • 単にrailsでもいい(カレントのscript/railsが呼ばれる)
    • rails_head/railties/bin/railsを参照
  • rails generate
  • あるいはrails g
  • config/environment.rb
    • アプリ名がクラスに! (Books)
    • モデル名と被らないように注意

(このへんでbundlerがハマる)

  • rails g scaffold book title:string price:integer
  • 色が付くように
  • rails aboutがrake aboutに(どうでもいい?)
  • 長いrespond_toブロックの代わりにresponds_with :xmlみたいになるかも(!)
respond_to :html, :xml
def index
   @books = Book.all
   respond_with @books
end
  • validates :title, :presence => true (カラム名を軸にした書き方が)

RSpec

  • RSpecの2.0系(未リリース)はRails3対応
  • Gemfileに gem "rspec-rails', '2.0.0.a5', :group => :test
  • rails g rspec:install で生成

scope

  • scope :titled, lambda{|t| where :title => t}
  • @books = Book.scoped.titled(str)
  • scope :title_like, lambda{|t| where "title like ?", "%#{t}%"}
  • 今後のARの推奨は、find(:condition => ...)じゃなくて
    • Book.where(:title => 'aaa').count のような。
    • whereはさらに連結できる

ビュー

  • scaffoldが_formを作るように
    • app/views/books/_form.html.erb (newとeditから参照されている)

ActiveModel

  • 普通のクラスをモデル扱いさせたりできるぜ
    • form_for(@books_search_form) とするために、
    • #to_model, #to_key, #new_record?が必要

I18N

  • まだデフォルトの日本語訳がない! (松田さんを応援しよう)
  • cp ../rails_head/activerecord/lib/active_record/locale/en.yml config/locale/ar_ja.yml
  • cp ../rails_head/actionpack/lib/action_view/locale/en.yml config/locale/av_ja.yml

JS

  • jquery: scaffoldは対応、RJSはまだ未対応

リリースは?

  • まだバグレポート・修正が活発に
  • 4月予想

[rails] Rails3対応プラグインを探す方法

http://railsplugins.org/plugins を見ればいいそうです

[rails] OpenIDについていろいろ

  • Mixiアプリは当たれば100万人単位のユーザに使ってもらえる
    • PC用はJS、モバイル用は逆にHTTP+RESTな感じ
    • OAuthの仕様に詳しくなるらしい
  • users has_many :identity_url であるべき!
    • 例えばドメイン失効
    • 例えばサービス終了(OpenID Providerの)
    • じゃあ1つのIDでどこでも…ってわけにいかんじゃないすか
      • それはOpenIDのゴールではない
      • 「サービスごとにアカウント作らなくていい」のがいい
  • 独自ドメインをidentity_urlに使うのはアリ?
    • どのProviderのidentity_urlを受け入れるかは、サービス作成者に任されている
    • だから、サイトによってログインできないのは覚悟すべし
    • つまり、OpenIDだからって、任意のidentity_urlを受け入れないといけないわけじゃない
      • 極端な話、特定のサービス群のアカウント持ってる人だけ入れるサービスも作れる
    • というわけでホワイトリスト方式でセキュリティを高める、というのは許される
      • ブラックリスト方式は良くない
  • 要するにOpenIDは認証情報の交換のみを担当するから
    • その先のことはあんまり決まってない(自由度がある)
    • 例:AWSはAmazonのアカウントでログインするようになってるが、Amazonのアカウントで任意のサービスにログインできるわけではない
    • (社内のサービス間のユーザ情報共有としてOpenIDを使った例)

http://www.clickpass.com/

  1. clickpassにOpenIDを登録
  2. サイトのClickpassボタンをクリック
  3. Clickpass上でsignup
  4. 2回目は、Clickpasボタンを押すだけでログインできる!

[rails] プラグインの探し方とか

Rails HEADの情報は?

  • ML
  • コミット(git log)、チケット
  • チャット
  • lighthouse

@wycats vs @nk

  1. http://magicscalingsprinkles.wordpress.com/2010/02/08/why-i-love-everything-you-hate-about-java/
  2. http://gist.github.com/304407
  3. http://yehudakatz.com/2010/02/15/abstractqueryfactoryfactories-and-alias_method_chain-the-ruby-way/

repim

  • openid_authenticaitonのgenerate後、restful_authenticationいらないやってなったときに切り離すのがめんどいというモチベーション

2010-02-22

[ruby] Ruby関係のTipsを集めたTumblrアカウント : Ruby Quicktips

Ruby/Rails関係のTipsが集まっています。中級のが多いかな。

irbで、直前の評価値が「_」に入ってるってのは知らんかった。 便利だ…。

via RubyInside

本日のツッコミ(全1件) [ツッコミを入れる]

otn [bashでも直前のコマンドが「_」に入ってます。役だった経験はないですが。]