Basic Frameworks and Languages ------------------------------ Which Application Framework? Combined Eclipse Rich Client Platform (RCP) and XAL. XAL applications which are fully functional or close to fully fully functional for our purposes will just be launched by the Eclipse launcher (not XAL Launcher, Eclipse launcher traps stdout and stderr). Which languages? Java 1.5 by default. C/C++ only for completely standalone applications in special circumstances. Perl, python, javascript and other scripting, all ok, use whatever is appropriate. Hardware, Network, Filesystems ------------------------------ Basic speed, memory, CS network requirement. Target min execution environment: 2 Ghz, 1G RAM. Should be no requirement for external graphics card. When running centralized instance (ie CR, office desktops), then target 100M-byte ethernet. CR should be G-byte ethernet. Will executable be centralized (every running instance runs same executable file) or distributed (to local computers)? Control Room systems use instances distributed by cdsoft distribution system (based on RDIST) to their local disk! AFS connected systems use central executables. Remote unconnected systems use distribution server based on Java Web Start or Eclipse distribution management. OS and Platforms ---------------- Which Operating Systems will we target? 1) Linux RHEL 4 assuming gtk window management, testing with KDE desktop 2) Mac OS X. 3) Windows. Note, targeting Windows as well implies work. We will have to work out how configuration files and startup files will be accessed at runtime (eg may have to require a mounted disk), and how to distribute to Windows, and how to maintain scripts up to date (.bat files!! Arghhh). Security and Access Control --------------------------- How to manage acquisition and control privileges? 2 networks; "prod" (DMZ) and "dev" (SLAC public). dev will be read-only to CA, implemented a by read-only CA gateway. How would critical control functions be restricted; which user accounts would be able to do relatively non-invasive kind of put (eg trim magnet) and which accounts may do critical control? That is, what will be the equivalent of control ACL? How you that be implemented? Any user will be able to trim a magnet, mkb, etc if on the production network. For CA, critical access (only possible on prod network) will be managed by CA Security. This implies only some shared accounts can do critical control, since CA Security is not centrally managed. For AIDA, critical control of PEPII and VMS based systems will be by Ed's logical name privilege mechanism. Model ----- Which modelling system will be used for calculation of basic Rmat and twiss and global parameters? Initially the SLC model system, then integrate MAD, then XAL. 1) SLC Model data access through Aida. 2) MAD will be used in a similar way to the SLC model "skeleton-deck" system; a preprocessor filter will run on a mad skeleton, looking up device values with AIDA, and write a fully instantiated mad input deck. A mad model server can run the deck and output R and twiss, plus global parameters. The output will be put in Oracle as part of the existing "symbols" schema. Applications will read from Oracle. Architecture for different "beamlines", (made up of sections), and having one design plus some (>=1) extant models, will be just as the SLC system (except for >1 extant model will be permitted). 3) XAL beamline description file will be generated by the filter mentioned above, and can be used by applications expecting an XAL XML description of the beamline. Source Code location and Version Control ---------------------------------------- Source code and configuration file version management. CVS. If and when rest of group says Subversion, then upgrade. Managed through Eclipse Team system. Use CVS with "ext" and "ssh" for distributed development (so developers can develop w/o being connected on AFS filesystem by ext ssh): ie: CVSROOT :ext:@lcls-dev02.slac.stanford.edu:/ CVS_RSH ssh Repository: /afs/slac/g/cd/soft/cvs, using /afs/slac/g/cd/soft/ref as reference area. Module: package/as (or if not "as" whatever name we choose) Full pathname: /afs/slac/g/cd/soft/ref/package/as Q: What's the name of this system? GUI Configuration ----------------- Can a control room user change the configuration of the GUI? eg, add a launched executable, change the Views in an Eclipse Perspective (ie change the way an application works and looks?). Also, can a user in their office do these things? Yes, but each new invocation of the executable resets the GUI configuration. It will delete the Eclipse workspace assigned for that account/host combination, and copy in a fresh one. Can a user using their own account change the GUI? Yes, by default they will get the default GUI config, but they can use their own using an optional parameter (ie optionally use the "-workspace" param of Eclipse). What is the GUI "pattern"? This question relates to how a user switches from one application to another. What do they see when they do that - is it a different executable, a different window, or different configuration of the same window? Each application will be implemented as an Eclipse Perspective, composed of some number of Views. Textual tabular displays (equivalent of SCP's "Displine" system) ------------------------ How will tabular displays be produced and rendered, in a way that is easily formattable, and so that all data in them is automatically accessible for saving for other applications? All tabular data will be handled as XML in the GUI, and displays will be generated by eXtensible Stylesheet Transformations. That is, all displays then, will be defined by an XSLT file. Scientific plots (equivalent of SCP's Handypak/Unified Graphics) ---------------- How will scientific plots be generated? This is a hard one. Ideally each AS instance would display through a matlab plotting window, with which the user can interact with the data so plotted using a matlab prompt. But this may not be fast and won't be cheap. Help System ----------- How will online help be delivered? The Eclipse Help System (an embedded Tomcat server and indexed HTML files). The documentation so produced will also be hosted by the Tomcat server (see above). The help for each application will also be linked to by each application project's primary web page in Confluence (so the help can be found and accessed without starting the AS application), using a standardized link. http://www-128.ibm.com/developerworks/opensource/library/os-echelp/ http://help.eclipse.org/help32/index.jsp Offline Analysis and Remote Data Access Support ---------------------------------------------- See also Database below, for nominal persistence db, access technologies and App Server. Where will saved data go? Saved data from AS applications will be saved in a common area on AFS. This area will be accessible from the internet. Q: Where should this be? No obvious place on AFS. Note that the designated directory location LCDATA at /nfs/slac/g/lcls is not a great place for high level apps data because it won't be accessible to users without mounting NFS, whereas they've familiar with AFS. What is the nominal data format? Numerical matrix data should be saved in Matlab .mat. All other data not in a format otherwise dictated should be saved in XML or EXI (when available). Which Application Servers (which kind, how many?) We will use 2 Application Servers: 1) SLAC's Oracle ORAWEB Application Server for web based interactive applications using oracle data. See https://oraweb.slac.stanford.edu/, eg "Symbols" db at https://oraweb.slac.stanford.edu/apex/slacprod/f?p=116 2) Tomcat server. We will make available the same tomcat instance used to run the DESY elog. Note: this can also be used to run an RSS feed for both elogging systems (Physics "DESY" elog, and Operations eLog), plus a cmlog web client (based on some ajax-like system), plus Aida data access etc. Remoting -------- How will a user get a remote display for an instance running in SLAC dev network? X11. That is, we make a commitment that our core technology must facilitate a good user experience over X11. If it doesn't, we'll use something else. Persistence ----------- Which Database(s)? All relatively static data will be housed in Oracle. All schema tables should be added to both SLACDEV and SLACPROD instances for dev and prod dbs. Db Access? We'll create an Aida Oracle Data Provider for accessing Oracle data by name. Nominal persistence technology will be Hibernate. Application Servers See above. Persistence Framework Hibernate. Software Build and Distribution ------------------------------- How will AS Applications be built and distributed (ie in IDE, or like "make"?) Development builds may be in IDE, but production builds will be by ANT. What is distributed? Only the binary and jar file. How do users get distribution? CR gets it by RDIST distribution. Other prod gets it by being on the network filesystem. dev users on the AFS filesystem get it through AFS. Remote desktop machines by Java web Start/ Eclipse Distribution manager. Error handling -------------- How will runtime errors be handled? All runtime (actually all "Throwables") must be issued using Err framework, so that they appear in cmlog. All errors should be give the full context of the error (as described in Err), that is what the error is, while doing what, plus what caused it. KEY DECISIONS ============= 1. Must it be the case that a "production" instance of the AS, must be capable of running even if the AFS filesystem is disconnected? 2. What order are we going to be doing the model systems in? That is, are my nominal "phases" valid? 3. Are initial applications, "wirescanner" and "emittance", going to be based on XAL versions, or shall we write them without XAL? Important because, if derived from XAL, that implies creating an XAL model, which deflects resources from the creation of the functionality of teh applications themeselves (for probably little net gain in teh case of those applications), and deflects resources away from "MAD twiss -> db", and "db -> Mad/XAL input" projects. 4. How will scientific plots be generated. How will this be done initially (for Wirescanner and Emittance), and how later? Nom. Ans.: Creat plotting plugin, through which all plots go. That plugin shoudl generate plots in GnuPlot or GnuPlot via Octave. An alternative is Matlab, which has a java API (that is, you can compile matlab to java (and so create a basis class for plotting which leverages teh matlab plot commands, essentially wrapping them), and you can call java from matlab. If the latter were instituted, then prgrammers could choose which parts of a project were don in matlab and which in java.