Archive for the ‘CODE’ Category

Wednesday, November 7th, 2007

A new AS3 physics engine has been released from generalrelativity and adds itself to the block. It is in early alpha but this is looking pretty good so far. APE, the highly anticipated Motor Physics from polygonal labs and now FOAM, so many wonderful physics toys to build games with!

Current Features:

  • Rigid body simulation
    • Arbitrary convex polygons
    • Circles
    • Cubic Bezier curves
    • Lines
  • Constraints
    • Springs
    • Bungees
  • Easily swappable numerical integrators
    • RK4
    • Euler
    • Midpoint
  • Separation Axis Theorem based collision detection
  • Modular force generation

Source

Demos:

SVN:

  • http://foam-as3.googlecode.com/svn/trunk/

Here’s a list of classes in the repo:

AABR
AABRDetector
AbstractSolver
AxisProjection
BezierDetector
Bungee
Circle
CircleAxisProjection
CircleCircleDetector
CirclePolygonDetector
CollisionResolver
CollisionType
Contact
CubicBezierCurve
Euler
Foam
FOAM_AS3
Friction
GravitationalForceGenerator
Gravity
IBody
ICoarseCollisionDetector
ICollisionFactory
IFineCollisionDetector
IFoamRenderer
IForceGenerator
IODE
IODESolver
ISimulatable
KeyDrivenTorqueGenerator
MathUtil
MouseSpring
PerpetualFall
PhysicsEngine
PointPolygonDetector
PolygonPolygonDetector
Renderable
RenderingUtil
RigidBody
RigidBodyBungee
RigidBodySpring
RK4
RotationMatrix
SATCollisionFactory
ShapeUtil
SimpleFoamRenderer
SimpleForceGenerator
SimpleMap
SimpleOrbit
SimpleParticle
Simplification
Spring
Vector
ZeroGravityToyChest

game on! Thanks Drew!

Monday, November 5th, 2007

Flash and Silverlight allow developers to make amazing tools, they allow creative expression and they also are usually a bad user experience many times.

Lots of that is changing as more applications are made and frameworks like Flex and Silverlight progress. Much of the needed performance is now available for Flash/Flex in AS3 and the AVM2 virtual machine that runs it, making full applications much faster for all actions that might have been a drag in AS2 and vector based application’s of the past. Some great tools were made with this still that were usable like gModeler a flash based UML modeling tool but the performance boost will make these applications even more usable for mainstream.

Some great examples of user friendly apps where the flash or the silverlight element doesn’t blind the developer from usability. These applications might really have a market for general users of applications from advanced depending on feature set as long as they are usable.

buzzword (Flash/Flex/AS3)

Is a word processor that is really well done. This is made with Flex and everything from validation to the toolset is very usable and clean. I use Google Docs and haven’t looked back for about a year but this application is a nice change to web editors for documents at the current state. It included all the usual basic functionality and great new zoom, revision history and sharing tools that web office tools like word processors has come to expect. Be sure to try this one.

scrapblog (Flash/Flex/AS3)
scapblog is a bloggy/presentation that is a great template editor and the tools are broad and expected from users including great integration with the web for photos and video at major sites such as photobucket, flickr, etc.

Google SearchMash (Flex/Flash/AS3)

This is a Flex 2 (actionscript 3) application that is very fast and usable in vector.

Sample Textured 3d Vista demo(Silverlight 1.0)

This demo showcases the speed of Silverlight and a usable OS like interface that performs well. It showcases Silverlight but also has great usability in expected user actions and results.

tafiti (Silverlight 1.0 demo)

Tafiti is a search tool that uses SIlverlight and live search to represent search results in a rich way. They did a pretty good job with usability and especially considering the Silverlight 1.0 lack of good input controls. Little bit laggy.

The point is solution developers should use technology but most importantly make it functional and usable to what users expect. RIAs will succeed very well as long as you can select text, hit back buttons, deep linking, use menu systems, integrate services, have all the features of apps not in vector engines like Flash or Silverlight and to make it mainstream friendly they need to have a low bar of entry and just work. RIAs have an advantage right now as office apps move to the web and photo apps as well, many of these apps above would appeal to general computer users in addition to advanced users.

Thursday, October 25th, 2007

Flash is great, but accessibility can sometimes be a problem if it is not paid attention to. Direct linking, deep linking, back button support, these are very important to wire up in your applications. I am seeing many new RIAs, apps, sites, interactives still not do this and it is quite annoying.

The great thing about the web is that is gave users the ability to control the presentation and the context, from outside the presentation. By allowing users to use the back button and change urls in the address bar this was empowering. Empower your users and ad campaigns to get to different places of your application easily with deep linking, it is required for usability.

But this is hard right? Not really with great tools. What are you waiting for, SWFObject and SWFAddress make up THE platform right now for deep linking, embedding and back button support. These kits have been exhaustively tested and are very compact scripts to help you embed and then provide deep-linking, back button support and direct linking instantaneously almost.

Download SWFObject

Download SWFAddress

Both of these kits are well tested and provide instant small simple components of which to build complex systems on top of. SWFAddress builds on SWFObject tested embedding script and provides the tools you need to get deep linking running in your application in no time.

Note of caution, design implications (architecture design)

When you drive off the URL such as with direct and deep linking in Flash it does change your order of how you handle operations when you have to take into account the URL state. The first thing you have to do is when you receive an onChange event from SWFAddress that the URL has changed, you need to parse it and take action. However if you plan to deep link and provide usability throughout your flash site or app (even in the forms or multistep processes driven by URL) then you need to plan for this event and work this into your architecture for the url handling within the flash framework for your site.

A scenario might be:

  1. User using your flash app
  2. User clicks link or new section of your flash application
  3. INSTEAD of just animating the state in the flash application, you have to just update the section or URL (location.hash in javascript that provides the # name linking allowing the browser to stay put, or in this case SWFAddress.setValue((“/sectionname/page1″)),
  4. THEN the flash app or site is REACTIVE to the URL, reads in “sectionname/page1″ parses it and then animates to sectionname/page1.
  5. Or detect if the change came from the app or the URL directly and handle that differently in the onChange event with a subsystem.

Rather than just animating the app state or changing it, or showing that next photo on the button event, your button event would change the URL, then the flash monitoring the URL would push the onChange event. After that either animate in the next section or take appropriate action per the user requested action.

It isn’t like this for all areas or states of your application but you have to decide what is directly linkable, and when you want a state directly linkable then you have to wire it this way. Obvious choices are navigation items in your site, but they might also be specific cases like a multi-page form wizard that you want to link to step 3 directly, or a movieclip that someone can pass #3m2s to advance the movie by the url. There are many cases where you might want to provide deep linking into your flash application.

I know it sounds complicated? but it really isn’t, just a reversed way of thinking which we will highlight in the future with a tutorial and a fluid flash template. The SWFAddress site has great samples and examples, SWFAddress sets up the onChange handling in these samples and examples of how to do it in AS1, AS2 and AS3 so pick it up.

Download SWFObject

Download SWFAddress

Enable Deep Linking in Flash in 8 lines of code to start with SWFAddress:

From SWFAddress Documentation

1) Insert the SWFAddress script in your page directly after the SWFObject file.

<script type="text/javascript" src="swfobject/swfobject.js"></script>
<script type="text/javascript" src="swfaddress/swfaddress.js"></script>

2) Include or import one of the provided ActionScript classes. SWFAddress comes with versions for AS1, AS2 and AS3.3) Write your own navigation logic that will be executed when the address is changed.

SWFAddress.onChange = function()
{
    // Your code goes here.
}

3) Call the SWFAddress setter method from every button or action that requires deep linking.

this.onRelease = function() {
    SWFAddress.setValue('/portfolio/');
}

Check out the Asual blog (makers of SWFAddress) for more on good practices and bad practices with deep linking and more tips.Tips like:

Bad Practice: Address values naming using camelCase or other forms of custom convention

SWFAddress samples clearly define the best naming convention for deep links. Web addresses are case insensitive and the standard is lower case. For readability and Google SEO compatibility reasons the convention ‘my-deep-link’ is more appropriate than ‘myDeepLink’ or ‘My_deep_link’. The format http://domain.com/#/my-deep-link/?param=value is the only one fully compatible with the SWFAddress SEO rewriting.

Silverlight Deep Linking

This is also very simple in Silverlight to deep-link using javacript tools kits for Silverlight 1.0 which is javascript only, on location.hash change using a timer you could call an application method that might change the state or call certain transitions or move Canvases around, hide/show them, load content in, etc. Again, something you want to think about early on.

Other notes

SWFObject 2.0 beta5 is out and after 5 betas hopefully is nearing release

Pick up the code here for SWFObject 2.0

SWFObject 2 (script based) is the name again after a small switch and merge with UFO (standards based) to SWFFix but as Geoff Sterns pointed out, this seems to assume that something is broken.

SWFObject 2.0 is the new name again and let’s hope many more great tools are built on SWFObject 2.0 like SWFAddress which handles direct linking and back button support (using location.hash as most AJAX/RIA apps do to get deep linking and back button support).

Monday, October 22nd, 2007

MosesSupposes posts a flash animation kit, TweenBencher, for benchmarking speed performance for Flash Animation Kits in AS3.

He also is calling for standards in Flash Animation kits but this is good and bad. I agree a common syntax should be used and the base components should be agreed upon and integrated into Flash, but standards need to be extremely simple and performing systems. We have seen how packaged Tween bloats and I think the Go approach mentioned below is a good direction for that. Adobe seems more open to this though talking about including SWFObject and possibly helping other kits like Papervision3D with performance enhancements.

I think that a standard is already emerging out of the AS3 toolkits leading the way Tweener, TweenLite, AS3Easing , Animation Package, Animation System, Twease and possibly Go (as Fuse had many users) which is the replacement in AS3 for Fuse that is unreleased. I think the developer market will decide that. Also, the big draws to good kits are simplicity, size, performance and maybe most important, the community and author’s willingness to get out there as technology changes. Right now Fuse is a bit behind in the last aspect, I think people are already enjoying the smaller Tweener, TweenLite kits that have simple syntax and are extremely small. Go is going the right direction in making the pieces much smaller as I agree when you have to use two kits there is extra uneeded duplication.

MosesSupposes might release a Fuse 3 still (built from Go?) but that is still in an private beta stage ( for Go- not Fuse) fairly recently and seems a bit unsure as to whether it will be released or not per the blog.

To forewarn the fanbase, this is not a release announcement, no major progress to announce at this time.

I’ve been holding my cards close since I came up with these concepts around January of this year but it’s time I layed ‘em on the table.

Fuse 3 (if built) will be a combination Physics + Tweening Engine with 2D + 3D animation & sequencing capabilities.

The idea is that all details are registered with a central class (probably FuseCentral) that monitors and prevents overlap between various handlers during runtime.

From the description of Go it seems pretty flexible and useful with making your own syntax but sometimes flexibility there creates a partitioned platform as syntaxes emerge, but it can also change with the best simple syntax. I think making it pluggable is more important than custom syntax, actually I wish animation kits all used the same syntax. Right now that is the biggest hurdle getting people to switch. Also, syntax that still works in AS2 is a bit attractive such as Tweener and TweenLite so that work in AS2 and AS3 does not hinder maintenance.

I have an idea cooking, now in private beta, called Go. I will be posting shortly with some background information on what led me to this approach, but right away let me share the concept and architecture with you.

  • Go is a lightweight – around 4k – portable set of base classes for creating your own AS3 animation tools.
  • Go provides an agile, purposeful architecture that is highly extensible.
  • Go is not a does-it-all Kit (a la Fuse), but such a kit can be built using Go. If Fuse was a vending machine, this is more like a knife and a pan and a way to cook for yourself.
  • Go does not require special syntax to use. You can instead, design your own.
  • Go’s engine is efficient, capable of processing a jaw-dropping 10-20,000 individual animations on a typical system. (Disclaimer: it remains to be seen how Go will perform in a real-world setting.)
  • Go is designed to encourage developers to use tweening, physics and 3D together.
  • Go is inspired by the popular Cairngorm framework in its approach. That tiny set of classes does so much, truly useful without dictating your code.

At this point in the Animation Kit game for Flash, real tests matter, and performance will start to become the main focal point as well as simplicity from released and completed packages that have strong communities and user bases. I think the kits that have succeeded well and created platforms have been the most simple and compact (the evolution is this way) that can be used as base kits in other larger systems. Starting with simple core systems that perform is good systems design to help minimize complexity as long as the pieces together aren’t too complex to use for general coders in Actionscript. Looking forward to watching this space progress.

Tuesday, August 28th, 2007

Jens Krause beat me to the punch. I had brightness added to Tweener AS3 and was adding contrast and saturation as needed on projects but it has already been done!

WS-Blog has added in special properties for Tweener for brightness, contrast and saturation which was the only part missing from the public version of Tweener. I am not sure of the file size with this addition (Tweener is around 9kb) but it is probably the same size with this in as brightness in my updated copy was the same. Adding special properties in Tweener is quite simple and not enormous amounts of script needed and when compressed in the swf it is very small.

There are other kits like TweenerFilterLite, Animation Package etc that do these right now but you have to wait no longer for these functions in Tweener itself which has quickly become many flash developers favorite in AS3 and since it is compatible with AS2 in the same syntax it makes animation in flash and the learning curve for that from AS2 to AS3 non existent for motion.

Jens has a sample demo, script samples and source on his blog.

Thursday, August 23rd, 2007

Thibault Imbert from ByteArray released the first PDF Creator for AS3 / Flash 9 called AlivePDF.

The new BinarySocket and ByteArray handling adds essentially no limit to the imagination of what is implemented in AS3. Non programmers might not understand the immense power that brings to this language and platform in AS3. Essentially it allows creating and reading binary to manipulate any file type.

Thursday, August 23rd, 2007

Due to the suport of binary ByteArray and/or BinarySockets AS3 has been inspiring all kinds of things from PDF creators, to audio, to JPEG Encoders, to zip libraries, crypto libraries and many others. But you know that a language is inspiring or a platform is inspiring if it drives someone to make a Commodore 64 Emulator within it.

That is right, with AS3 as the tool Claus Wahlers has created FC64, which is an Open-Source Commodore 64 Emulator written in Actionscript 3 for Flash Player 9 licensed under the GPL version 2. Commodore 64 Emulator to read C64 emulator files/roms online and play them.

Summer Games anyone?

Wednesday, August 22nd, 2007

Well, one thing is for sure AS3 is inspiring programmers and Solve et Coagula made a Lisp interpreter for Flash9/AS3 as proof. Silverlight has some programming advantages over Flash due to the fact that many languages can be used for it and the DLR. But AS3 is a very fun language and inspires lots of great libraries through it’s simplicity. AS3 is based on the Javascript2 ECMA spec and it proves well that it might really take off and is worth your time to learn, you can make toys at least.

Try the AS3 Lisp intepreter 

Use the commands available here 

Some notes from the author:

AS3 Lisp Source

So I got asked a few times to post the source for the AS3 Lisp. I have and it’s here. Please keep in mind:

  • I wrote this a year and a half ago and didn’t know AS3 or Lisp very well
  • I never intended to release the source so I apologize if anyone is offended by any class names, variable names, function names or comments (such as a function call named getGUI.LoadInterface();)
  • I have since figured out a way better way to handle symbols in the system and it would really clean up a ton of stuff
  • Some one over at YCombinator News noticed that closures don’t seem to work and for that I apologize, if I were rewriting this (which I kinda am just in a different form) I would definitely make closures works since I now realize how important they are to Lisp
Tuesday, August 21st, 2007

Dojo Toolkit, a robust javascript library similar to my favorite js kit mootools, recently update and added some support for Silverlight effects. This is one really cool aspect of Silverlight in that it allows you to script/code it in many languages in the DLR (Dynamic Language Runtime) including ironpython, C#, IronRuby, javascript and others. Where as with Flash you only have Actionscript3 available.

Check out the Silverlight demos here:

butterfly.html 20-Aug-2007 18:19 33K
circles.html 20-Aug-2007 18:19 4.0K
clock.html 20-Aug-2007 18:19 7.3K
lion.html 20-Aug-2007 18:19 22K
tiger.html 20-Aug-2007 18:19 100K

DojoX

  • high quality implementations of previously experimental features: gfx (portable 2D drawing), data wires, offline, storage, cometd, etc.
  • dojox.gfx now includes Sliverlight support
  • many more features and improvements than there’s room for here.

Dijit

  • unified look and feel for all widgets
  • ambitious a11y and i18n features in every Dijit widget
  • a mature CSS-driven theme system with multiple, high-quality themes
  • huge improvements in system performance
  • data-bound widgets
  • Declarations for lightweight widget writing
  • a new page parser that allows instances of any class, not just widgets
  • no magic

Core

  • reduced API surface area (easier to remember and use)
  • dojo.query() always available, returns real arrays
  • from-scratch high-performance DnD system
  • Base (dojo.js) is 25K on the wire (gzipped)
  • dojo.data APIs finalized
  • new build system
  • new test harness for both CLI and browser use
  • dojo.behavior now marked stable and based on dojo.query
  • excellent animation APIs with Color animations in Base (always available)
  • all the features you’ve come to count on from Dojo (RPC, JSON-P, JSON, i18n, formatting utilities, etc.)

[ source ]

Thursday, August 2nd, 2007

Uploading on the internet is pretty arcane. Either you have to individually select each file with the browse file input, install some activex control or use java to select multiple files. It always ends up being a tedious action.

But Flash is the new champ in file upload for the web, as with video, Flash just makes it simple. The FileReferenceList class and its browse method pop up the multiple file select box where the user can hold CTRL or SHIFT to select multiple files and watch them all drop in rather than having to painstakingly select them one by one and not having to install an unknown activex or java applet.

Here’s script to upload multiple files (or get the multiple file select box).

var fileRefList:FileReferenceList = new FileReferenceList();
fileRefList.addEventListener(Event.SELECT, selectHandler);
fileRefList.browse();
 
function selectHandler(event:Event):void
{
    var request:URLRequest = new URLRequest(&quot;http://www.[yourdomain].com/upload/&quot;);
    var file:FileReference;
    var files:FileReferenceList = FileReferenceList(event.target);
    var selectedFileArray:Array = files.fileList;
    for (var i:uint = 0; i < selectedFileArray.length; i++)
    {
        file = FileReference(selectedFileArray[i]);
        file.addEventListener(Event.COMPLETE, completeHandler);
        try
        {
            file.upload(request);
        }
        catch (error:Error)
        {
            trace("Unable to upload files.");
        }
    }
}
function completeHandler(event:Event):void
{
    trace("uploaded";);
}

[source]

SWFUpload is based on this and is a nice AJAX based script that uses ExternalInterface in AS3 to pass the javascript presentation to the flash uploader.

The multiple file select, checking the file size before uploading and the ExternalInterface access for Actionscript to talk to Javascript makes Flash the best option for online file uploads for the web yet.