Tuesday, June 30, 2009

Matrex 1.3.6

A few days ago the Eclipse Foundation published version 3.5 of SWT.
I was waiting for this because it means that Mac users can finally use Matrex with bot Java 5 and Java 6, and with better graphics, because the new version is based on Cocoa.
So, as soon as this new version has become available, I have published the new version of Matrex, 1.3.6.
Together with the new SWT, 1.3.6 comes the following changes:
  • There was still some incompatibilities with Java 5, so it was not possible to run Matrex 1.3.5 with Java 5. This problem was hitting mainly the Mac users, that could not use Java 6 because SWT was not working with it. Now I made sure this problem will not show up again.
  • From Matrex 1.3.5 maximizing the main window means maximizing only vertically, leaving the horizontal size of the window the same. In Windows it could happen that maximizing the main window it disappeared from the screen. In Linux from time to time the main window was becoming insensible to the mouse after the maximization. These problems got fixed.
  • Matrex is able now to read script templates from the script classpath defined in the Files Locations dialog. In this way also the script languages plugins (groovy, jruby...) can be installed outside the Matrex directory.
  • Minor bug fixing.
Now the versions are the follwing:

The choice between 32 and 64 bits depends by the Java runtime interpreter used.

4 comments:

Anonymous said...

I really like this program and your approach (program seems to fill a gap in between Matlab and Excel). Everything is very well documented and works seemingly without bugs.

Few questions:

- Is it also possible to enter multi-dimensional arrays (could probably be implemented very easy given the generic approach)

- It's not exactly clear to me when calculations happen and what triggers it. Couldn't you make an option where the user chooses when a calculation will happen?

- About the data (matrices). Why is it necessary to group them in directories. And wouldn't it be easier to make the definition of a matrix which is a function output optional (user can change name later if necessary).

I will definately give the program another try shortly.

Thanks.

Andrea Ferrandi said...

Thanks for the competent feedback.
About the questions:

1) I thought about the multi-dimensional approach when the first ideas about this project was . In theory it makes a lot of sense: in some way there is no limit to what you can do with that approach. The problems are practical:
- there are very few functions that need 2-dimensional matrices, most of them need only 1-dimensional matrices (vectors). I can only imagine 3-dimensional matrices in the mathematical calculus.
- it makes more difficult to write the functions code. And that must be easy so that everyone can write functions and does not give up after he tries.
- performance. In general the matrices are vectors. To extract a vector from a generic multi-dimensional matrix can take a good part of time used to calculate a function (e.g. 'plus').
- GUI. You need a multi-dimensional editor to edit matrices. Again, this would discourage people in using the application. Same thing for matrix viewers, charts...

2) A matrix changes its content, because someone saved it or because the function that produces it is recalculated.
All the functions that have this matrix as parameter are recalculated. The matrices output of these functions change their content, so the functions that have them as parameter are recalculated... and so on.
In other words matrices and functions (and also presentations, charts...) are part of a big domino game. When one falls (a matrix changes its content) the domino cards that are attached to it fall, and so on.
If you think about it, it is very similar to what happens in Excel when a cell changes its content.
More in http://matrex.sourceforge.net/doc/structure.pdf

3) Well, matrices in a project are not so many, if you compare them to the cells of a spreadsheet.
So it makes sense to name them, so they can easily be found (same thing also for functions, presentations, charts...).
Once they are named, it is good to group them in directories, or packages so it is easy to find them, like the files in directories.
Also in this way the structure of the project becomes understandable by people that see it for the first time.

4) The definition of output matrices is not required if you use the expression parser ( http://matrex.sourceforge.net/help/ExpressionParser.html )

Anonymous said...

Thanks for the answers. Makes a lot of sense.

Probably 2D is fine in Matrex because obviously there are no practical limits to a matrix size (I tried a 5000 x 5000 element matrix). In that case (not multidimensional) there must be some way to split a matrix in parts, and concatenate matrixes. But probably there are functions for this (I will try to find them).

The point on calculations I asked because Matrex seems to (re)calculate at the point of starting a project. When you have very big matrixes in the project it takes some time, but normally you probably wouldn't work with such big matrixes as I tried.

2 small issues I have:

- Matrex seems to forget the Project settings (threading, etc.) after a restart;

- I installed both 32- and 64-bit versions of Java3D (I work with Windows XP x64) but I still get the message "Please install Java3D to use 3D graphs".

I'm going to try the Expressions Parser; from the description it looks very promising!

Andrea Ferrandi said...

- when the project is loaded all functions are recalculated. It seems the logical thing to do, to have a correct initial status, since the calculated matrices are not saved. But I will think about it. A lazy initialization could be possible.

- the problem of the project settings is actually a bug. If you run the application from the command line you will see that it gives an exception when it tries to overwrite the project.mxp file.
I will add it as bug and fix it in the next version. By now you can manually update the project.mxp file, in the project's directory. The project's properties are saved as the xml attributes 'useThreads' and 'isDebug'.

- Stupid question. Java3D needs to be installed under the JRE installation, under the lib/ext directory. You did that?