Probably the most salient feature of the new version is that everything is much faster -- some major sources of gui slowness were eliminated, so everything feels very snappy. Also, the prospect of crashing from basic gui operations has been reduced considerably with many bug fixes. Finally, many important new features have been added, and others significantly improved, making high-frequency functions more efficient, and enabling even greater ability to debug and manage complex large-scale simulations across collaborative working groups.
Important Change in File Format
- There is a new version of the dump file format (for saving projects, and any other object in system, e.g., programs etc) -- it allows for much smarter setting of pointers upon loading e.g., programs into a new project -- saves the name and type of the object being pointed to, and uses that if possible to find the proper object in the new project. The most obvious consequence is that loading new Programs from the Program library will be MUCH more robust. Also, the new format is completely robust to svn merges of different changes on the project files, so that is now possible, though still somewhat ill advised -- much better to use the new diff compare to resolve changes.
- The consequence of the dump file changes is that prior versions of emergent will NOT be able to load the new files -- it will simply fail to load them based on a header id string. Of course, the new version can load the old format files no problem, but it will save them in the new format. So, everyone using a set of projects must upgrade together. There is a flag on the preferences to save in the old format if absolutely necessary.
- Diff Compare -- very useful new feature for showing the differences between two objects (including their sub-objects), and allowing you to merge changes in either or both object, using a graphical dialog. This is essential for merging updates to programs, specs, etc from other sources (e.g., the new standard program library, or other forks of a given project, etc)
- Param Search -- for single variables added to the SelectEdit editor, new parameter searching options are now available directly in the gui -- just click the search flag on, and you can set min/max and increment values to control parameter searching. See link for info about a demo project doing simple Grid search. Many more sophisticated search features are now being built upon this infrastructure.
- Program Step -- special new interface for single-stepping programs -- shows list of eligible programs to be stepped (using new short_nm) and also selector for how many times to step per click -- makes it very quick and efficient to step at multiple levels.
- NetView History -- the network viewer NetView now records all the network variables during a display update, so you can rewind and view previous network states (including variables you weren't originally looking at) -- very useful for debugging and understanding what the network is doing, etc.
- Plugins -- several major improvements, including ability to compile directly within emergent, and pull up a built-in editor to edit the source code -- can do full plugin development all within emergent. Also useful command-line interface to re-make all plugins, e.g., after source update to main code.
- Projects are now automatically saved every 2 minutes by default if there are changes. If your project is my.proj, the autosave file will be my_autosave.proj. This is useful in cases where the software crashes and isn't able to dump a my_recover.proj file. If the software is able to dump a recover file after crashing the recover file will have more recent information than the autosave. Autosave will also save you if your computer gets turned off. Once you save the project, the _autosave file is removed, so if it exists, then it is more recent than your last save. Save interval is settable in Options
- running in the gui is now generally as fast as -nogui -- was slow due to slow gui event processing routine, which is now called much less frequently
- See Keyboard shortcuts for a number of new shortcuts -- emacs style editing is now fully supported everywhere.
Ctrl+ion var, args, funs and programs (or any case where there is only one option) no longer brings up a chooser -- it just directly inserts the object for you.
Ctrl+rightnow navigate forward and backwards in program code selection history.
- When importing data into a datatable (such as csv or tsv) the header is automatically computed and the type of data is now inferred based on the first row.
- Datatable buttons now show up on graph/grid view ctrl panels -- handy for just loading data and graphing it.
- There is now a preference for disabling the application toolbar and the tools bar.
- Choosers now allow you to interact with them more quickly. If you know the exact string that will cause the element you want to be selected, you can type it and press enter without waiting for the gui to catch up with you.
- Methods that require a type (such as NewColMatrix) now automatically have
taBase::VT_filled in. Just put your cursor at the end and push Ctrl+l to see a list of type completions.
- GpRndTesselPrjnSpec and PolarRndPrjnSpec are now fixed.
- DataTables now support automatically scrolling to the bottom as more rows are added - auto tail mode.
- Can drag a Program variable onto an argument to a MethodCall or a ProgramCall -- easy way to pass variables.
- Programs now have an OBJS_UPDT_GUI flag. If it's unchecked (default) objs in that program will not have their gui representations updated automatically as changes occur -- only at the end when the program finishes. (for example, GraphView/GridView for tables)
- DataTable columns with matrix cells can now have custom-named dimensions that show up in editor window
- new utility functions:
- taDataGen::GenSortedPermutations. generate a sorted list of all possible n! permutations
- taMath::vec_jitter_gauss. jitter elements of a vector with a gaussian
- taMath::fact. compute factorial of n
- taMath::vec_kwta -- compute kwta on a vector
- DataTable MatrixColToScalars and MatrixColFmScalars -- copy matrix data to sequence of corresponding scalar columns, or vice-versa -- useful e.g., for graphing matrix data as individual lines instead of the matrix graph view.
- taDataProc::AllDataToOne2DCell -- collapse all data into one 2d matrix cell -- useful for analyses etc.
- taDataProc::Slice2D - take a 1 or 2d slice out of the first 2 dimensions of a matrix.
- taMath_float/double::mat_transpose - transpose a matrix
- Eliminated final several bugs with edit dialogs..
- Tree update code is no longer N^2. You can, for example, now safely do .data.SetSize(1000), or create very large projects with many objects, without triggering exponentially expensive tree updates.
- Fixed gui event loop calling within css, resulting in more than 2x speedup when running in gui mode.
- Fixed several redundant gui update chains that were causing many excessive gui updates.
emergent my.proj --helpnow shows generic startup arguments. It does not show you the startup arguments defined in a particular program's LeabraStartup.
- Dragging an object onto itself and choosing Set Object doesn't cause a crash
- Tabbing on program element control panels no longer stops on help and edit buttons, instead skipping directly through the chooser buttons.
- NetView -- seek (flashlight) button now working again
- plugin fixes -- working again (and more)
- parallel threading fixes -- could hang in some rare cases previously
- Methods that require a type (such as New) no longer require you to use TA_TypeName. You can just enter TypeName.
Ctrl+ito insert a ForLoop now inserts the loop variable.
- The Find chooser now shows you the full path to the object rather than the nesting level.
- There are now StructUpdate blocks placed around gui operations where you have highlighted multiple elements and delete them all at once, speeding this up greatly.
- Simply opening and closing a project will no longer result in a prompt asking you if you want to save the project.
- Learn rule drop down on network is now wider
- Some crash on close bugs fixed.
- Target links for ProgramCall in program library code now set correctly (by name, not just path).
- opening programs with startup programs and auto-building networks now all works properly -- Startup Program only runs if the -ni command line argument is passed (non-interactive)
- a message about _NSAutoreleaseNoPool() "just leaking" at startup is due to a Qt bug: http://bugreports.qt.nokia.com/browse/QTBUG-7385
- a message about Coin warning in cc_glglue_instance -- seems harmless and somewhat random
- drag-n-drop can be flakey when dragging from programing toolbar into program -- drag from bottom or top of screen.