May 2009 Archives
Functy is now using Trac as its project management solution. Having had it recommended by a friend and used it internally for some time, it offers some really good functionality and works well. The intention is to use it for all sorts of things like bug reports, documentation and general planning stuff. I’ve added a few appropriate links to the sidebar to make it easier to find all of these.
It’s great that Trac is one of SourceForge’s managed applications. Creating a Trac installation for the project was just a matter of clicking on a tick-box. Literally!
So far Functy has led a largely insular life, not venturing outside of the SourceForge community. And there’s been good reason for this. Functy is only young, and not yet very stable. And let’s face it: SourceForge provides pretty much everything a growing project like this could need. It’s important not to be too inward looking though, and eventually it’s going to have to venture further. So, to this end, there’s now also a Functy project area on Canonical’s Launchpad project development site. If this kind of thing interests you (and you want to help the project find its feet) then I suggest you check it out.
I’m a bit new to the open source development process, so it was quite exciting to receive a patch submitted by Vadi to improve the Functy user interface. One of the big advantages of open source development is supposed to be that anyone is in a position to improve the software: bugs get fixed, features get added and improvements get committed at a faster pace.
To my mind this is a great example. Although Ubuntu/Gnome is an environment I use a fair bit, I’m not as familiar with its UI conventions as many other people are. Nonetheless, user interface consistency is the sort of thing that can make or break a program (or platform) and has a real impact on a user’s experience. So it’s great to get a patch that improves Functy in just this way.
Compare and contrast the old version of the Functy function list window with the new version shown below. For a start, it has nice icons that improve the appearance. More importantly, as Vadi points out in the forums, it also fits with the standard style better, as you can see by taking a look at the interface for the Gnome Network Manager applet shown below right.
The Functy interface is still a bit non-standard (maybe because I dislike menus?), but for me this is a nice improvement to the program in an area where it takes experience that I don’t have. So while I’m sure there are problems for me ahead as I get to grips with open source development, so far the experience is proving positive!
Here’s a short video I made explaining how to use some of Functy’s functions. Functy’s all about functions after all. I can only apologise for the cringeworthy delivery; I really don’t have the voice for radio. If you think you can stand it, hit the play button below.
One thing I should probably mention is that this video was creates using Functy version 0.1. I’ve subsequently made some changes to how the modulus function works, so you won’t be able to use the functions in the demo to get the same effect in the svn version. You can still do it, you just need to enter things slightly different.
In case you’re interest, modulus was changed from being integer based to using floading point numbers. Ultimately I think this makes more sense.
Google recently announced the release of their O3D plugin and web API for creating 3D web graphics. As various commentators have pointed out this isn’t the first or only attempt to create a 3D web standard. I remember many years ago being excited by VRML and the prospect of adding 3D content to the Web. I was especially excited when at the time a colleague brought in a fantastic VRML rendition of the inside of Tutankhamun’s Tomb that he’d created, all running inside a browser. The Web could be so much more with 3D, and while I’ve not looked at the detail to say whether Google’s attempt is better than the others, it’s probably true that Google is more likely to push it hard enough to make it work. It’ll be a shame though if it lives only as a plugin, a kind of purgatory of integration inside the browser but removed from the rest of the page.
Along with the plugin Google also released some nice looking demos, and one in particular cought my eye: this vertex shader example. Here they apparently use a vertex shader to set the normal vertices of an animated 3D sine wave. It would be great to do something similar with Functy. At present the normals in Functy are generated using the Symbolic library in C, which can require quite some computing power for a complicated function using many vertices. If this could be handed over to the graphics card it could result in a real speedup and the possibility for much more accurate function plotting.
Unfortunately I don’t know enough about vertex shaders. But the nice thing about O3D is that all of the code is there in the Web page, so I’m hoping a bit of playing around with the examples, and some reading up about OpenGL could be a step in the right direction.
Time for another short video and this time it’s a bit more psychedelic.
The functions used here are just some simple sines and cosines as always. The x-axis has a cosine wave that moves up and down with respect to time. Cutting across it along the y-axis is another cosine wave just with a shorter cycle to create a corrugated look. Finally a few crazy pink stripes add to the psychedelia.
This was a really quick and easy function to create, and although I wouldn’t want to watch it for very long, I think the result is quite striking nonetheless. It reminds me of plasticine!
Many many moons ago, when I was still at school, one of the things that bugged me was the +/- button on my calculator. It just seemed redundant given that there was already a - button. Clearly I needed to get out more, but I digress. It wasn’t until I properly learned about groups, unary and binary operations, inverses and the like that the distinction became clearer, although the extra button still seemed unnecessary.
So, it’s a little ironic that I’ve spent this afternoon adding an extra ‘negative’ unary operation into the Symbolic library, even though there’s already a binary ’subtraction’ operator in there already. I bet I grow to regret this as things get more complicated, but it makes things easier for now.
The main benefit of this change is that previously when you wanted to use a negative number or expression you’d have to write something like “0-5″ or “0-cos(x)”. Now you just need to do “-5″ or “-cos(x)”. Much more civil. I did think about adding in the zero implicitly, so that “-a” got silently converted internally to “0-a“, but this just seemed ugly and was going to make things complex when it was converted back into a text string.
So, the good news is that now functions with negatives that look like they ought to work, but would previously have resulted in a confusing empty function, now actually work as they should. Hooray for unary negation!
Functy allows you to use simple animation by adding a time variable t to your function. Here’s a short video that shows a couple of overlapping sine/cosine based surfaces used to create a simple animation effect.