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のルールを
http://twitter.com/higayasuo/status/971683742
守っていないから起こるのがほとんど。MLできいてみては
それもそうだと思いMLになげた所、自分が全然Seasarを理解してなかった事が判明
自分の頭の悪さが露呈しました。
Seasarの魅力であるDIは自動でインスタンスをセットしてくれるものであり
public XxxDao xxxDao
を定義しておけば自動でインスタンスを突っこんでくれます
これはServiceやLogicも同じでpageクラスからdaoクラスまでインスタンスを自分で
生成することなく作業する事ができます。
コマンドラインスクリプトで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の構造が変ったのでこれは使えません。