IMHO, the "problem" with XML lies not in the bloat, even a factor 10 larger would be acceptable, it's the <$TAGS> that have to be identical across all applications to have a "truly" exchangeable XML file. [1]http://www.ibm.com/developerworks/xml/ XML can be easy or hard, big or small, depending on the task at hand. Specifically related to this discussion is this: "Create a maintainable extensible XML format Reduce change when you design XML formats agile enough to incorporate new requirements" [2]http://www.ibm.com/developerworks/library/x-extensxml.html The problems described there are not specific to XML formats. XML gives us the ability to interact with other tools. JSON gives smaller file format, with Lots of Irritating Silly Parentheses. YAML gives flexibility, with small file size. SVG lets us layout boards in our browser (I've actually wanted to do that due to restrictive IT policies on what software can be installed and used). The 'What' of a requirement document is more important than the 'How'. No reason at all that there can not be multiple file formats, *if* things are specified well. We all have many wishes, with a fixed amount of time to allocate to our lives, unless we make time to code things we'll be spending time on wishes and still be where we started in the end. "The Devil's weapon of choice today, is distraction from our goals in life." Here is my Wish List of sorts: Anyone ever consider the heretical idea of tossing it all and start over fresh? Lets us get things like hard-metric options as the first thing that came to mind. There are many external libraries today, for examples many from the Boost and wxWdigets domains, that make that idea easier than in the past, see below for the easy stuff. The hard part is the domain specific stuff, that few of us understand berried in 20+ years of accumulated poorly commented cruft. DJ is there any hope of creating a library of the domain specific stuff? For the easy stuff, as long as we don't have a "Not Invented Here" complex or "external dependencies make it hard to build" [3]et.al. problems (reinventing the wheel just takes valuable development time to make a lot of incompatible wheels): Polygon library: Booleans/clipping, resizing/offsetting and more for planar polygons with integral coordinates. [4]http://www.boost.org/doc/libs/1_44_0/libs/polygon/doc/index.htm Interprocess: handling to Schematics for real time interaction. [5]http://www.boost.org/doc/libs/release/doc/html/interprocess.html Quaternion Math: Gets around accumulating errors when rotating objects in six-degrees-of-freedom (See Stewart Platforms), when we go 3D someday. [6]http://www.boost.org/doc/libs/release/libs/math/doc/quaternion/html/ index.html MPI: Message Passing Interface library, for use in distributed-memory parallel application programming, for that 1000 layer board (that no one could ever build, lets be realistic in requirements). [7]http://www.boost.org/doc/libs/release/doc/html/mpi.html Parameter Library: Write functions that accept arguments by name. [8]http://www.boost.org/doc/libs/release/libs/parameter/doc/html/index. html Program Options: The program_options library allows program developers to obtain program options, that is (name, value) pairs from the user, via conventional methods such as command line and config file, environment variables. [9]http://www.boost.org/doc/libs/release/doc/html/program_options.html Property Tree: A tree data structure especially suited to storing configuration data. [10]http://www.boost.org/doc/libs/release/libs/property_tree/index.html Pyton (for scripting): The Boost Python Library is a framework for interfacing Python and C++. It allows you to quickly and seamlessly expose C++ classes functions and objects to Python, and vice-versa, using no special tools -- just your C++ compiler. I'd do something with Lua myself actually, see below. [11]http://www.boost.org/doc/libs/release/libs/python/doc/index.html Signals2: Managed signals and slots callback implementation (thread-safe version 2), for plug-in implementations. [12]http://www.boost.org/doc/libs/release/libs/signals2/ System: Operating system support, including the diagnostics support that will be part of the C++0x standard library. [13]http://www.boost.org/doc/libs/release/libs/system/doc/index.html Boost also has several Smart Pointers, several Parsers, Exception handling, Threads and other techniques to make robust code. See the whole list here: [14]http://www.boost.org/doc/libs/ For the GUI I'd use wxWidgets [15]http://www.wxwidgets.org/ which in time will run on your iWhatsit, and does run on PC, Mac, Unix [16]et.al, today. Use OpenGL for the machines with the power to use it where 'expensive' doesn't mater, and SDL for the slow old machines. Requires a good abstraction layer. wxKeybinder: A pre-built panel and a complete system to view/remove/add/edit command shortcuts. [17]http://wxcode.sourceforge.net/components/keybinder/ wxScript: A set of abstract classes to add a script-interpreter support to your wxWidgets applications/libraries. Python, Lua and tolua, underc, cint (all optional). [18]http://wxcode.sourceforge.net/components/wxscript/ wxDatabaseLayer: SQLite3, Firebird, MySQL, Postgresql (all optional) [19]http://wxcode.sourceforge.net/components/databaselayer/ I'd go with wxSQLite3 for a standardized storage, instead of adhoc file/memory creations. [20]http://wxcode.sourceforge.net/components/wxsqlite3/ Embedded Firebird for those that want full-up database. [21]http://www.firebirdsql.org/manual/fbmetasecur-embedded.html They mention Security in the Firebird link. Security is important to consider; buffer overflows, loadable executable plugins [22]et.al. We don't want our projects showing up on a SANS list. See here for several other applicable libraries: [23]http://wxcode.sourceforge.net/singlepagelist.php I'm sure others would want different languages (Erlang anyone? My choice of the moment.), no changes at all, etc. End results are what matter. -- [24]http://blog.softwaresafety.net/ [25]http://www.designer-iii.com/ [26]http://www.wearablesmartsensors.com/
References 1. http://www.ibm.com/developerworks/xml/ 2. http://www.ibm.com/developerworks/library/x-extensxml.html 3. http://et.al/ 4. http://www.boost.org/doc/libs/1_44_0/libs/polygon/doc/index.htm 5. http://www.boost.org/doc/libs/release/doc/html/interprocess.html 6. http://www.boost.org/doc/libs/release/libs/math/doc/quaternion/html/index.html 7. http://www.boost.org/doc/libs/release/doc/html/mpi.html 8. http://www.boost.org/doc/libs/release/libs/parameter/doc/html/index.html 9. http://www.boost.org/doc/libs/release/doc/html/program_options.html 10. http://www.boost.org/doc/libs/release/libs/property_tree/index.html 11. http://www.boost.org/doc/libs/release/libs/python/doc/index.html 12. http://www.boost.org/doc/libs/release/libs/signals2/ 13. http://www.boost.org/doc/libs/release/libs/system/doc/index.html 14. http://www.boost.org/doc/libs/ 15. http://www.wxwidgets.org/ 16. http://et.al/ 17. http://wxcode.sourceforge.net/components/keybinder/ 18. http://wxcode.sourceforge.net/components/wxscript/ 19. http://wxcode.sourceforge.net/components/databaselayer/ 20. http://wxcode.sourceforge.net/components/wxsqlite3/ 21. http://www.firebirdsql.org/manual/fbmetasecur-embedded.html 22. http://et.al/ 23. http://wxcode.sourceforge.net/singlepagelist.php 24. http://blog.softwaresafety.net/ 25. http://www.designer-iii.com/ 26. http://www.wearablesmartsensors.com/
_______________________________________________ geda-user mailing list geda-user@moria.seul.org http://www.seul.org/cgi-bin/mailman/listinfo/geda-user