20080506
Twitterにデータが集中するのはリスクがあるので、非集中型のマイクロブログプラットフォームを作ろう
TechCrunch Japanese アーカイブ » Twitterは解放できる—これがシナリオだ
と考えている人がいるそうな
TwitterからJaikuへ移行とか、その逆とか自由にできるプラットフォームを作ろう、と考えているのかな
データポータビリティというか、Twitter互換サービスはまずとりあえずAPIをTwitter互換にしておけば良いのに、あとデータを勝手にキャッシュしておくとか。
ドキュメント指向DBの StrokeDB のドキュメントを見てるとき、各データに全世界でユニークなUUIDを振ったり、バージョン管理機能を持たせたりして、データ層で独立させようと考えていると思った。↓のようなメッセージが書いてあったり。
Users finally have generated content / ユーザ自身がコンテンツを持つ
My data is mine / ユーザのデータはユーザ自身の物
Amazon SimpleDB のようなWebAPIを持ったデータストレージにユーザのデータは保存してあり、そのデータはユーザ自身の物。新しいサービスを利用開始するときは各サービス(Twitter / Jaiku)へ権限を与える。という仕組みなら先行サービスへのデータの集中は避けられんかな。
見出し
毎に一記事になる?
その場編集機能
使えた!
設定以前に書いたのは、編集の対象にならないのかな?
その場で編集機能
を使ってみたいのだけど、使い方が判らん。
設定必要なの?
Twitterで勤怠管理のするためのRubyスクリプト
これまで ”見込み残業” という制度で残業代とかあまり関係なかったけど、最近になって普通に残業代が付くようになった。
なので仕事開始・終了時間を付ける必要が出てきたんだけど、これが意外にめんどくさい。。
ということで一つTwitterで付けてみようと思ってスクリプト書いてみた、rubyで:-)
以下のソースをhoge.rbとかで保存して ruby hoge.rb userid password 2007-04-01 とかで実行
今から仕事だ!!を見つけたら開始、仕事終わった!!を見つけたら終了時間として保存されて、csv出力 DETH
しかしあれだね、TwitterとAPIを使ってごにょごにょやってるのを見ると思うけど、Twitterてまさにライフログだよね。正直ライフログの話をネットや本で見ててもいまいち実感がわかなかったけど、実際にやってみると良いね。
require 'rexml/document' require 'date' require 'net/http' Net::HTTP.version_1_2 class Twitter @@URL = {:host=>"twitter.com", :status=>"/statuses"} @@URL.merge!({ :user_timeline => @@URL[:status]+"/user_timeline", :friends_timeline => @@URL[:status]+"/friends_timeline", :public_timeline => @@URL[:status]+"/public_timeline" }) def initialize(user, pass) @user, @pass = user, pass end def get(target, options={}) endpoint_url = @@URL[target] + (options["type"] ? options["type"] : ".xml") + "?hoge=hoge" options.each do |key, value| endpoint_url += "&"+URI.encode(key)+"="+URI.encode(value) end result=nil req = Net::HTTP::Get.new(endpoint_url) req.basic_auth @user, @pass Net::HTTP.start(@@URL[:host], 80){|http| res = http.request(req) result = parse(res.body) if res["status"]=="200 OK" } result end def parse(body) doc = REXML::Document.new(body) results = [] doc.each_element('/statuses/status') do |elem| id = elem.elements['id'].text.to_i time = DateTime.parse(elem.elements['created_at'].text) text = elem.elements['text'].text results << {:id=>id, :time=>time, :text=>text} end results end end class TwittimeSheet def initialize(twitter) @twitter = twitter end def get_date(date) work_time = {} max_date = date statuses = @twitter.get(:user_timeline, {"since"=> date.strftime("%a, %d %b %Y %X GMT+900") }) if(statuses) then statuses.each do |status| max_date = status[:time] if status[:time] > max_date work_time[status[:time].strftime("%Y-%m-%d")] ||= {} work_time[status[:time].strftime("%Y-%m-%d")][:start] = status[:time] if status[:text] =~ /.*今から仕事だ.*/ work_time[status[:time].strftime("%Y-%m-%d")][:end] = status[:time] if status[:text] =~ /.*仕事終わった.*/ end end return work_time,max_date end def get_month(date_string) result = {} date = Date.parse(date_string) end_date = date while((date.month == end_date.month) && (date < Date.today)) do p "Now get..." + date.to_s work,max_date = get_date(date) result.merge!( work ) date = max_date.next sleep(1) end result end end user, pass, date = ARGV.shift, ARGV.shift, ARGV.shift unless date then p "ENTER!! user password date" else twitter = Twitter.new(user, pass) twittimeSheet = TwittimeSheet.new(twitter) result = twittimeSheet.get_month(date) work_csv = "date,start,end\n" result.each{|k,v| work_csv += "#{k},#{ v[:start].to_s },#{ v[:end].to_s }\n" } File.open("work_sheet_#{date}.csv","w") do |file| file.puts work_csv end p "output end work_sheet_#{date}.csv" end
最近RubyOnRailsを
色々触ってる、楽しい。
FlexのバックエンドにRailsを利用するSDKがあるらしく
http://journal.mycom.co.jp/news/2006/09/07/347.html
これは面白そうだ、と思うけどいまいちFlexがよくわかんない
・ActionScriptのライブラリなのか
・開発環境なのか (Flex Builder)
・実行環境なのか
・なんなのか
結局全部を総称してFlexて言うの?クライアントはFlashPlayerでうごくんだよね?(・し・)