Seasar / Teeda / S2Dao


なんか色々かいてたけど消えたので簡潔にかくよ


仕事でTeeda使ってたんだけどDaoの取得でClassCastExceptionがでる
ってのがつぶせなかったのでTwitter愚痴をpostしてた

naotos teedaAjaxでpostした際にs2dao使うとClassCastExceptionが発生するのが直らないー

http://twitter.com/naotos/status/971610146


そしたらid:higayasuoからレスポンスが

higayasuo @naotos ClassCastExceptionがでるのはSMART deployのルールを
守っていないから起こるのがほとんど。MLできいてみては

http://twitter.com/higayasuo/status/971683742


それもそうだと思いMLになげた所、自分が全然Seasarを理解してなかった事が判明
自分の頭の悪さが露呈しました。


Seasarの魅力であるDIは自動でインスタンスをセットしてくれるものであり

public XxxDao xxxDao 


を定義しておけば自動でインスタンスを突っこんでくれます
これはServiceやLogicも同じでpageクラスからdaoクラスまでインスタンスを自分で
生成することなく作業する事ができます。


これを理解してなくでネガティブな発言をtwitterにpostしてたのは反省してます。
Seasarは使える!

コマンドラインスクリプトでActiveRecordを使う

Railsとか久しぶりに触った。
ActiveRecordが便利だ。

でもこれバッチとかコマンドラインスクリプトじゃ使えないよー。
ってことで調べたら使えたのでメモ。

require 'rubygems'
require 'active_record'

# ここでdatabase.ymlと同じ設定をする。
ActiveRecord::Base.establish_connection(
  # DBの種類  
  :adapter => "sqlite3", 
  # スクリプトを起動するカレントディレクトリからの相対パス
  :database => "db/development.sqlite3",
  :timeout => 5000
)


# ActiveRecordで使用するTable
class User < ActiveRecord::Base
end

# ActiveRecordで使用するTable
class Comment < ActiveRecord::Base
end

これだけで普通にActiveRecordが使えるよ!

twitterのAPI制限が糞なのでRubyでtwitterのpublic_htmlをScrapした。

require 'kconv'
require 'rubygems'
require 'hpricot'
require 'open-uri'

$Kcode = 'u'

doc = Hpricot.parse(open("http://twitter.com/public_timeline"))
doc.search("tr.hentry").each { |entrys|

  entry = Hpricot.parse(entrys.to_s.toutf8)
  name = entry.search("td.content strong").inner_text.to_s.gsub(/[ |\t|\n]/,"")
  comment = entry.search("span.entry-content").inner_text.to_s.gsub(/[ |\t|\n]/,"")
  warn name + ":" + comment

}    

API使わずに直接Scrapするとサーバに負荷を与えるのでループでまわしたりはやめた方がいいね。


追記:
twitterの構造が変ったのでこれは使えません。