Modellus 5 beta 1 release

(Update: the new Modellus site URL is http://modellus.pt)

Modellus 5 beta1 is available for download here. This version should be extremely usable.

Unpack files and run Modellus5.jar through the JVM (Java 1.6 update 20 is the minimum requirement). This is the PC version, I suspect some things won’t work on Mac and Linux although I haven’t tried it yet.

Modellus 5 is free. It is primarily used to aid teaching. By using only a mathematical language (no need to learn any new language) students and teachers are able to create models which then they can interact/view using animations/graphs/tables, etc.

From a technical standpoint, this version was created using javafx and swing. The animation window (background) was done in javafx while all the rest is Swing.

I’ll be posting more information about this version, shortly.

There are some examples you can try: here and here these are Modellus 4 examples though, they don’t use version 5 new features.

Let me know of any bugs you encounter or feature requests.

Event handling proposal

JavaFX brings a new event handling approach, making an improvement over the Java use of the too verbose observer pattern.

Normally in javafx you’ll use binding to listen to state changes and update other objects as appropriate. However this approach is not adequate when you want to listen to something that doesn’t imply a state change, something like say pressing a button (not a two state button, that would involve state).

With this post I wanted to share an idea I had about how javafx could handle those cases not covered by binding.

In JavaFX functions are variables, you can have a sequence of functions with this:

var buttonPressedListeners: function(:MouseEvent)[];

Let’s say you have a button and every time the button is pressed you iterate through the sequence above and call the listener functions. If you want to expose this to any interested listener you can declare the above sequence public. Now lets say a listener wants to register for listening, he can do so by inserting a function on the listener sequence:

insert fooListener into button.buttonPressedListeners;

If he wants to unregister this simple call would do it:

delete fooListener from button.buttonPressedListeners;

There is however a problem with this, you can insert the same listener two times into the sequence. We could iterate through the sequence list and check for duplicates but that would imply writing the same boiler plate code over and over again. So I would propose a language feature to enable declaring a sequence which doesn’t allow repeating values. Something like:

var buttonPressedListeners:  function(:MouseEvent) unique [];

Every time you want to call the functions on the sequence you’ll have to write down a for each statement which iterates through the sequence of functions, to fix this I would propose a second language feature: the ability to call all the functions in a function sequence with a single method call.

And that’s my event handling proposal. 🙂

Modellus new animated characters

(Update: Modellus new site is http://modellus.pt)

Thanks to Feel Fine who has given us all their assets from their funny game Sweet Dreams (available on the IPhone) for free, we were able to add a bit more fun for kids learning science subjects through the use of Modellus.

On a technical aspect I don’t think there is much to say because I found things rather easy, the hardest part was retouching the images to fit nicely on Modellus format.
For every animation i use something like this Timeline :

var animationX:Timeline = Timeline {
 repeatCount: Timeline.INDEFINITE
 keyFrames: [
  KeyFrame {
   time: 0s
  },
  KeyFrame {
   time: 1s / fpsPerSecond
   action: function()
   {
     currentFrameIndex = (currentFrameIndex + 1) mod (sizeof frames); // change frame index
     currentImage = frames[currentFrameIndex]; // change currentImage which is bound to an ImageView image property
     if (currentSelectedFramesIndex == (sizeof selectedFrames) - 1)
     { // This is the final frame. I'm just going to stop the animation  animationX.stop(); } } } ] };

You can see the new characters in action on the following video – the animations are actually much smoother than in the video (don’t know why):

If you’re a designer and would like to contribute some of your work: icons, animations, etc to Modellus please contact me (we don’t have the necessary time to create them) – mail is on the about page. Modellus is a free tool, used all around the globe, which aims to aid teaching of science subjects. Please help us shape the future of teaching making it more fun and less abstract. Your work will be credited and will obviously still remain your property.

JavaFX 1.3 – What to expect..

Updated (16 April)

To better plan my projects I’ve always been nosing around trying to figure out what to expect on future JavaFX releases.

After someone on a thread asked me to tell him what I knew about what is to come, I figured that since the list is a bit extensive and other people might be interested in knowing I’d do a post about it on my blog.

So here is what I know so far:

  • New graphics stack called Prism, no longer dependent on awt/swing. Expect better performance.

(Update: You’re probably able to choose whether or not you want to use Prism )

  • All bindings will be lazy (not sure how will that cope up with the rest)

(Update:The runtime will figure out what type of bind to use and always try to choose lazy over normal bind to get better performance. The scene graph has been changed to better accommodate lazy binding. On replace triggers will use normal binding by default.)

3D:

  • 3D Space with 3d transforms putting 2d objects on a 3d space.
  • Perspective and Parallel camera – probably the same feature that exists in Java3D
  • Bounds now is on 3D

A little bit disappointed that there will be no 3d shapes, I needed that on my app. But than again there aren’t probably many people needing this.

(Updade: Just reminded that 3d shapes are done with transformed 2d shapes like triangles or squares, duuuuhhhhh! So you should probably be able to create 3D shapes yourself using the existing 2d shapes.)

Controls:

  • Multi-line TextBox (TextBox is a text input field)
  • Better skinning API. Added Regions
  • Caspian Skin
  • Password Box control
  • Separator control
  • ChoiceBox control. (not sure what this is, if someone knows please post a comment) Its a non-editable ComboBox
  • Spacer Control (for layout purposes)
  • Custom cell support on Lists
  • Menus
  • ToolBar
  • Tree
  • CSS support for charts

The biggest miss here is Table. Of course you can always rely on Swing Table

Graphics:

  • Support for custom cursors
  • Filling shapes with a texture


That’s all I know, also expect bug fixes and performance tuning here and there. I’m guessing It won’t take long for 1.3 to be released.

I think this release will give the so much needed boost to JavaFX: except for the table almost all standard controls, better performance, 3d capabilities and some other nice goodies.

Edit: Don’t forget that this is only what I suppose will be available on 1.3. These are not facts and somethings are probably wrong or not 100% right