Si2oaD/Roadmap

From oacwiki

Jump to: navigation, search

All ideas for extending the tool should be logged in the formal Feature Request tracker.

A number of possible development and feature enhancements are currently on a queue awaiting customer demand. This roadmap has 5 sections (search for the title strings).

Contents

1 Next Release Targets

The hot list of desired fixes and upgrades desired. These are to be prioritized/annotated based on one or more WG calls over time so that the items in the this "Next" section are the goals to meet (usually for the next OA Conference or DAC).
  • Add oas bindings.
  • For all possible interactive commands (bind of unread Objects, open of referenced Objects, open user-defined data viewers, etc.), so the user doesn't have to hunt around for the magic keyword attribute keyword in the display sea of attributes=values:
    • Add these as command to the context-sensitive menu
    • And/or color those hot keywords in blue
    • Best of all: Try to convert these into links around a more meaningful attribute keyword in the display; for example, in the case of an unbound Inst master, around the LCV name:
    <a href=BIND>libName/cellName/viewName</a>
  • Release dff and oad together (two project pages, but same dual package on both) to
    • simplify install (and have one advertise the other)
    • enable both to share the same makefile.defs
  • Have Salem (or another volunteer if he is unavailable) review the UserGuide.
  • Solve problem of regaining control on console to enable
    • seeing stdout on host consoles that capture it (like Tcl in a tool)
    • continuing the debug session, stepping through more app code, then clicking a button on the still-active GUI to "refresh" the RTM view
  • Think I've seen an example where the SortName sorter does not correctly alphabetize names (cannot recall which Collection or container Object, though)
  • Polish for deployment with vendor tools
    • Enhance/clarify use cases to assist adoption, deployment. Identify specific needs of
      • Developer community
      • Tool user community
    • Add logic to move CSM above bottom (or right) browser frame edge in case where it would pop up beyond those boundaries.
    • Finish work to get install/build procedure more compatible with commercial tool deployment.
    • Maybe WG has more ideas for improving order of attributes on selected Objects?
  • Add a performance boost by skipping creating of iterCaches if there is no sort/regex (Johannes also suggested that the speed of display is fast enough already that this probably should be a low-priority item.)

2 On-going Activities

Taskes that renew with each new oad release. We get these done, not necessarily for every release but as often as bandwidth permits
  • Update Win versions iff there is actual user demand for it, (We had one call for this in 2011 but the user was inclined to try the Linux version instead of trying the older version of the proj files and reporting back to us any problems.)
    • Update VS2005 sln/vcproj files to latest release
    • Update VS2008 sln/vcproj files to latest release
  • Test against a real commercial tool to verify LD_PRELOAD injection can be used (e.g., in cases with no Tcl interface) to install an Observer for an OA event to enable oad control indirectly. It would be nice to produce guidelines in the OAD user guide for getting display control (even if tool's symbols were stripped) based on the results of such experiments. Candidate test events might include,
    • creation of an Object in the design using the tool's normal controls
    • implicit binding of Pcell
    • read of a Design from disk
    • open of a Library
 For those who have access to commercial tools to try during the course of an
 actual task involving such a tool and the desire to use oad with it. The WG
 would appreciate a report on the results of such efforts.

3 Subsequent Release Targets

Still considered important, might squeeze into target releases but maybe not.
  • Some would like window to be dockable. Maybe require GUI to be part of the same process (which would be in line with a QT implementation, not a browser started as a separate process). This might affect the plan to allow the GUI to remain active with "update RTM" status button control (listed as a line item in a section above).
  • Look into QT webkit for implementing a dff-specific browser that would be independe of the release quirks of all the different browsers we are currently testing. In addition, this might make extension and feature addition simpler as time goes on. Need to verify native XSLT and DOM support to port existing features.
  • Get IE working on WinXP platform.
  • Intermittent bugs [maybe]. Reports that
    • When running si2dis stand-alone both with and without gdb, clicking on the quit button hangs up the parent command line process until the browser is closed. (Less of a problem under gdb, which usually seems to detect that the socket is closed and returns to query on the command line, leaving the last browser instance[s] open just fine.) Still, some failures observed even under gdb. Fixed in 1.10 ??
    • There are situations under gdb where clicking the RETURN_TO_BROWSER button does not return control to the console: a new browser window with /quit (to the same socket) must be resurrected to make gdb wake up. Fixed in 1.10 ??
  • Several requests for an oad2oa tool (read OAD XML and create OA data from it) dating back to the origin of the OA Debug WG (and as recently as DAC2010).
  • Add to wiki diagnostic procedures:
    • look for various version IDs.
    • maybe .si2oadoptions out-of-date
    • maybe pointing to old install loc in .si2oadoptions for docroot/dllsorters/dlldir and getting backrev oad (even though you just built the latest)
  • Optimize regex ^name$ as a find() instead of regex (so you can find a single named Net in a large Collection with no wait).
  • Add names for sort to *Headers (Maybe want "sig" approach, letting user customize (ala dff)
    • LPPHeader  : layerName/PurposeName layerNum/PurposeNum
    • Layer  : name or num
    • LayerHeader: Layer name or num
    • Shape  : layerName or num
    • InstHeader : L/C/V
  • Maybe add a pseudo-name for *InstHeaders (master LCV) to stand out better in large data.
  • On one (64 bit SuSE) platform, when running si2dis stand-alone *without* gdb, clicking on the quit button hangs up the parent command line process until the browser is closed. (Not a problem under gdb, which seems to detect that the socket is closed and returns to query on the command line, leaving the last browser instance[s] open just fine.)
  • Make the standalone si2dis work out of package w/o LD_LIBRARY. Make configuration/install more suitable for commercial environment.
    • Should not need LD_LIBRARY_PATH. Use LDOPTS="-Wl,-rpath,'$$Origin/../lib'"
    • Surface install directory options for bin and lib to make it more obvious how to change the install to the OA install bin and lib.
    • Maybe add a wrapper script with instructions that people can use to automate this for those that like wrapper scripts. But if injecting, it is .gdbinit "set env LD_PRELOAD" that gets the path to both OA libs and libsi2oadebug.so -- not LD_LIBRARY_PATH.
    • Streamline Makefiles for "production" use. Setup should allow an admin to install an executable on a server for all to use without having to worry about where docroot/ is and where an options file is.
 Comments
 Maybe done in 1.6.2? Both csh and bsh scripts now generated automatically by `make install` target.
 Maybe new INSTALL vars in 1.7.2 solve these problems, as well, for `make install`?
  • Add both compile and run-time checks for the OA data-model fail if there is a mismatch that the code cannot handle.
 Comments
 DM3 compile checks in there already. 
 Some runtime checks already protect functions that SEGV for specific OA versions, like
   - getAssignedNet() in releases < p034, 
   - getCategory() in releases <= p017
  • Seems to be a bug when maxownerlevels = 1 and using a TypeRegex, that all the Collection entries will show, even though maxcollentries = 1. Can't reproduce reliably.
  • Clusters currently are nested under their cluster owners if hierarchical. However, the overall count in the Block (say 5) appears on the main Collection line. This is confusing until you open up the cluster parent hierarchy and see that, though only 2 clusters are at the top level, under which are the other 3. Shall I change the count on the main Block Collection line? Or leave so you can see at a glance the total #clusters in the Block without having to open them up laboriously through the parent cluster hierarchy?
  • Finish oad() interface for the remaining OA utility objects. (EXAMPLE: done for many of the LookupTbls, oaBox, etc. But there are a lot more utility objects that might be of interest for casual examination on the debugger command line.)
  • Finish TCL wrappers for the remaining oad() interface.
  • Would be nice if the "name regex" box does not even appear on the popup for Collections of Objects that do not have names. Now it just ignores the data. To do this, however, a meta-attribute for each Collection that indicates named or not named must be propagated to the javascript in order to tailor the popup contents properly.
  • Does the BIND_VIADEF javascript code really work?
  • Occasionally after several poke errors in the GUI, and terminating the window, several error messages show up on the console when calling oad() again. What are these? (Unfortunately, intermittent: can't get a hard failure yet.) Also, rarely (maybe related to this same situation) a subsequent call to oad() will bring up an incomplete set of data, in particular, the oaSession tag may not have a + on it, or it is missing entirely.
               [si2oad] ...Creating cached iter for: viewTypes
               [si2oad] ***ERROR: iterCache->collNames[collNum] != assocName
               [si2oad] ...Using cached iter for: libDefLists
               [si2oad] ***ERROR: iterCache->collNames[collNum] != assocName
               ....
  • Add a command line option in the Makefile to delete the pointer addresses from the output to facilitate using dff for regression comparisons.
 Comments:
 But only for console ouput, right, since the GUI needs these for the hyperlink ref= and refs= to work.]
  • Verify that the tool will survive application crashes to enable debugging what's left of the RTM in such cases.
  • Verify compatibility for more platforms (RH21, Solaris9/10) and a couple common browser versions (like for latest IE on WIN) + compiler versions.
 Comments:
 For adoption, this is pretty important. Solaris probably not important.
 Also 64bit on each.
 64bit 100% we need to fix. 
 Favor SuSE, RH, one browser, one compiler.
 I use Firefox on Win.
 Maybe just make it work with the latest Firefox is good enough. {Others agree.}
 Forum request for SeaMonkey + CentOS: https://www.si2.org/openeda.si2.org/forum/message.php?msg_id=1870]
  • Finish the name change for si2oaDebug --> si2oad (aka, oad). Since "oad" is already contained within the existing name and is mnemonically not too far off, maybe not much more need be done. To root out all the old name occurrences involves:
    • Shorten the .so name to libsi2oad.so (to make it consistent, too)
    • changes to the UserGuide (one-step global replace)
    • all the filenames in the release (multi-step global replace)
    • all the include references and Makefile references (global replace)
    • changes to the DAC flyer, Bill's handout, and other collateral (ugh!)
    • changes to the pages related to the Contributions project on OpenEDA
    • do we have to reissue the COO's for the tool, since all have the old name?
    • what do we do about the older releases with the original name?
    • the many "live" (flash) demos with voice over Susan did for us all have the old name in there many times We can change the site HTML to call out the new name, but in the tarballs will be all files and old UserGuides, etc., with the original name.

4 Features/Enhancements Left for "Other Contributors"

These are interesting ideas proposed by various individuals, both on and off the WG. However, unless something re-resonates with the WG, a requester would likely have to show up at the WG calls, even volunteer resources to help with implementation to get anything like this prioritized for a release. Likely, these would have to be completed largely by other people and donated to the WG.

4.1 Architecture

  • Configure as an Eclipse plug-in.
  • The idea of using an XMI/XML as a spec syntax to automate/customize RTM traversal in general has re-surfaced several times.
 *Comments:
 Problems that must be addressed vs the payback expected include:
   - significant development time required,
   - the extra layer in between, complicating debugging and on-going maintenance.
 Suggest deferring until a hard use-case demand surfaces.

4.2 Code Quality

  • Memory leaks: Several uses of strdup() and the like that are not free()d. Mostly these are a option values of just a few bytes, expected not to be changed too often in a session. Still, they should be fixed.
  • Wasteful memory/risky assumptions: All the oadIterCache iter, regex, etc, values are hard-coded to MAX_COLLECTIONS values because I was lazy. But:
    • (at best) this is wasteful: These should be dynamically allocated as needed. Extract the incremental realloc() code used for the oadIterCaches themselves into an allocation function and reuse for all the arrays in it.
    • (at worst) they could fail someday if we get some Object with more than expected depth/number of Collections.
  • Regression: Tool interface is getting sufficiently complex to need more complete set of GUI tests, other platforms. There needs to be more comprehensive, even combinatorial, testing to prevent breaking things.
    • Would be nice to automate via GUI test harness.
      • Cost is about 2500$ for a Qt-based Squish from FrogLogic tester license. Probably too rich for Si2. But it depends on the underlying window manager. Look for more input from the group.
      • Imacros (Firefox plugin) is inadequate.
      • Some Win automation tools may be useful: Freeware AutoIt
  • Style: Much of oad was incrementally prototyped, one feature at a time. The code should be refactored into a cleaner design. In particular, there are a lot of complex state and flag interactions between incremental loading, regex matching, internal recursion, console-vs-GUI modes, on-demand binding and link production. Perhaps some thought could make the design more straightforward. If this code is to be extended by others in the community, such an effort might be valuable to make it more accessible.

4.3 Coding Guidelines

  • Deliver code to conform to standard indentation rules.
 Comments:
 Not a high priority. Maybe let other contributors attack it.
 Already packaging script supposedly does this: evidently not correctly. Maybe just a matter of tweaking that script?

4.4 Documentation

  • UserGuide upgrades to regex sections
    • Add example of Verilog namespace to illustrate escaping both by
      • char-by-char use of programmable escape
      • changing delimiters to make it easier to read
    • Add set of examples of what matches what, particularly for the common regex features, like ranges, start/end anchors, groups.
  • Expand UserGuide to include more screenshots and examples of use of all the features.
 Comments:
 Wouldn't the "live-demo" approach be better for much of this? It's a challenge to select just the right screenshots, and string them together in a meaningful way: and you still can't see the transitions, which often results in hiding the very gestures you are trying to illustrate.  Of course, you can't make a PDF out of a live Flash demo.
 We now have more of both:
   - screenshots, which are useful for short quick illustrations to nail a point
   - live demos, which are great for procedures, sequences of actions and results
 More can be added as time permits, and as new features are added.
  • Add implementation level documentation including guide for extending the code to new model objects. Many in-line documentation comments exist, but more could be added to aid others picking up the ball on development, maintenance.
 Comments:
 Don't need for immediately, but is important, eventually
 Maybe at least a start so we can get feedback on the architecture and position development appropriately.
 UPDATE: Note this would be solved by adding the user exits as described in the 'DLL extension to display AppDef and AppObjects' topic, above.
  • Create programmer documentation describing "theory of operation" of the tool and explaining design decisions. Beef up source-level comments.
 Comments:
 Important eventually if we are serious about opening this up to contributions.

4.5 Filter Options

  • A DAC contact suggested that a general-purpose query function would be useful. For example:
    • Show all Nets that have no InstTerms connected.
    • Display all Nets that have Shapes associated.
      This could be implemented as
    • an expansion of the regex filtration syntax we already have.
    • a new syntax that could work in addition to the regex filters (and sort)
    • a completely separate tool
  • Need more robust testing of multithreading. Some effort required.
  • Add some kind of sig technique to enable filter/sort on attribute combinations, particularly for unnamed Objects. Examples:
    • Shapes by Layer or Purpose
    • Vias by Layer 1 or 2, etc.
    • Headers by master LCV
 WG COMMENTS: Back burner; wait for hard use cases. Problems include:
 = Potentially open-ended query syntax (like SQL) would need architecture
 = Maybe hard to learn a complicated syntax for designed just for this purpose.
 = This likely would overlap existing commercial tool functions in many ways
 = Many engineers already have special-purpose tools, scripts to do the kinds of queries they need.
  • Add a separate set of 3 options for filtering out *all* cross Domain references (like the OccNets of a Net).
  • Go through all associations meticulously to decide which filter options should suppress them
    • Look at 0x0 handle refs and distinguish between
      • those that mean something (like Occ not expanded
      • and those that just mean no relationship set (like getConn Object of a Node)
    • Turn the ref filters off if pop up in callback new window.
    • Enable resetting filters in a pop-up
    • Add more filter options for AppDefs:
      • Skip all AppDefs with names appearing in a user-specified list.
      • Display all AppDefs *except* those with names appearing in a user-specified list.
      • Add wildcard processing on those names.
  • Option to suppress address to simplify diffing outputs across runs. Make this option available on the si2dis batch command line so you can override your .si2oadoptions file for a given run. Probably only makes sense in batch mode, since you need the addresses to hot-link to the referenced objects in the GUI?
 Comments:
 Sounds useful.

4.6 GUI

  • Consider implemeting the GUI implementation in TK or QT (instead of coping with browser quirks with Javascript and XMLHttpRequests).
  • Enhance the popup dialog for sort/regex:
    • Add ability to modify options to GUI buttons? So if you need to see more detail you've been filtering out, or less, you don't have to return to the debug console to do it.
    • Add case-sensitive override flag to the incremental regex popup.
 Comments:
 For completeness: but probably will not notice for a year.
 Once people set a case-sensitive option, that's what they want.
 Methodology will worry about case or not. Mostly demo ware.
  • Add button to expand only the current screenful of folded objects.
 Comments:
 Sounds interesting... but is it fairly easy?
  • Add collapse/all buttons
 (but with warning about how long that might take and how big)
 Comments:
 Sounds interesting.
  • Add button to expand only those things that you have already expanded but might be hidden now (or were collapsed again -- must keep cache list in the javascript)
 Comments:
 How costly?
  • Add button to expand "cone of interest", eg, InstTerm and all its links. Need to define exactly what this is in all possible contexts.
 Comments:
 Sounds quite interesting
  • Add button to highlight all 'occurrences' [ie, uses in a given display] of an Object (like this particular InstTerm)
 Comments:
 Browser SEARCH already does this if already expanded.
 Would be like that but would search for strings in collapsed stuff, too, which the Browser's search button won't do.
 Defer.
 Sounds somewhat interesting.
 With everything folded, cant search for object.
 Generalize into stuff not even in the display (not just folded with javascript).
  • Add javascript to auto-scroll the browser display to the right place as containers are opened/closed. (Linking to reference scrolls OK; but clicking on a + when the container is near the bottom of the display expands the container beyond the bottom of the window and does not scroll.)
 *Comments:
 Nice to have but not essential: can easily use browser scrollbar.
 Or use PageUP/DOWN keys with other hand if you are ambidextrous.
  • See if it's possible to use javascript to update the same display inline, when accessing a reference not already on the page (instead of opening up a new window devoid of context).
    • Corollary: update defs that in this main window as binding is forced by the user.
    • Consider using XMLHttpRequest (though this is still non-standard across browsers; eg, requires ActiveX be enabled in IE6: would require IE7, if we are even supporting IE, which we might have to be for .NET port)
 Comments:
 This might get subsumed into the request above to control the "tag overhead" for the interactive use case.

4.7 Model Coverage

  • Finish the rest of the OA model
 Comments:
 Utility objects not that important.
 Wait for demand.
  • CMaps: Currently, there is no way to get CMap data into console [file] output (because it requires interactive input from the user to define which LayerNum and a format for all the (potentially large amount of) data. Can only display with user DLL or executable via GUI mode.
 Comments:
 Prelim check to see if anyone wants this, but couldn't find anyone. Guess is that this can be deferred indefinitely, for some contributor that really wants it to implement. No one else sees the need for this in console mode now either.
 Decision: For now, document that we can't dump CMaps in console mode; must use GUI and you need your own viewer for it.
  • Utility objects: Extend implementation of oadu() to handle all calls to oad for code variables that are utility objects. Fix or work-around the problem of display of ParamArrays. Some gcc/linker/gdb combos do not result in gdb seeing right type on ParamArrays -- see it as a "struct oaParamArray" so calls to oad(pa) cannot find the right overload function even though nm shows it to be a T symbol in the si2oadebug.so
 Comments:
 Replicated on my SuSE9.3 laptop with gcc3.2.3.
 Send a test case; for now just document it.
 Is just a utility object, maybe not too important.
 Agree.
 Would be solved by moving to oadu() non-overloaded version for utility objects (would also solve the .NET debugger problem)

4.8 Performance

  • Make wwwserver exit more graceful. Currently have to remember to push "RETURN TO CONSOLE" button in browser, or start another browser to "/docroot/quit"; otherwise, if you kill browser, server stays running. Maybe use fork() and waitpid() on child.
 Comments:
 wwwserver waitpid put off till later
  • Investigate using a custom GUI (instead of a browser), which would be optimized for the job of fast rendering of this sort of data. This would enable avoiding the 100% increase in tag overhead resulting from conversion to HTML. Maybe want both options, since browser use may be more accessible in terms of platform portability. Although a solution like Java or the emacs W3 browser might provide sufficient portability.
 Comments:
 Worry about enhanced speed post 1.1
 Advice received, based on experience with a similar QT-based tool for OA2.0, that if ease of extension to new OA data model objects is important, then a QT solution would not be much help.

4.9 Platform Support

  • Fix Firefox problems of display without newlines (replicated on my Linux RedHat Enterprise3.0 32bit desktop machine).
 Comments:
 Could report this as a bug in the 1.5.01 version of Firefox. We could await their reply before deciding how to proceed on this. Maybe they will fix it? But with FF3.0 out, will Mozilla care about such an old tool? Let someone that uses this now-ancient version Firefox worry about it.
  • Test on other platform and browser combos:
    • Machine/OS
      • 64-bit platforms
      • Linux RH21_32bit/g++/gdb
      • Solaris9_32bit/Forte/dbx
      • ...
    • Browsers
      • Mozilla 1.4 When using browser XSLT in some Moz versions, callback for more data results in blank screen. Proper XML content shows under View/Source. Probably, wrong MIME coming back because file extension is not .xml
      • Firefox 1.0.6 Firefox 1.5.0.1 (but not older 1.0) internal XSLT leaves the output without any newlines. Saving that as HTML and reloading shows it OK. May have to reconstitute the CSS and XSLT to handle whitespace explicitly.
      • Internet Exploder 7
      • Netscape 7.2
      • Chrome
      • ...

4.10 Regex

  • Add settings to control processing of implicit objects (nets, terms, insts)
  • A GUI wizard for the non-batch (even batch) case of regex to help people phrase regular expressions properly, avoiding getting tripped up in the multiple delimiters needed to construct a path-expression properly.
  • Add menu on click event (L or R click) to reset maxownerlevels, maxcollentries
 Comments:
 Until someone needs this, can be done. Wait for a postcard from beyond to justify the effort. Don't waste time until someone needs it.
  • Regex upgrades
 - If no match on regex, put in a tag the message
   "no matches for your regex: ..." along with number of objects searched

(DONE: but only in console output and only if verbose>=2)

 - Bracket the output buffer to delete any containers that didn't have matches inside, and delete references to them and their attributes, (not just avoid printing internal Objects as is the current behavior) 

(BUT: Isn't it useful to have at least a sentinel to indicate the what the Collections are that were skipped, and how count of each)

 - Solve conflict between regex and incremental display: when maxownerlevels set low, likely do not get down to lowest  regex object. But once in browser, clicks to show more data automatically bypass regex checking. Need to disable reges or clicking on reference links would never show any data. Maybe use right-click to allow disable of regex at user control.  But still have issue that you now don't know where you are in the display owner hierarchy, relative to where you want to be in the regex owner hierarchy.

(DONE 1.2.5 except for Objects that can have multiple owner Types)


4.11 Sort

  • Recast sorter DLLs to be configurable via specification syntax for each different type of data. Currently, user select sorts for each Coll type individually. Is this practical? Don't you always wanna sort named objects by name? Or maybe type name (too)? Wouldn't it be better to specify in a file you want
    • sortName ---- named objs
    • sortArea ---- shapes
    • sort direction --- routes
    • sort layer ---- vias

...and so forth, so you don't have to specify each time for each collection (what a nuisance).

 Comments:
 Would be useful for batch si2dis tool, and would be a useful prototype for reuse in the diff tool.
 On the other hand, a user can easily fake this already by creating a single SORTUNIVERSAL 
   that tailors the sort (like in a big switch) for each Type desired.]
  • Redesign the sort PlugIns from having their own sort engine inside to just being a compare() function, and pass that to qsort.
 Comments:
 But this would eliminate the option to cache the sort keys, since outside the compare function[s] 
   what they are cannot be known. Keeping the sort function (eg, qsort) in the DLL enables any
   kind of sort optimization strategy to be used, including caching keys.)
  • Enable DLL extension to display AppDef and AppObjects in a meaningful way as though each Def were a unque attribute and type, respectively (using timing model as use case). Discussed 6/15/07: 3 levels of solution:
    • Add user exits for all container/owner objects (at both the attribute and owned-object levels) to enable simple addition of arbitrary semantic relationships via plug-in. This is the easy simple solution. It provides maximum flexibility, admittedly at the cost of transferring some burden to the end user to write C++ code to insert the relationship data where it is wanted in the output. Does require learning the list of Si2oaD Association*() functions to be used in
    • Examine InterPointerAppDefs on AppObjects to infer primary relationships. Automatically insert into display assuming native Objects are the owners. (This is a bust, I think. When an Object is the end of more than a single 1-to-X relationship, how do you guess which is the owner? What if it is 2 owners, like omOccInstTimingArd->omOccInstTimingNode[from,to]? How do tell which is the owner from two, 1-1 relationships -- like the Term's getNet(), getBitTerm() -- unless you already know the semantics. This idea is just too error prone to be useful.)
    • Invent a syntax to enable users to describe how they want the relationships inserted. This solves the problems of (c) since the tool is told how to hook up the relationships. But you don't want to invent a syntax, so you want to reuse something like XMI to understand the model. But building an XMI parser is a large task. Maybe if there were a good XMI toolkit... Still, is this an easier task for a user to
      • learn and write XMI for a user?
      • learn the Si2oaD internal functions for output of association data?

Note doing this would also solve the "arbitrary extension of the code" issue (below). It could be to hook in new native Objects, as well.

 Comments:
 Escalate the problem of on-demand load of appDefs to CT.
 Then you don't need this if you do your extension model properly.
 POSTED: FeatureRequest#1189
  • Do we need an option to force open of the Tech for a Lib in the output=console case?
 Comments:
 The flag added for the standalone tool, -tech meaning open the Tech instead, would be useful.
 Note one way to do this in oadForum#84
 Should there be an option (like the expandocc or loadparasitics) to auto open all Techs?
 What about an attached Tech or those in an incremental Tech graph (even if Libs are not open)?
 What about adding a dynamic BIND option to the DMFile for the Tech that shows in a Lib?
  • Look at separating out the traversal engine more from output

generation so, eg, an output generator that creates TCL/Python/C++ statements to create the existing model out of the traversed data (instead of just displaying it in XML) could be hooked in.

 Comments:
 This exercise might be synergistic with the Diff tool development about to begin.  
 Note: some OA data can never be retrieved without input from user: e.g., CMap data
       for which you must know layerNum apriori.
 Comments:
 Obsolete soon after it is created.
 Consensus: Leave it for some future date.
  • Make cursor change to a HAND to make the BIND/LOAD/OPEN dynamic

open links more obvious.

 Comments:
 Read about it in the UserGuide.
 Once you learn it don't need to talk to the hand.
  • Examine how DLL paths are constructed in 0 default case, esp for Sorts
 Comments:
 We need more input on this to assess the need.
  • Stuff all the docroot files in a subdirectory by themselves to make it easier for an installer to know what has to be installed where. Currently they are mixed in with the source files and everything else. You have to look at the error message during execution to see what the complete docroot manifest is.
 Comments:
 This is icing.
 Just add information about this to UserGuide for now.
 Problems with this: Since so much of the HTML is now created dynamically, there is 
   no special tagging on most of the handles that are links (esp in the long lists).
   These do not exist until they are clicked. What to do? 
  • At this point we could just "do nothing". In other words, tell users you have to get familiar with the tool to learn where all the magic cookies are. Or you can just click on everything until you figure it out. And/Or a special summary paragraph can be written in the UserGuide that surfaces the complete list of hotspots in the display.)
  • Probably I can implement a hover test in Javascript. It would involve looking at the single tag that encases potentially a lot of attribute data, much of which is not hot; then looking at the pixel location of the cursor, then figuring out where in the line of attribute data that pixel location maps to (all using the on mouse-over event). There is the risk that this could make the display more sluggish (or not). I think some of the more bloated tags (like 100000 handles listed in the "insts" of "nets" record for a Block) need the cursor "hand" for the whole tag. So those big boys would not cause any processing overhead. It might all work out if just the shorter tags need the pixel-mapping.

4.12 Testing

  • Test against a real commercial tool to verify that
    • LD_PRELOAD injection really does work.
    • Tcl lib can be used for tools with Tcl command window.

Produce guidelines for getting display control even if tool's symbols were stripped (e.g., using Observer for that critical moment, say, when the user does an edit on a design element).

  • Test use of oad after application SEGV. Want to be able to use it to debug SEGVs in application code.
  • The tool should be robust enough to handle any user/design inputs, display what it can, and give an intelligible indication of why it cannot do more and at what point that is.

(ON-GOING)

  • Add more diagnostics to inform users of missing files or other problems that will prevent successful execution and display, instead, e.g., of tearing blindly down a bad PATH to a cliff and crashing badly.

(ON-GOING)

  • Fix bugs

(ON-GOING)

  • Add tcov of current testcase coverage.
 Comments:
 Cannot get gcov to work with the shared object that is oad. Use of -fprofile-arcs with shared
   lib gives link error on symbol `__bb_init_func' (only available in the .a static linked 
   version of gcc). A search suggests that no one else has made this work, either. Alternatives:
      1. Do it under Solaris, where tcov *does* work with .so's.
      3. Shame some OAC member into loaning us a code coverage tool that works with gcc -- 
         or into doing the work for us.
      4. Maybe someone has a coverage tool that we could use under .Net2003 ? Tried again with
         gcc 4.1.0 (SUSE Linux). Since new version of gcov now uses __gcov_init, that is the
         unresolved symbol that doesn't seem to get linked in with the shared objects. This
         symbol should exist in the .a version of gcc. We could try using that version as well.
  • Create more complete set of test cases to exercise tool's handling of every object.
 Comments:
 Use the OA release test cases.
 I will report back on this.
 Or, let users report bugs and fix on demand? However, I admit that bugs in a debugging tool
   are somewhat insidious, and yet, more complete tests can become a long pursuit...
 We were talking about reusing existing testcases...but this still will take time to investigate.
 Never ending effort. Low priority. Need to get this into the "contributions" category.
 One thing the community can do is submit more tests.
 Your comments still valid for reuse of OA testcases.

4.13 User Interface

  • Add architecture and user interface for customizing the order for simple attributes on the output display, so the user can decide what attributes show first and last. Complications: Some attributes that look like single name=value pairs have been grouped (e.g., master, which include bound status and LCV names) and positioned after single pair entries. This is done for both readability and consistency across other Object types with similar attributes.
 Comments:
 This will be complicated: the order will be specific to each Object.
 Both the design changes to the code and the user interface needed to communicate this
   information to the tool will be complicated. Put off for consideration after DAC
 Agreed.
 2010sep11 WG call: This idea surfaced again. Maybe other usability issues are more important
   at this time; however, a text file configuring order of attributes for each Object could
   allow users to see first the attributes they consider important, even hide the others in
   categories more specific than the current Si2oadOptions allow.
  • Reorder more rationally the key associations (like the name) near the front for a more readable output, especially when no filters are in effect.
 Comments:
 Most important one is done: name 
 Next release, think about next two top ones to do.
  • Add an option on standalone si2dis to point to a lib.defs. But so far he was able to use the workaround of INCLUDE in a created ./lib.defs.
  • Add a new oad_repeat() overload that runs the last call again. OK if var is out of scope, will get NULL object. Is OK.
 Comments:
 2 versions of repeat:
    (1) replicating root arg to oad() and the input regex,
        Seems reasonable if not too hard yet.
    (2) take a new root arg object but reuse the same regex.
 (DONE) This way can use (2) if (1) blows up


5 Direction Decisions

A record of things already the WG already discussed and decided not to do.
  • Don't change (ie, compress) output display for associations that get lean as a result of filter options. Rationale: Do not want XML post-processing tools to have to alter processing based on what options were in effect at the time.
  • Request a new OA feature request to include a type attribute for utility objects (so Si2oaD doessn't have to use overloads and let the linker or debugger pick the right function for a utility code variable). [However, was viewed by WG as likely to be low on OA developer's priority list!]
  • (Nov2008) Decided that production of a PDF version of the UserGuide is no longer a requirement (because the UG was moved to wiki format and, unlike the original ODT, it is too hard to convert that back to PDF). Some extensions exist for PDF production, not ready for prime-time, but may mature on their own in a few months.
  • (May2011) Though we had a request to provide more analysis when the user input bad information, we decided that was a slippery slope: There is a large number of combinations of bad information. At some point the user must be responsible for RTFM and making sure s/he is running the tool correctly. There is little value in trying to provide assistance for every possible user screw-up, when there are new features to be written and other more important priorities.
Personal tools