« 2009年2月 | トップページ | 2009年4月 »

2009年3月

2009年3月18日 (水)

TracとMS-Project連携の課題をとっとと終わらせる

Shibuya.trac 2009新年会で発表したことと課題を,そろそろ終わらせないといけないなぁということで,まずは,MS-ProjectのガントチャートをTracの情報からできるだけ”いいかんじ”で作れないかということに手をつける。今までにできていることと,これからやることについてまとめる.ガントチャートを作るために運用方法にまで影響が出てくることも注意する.

  1. チケットの親子関係を表現する(完了)
    • 工数をprojectで計算するとおかしくなるので親にリソースは割り当てない
    • カスタムフィールドにparentを作って再帰でやりゃいいだけなので問題なし
  2. 予実管理、進捗率を表現すること
    • plan_start,plan_endを作り基準計画に入れるだけ
    • 運用でdue_assign.due_closeと含めて値の入れ方のルールが必要
    • 進捗率はcompleteでOk
    • 工数の管理燃したいが,工数を入れると期間が変わってしまうため難しい
  3. MasterTicketsの情報を元にしてチケットの依存関係を扱う
    • MasterTicketの意味からするとFFの関係で依存を作ればいい
    • 依存関係で矛盾してしまった場合の日付をどうするのか考える必要あり(ユーザに通知した上でTracの情報を変更しないとだめか)
  4. マイルストーンを扱う
    • マイルストーンはマイルストーンなので,ガントチャート上でも一点で表現する
    • Tracでのマイルストーンの日付はマイルストーンの基準計画にする
  5. コンポーネントはどうする
    • ソートをコンポーネントでするぐらいですかね(私の場合は親子関係があるから必要無いのですが…)
  6. バージョンについても考える
    • どう考えても必要ない

で追加で何をやらなきゃいけないか

  1. MS-Projectが自動で変更した日付の自動更新の仕組み
  2. マスターチケットのblockedbyに入っているものをFFの依存関係にする
  3. マイルストーンをタスクで登録して各チケットからマイルストーンに依存を登録
    1. マイルストーンの計画は完了期限から設定し実際のものは関連づけられたチケットから設定する
    2. 開始/終了日はMSの完了日を設定する
  4. コンポーネントでソートする,必要ならコンポーネントそのものを親タスクを追加

09/06/24追記:遅くなりましたが,Trac - MS-Project連携の状況で少し説明しています.詳細はShibuya.trac勉強会第4回で発表します.

| | コメント (0) | トラックバック (0)

2009年3月16日 (月)

Tracのレポートをチェックして表示するHTA(改XMLRPCもできるように)

Tracのレポートをチェックして表示するHTA をもとに、0.10対応とXMLに対応を追加しました。ほかのことの確認のついでに作ったものなのでエラーチェックとかいい加減ですが、そこそこつかえるんじゃないかなぁと思います。XMLRPCを使う場合はQueryTracXmlRpcを使ってください。第三引数にticket.queryの引数をエンコードして指定するとOkです。サンプルとして入っているものを確認していただけるとわかると思います。

「TracReportCheck2.hta」をダウンロード

Screen

| | コメント (0) | トラックバック (0)

2009年3月15日 (日)

VBAでXML-RPCに接続してみる

ActiveXが入っていないとだめだと思いますが、参照設定なしで使えるようになった。IE入っていれば問題なく使えそうなので少し試してみました。結局たいしたやりとりしないんだから、自前で要求文字列を作りレスポンスを解析すればいいんじゃないかということでこうなりました。

Sub test2()
'    Call getId("http://localhost/trac/SampleProject", "status!=closed&reporter!=okazaki")
'    Call getTicket("http://localhost/trac/SampleProject", 1)
    Call getSeverity("http://localhost/trac/SampleProject")
'    Call getId("http://localhost/trac/SampleProject", "status!=closed&hours!=0")
'    Call getId("http://localhost/trac/SampleProject", "status!=closed&hours!=0")
End Sub

'Tracに接続してResponseを得ます
Function createXmlHttp(ByVal URI As String, user As String, pw As String, method As String, params As String) As Object
    URL = URI & "/login/xmlrpc"
    Set createXmlHttp = CreateObject("MSXML2.XMLHTTP")
    If user = "" Then
        '初回のみパスワード入力のDailogが表示される
        createXmlHttp.Open "POST", URL, False
    Else
        createXmlHttp.Open "POST", URL, False, user, pw
    End If
    createXmlHttp.setRequestHeader "Method", "POST " & URL & " HTTP/1.1"
    createXmlHttp.setRequestHeader "Content-Type", "text/xml"
   
    If method <> "" Then
        param = "<?xml version='1.0' encoding='utf-8'?>" & vbNewLine & _
            "<methodCall>" & _
            "   <methodName>" & method & "</methodName>" & _
            "   <params>" & params & "</params>" & _
            "</methodCall>"
        createXmlHttp.send (param)
        '"fault"
    End If

End Function

'Responseがエラーかどうかを判断します。
Function checkError(oXmlHttp As Object) As Boolean
    checkError = False
    Set Members = oXmlHttp.responseXML.getElementsByTagName("fault")
    Dim errorMessage As String
    errorMessage = ""
    If Members.Length >= 1 Then
        Set Members = oXmlHttp.responseXML.getElementsByTagName("member")
        For i = 0 To Members.Length - 1
            Set oNodeList = Members.Item(i).ChildNodes
            If oNodeList.Item(0).Text = "faultCode" Then
                errorMessage = errorMessage & "Code=" & oNodeList.Item(1).Text
            End If
            If oNodeList.Item(0).Text = "faultString" Then
                errorMessage = errorMessage & ":" & oNodeList.Item(1).Text
            End If
        Next
        checkError = True
    End If
    If oXmlHttp.responseXML.getElementsByTagName("methodResponse").Length = 0 Then
        errorMessage = "XMLでの応答がありませんでした"
    End If
    If errorMessage <> "" Then
        MsgBox errorMessage
    End If
End Function

Sub getSeverity(URI As String)
    Dim oXmlHttp As Object
    'ticket.type.getAll "string"Ok /ticket.milestone.getAll "string"Ok,
    Set oXmlHttp = createXmlHttp(URI, "", "", "system.listMethods", "")
    If checkError(oXmlHttp) Then
'       Exit Sub
    End If
    Range("A:B").ClearContents
    Cells(1, 1) = oXmlHttp.responseText
    Set Members = oXmlHttp.responseXML.getElementsByTagName("string")
    r = 2
    For i = 0 To Members.Length - 1
        Set oNodeList = Members.Item(i).ChildNodes
        col = 1
        For Each Item In oNodeList
            Cells(r, col) = Item.Text
            col = col + 1
        Next
        r = r + 1
    Next
    Set oXmlHttp = Nothing
End Sub

Sub getTicket(URI As String, id As Integer)
    Dim oXmlHttp As Object
    Set oXmlHttp = createXmlHttp(URI, "", "", "ticket.get", "<param><value><int>" & id & "</int></value></param>")
    If checkError(oXmlHttp) Then
'       Exit Sub
    End If
    Range("A:B").ClearContents
    Cells(1, 1) = oXmlHttp.responseText
    Set Members = oXmlHttp.responseXML.getElementsByTagName("member")
    r = 2
    For i = 0 To Members.Length - 1
        Set oNodeList = Members.Item(i).ChildNodes
        col = 1
        For Each Item In oNodeList
            Cells(r, col) = Item.Text
            col = col + 1
        Next
        r = r + 1
    Next
    Set oXmlHttp = Nothing
End Sub

Sub getId(URI As String, query As String)
    Dim oXmlHttp As Object
    Set oXmlHttp = createXmlHttp(URI, "", "", "ticket.query", "<param><value><string>" & query & "</string></value></param>")
    If checkError(oXmlHttp) Then
'       Exit Sub
    End If
    Range("A:B").ClearContents
    Cells(1, 1) = oXmlHttp.responseText
    Set Members = oXmlHttp.responseXML.getElementsByTagName("int")
    r = 2
    For i = 0 To Members.Length - 1
'        Set Node = Members.Item(i).FirstChild
        Set oNodeList = Members.Item(i).ChildNodes
        col = 1
        For Each Item In oNodeList
            Cells(r, col) = Item.Text
            col = col + 1
        Next
        r = r + 1
    Next
    Set oXmlHttp = Nothing
End Sub

何か間違っているところを見つけたりしたら教えていただけるとありがたいです。

| | コメント (0) | トラックバック (1)

2009年3月14日 (土)

Tracのレポートをチェックして表示するHTA

Tracの通知メールが埋もれてわからなくなるとかよく言われます。今までは「一日何回かレポートを確認すればわかるだろう」って思っていたんですが、自分自身も承認し忘れていたりするなぁということで、レポートに一件でもあればアイコンを表示する簡単なHTAを作ってみました。

Tracreport

起動:

  • 「TracReportCheck.hta」をダウンロード
  • ファイルを選択して,コンテキストメニューの"プロパティ"を表示する。
  • "全般"タブのセキュリティで"ブロックの解除ボタン"を押す
  • ファイルをダブルクリック

※接続できない場合はエラーが出ると思いますので下の1.のところを先に修正しておいてください。

機能:5分に一回(変更可能)指定したユーザ名でレポートを確認し件数を表示します。

カスタマイズ方法:

1. 次の箇所のアドレスとユーザ名とレポート番号を変更してください。

    Sub Requery
     s = "<tr bgcolor=""#cccccc""><th></th><th>レポート名</th><th>数</th></tr>"
     strURI = "http://localhost/trac/SampleProject/report/1
  s = s + QueryTracReport(strURI,"admin","admin")
     strURI = "http://localhost/trac/SampleProject/report/2
  s = s + QueryTracReport(strURI,"admin","admin")
     strURI = "http://localhost/trac/SampleProject/report/3
  s = s + QueryTracReport(strURI,"admin","admin")
     strURI = "http://localhost/trac/SampleProject/report/4
  s = s + QueryTracReport(strURI,"admin","admin")
     DataArea.InnerHTML = "<table border=4 width=250>" + s + "</table>"
    End Sub

2. アイコンは適切なものを作成して、green.pngのところを変更してください。

3. レポートを作成する

  承認待ちとかのレポートを作成しておくとこのHTAを起動しておく意味が出てくると思います。

課題:サイドバー化(このHTAの中身のほとんどはVBScriptでできているので設定と表示をgadget化するぐらい)、タスクトレイ化(VB.NET化と設定部分のUI追加)

MSXML2.XMLHTTPを使っているので環境によっては動かないこともあると思いますが、ご報告いただけるとありがたいです。

| | コメント (5) | トラックバック (1)

VBAでTracにXMLRPC接続について考える

VBAからXML-RPCでTracに接続する方法について調べたところ、3種類の方法になりそう。

  • vbXMLRPC.dllというものがあるらしいが古いし、今現在はアクセスできない。
  • XML-RPC.NETこの方法で使う
  • Tracに接続するだけなので、MSXML2.XMLHTTPを(上と同じ)この方法で使う

追加のDLLが必要無い3番目の方法がベストかなということで調べてみます。

| | コメント (0) | トラックバック (1)

2009年3月 6日 (金)

Tracのレポートについて

訳あって調査している。Tracのレポートにデータのありなしを判断するには

  1. <span class="numrows">(2 件のマッチ)</span>の中の文字列
  2. <table class="listing tickets">のありなし

でできそう。

| | コメント (0) | トラックバック (0)

2009年3月 5日 (木)

GNUPro FR-Vのシミュレータでプログラムの実行

久しぶりにGNUProを使ってみました。ビルドの詳細はGNUPro FR-V ELF版のビルドを修正したのでそちらに書いてあります。これからやること多あるのでとりあえずメモとして次のものを残しておく

frv-elf-gcc test.cpp -o test -lstdc++

frv-elf-run test

frv-elf-gdb test

target sim

run

q

| | コメント (0) | トラックバック (0)

2009年3月 4日 (水)

ProjectTicketExprot - 1.0 Betaというものが出てる

かおるんさんのところでProjectTicketExprot - 1.0 Betaが発表されていました。DBからとってくるところとかちゃんと人が使うことを考えられていて、すばらしいです。私のよりも使いやすそうですので、こちらを使っていただいた方がいいと思います。説明読んだだけですがほかの違いは3つあります。

  • まず一つは私のはチケット間の親子関係をできるようにしていることぐらいですが、親子関係使いたい人はshibuya.trac新年会で聞いたところ少数派ということなので、マイルトーンベースのかおるんさんのもので良さそう。
  • 次は、私のでは、基準計画を扱えるようにしているところですが、私は必要としていますが、一般的にはどうなのでしょう?
  • もう一つはかおるんさんのはアップロードに対応しているところ。いいですね。私のは会社で使うことを考えていたので勇気がなくてやめときました。なぜかというとうちの会社の場合は、Projectの平準化で痛い目にあった人が多く毛嫌いする人がいるので、印刷だけに絞ることとしました。

Tracの情報をMS-Projectで印刷できると、状況が一目でわかるということで評判いいので、私のよりも使いやすそうなProjectTicketExprot - 1.0 Betaは結構当たると思います。暇ができたら、少し見てみて私が必要な機能がパッチで追加できるか確認してみます。

| | コメント (0) | トラックバック (0)

« 2009年2月 | トップページ | 2009年4月 »