emacs-orgmode@gnu.org archives
 help / color / mirror / code / Atom feed
From: John Hendy <jw.hendy@gmail.com>
To: Anthony Lander <anthonylander@yahoo.com>
Cc: Christian Egli <christian.egli@sbs.ch>,
	emacs-orgmode Mode <emacs-orgmode@gnu.org>
Subject: Re: Re: TaskJuggler3, revisited
Date: Thu, 4 Nov 2010 16:24:57 -0500	[thread overview]
Message-ID: <AANLkTi=Fc1x+WaTLeFavNJ3qhviuWSUr0pG5gCMUMTop@mail.gmail.com> (raw)
In-Reply-To: <94AF83C1-39B7-449F-BCF5-F0CA3B3031EE@yahoo.com>


[-- Attachment #1.1: Type: text/plain, Size: 21179 bytes --]

Nice! I was able to do the following:

- grab your copy of org-taskjuggler.el and install it
- get the .org file here: http://orgmode.org/manual/TaskJuggler-export.html
<http://orgmode.org/manual/TaskJuggler-export.html>- export to a .tjp
- swap out the default export with the code below and run "tj3 tj3-test.tjp"
and get a nice html report!
--- If you're looking for a default tj3 export... perhaps start with what's
below?

Great work!


John



The export code that creates quite a nice html report (from tj3
documentation)
--------------
navigator navbar {
  hidereport 0
}

macro TaskTip [
  tooltip istask() -8<-
    '''Start: ''' <-query attribute='start'->
    '''End: ''' <-query attribute='end'->
    ----
    '''Resources:'''

    <-query attribute='resources'->
    ----
    '''Precursors: '''

    <-query attribute='precursors'->
    ----
    '''Followers: '''

    <-query attribute='followers'->
    ->8-
]

textreport frame "" {
  header -8<-
    == Accounting Software Project ==
    ----
    <[navigator id="navbar"]>
    ----
  ->8-
  footer "----"
  textreport index "Overview" {
    formats html
    center '<[report id="overview"]>'
  }

  textreport "Status" {
    formats html
    center -8<-
      <[report id="status.dashboard"]>
      ----
      <[report id="status.completed"]>
      ----
      <[report id="status.ongoing"]>
      ----
      <[report id="status.future"]>
    ->8-
  }

  textreport development "Development" {
    formats html
    center '<[report id="development"]>'
  }

  textreport "Deliveries" {
    formats html
    center '<[report id="deliveries"]>'
  }

  textreport "ContactList" {
    formats html
    title "Contact List"
    center '<[report id="contactList"]>'
  }
  textreport "ResourceGraph" {
    formats html
    title "Resource Graph"
    center '<[report id="resourceGraph"]>'
  }
}

# A traditional Gantt chart with a project overview.
taskreport overview "" {
  header -8<-
    === Project Overview ===

    The project is structured into 3 phases.

    # Specification
    # <-reportlink id='frame.development'->
    # Testing

    === Original Project Plan ===
  ->8-
  columns hierarchindex,
          name, start, end, effort, duration, cost,
          revenue, chart { ${TaskTip} }
  # For this report we like to have the abbreviated weekday in front
  # of the date. %a is the tag for this.
  timeformat "%a %Y-%m-%d"
  loadunit days
  hideresource 1
  caption 'All effort values are in man days.'

  footer -8<-
    === Staffing ===

    All project phases are properly staffed. See [[ResourceGraph]] for
    detailed resource allocations.

    === Current Status ===

    The project started off with a delay of 4 days. This slightly affected
    the original schedule. See [[Deliveries]] for the impact on the
    delivery dates.
  ->8-
}

# Macro to set the background color of a cell according to the alert
# level of the task.
macro AlertColor [
  cellcolor plan.alert = 0 "#00D000" # green
  cellcolor plan.alert = 1 "#D0D000" # yellow
  cellcolor plan.alert = 2 "#D00000" # red
]

taskreport status "" {
  columns wbs, name, start, end, effort, alert { tooltip plan.journal
  != '' "<-query attribute='journal'->" }, status

  taskreport dashboard "" {
    headline "Project Dashboard (<-query attribute='now'->)"
    columns name { title "Task" ${AlertColor} },
            resources { width 200 ${AlertColor}
                        start ${projectstart} end ${projectend} },
            alerttrend { title "Trend" ${AlertColor} },
            journalmessages { width 260 ${AlertColor} }
    hidetask ~hasalert(0)
    sorttasks alert.down
    period %{${now} - 1w} +1w
  }
  taskreport completed "" {
    headline "Already completed tasks"
  }
  taskreport ongoing "" {
    headline "Ongoing tasks"
  }
  taskreport future "" {
    headline "Future tasks"
  }
}

# A list of tasks showing the resources assigned to each task.
taskreport development "" {
  headline "Development - Resource Allocation Report"
  columns hierarchindex, name, start, end, effort { title "Work" },
          duration, chart { ${TaskTip} scale day width 500 }
  timeformat "%Y-%m-%d"
  hideresource ~(isleaf() & isleaf_())
  sortresources name.up
}

# A list of all tasks with the percentage completed for each task
taskreport deliveries "" {
  headline "Project Deliverables"
  columns hierarchindex, name, start, end, note { width 150 }, complete,
          chart { ${TaskTip} }

  hideresource 1
}
# A list of all employees with their contact details.
resourcereport contactList "" {
  headline "Contact list and duty plan"
  columns name,
          email { celltext 1 "[mailto:<-email-> <-email->]" },
          chart { scale day }
  hideresource ~isleaf()
  sortresources name.up
  hidetask 1
}

# A graph showing resource allocation. It identifies whether each
# resource is under- or over-allocated for.
resourcereport resourceGraph "" {
  headline "Resource Allocation Graph"
  columns no, name, effort, rate, weekly { ${TaskTip} }
  loadunit shortauto
  # We only like to show leaf tasks for leaf resources.
  hidetask ~(isleaf() & isleaf_())
  sorttasks plan.start.up
}
-----------------

On Mon, Nov 1, 2010 at 9:05 PM, Anthony Lander <anthonylander@yahoo.com>wrote:

> Hi everyone,
>
> Christian Egli and I have been having an off-list exchange about making a
> TaskJuggler3 exporter. In fact, Christian would like to change the current
> exporter to export to either TaskJuggler2 or TaskJuggler3, depending on a
> defcustom! We have quite a number of ideas in the pipeline now, and thought
> it would be best to move the discussion, and access to the source code, back
> onto the list.
>
> Christian has set up a github repository with the changes he is making
> here: http://github.com/egli/org-mode
>
> And the code I sent to Christian, which makes the exporter work with TJ3,
> and also introduces some bug fixes and new features is here:
> http://github.com/alander/org-taskjuggler3. Please note that this is
> different from Christian's code, and that he is the maintainer of the
> exporter that is part of org-mode. I needed something to work, so I spent an
> afternoon hacking until it did what I needed.
>
> If you are interested in the details, our e-mail exchange is reproduced
> below.
>
>  -Anthony
>
>
> ------------------------8<-------------------------
>
>        From:   christian.egli@sbs.ch
>        Subject:        Re: [Orgmode] Re: TaskJuggler 3, revisited
>        Date:   October 19, 2010 5:29:42 AM GMT-04:00
>        To:     anthonylander@yahoo.com
>        Cc:     emacs-orgmode@gnu.org
>
> Hi Anthony
>
> Anthony Lander <anthonylander@yahoo.com> writes:
>
>  Please find attached a somewhat improved version of your TJ2 exporter,
>> a drop-in replacement that exports to TJ3, and also a sample .org
>> file.
>>
>
> This is all exciting stuff. It's a little hard to digest (many changes
> rolled into one, white space formatting changes that make it hard to find
> the real change, common lisp idioms which I'm not familiar with). Let me
> get back to you with some questions and then we can discuss how to most
> easily merge the stuff.
>
> - Why did you compute the leafiness? I seem to have experienced that tj3
>  has a problem with zero effort tasks that aren't marked as milestones.
>  Is that the reason?
>
> - Why do you add a duration of 1d if the task has neither a duration, an
>  end, a period nor an effort? Shouldn't that be a milestone instead?
>
> - I see that there is a need to annotate a project with stuff such as
>  scenarios, etc and I was missing a way to have file specific reports
>  or other globals. Your additional tags solve that problem. However I'm
>  a bit reluctant to add more magic tags that mark the trees in some
>  way. I was hoping to find a more general way for this problem. So far
>  I haven't found a good solution though.
>
> - I like the idea of the TJ drawer, but in the end you just seem to use
>  it for the project node and the globals node. So in essence they are
>  taskjuggler source code blocks (in disguise) which are tied to a
>  particular node. In fact they are not even really tied to a particular
>  node, especially in the case of the globals. This goes back to the
>  previous question about a good way to add file specific globals. Maybe
>  some kind taskjuggler specific export option is really what we are
>  looking for.
>
> As an aside, I think it's better to post the source code to the list.
> There might be other people interested in it and pitching in with
> opinions and improvements.
>
> Thanks
>
> --
> Christian Egli
> Swiss Library for the Blind, Visually Impaired and Print Disabled
> Grubenstrasse 12, CH-8045 Zürich, Switzerland
>
> ------------------------8<-------------------------
>
>        From:   anthonylander@yahoo.com
>        Subject:        Re: [Orgmode] Re: TaskJuggler 3, revisited
>        Date:   October 19, 2010 8:55:38 AM GMT-04:00
>        To:     christian.egli@sbs.ch
>
> Hi Christian,
>
>
> On 10-Oct-19, at 5:29 AM, Christian Egli wrote:
>
>  This is all exciting stuff. It's a little hard to digest (many changes
>> rolled into one, white space formatting changes that make it hard to find
>> the real change, common lisp idioms which I'm not familiar with). Let me
>> get back to you with some questions and then we can discuss how to most
>> easily merge the stuff.
>>
>
> Apologies for the big blob of changes - I was initially just trying to get
> stuff to work, and, well, just kept going. As for the spacing/formatting, I
> ran M-x indent-region RET on the whole file to get the formatting
> consistent. I know it makes diffing hard, though :(
>
> Is the unfamiliar idiom the backtick list with the ,variables in it, by
> chance?
>
>  - Why did you compute the leafiness? I seem to have experienced that tj3
>> has a problem with zero effort tasks that aren't marked as milestones.
>> Is that the reason?
>> - Why do you add a duration of 1d if the task has neither a duration, an
>> end, a period nor an effort? Shouldn't that be a milestone instead?
>>
>
> Ah, sorry. This I should have documented. The problem is that TJ3 fails to
> compile the file if there is a leaf node with no computable end date. TJ2
> happily ignored the situation, but TJ3 throws an error.  So the problem I'm
> trying to solve is that as you are working on your project plan, it won't
> compile unless you put in a bunch of dummy estimates for the leaf nodes.
>
> I found it easier to let the exporter put them in, so that I don't always
> think to myself, "did I put this in as a real estimate or just to make the
> compiler happy?" Perhaps it would be better to change 1 day to 1 minute or 1
> second to make it very obviously a dummy duration that is put in only to
> satisfy the compiler. And maybe even a comment in the exported file, too.
>
> Also, I hadn't thought of milestones. I think the code needs a bit of a fix
> because it needs to know that a milestone has zero effort, but won't cause
> the compiler to fail.
>
>  - I see that there is a need to annotate a project with stuff such as
>> scenarios, etc and I was missing a way to have file specific reports
>> or other globals. Your additional tags solve that problem. However I'm
>> a bit reluctant to add more magic tags that mark the trees in some
>> way. I was hoping to find a more general way for this problem. So far
>> I haven't found a good solution though.
>>
>
> I agree with you about the magic tags. I hate the feeling of reimplementing
> the entire TJ3 file format in org. That's asking to always be playing
> catch-up, and to always be missing features. I like very much the idea of
> "borrowing" features from org that make sense, and doing something useful on
> export. Examples are your % doneness of a task, and your "ordered tasks in a
> hierarchy" ideas. And in fact I added using the todo states and tags as
> flags so you can easily build tj reports that reference them (see the
> "active" gantt chart, for example).
>
> In the end, I felt the project needed a special marker because there are
> specific TJ3 features that go with it. And also, the globals need to go
> somewhere. I am also not thrilled with making all these tags, but I didn't
> have a better solution either.
>
> In any event, the TJ drawer is my attempt at a catch-all solution. It at
> least allows a user to use missing features without waiting for a
> development change. So for example, I personally will never use the
> accounting stuff, and would not be very motivated to add it to the exporter,
> but if someone needed it, they could put the required code in the TJ drawer,
> and they could still use the TJ exporter for their project instead of having
> to abandon org-mode entirely for one missing feature.
>
>  - I like the idea of the TJ drawer, but in the end you just seem to use
>> it for the project node and the globals node. So in essence they are
>> taskjuggler source code blocks (in disguise) which are tied to a
>> particular node. In fact they are not even really tied to a particular
>> node, especially in the case of the globals. This goes back to the
>> previous question about a good way to add file specific globals. Maybe
>> some kind taskjuggler specific export option is really what we are
>> looking for.
>>
>
> Interesting thought. I very much like the idea that you can do other things
> with your org-file than export it to taskjuggler. For example, keep actual
> notes in the file, and export it to other formats like html or LaTeX, for
> purposes other than project planning. Being able to say "no, this is not a
> task" in the task tree would be very useful. I don't know how to do it
> nicely either (yet).
>
>  As an aside, I think it's better to post the source code to the list.
>> There might be other people interested in it and pitching in with
>> opinions and improvements.
>>
>
> That's a good idea. How about if we set up a git repository on github with
> the files, and then post the link on the mailing list? I worry that posting
> code and patches will badly confuse the patch manager software than grabs
> code from the mailing list. Also, if we're going to do that, I think we
> should put your email, and this reply to the list as well. Your thoughts?
>
> All the best,
>
>  -Anthony
>
> ------------------------8<-------------------------
>
>        From:   christian.egli@sbs.ch
>        Subject:        Re: [Orgmode] Re: TaskJuggler 3, revisited
>        Date:   October 28, 2010 3:28:13 AM GMT-04:00
>        To:     anthonylander@yahoo.com
>        Cc:     emacs-orgmode@gnu.org
>
> Hi Anthony
>
> Anthony Lander <anthonylander@yahoo.com> writes:
>
>  Is the unfamiliar idiom the backtick list with the ,variables in it,
>> by chance?
>>
>
> No it was more stuff like `return' and `return-from'.
>
>  Ah, sorry. This I should have documented. The problem is that TJ3
>> fails to compile the file if there is a leaf node with no computable
>> end date. TJ2 happily ignored the situation, but TJ3 throws an error.
>>
>
> OK, I understand. I managed to slowly integrate (some of) your changes.
> It should now generate milestones for nodes that cannot be scheduled and
> are leaf nodes. So basically it should export valid code for tj3 if you
> set org-export-taskjuggler-target-version to 3.0. Of course the report
> definitions in the defcustom org-export-taskjuggler-default-reports are
> not compatible with tj3 so you will need to change these.
>
> I have (or I guess rather had) some fondness for recursive functions, so
> I re-implemented your leafiness function recursively. However I ran into
> problems with max-lisp-eval-depth and it appears that recursion is not
> encouraged in Emacs lisp
> (
> http://www.gnu.org/s/emacs/manual/html_node/elisp/Compilation-Tips.html#Compilation-Tips
> ).
> So I guess it's back to iterative style.
>
>  In any event, the TJ drawer is my attempt at a catch-all solution. It
>> at least allows a user to use missing features without waiting for a
>> development change. So for example, I personally will never use the
>> accounting stuff, and would not be very motivated to add it to the
>> exporter, but if someone needed it, they could put the required code
>> in the TJ drawer, and they could still use the TJ exporter for their
>> project instead of having to abandon org-mode entirely for one missing
>> feature.
>>
>
> I like the drawer stuff and will integrate it.
>
>  Interesting thought. I very much like the idea that you can do other
>> things with your org-file than export it to taskjuggler. For example,
>> keep actual notes in the file, and export it to other formats like
>> html or LaTeX, for purposes other than project planning.
>>
>
> Absolutely, I agree.
>
>  Being able to say "no, this is not a task" in the task tree would be
>> very useful. I don't know how to do it nicely either (yet).
>>
>
> Hm, no this is not possible right now. Why would you want to do this?
> Maybe we could just mark it as a comment and make the exporter honor
> comments.
>
>  How about if we set up a git repository on github
>> with the files, and then post the link on the mailing list?
>>
>
> I set up a repo and pushed my changes to the code there
> (http://github.com/egli/org-mode).
>
>  I think we should put your email, and this reply to the
>> list as well.
>>
>
> Yes, I almost forgot. Would you mind doing that?
>
> Thanks
> Christian
>
>
> --
> Christian Egli
> Swiss Library for the Blind, Visually Impaired and Print Disabled
> Grubenstrasse 12, CH-8045 Zürich, Switzerland
>
> ------------------------8<-------------------------
>
>        From:   anthonylander@yahoo.com
>        Subject:        Re: [Orgmode] Re: TaskJuggler 3, revisited
>        Date:   October 31, 2010 11:45:34 AM GMT-04:00
>        To:     christian.egli@sbs.ch
>
>
> On 10-Oct-28, at 3:28 AM, Christian Egli wrote:
>
>  Anthony Lander <anthonylander@yahoo.com> writes:
>>
>>  Is the unfamiliar idiom the backtick list with the ,variables in it,
>>> by chance?
>>>
>>
>> No it was more stuff like `return' and `return-from'.
>>
>
> I see. Well, once you were explicitly requiring 'cl.... :) And as you
> discovered, without a tail-recursion optimizing compiler, recursive
> functions are prohibitively expensive in elisp. Once you are iterating, you
> need a way to exit iteration scopes before the end of the iteration.
>
>
>  So basically it should export valid code for tj3 if you
>> set org-export-taskjuggler-target-version to 3.0. Of course the report
>> definitions in the defcustom org-export-taskjuggler-default-reports are
>> not compatible with tj3 so you will need to change these.
>>
>
> Right. Or perhaps better, have different default reports for TJ2 or TJ3,
> which the exporter selects as appropriate.
>
>  Interesting thought. I very much like the idea that you can do other
>>> things with your org-file than export it to taskjuggler. For example,
>>> keep actual notes in the file, and export it to other formats like
>>> html or LaTeX, for purposes other than project planning.
>>>
>>
>> Absolutely, I agree.
>>
>>  Being able to say "no, this is not a task" in the task tree would be
>>> very useful. I don't know how to do it nicely either (yet).
>>>
>>
>> Hm, no this is not possible right now. Why would you want to do this?
>> Maybe we could just mark it as a comment and make the exporter honor
>> comments.
>>
>
> Yes, marking it as a comment is not a bad idea. The reason I want to do
> that goes with the idea of using the org file for additional purposes than
> just a task tree. So for example, I would like to be able to have nodes with
> meeting notes, or links to related files etc etc under a task. That way I am
> only maintaining one project document, not separate ones for notes,
> scheduling, etc. I think that is very much in the spirit of org-mode, which
> so heavily emphasizes sparse trees, agenda views etc as ways to tease out
> relevant information from an intermingled file.
>
>  How about if we set up a git repository on github
>>> with the files, and then post the link on the mailing list?
>>>
>>
>> I set up a repo and pushed my changes to the code there
>> (http://github.com/egli/org-mode).
>>
>>  I think we should put your email, and this reply to the
>>> list as well.
>>>
>>
>> Yes, I almost forgot. Would you mind doing that?
>>
>
> I'll do that, yes.
>
> Best regards,
>
>  -Anthony
>
>
> _______________________________________________
> Emacs-orgmode mailing list
> Please use `Reply All' to send replies to the list.
> Emacs-orgmode@gnu.org
> http://lists.gnu.org/mailman/listinfo/emacs-orgmode
>

[-- Attachment #1.2: Type: text/html, Size: 29002 bytes --]

[-- Attachment #2: Type: text/plain, Size: 201 bytes --]

_______________________________________________
Emacs-orgmode mailing list
Please use `Reply All' to send replies to the list.
Emacs-orgmode@gnu.org
http://lists.gnu.org/mailman/listinfo/emacs-orgmode

  reply	other threads:[~2010-11-04 21:25 UTC|newest]

Thread overview: 6+ messages / expand[flat|nested]  mbox.gz  Atom feed  top
2010-11-02  2:05 TaskJuggler3, revisited Anthony Lander
2010-11-04 21:24 ` John Hendy [this message]
2010-11-05 12:29   ` Anthony Lander
2010-11-05 15:01     ` John Hendy
2010-11-08 14:23       ` Christian Egli
2010-11-08 14:02   ` Christian Egli

Reply instructions:

You may reply publicly to this message via plain-text email
using any one of the following methods:

* Save the following mbox file, import it into your mail client,
  and reply-to-all from there: mbox

  Avoid top-posting and favor interleaved quoting:
  https://en.wikipedia.org/wiki/Posting_style#Interleaved_style

  List information: https://www.orgmode.org/

* Reply using the --to, --cc, and --in-reply-to
  switches of git-send-email(1):

  git send-email \
    --in-reply-to='AANLkTi=Fc1x+WaTLeFavNJ3qhviuWSUr0pG5gCMUMTop@mail.gmail.com' \
    --to=jw.hendy@gmail.com \
    --cc=anthonylander@yahoo.com \
    --cc=christian.egli@sbs.ch \
    --cc=emacs-orgmode@gnu.org \
    /path/to/YOUR_REPLY

  https://kernel.org/pub/software/scm/git/docs/git-send-email.html

* If your mail client supports setting the In-Reply-To header
  via mailto: links, try the mailto: link
Be sure your reply has a Subject: header at the top and a blank line before the message body.
Code repositories for project(s) associated with this public inbox

	https://git.savannah.gnu.org/cgit/emacs/org-mode.git

This is a public inbox, see mirroring instructions
for how to clone and mirror all data and code used for this inbox;
as well as URLs for read-only IMAP folder(s) and NNTP newsgroup(s).