You are viewing an old version of this page. View the current version.

Compare with Current View Page History

« Previous Version 3 Next »

See also: OATC Wiki Home

Date: April 21.4 - 23.4, 2009
Venue:DHI, Hørsholm, Agern Allé 5, Denmark

Participants:
Documents:

http://www.openmi.org/
http://sourceforge.net/projects/openmi
wiki.openmi.org

Table of contents

Minutes

1. Minutes from previous OATC meeting

2. Maintenance and support

3. OpenMI 2.0 Issues

3.2 Pending Remarks on Standard as result of Java review

This led to some remarks, of which a few were "java only", but some of them reflected on the Standard in general. Items to be addressed at the next meeting:

  1. # Question: what does isAvailable() mean in case of multiple consumers. Do all consumers need to have the same time(s)?
    1. (question) Leave in for now, review after more implementation, one suggestion of modification bool isAvailable(whosAsking);
  2. Question: Collection or Set instead of List for (In|Out)putExchangeItems in LC?
    1. (question) Gena: I will check if changing it to ICollection<> works fine.
  3. Question: Introduce IState instead of Object? This will emphasize the relation between IManageState and IPersistentState. Additional suggestion: IPersistentState extends IState.
    (b.t.w: makePersistent / readPersistentState are wrong names, should be something like getAsByteStream)

    Gena will discuss with Rob

    1. (question) Unresolved at this time, if Rob can convinve Gena then we can (thumbs up). The suggestion is the following: Suggestion about changed to state management
  4. To be discussed: Introduce generics in IOutputItem.Values()? i.e. weakly typed via <T>
    1. (question) Gena will implement examples in the SDK, but not, for now, in the standard
  5. Remark: Working with providers/consumers, we should take care that such a circularity might give garbage collection problems

    Implementing IDisposable and removing item from Provider/Consumers there might solve the problem

    • (question) Point noted, no aggreement as to solution

3.3 Suggestions for the states and possible transitions between the states of the ILinkableComponent

If component has Invalid status and we call Validate() - it may even call Update() on another components in order to validate itself.

3.4 More suggestions on v2.0 changes

  • Move IsAvailable to IExchangeItem. Is it only for a thread-safety? If yes than see also ICollection.IsSynchronized

    Stef: The question is confusing, the actual issue is that we should distinguish between IsAvailable and IsValid.
    We are now realized that there is a difference between IsAvailable (only for output item, means it is for consumers) IsValid (probably for IExchangeItem, meaning if item is valid in the context of current component, maybe updated during Validate() call)?

    • (question) To discuss lator
  • Move Values { get; set; } to IExchangeItem

    Stef: alternative would be to add get to the IInputExchangeItem

    • (thumbs up) get accepted,
    • (question) set review lator
  • Change ID to Id - .NET Style Guidelines, FxCop
    • (thumbs up) , it is our intent to follow FxCop guidelines
  • Add params keyword to IArguments[] args parameter in Initialize(IArgument[] args).

    •  Adrian review, if happy then ... (question)(thumbs up)
  • Add IArguments[] Arguments { get; } to ILinkableComponent

    • (thumbs up)
  • Change "string Validate()" to "bool IsValid(IExchangeItem item)"

    Gena: probably the second one is not needed if we will have IsValid in IExchangeItem.
    string return type in the Validate() has to be changed to void.

    • (question) Requires review after more experiance with implementing standard
  • Add "params IExchangeItem[] items" argument to Update() in order to specify explicitly what should be updated.

    Can be used for example to run analysis only in geographical specified area

    Can help in the optimizing of the buffer

    This will improve performance a lot if we call Update(items) via internet

    Should we use IExchangeItem there (meaning only value definition, times, elements) or IOutputItem

    • (thumbs up) as IOutputItem, maybe later generalise to IExchangeItem i.e. allow IInputItem
  • Add WaitingForData status to the LinkableComponentStatus
    • (thumbs up) see previous item
  • Remove AddConsumer/RemoveConsumer and use BindingList in the implementation instead to listen to IOutputItem.Consumer.Add() / Remove()
    • (question) Not critical yet, so leave for now, review again later
  • Temporal ==(rename)==> TimeSet and add Durations, TimeZone properties to it (see also changes from Rob in Java version)
    • (thumbs up) Rename
    • (question) Requires discussion in lator meetings
  • When we get loops in the compositions - we have to tell which component will be first! (WHAT SHOULD WE DO IN THIS SITUATAION?) Relevant when implementing the Runner process in GUI
    • (question) Revisit in lator meeting
  • Replace all ITime, ITimeStamp, ITimeSpan by: System.DateTime, System.TimeSpan. Should be straightforward. For components working in Julian only time in FORTRAN CalendarConverter can be used. But for .NET all nice features of the .NET date time, time span will be available, e.g. DateTime.AddDays(int), DateTime.AddHours(int), time1 > time2, time1.AddDays(1) > DateTime.Now, and so on.
    Seems to be very straightforward and simple to implement.**
    •  (question) Review lator (today?)
  • Change XYPoint+XYZPoint, ZYPolyline+XYZPolyline => Point, Polyline (make it look more like OGC entities)
    • (question) Review OGC methods to see how we know when a Z coordinate exists?
  • Split IIdentity into class IIdentifiable { long Id { get; set; } } and class IDescribable { string Caption { get; set; } string Description { get; set; } }
    • (thumbs up) Splitting interfaces
    • (question) Make various interfaces derive from IIdentifiable, to review
  • Make ComponentId and InstanceId properties strings - currently it is a bit overkill.
    • (thumbs up) Properties on ILinkableComponent
      • IDescribable InstanceDescription { get;  }
      • IDescribable ComponentDescription { get; }
  • Do we need a TimeHorizon in the ILinkableComponent ? Seems to be useless since we have ITemporal
    • (thumbs up) Move TimeHorizon to ITemporal
  • IArgument needs a mechanism for identifying the type of argument e.g. File, Path, int double etc Very usful for providing customised GUI functionality
    • (question) Adrian to come up with proposal for next meeting

How IOutputExchangeItem.Values can be used, one possible way:

  • Component1 <>- OutputItem1 -> InputItem1 -<> Component2
  • Component2 updates and sets times, elements, quantity/quality which it needs in the IntputItem1
  • Component1 updates and sets new computed values into it's OutputItem1
  • OutputItem1 (IOutputItem implementation) will check it's Consumers[], which are of course IInputItems, and if they are compatible - will set values into them

  • If IInputItems are not compatible - there should be a DataOperation / Decorator inserted in between (or more than one).

We should have way in the decorator to trace it in the debugger, gui.

  • Make IOutputDecorator to be:
interface IDecorator : IOutputItem, IInputItem
{
   IArgument[] Arguments { get; }
}
  • (thumbs up) We need to address this
  • (question) Method: this is one possibility, others need review

    Discussed scenarios for using Temporal and ElementSet of the Input items

Two components

  • C1 Provider of non-equidistant time series /100 steps/ for the set of the 30 XYpoints elements (for example database)
  • C2 Component using TS for computation (consumer)
Case1
  • C1 - InputItem Temporal set of Time /5 steps equidistant /, ElementSet - 3 Elements
  • C2 - OutputItem after update - obtain values (time step) for the element in ElementSet 15 values
    Decorator can be needed for both Time and Space
Case2
  • C1 - InputItem Temporal Empty, Element Set - 3 Elements
  • C2 - OutputItem after update - obtain All values (time steps) for the element in ElementSet 300 values
    Decorator can be needed for Space
Case3
  • C1 - InputItem Temporal set of Time /5 steps - equidistant/, Element Set - empty
  • C2 - OutputItem after update - obtain 5 steps for all elements 150 values
    Decorator can be needed for Time
Case 4
  • C1 - InputItem Temporal set empty, Element Set - empty
  • C2 - OutputItem after update - obtain 100 steps for all elements 3000 values
    Decorator not needed
Suggestion

Based on this - suggestion for possibility to

  • select using Time intervals // return all time steps in this interval "Time Decorator" not needed
  • select using Polygons - // return values only for XYpoints inside polygon "Space Decorator" not neededIf will be accepted this idea need to be formalized and include to the standard.

Use Case: analytical function

See Implementation of the AnalyticalFunction use case for unit tests showing different ways to implement components

5. OATC Procedures

6. www.OpenMI.org and wiki.OpenMI.org

7. Miscellaneous issues

8. Tasks and unresolved issues

All tasks are handled by sourceForge. GOTO: OpenMI Tasks on source forge

9. Any other business

  • Check ideas mentioned in the poster of Jon Goodall:

See goodall_poster.pdf

  • No labels