Iteration 2
- Phase: Elaboration
- Dates: Aug 30 - Sept 30, 2004
Tasks to be Completed
+ Architecture
- Finish Remaining Iteration 1 Tasks
- Finish site-iterator classes.
- Finish data structure to map active-site locations to their corresponding indexes into data arrays.
- Dynamic Loading Libraries, aka Plug 'n Play
- Locate existing C++ code for dynamic libraries. Jimm knows of several open-source projects that use dynamic libs written in C++.
- Re-use existing C++ code for dynamic libraries. This would save time, rather than having to introduce C# into the project.
- Demonstrate dynamic libs using two Landis components (actual or test) that will read and write data to the landscape.
+ Tools
- Finish Subversion installation
+ Unified Process
- Begin writing Use Cases Have Use Cases 50% completed by end of iteration 2.
Assessment
+ Overview
Jimm completed most of the tasks outlined for iteration 2. During the iteration, the issue of binary compatibility between C++ compilers was discovered. There are several technical challenges to getting dynamic libraries made with different C++ compilers to work together. These challenges could make development by our collaborators very difficult. Jimm was able to address most of these C++ technical hurdles (although a few remain). However, these technical fixes would limit the C++ programming of module developers. We decided to spend two weeks of the next iteration exploring C# options for overcoming these limitations. Although a delay, the information gained will be valuable for future development and has the potential to speed development by streamlining how modules interact.
+ Code Demonstration
- Code was compiled and ran from a command prompt.
- Output demonstrated:
- how a succession or disturbance component would iterate through all the active sites on the landscape, and
- how an output component would iterate through all the sites (active and inactive) on the landscape, in order to generate an output map.
- Format of output logs is now controlled by a configuration file.
+ Iteration 2 Hits and Misses
- Miss Use Cases not 50% complete.
- Miss Did not test two components talking to the landscape.
- Miss Binary compatibility issues between differing C++ compilers not anticipated. These issues could potentially create problems for collaborating developers.
- Hit Tasks left over from Iteration 1 completed.
- Hit Subversion and two clients (Subversion interfaces) installed.
- Hit Extracted DLL code from CppUnit (an existing open-source project). Implemented simple framework and plug-in module using this DLL code.
- Big Hit Set up CppUnit, a testing framework, to perform automated testing of our code. Tests are written for each piece (unit) of our code. Not only helps determine when a unit has been completed properly, but also detects if a change "breaks" a working unit.
- Hit Developed some classes that encapsulated the dense code needed to address some of the technical issues with using C++ and DLLs. These classes would hide messy details from component developers, simplifying their jobs.
+ Iteration 2 Lessons Learned
- Uncovered the issues with DLLs (aka Plug & Play). This issue has forced us to weigh the usability (ease-of-use), future flexibility, and the schedule. The iteration assessment allowed us to narrow the decision space so we can move forward as quickly as possible.
- Iteration assessments are a valuable tool for communicating our progress, based on project team feedback.
- We can begin publishing interface specifications before the actual interface classes are finalized or even before the language is chosen (assuming that it will be in the C family of languages). This will speed collaborations with module developers.

