Another reason to attend 360|Flex is the Flight Framework will be there. We’ll
be doing a workshop-style presentation Tuesday on getting started with Flight. Hope to see you there!
Another reason to attend 360|Flex is the Flight Framework will be there. We’ll
be doing a workshop-style presentation Tuesday on getting started with Flight. Hope to see you there!
Hooray for the Flex team! They’re coding to interfaces. I’ve been looking through the source of recent Flex 4 code and I have to say, I’m getting excited to use this stuff. Here are a few of the things I’ve found with just a few minutes of going through their code:
IDeferredContentOwner – The current version of Flex has something like this, but much more complex. This interface makes sense, and simply allows the deferred creation of its children when they are needed (such as a ViewStack in the current Flex). Just a couple of properties and it allows the component to figure out how to do it.
IViewport – This allows any component to have scrolling. What a step forward from the current monster called Container which we probably use more than any other component for layouts (e.g. Canvas, HBox, VBox).
IGraphicElement – This interface is pretty sweet. It allows 1) objects to be drawn on the same DisplayObject (e.g. several Rects could all be drawn on one Shape) and 2) it allows non-DisplayObjects to be used as children of Group by providing their own DisplayObject. I can think of some pretty fun things to do with that as far as custom components/functionality is concerned. :) Maybe I’ll join the OpenFlux initiative and talk more with Ryan Campbell and Ben Stucki about this one.
There’s some good things cooking in the Adobe kitchen. I’ll write about more as I discover it.
I created a service with a FireFox plugin a couple of years ago called MyStickies with Derek Andriesian. We got going on it and did quite a bit, but then we weren’t sure how to monetize it, so we left it alone. However, it still seems to be alive and kicking. I just got an email from Suzane Smith letting me know she included it in a list of 100 Firefox tips for research. You may notice that MyStickies is number 20, and the first one listed under the “Best Addons” section.
I’d like to move it over to Google App Engine and add note sharing sometime. Again, without monetization it can be hard to justify the time.
Some interesting MyStickies statistics:
Total users signed up: 59,741
Total notes placed across the web: 321,572
Users signed up in the last 30 days: 1,101
I’m sure there’s something I could do to give these users more features and be able to support the development costs as well. I’ll have to think about it.
Ha! I serialized a display object. Didn’t think it could be done, but with a little work it can be. See my previous post about overriding Transform and Matrix objects for a little more context. I’m jumping right in to how I did it.
So the main problem before was the Transform class requiring a parameter in its constructor. So I subclassed Transform and made that parameter optional. Turns out if you pass in null to the superclass you get an error too, so if no displayObject is passed in I use a Shape. (I figured it was one of the cheaper display objects to make, though between that and Bitmap I’m not sure.) No I need to subclass Sprite so that it uses my new Transform subclass.
MyTransform:
public class MyTransform extends Transform { public function MyTransform(displayObject:DisplayObject = null) { super(displayObject || new Shape()); } }
MySprite:
public class MySprite extends Sprite { private var _transform:MyTransform; public function MySprite() { super(); _transform = new MyTransform(this); } public override function get transform():Transform { return _transform; } public override function set transform(value:Transform):void { _transform = new MyTransform(this); _transform.colorTransform = value.colorTransform; _transform.matrix = value.matrix; } }
Proof that it works:
// register all the classes required to store a sprite registerClassAlias("MySprite", MySprite); registerClassAlias("MyTransform", MyTransform); registerClassAlias("MySoundTransform", SoundTransform); registerClassAlias("MyMatrix", MyMatrix); registerClassAlias("MyColorTransform", ColorTransform); var sprite:MySprite = new MySprite(); trace(sprite.transform is MyTransform); // true var ba:ByteArray = new ByteArray(); ba.writeObject(sprite); ba.position = 0; sprite = ba.readObject(); trace(sprite.transform is MyTransform); // true
Yeah!! It totally worked! And I could add that sprite to the display list and everything!
Now a couple of things to note: when serializing only read/write variables are stored. So Sprite’s and Shape’s graphic property is not stored. Neither is parent or any of the children because they aren’t referenced by any properties that can be written too. So if you draw on your shape or sprite with the drawing API it won’t be stored. Of course, this can be worked with if you have methods that draw on creation, or if you store some of Flash 10’s new IGraphicData objects publicly which can be drawn. You could also store all your sprite’s children in a public array that has to be set like the filter array for it to alter the display list. Then you could serialize your whole display tree. :) Might be fun.
Oh, and one more quickie that I double tested to make sure. I was told at one of our uFlash meetings that private properties are stored in serialized bytearrays. This didn’t seem consistent with what I understood, so I tested and retested and it is only public properties with getters and setters that are stored. Tyler said people sometimes had issues when they put [Bindable] at the top of a class and the complier made everything public (even privates) so that they would work with binding. But that’s a compiler issue with how it rewrites code. Private properties are not stored in bytearrays.
After purchasing Keynote Remote from the iTunes store a couple of months back I was disappointed that it only worked over WIFI (why do we have bluetooth in the iPhone again?). Most conferences have spotty WIFI at best.
I had an idea today though about using my computer’s built-in network creating ability. I set up a network from my laptop, connected to it from my iPhone, and had the Keynote Remote working in no time. No WIFI network. Yay! After I had figured it out I looked up on google to see if anyone else had done it and found they had. There’s a tutorial with screenshots here: http://www.italkmagazine.com/using-apple-keynote-remote-without-wifi/. I should have googled it earlier. :)
Today we had our first Layered
Content meeting. We used Adobe Connect but had a lot of troubles with the audio. So it wasn’t recorded and we won’t be using that again. Not for awhile. I went over some of the generals of Layered Content. It’s a content management system for websites, it will use AIR and PHP/MySQL, it will have online/offline modes, it won’t have complex template markup but use a descriptor file and ids/classes as the entry points for content, and other general coolness. We talked about the major pieces needing to be done, roles to be filled, and goals of the project. Below are the slides I used. We didn’t actually make any decisions, as per the project. I will continue work on the client and we will have another meeting (maybe IRC this time) in a few weeks. Until then I’ll see you on the Google Group.