Popcorn 0.7 AND Butter: Redefined!

After many hours of hard work, Popcorn 0.7 is finally ready!  This is one of the largest released yet, with 66 tickets included in the release.  We have several new features and a couple of new plug-ins for you to enjoy.

One such feature is the  Event Effects framework.  Event Effects allow the developer to "compose" effects that leverage the power of CSS and HTML. These effect can then be attached to instances of plug-ins, opening up the possibilities for popcorn to a whole new level.  For details about how to use Popcorn's Event Effects framework, check out out Scott Downe's post about them on his blog.

Another new feature included in 0.7 is Plug-in defaults.  Defaults allow a developer to cut down development time using popcorn.  For example, you can tell popcorn to apply a default target to each footnote on the page that does not explicitly define one. This means saving many lines of code if you have many footnotes that have the same target.

The release also includes many bug fixes and enhancements to plug-ins and players. All of these can be found in our changelog.

Since the release on Monday I have spend the some of my time working on a fringe bug in the processing plug-in for Popcorn.  This particular bug would cause calls to a Processing instances draw method to happen before it even existed.  It took a lot of digging but eventually the culprit was found to be in the pjs directive at the top of one of the sketches.  Turns out that Processing will create an instance, but leave all of its instance methods undefined until the image is fully loaded.  If the start of the plug-in just so happens to fall within this window, the plug-in will try to loop the sketch and fail.  There is currently no way to determine if the instance is ready to loop without explicitly checking if one (or more) of its methods is defined.  Fortunately, I work a cubicle away from one of the Processing.js contributors, and word is that event hooks are in the works... so hopefully processing will begin to throw events when it's finished its directives...

I've also been involved in discussions about the development of a completely new Butter.  We are going to strip it down and separate it into clearly defined "modules" that encapsulate specific functionalities.  This will not only make maintenance easier, but will allow us to build automated tests against the functionalities we program.  This will also make it possible to create completely unique butter implementations that look completely different from one another but function entirely the same behind the scenes.

Work is just beginning on this re-imagining of Butter, and I'm really excited to see just where we can take it in the next month and a half!