Code Development on NTSome notes on experience gained in developing cross-platform (NT/Unix) HEP software for the Linear Collider DetectorMore of a Random Walk than a Formal Overview of Development Tools
(tonyj,apw@slac.stanford.edu)
NT Code Development
- Topics
- NT Code development tools for C++/Fortran/Java
- Code development issues
- Code management
- Using NT as a data server
- Conclusions
Windows NT Development Tools
- For windows only development, tools are excellent:
- Visual C++/J++ (MS Java)/Compaq Fortran
- Excellent IDE allows development in all three languages
- Integrated editor, cross-language debugger
- Integrated build tool (make clone)
- Incremental linker (that works)
- Integrated code management (visual sourcesafe)
- Object browser
- SLAC has site license for MS developer tools
C++ for cross platform development
- Cross Platform C++ development has many problems
- Makefile for each platform
- Need to build/debug on each platform
- Versionitis
- External dependencies
- Compiler flags
- Even egcs compiler has many system specific flags
- Different methods for building DLL’s/C++ name mangling
- Compiler bugs
- Differing Levels of ANSI/STL Support
- Architecture specific bugs
- Found bugs in both Visual C++ (5.0) and egcs compiler for intel.
C++ for cross-platform development
- Certainly possible - Simulation package does work on both NT and Unix.
Large amount of time goes into testing/debugging on different platforms.
Java for Cross Platform Development
- Have succeeded in writing entire reconstruction/analysis package in Java
- Currently using Visual J++/Sourcesafe
- All development currently being done on NT
- JAR files built on NT and put on web server for download by others.
- Java code can be run
- Standalone from command prompt/batch job
- Inside Java Analysis Studio (JAS)
Java Analysis Studio
- Cross Platform Java GUI for data analysis
Java for cross-platform Graphics/GUI
Java Experience
- Write Once Run Anywhere
- Really works (for applications, if not applets).
- Develop on NT, runs without changes elsewhere
- Developers have been able to learn language and tools and get up-to-speed fast
- Performance - Adequate, getting better all the time
- Need to abandon Visual J++, Source Safe
CVS for cross platform development
- CVS is available for NT as well as Unix
- NT tools include:
- line mode tools
- WinCVS
- jCVS
- Cross platform CVS GUI written in Java
- Doesn’t support ssh access to remote repository?
- Several tools available for web based access to code
- CVSWeb - perl script
- jCVS servlet - works well on NT
jCVS Client
jCVS Servlet
CVS security issues
- Supports distributed access to code repository
- bewildering array of access methods/security issues
- rsh - no longer allowed at SLAC
- pserver -
- needs custom server,
- passes weakly encrypted passwords over network
- ssh
- doesn’t work with all CVS clients
- complex to set up client
- no AFS token support
-
CVS vs. Sourcesafe
Is CVS sufficient for a physics collaboration?
- If using C++, not really,
- Need to be able to switch between configurations easily
- Logical names where are you?
- Location of external dependencies
- Would like to use pre-built dll’s where possible.
- Want to isolate users from system dependencies as far as possible.
- Want to avoid “nightly builds”
- Need to layer tool on top of CVS, make
- LCD Solution:
- Development Environment Controller (DEC)
Development Environment Controller
- Written for LCD by Tony Waite, could be used by others
- Hides details of file organization from user
- User deals with subsystems, Gismo, Recon, etc.
- Easy to switch between PROD,DEV,Test version of each subsystem
- User Profiles allow saving/restoring environment.
- Hides machine dependencies of BUILD operation
- Automatically archives CVS version numbers for production BUILD’s
-
Running a (Java) Data Server on NT
- Use NT Service Manager to Run Data Server
- Microsoft Java has built-in support for running as NT server
- Application can be distributed as a single .exe which installs itself as an NT service
- Other Java implementations can be run as an NT service with 3rd party add-ons (or roll your own).
- Error logging using NT event log/viewer
NT Service - Pros and Cons
- Pros
- Auto start on reboot
- Runs in background
- Use service manager to start/stop service
- Real life problems
- Does not auto restart
- Application can unexpectedly pop up dialog box!
- Remote control difficult
- Remote Server Manager only distributed with NT server (or with NT resource kit).
- Requires port 137/138 access (blocked at SLAC firewall) or VPN/PPTP
Net Meeting for Remote Control
- Netmeeting 3.0 has “Remote Desktop Feature”
- If run on server allows remote access to server desktop from any NT/95/98 machine.
- Free!
- Security
- Claims to use encrypted communication channel
- Requires NT login to access remote desktop
- Security dubious
- Potentially very useful, perhaps worth considering
PPT Slide
NT Disk Cache Problem
- Problem with reading large datasets
- NT will grow disk cache until it takes 99.5% of physical memory, regardless of who/what else requires memory.
- Reading large datasets can result in NT totally grinding to a halt.
- No system parameter to limit disk cache size
- Workarounds
- If you have access to call to C open statement you can turn off disk caching (big if)
- Can run program which constantly flushes disk cache
- Conclusion
- NT not ready for primetime data server applications
- Windows 2000 better?
Things I didn’t talk about
- Because I don’t know anything about them
- Sniff+ - Cross platform IDE
- Cross platform GUI development with C++
- QT Widgets
- Libtool/configure
- NT ports exist but not for non-experts
- cygwin
- Unix environment under NT
Conclusions
- Tools for code development under NT only are great
- Development tools probably better than Unix
- Cross platform development
- In C++ is a lot of extra work
- Java can make things much easier, especially for:
- GUI applications
- Client/Server applications
- NT for HEP batch/server side data processing
- No obvious advantage over Unix/Linux
- Tools and OS not as well suited to task as Unix
- NT still maintains lead as desktop machine
- Unix seems to be catching up fast (gnome, * office)