一分一秒真剣勝負!

Ruby, Railsなど。Web系の技術ネタを充実させたい・・が、そうなるかは分からない。

Rubyのラーメン"Ruby on 松江ラーメン"

 ええええ!

 松江市の食品会社である中隆(なかたか)は2010年5月12日、パッケージにプログラミング言語Rubyのロゴを配した「Ruby on 松江ラーメン・キュービックシリーズ」を発売した。売り上げの一部をRubyアソシエーションに寄付し、Rubyの普及を支援する。

 なんでラーメンなんだよ!まあ発注してみますけど。しかし、いくらなんでもRubyじゃラーメンは実装できないなあ。

Ruby on 松江ラーメン・キュービックシリーズ

Ruby on 松江ラーメン・キュービックシリーズ

マイペースにGoogle急上昇ワードを取得してもらった!

RubyGoogle急上昇ワードを取得するに書いてあるスクリプトをいじってみた。REXMLに詳しいかはわからないけど、XPath大好きなので、XPathを使って書き直した。

 わーい、コード書いてもらったよ!社会ネタを書くと詳しい人が色々教えてくれたことはあるけど、技術ネタでは初のレスポンスかもしれない。発言力無いからなぁこのブログ。

doc = REXML::Document.new(ret)
doc.get_elements('/rtt/item').each{|node|
puts node.elements['query'].text()
}

 これ!これです!知りたかったのは!なるほど、get_elementsってメソッドを使えばいいのか。そういえばdoc.rootでその次にXPathを指定するメソッドで取れなくて、まぁいいやとりあえず動くメソッドで・・・ということがあったような気がします。そういえば/rttを書いてなかったかも。
 ところでXML取得するだけならopen-uriの方がいいんじゃないかと思えてきた。

#!/usr/bin/env ruby

require 'rexml/document'
require 'open-uri'

url = 'http://www.google.co.jp/m/services/trends/get'

doc = REXML::Document.new(open(url).read)
doc.get_elements('/rtt/item').each {|node|
  puts node.elements['query'].text()
} 

 というわけで、更に書き直してみた。なんかスッキリした。id:d-kamiさん感謝です。

RubyでGoogle急上昇ワードを取得する

 Google急上昇ワードとか今更感がしますが、Rubyで取得するコードを書いてみました。

#!/usr/bin/env ruby

require 'rexml/document'
require 'net/http'

url = 'www.google.co.jp'
ret = Net::HTTP.start(url, 80) { |http|
  http.get('/m/services/trends/get').body
}

doc = REXML::Document.new(ret)
doc.root.each_element do |element|
  next unless element.has_elements?
  puts element.get_text('query').to_s
end

 気持ち悪いのはこれよりベストプラクティスな方法があるんではないか?ということ。REXMLのドキュメントを読みながら書いたんですが、REXMLを一通り理解するのはそれなりの時間がかかるのかなーと直感で判断し、これでいいかという感じになっています。詳しい人だったらどう書くんだろ。

Rubygemsをアンインストールできない。

 gem uninstall ruby-aaws でエラーが発生。見つからないようだけど、gem listでは表示される・・・なんだこれ?と思いちょっとぐぐったら以下のエントリーを発見。

インストール時のPathが違っていた。homeディレクトリ下の.gemに入ってしまっていた。

gemが入っているpathを指定すれば、uninstallできる。

$ gem uninstall -i ~/.gem/ruby/1.8/ growlnotifier

 全く同じ状況だった。これ、環境書いてないけどMacですよね?そういえばMacを買ったばかりの頃は全部sudo付けてたっけ。うーん、なんか面倒だなこれ。

追記

 gems1.3.3あたりでこのバグは改善されたようです。

SinatraをさくらインターネットでCGIスクリプトとして動かす

 ちょっと出遅れ感がするけど、Sinatraいい!
http://www.sinatrarb.com/:image:large

require 'rubygems'
require 'sinatra'
get '/' do
  "Hello World!"
end

 トップページのこのコードを見て触りたくなった!軽量フレームワークと言うだけあって、シンプル過ぎる!これはイケメンフレームワークですね。

インストール

$ gem install sinatra

 これだけ!Rackも必要ですが、Sinatraをインストールすれば同時に入ってくれます。

動作確認

 以下の内容でtest.rbを作成。

require 'rubygems'
require 'sinatra'
get '/' do
  "Hello World!"
end
$ ruby test.rb

 これでウェブサーバが立ち上がるので、localhost:4567にアクセスすると結果を確認できます。このままコードを編集すれば即座に変更内容が反映される。素敵。

サンプルコード(さくらインターネット用)

 なんだか使えそうだぞ、となってくるとCGIスクリプトとして動かしたくなる。僕はさくらインターネットのスタンダードプランでサーバを借りているので、ググった結果を参考に以下のスクリプトで動作確認しました。

#!/home/YOUR_ID/local/ruby/bin/ruby 
# ↑Rubyをローカルに入れているのでこんなパスになってる

$LOAD_PATH.unshift '/home/YOUR_ID/local/ruby/lib'
ENV['GEM_HOME'] = '/home/YOUR_ID/local/lib/ruby/gem'

require 'rubygems'
require 'sinatra'

set :run, false # HTTPサーバを立ち上げないならfalse
set :environment, :cgi

get '/' do
 'hello!!'
end

Rack::Handler::CGI.run Sinatra::Application

 これだとスクリプト名がURLに含まれてしまうのだけど、今のところこれでいいかと思っている。これが気に食わないのなら.htaccessを編集すればどうとでもなります。
 よし、ドキュメントを読んでみるか。

marshal data too short

 Railsで作成中のサイトの話。動作確認のためにPOSTしたら「marshal data too short」というエラーが発生。ぐぐってもtDiaryのエラーばかり出てきて暫く悩んでいたのですが、sessionにでかすぎるデータを入れていたのが原因でした。設計上そうなっていたのでそのまま実装したわけですが、これは2時間ぐらいハマりました・・・。

Rubyを学ぶ為に、僕が読んだ4冊

プログラミングRuby 第2版 言語編

プログラミングRuby 第2版 言語編

プログラミングRuby 第2版 言語編


 最初に買ったのがこれ。Rubyの仕様が網羅されており、実装がどうなっているかまで書いてある。今からRubyをやってみるかという人は最初に買わなくてもいいんじゃないかと思う。

プログラミングRuby 第2版 ライブラリ編

プログラミングRuby 第2版 ライブラリ編

プログラミングRuby 第2版 ライブラリ編


 タイトル通りのライブラリのリファレンス。これ買った時は便利だと思ったなぁ。ただ、ちょっとだけRubyのバージョンが古いし、Rubyリファレンスマニュアル刷新計画が充実してきたらいらなくなるかもしれない。

Rubyスクリプティングテクニック ―テスト駆動による日常業務処理術

Rubyスクリプティングテクニック ―テスト駆動による日常業務処理術

Rubyスクリプティングテクニック ―テスト駆動による日常業務処理術


 Rubyによるテスト技法が充実している一冊・・・では無く、なんとテスターがRubyを使えるようにと書いたニッチな技術書だった。しかし著者は途中からプログラマも読めるように書き直したので、プログラマが買っても面白いです。「プログラミングRuby 第2版」では気付かなかった事とかもあって、たまたま目についたから買った本にしては良かったと思う。

初めてのRuby

初めてのRuby

初めてのRuby


 Ruby使っておきながら著者のYuguiさんを知りませんでした。ごめんなさい。しかし女性のGeekって珍しいよなぁ。他言語経験者を前提に書かれたRuby入門書として現時点で最強の書籍。分かりやすい内容と驚異的な薄さに感動必死。

後は

 プログラミング言語Rubyも買わないとだな。