JAM Circle の使い方

このドキュメントは「習うより慣れろ」系でかかれた不親切ドキュメントです。嘘です。ドキュメントを読まなくても直感的に分かるアプリケーションにしたいので、できる限り簡単に書いています。分からない点がありましたら作者までご連絡ください。

JAMCircleの起動にはJ2SE Runtime Environment 5.0 Update 17以降が必要です。

かんばんの基本操作

  • 適当なところでダブルクリックしてください。かんばんが作成されます。
  • かんばん上にマウスを動かすとアクションが表示されます。適当にクリックしてみてください。
    • ×アイコンをクリックするとかんばんが削除され、ゴミ箱へ移動されます。移動されたかんばんを復帰させる場合はゴミ箱アイコンをダブルクリックし、かんばんの一覧を開いた後、復帰したいかんばんをボードへドラッグ&ドロップしてください。

レーンの基本操作

  • 起動した直後はTodo、Doing、DONEの3つのレーンが作成されています。
  • レーン上にマウスを動かすと右上にアクションが表示されます。適当にクリックしてみてください。
  • レーンをゴミ箱へドラッグするとレーンを削除することができます。レーンに置かれたかんばんはゴミ箱へ移動されますが、レーン自体は削除された場合、DBを直接操作する以外復帰する方法はないのでご注意ください。

ボードの基本操作

  • ボードを作成する場合はFile->New Wizard->New Board Wizardを選んでください。
  • ボードを切り替える場合はSelectとかかれたアイコンをダブルクリックしてください。ボードの一覧が開かれます。表示されたボードの一覧から開きたいボードをダブルクリックしてください。
  • ボードを編集したい場合は

スクリプトの実装例

ExampleScripts?

スクリプト中の暗黙オブジェクト

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