JAM Circle の使い方
このドキュメントは「習うより慣れろ」系でかかれた不親切ドキュメントです。嘘です。ドキュメントを読まなくても直感的に分かるアプリケーションにしたいので、できる限り簡単に書いています。分からない点がありましたら作者までご連絡ください。
JAMCircleの起動にはJ2SE Runtime Environment 5.0 Update 17以降が必要です。
かんばんの基本操作
- 適当なところでダブルクリックしてください。かんばんが作成されます。
- かんばん上にマウスを動かすとアクションが表示されます。適当にクリックしてみてください。
- ×アイコンをクリックするとかんばんが削除され、ゴミ箱へ移動されます。移動されたかんばんを復帰させる場合はゴミ箱アイコンをダブルクリックし、かんばんの一覧を開いた後、復帰したいかんばんをボードへドラッグ&ドロップしてください。
レーンの基本操作
- 起動した直後はTodo、Doing、DONEの3つのレーンが作成されています。
- レーン上にマウスを動かすと右上にアクションが表示されます。適当にクリックしてみてください。
- レーンをゴミ箱へドラッグするとレーンを削除することができます。レーンに置かれたかんばんはゴミ箱へ移動されますが、レーン自体は削除された場合、DBを直接操作する以外復帰する方法はないのでご注意ください。
ボードの基本操作
- ボードを作成する場合はFile->New Wizard->New Board Wizardを選んでください。
- ボードを切り替える場合はSelectとかかれたアイコンをダブルクリックしてください。ボードの一覧が開かれます。表示されたボードの一覧から開きたいボードをダブルクリックしてください。
- ボードを編集したい場合は
スクリプトの実装例
スクリプト中の暗黙オブジェクト
Board
| board | 選択しているボード |
Lane
| event | レーンに対して起きたイベントを保持するオブジェクト。かんばんの追加:isAdded() かんばんの削除:isRemoved() |
共通
| Card | 永続化できないかんばん。スクリプトを使って作成したかんばんはデータベースへ保存されません |
| monitor | 進行状況を表す。 インターフェースはIProgressMonitor 、そのままの使える。 |
Boardの実装例
BoardListからボードを作成した後、編集ダイアログで下記のスクリプトを入力してください。
TracからWikiを取得してかんばんにする(JRuby)
require 'xmlrpc/client' username = 'ユーザー名' password = 'パスワード' trac = 'TRACのURL' server = XMLRPC::Client.new2("http://#{username}:#{password}@#{trac}/login/xmlrpc") allPages = server.call("wiki.getAllPages") monitor.subTask("Wikiを表示") allPages.each do |page| monitor.worked 1 create_card page end
Tracからチケットを取得する
require 'xmlrpc/client' username = 'Tracのユーザ' password = 'Tracのパスワード' trac = 'TracのURLに置き換えてください' server = XMLRPC::Client.new2("http://#{username}:#{password}@#{trac}/login/xmlrpc") allPages = server.call("ticket.query") #allPages = server.call("ticket.query","status!=closed&type=defect") # defectのみ取得 count = 1 monitor.beginTask("get Ticket",allPages.length) allPages.each do |page| monitor.subTask("getting... #{count}/#{allPages.length}") ticket = server.call("ticket.get",page) create_card "#{ticket[0]} : #{ticket[3]['summary']}" monitor.worked 1 count = count + 1 end
はてなブックマークから特定のユーザー、タグからカードを作成する(実装中)(JRuby)
$KCODE = 'u' require 'net/http' Net::HTTP.version_1_2 require 'rexml/document' hatena_id = 'kompiro' bookmarks = [] Net::HTTP.start('b.hatena.ne.jp') do |http| offset = 0 has_next = "/#{hatena_id}/atomfeed?of=0" while has_next != nil header = { 'User-Agent' => "Ruby/#{VERSION}" } response = http.get(has_next, header) root = REXML::Document.new(response.body).elements['feed'] has_next = root.elements['link[@rel="next"]'] if has_next != nil has_next = has_next.attributes['href'] end root.elements.each('entry') do |elem| bookmark = {} bookmark[:title] = elem.elements['title'].text #bookmark[:url] = elem.elements['link[@rel="related"]'].attributes['href'] #bookmark[:hb_url] = elem.elements['link[@rel="alternate"]'].attributes['href'] #bookmark[:atom_edit] = elem.elements['link[@rel="service.edit"]'].attributes['href'] #bookmark[:eid] = bookmark[:atom_edit].split('/')[-1] #bookmark[:issued] = elem.elements['issued'].text #bookmark[:summary] = elem.elements['summary'].text #bookmark[:tag] = [] elem.elements.each('dc:subject') do |tag| if tag.text == "OSGi" bookmarks << bookmark end end end end end
Laneの実装例
レーンにかんばんを置いたときにかんばんの色を変える(Rhino)
if(event.isAdded()){
card.setColorType(0);
card.save();
}
かんばんをチケットに登録する(JRuby)
if event.added then require 'xmlrpc/client' trac = 'localhost:10080' user = 'admin' passwd = 'admin' server = XMLRPC::Client.new2("http://#{user}:#{passwd}@#{trac}/xmlrpc") monitor.beginTask("create ticket",20) server.call("ticket.create",card.subject,card.content) end
かんばんを終えたらtwitterに通知する(JRuby)
# タスクかんばんのDoneのscriptにしてください。 if event.added require 'net/http' require 'jcode' $KCODE='u' #configuration user = " username " #ユーザー名 pass = " password " #パスワード Net::HTTP.version_1_2 req = Net::HTTP::Post.new('/statuses/update.json') req.basic_auth user,pass status = "Done! " + card.subject if status.jlength > 140 status = status[0..410] + "..." end req.body = 'status='+URI.encode(status) Net::HTTP.start('twitter.com',80) do |http| res = http.request(req) print res.body end end
twitterから検索した結果をカードに(JRuby)
require 'open-uri' require 'rexml/document' search_string = "jamcircle" for page in 1..10 xml = open("http://search.twitter.com/search.atom?q=#{search_string}&page=#{page.to_s}").read doc = REXML::Document.new(xml) index = 0 doc.each_element('/feed/entry') do |elem| if elem.elements['twitter:lang'].text == 'ja' then card = create_card elem.elements['title'].text end end end

