Posts Tagged “flex”

Following my previous post about MVC design philosophy and an AS3 MVC Framework that suit my needs and expectations, I’ve started using SomaCore in a relatively complicated AIR modular application, and I’m really enjoying it.

I made some small changes to the code and I thought it would be a good idea to provide you the sources. SomaCore was a missing tool in my actionscript work.

I’ve started to feel the power of the native Flash event system (even if criticized!) by being able to listen to commands independently of the commands itself (and what the command is doing), or being able to “preventDefault” any command, or to monitor very easily everything that is going on in the framework. The wires have been a good help to keep my code very clean without tons of classes, while keeping my models and views completely free of framework code.

I also found out some kind of hidden capabilities I didn’t think about while making it. One of them is an “easy module communication”, so easy that, you have absolutely nothing to do to enable it. When I say module, it could be another SomaCore instance, a loaded SWF, another SomaCore instance in a loaded SWF, and so on. But I’ll give more details later.

You can now find the (updated) SomaCore resources on the SomaCore Page.

Special thanks to Henry for his testing and feedback!

Feel free to use the sources and give me some feedback. I’ll try later to give more explanation on how to use SomaCore and the Wires, new demos and tutorials.

Romu

Vote in HexoSearch

Comments 1 Comment »

Hi Everyone,

This is not exactly a “Soma release”, but I would like to share with you my last work so we can talk about: A new AS3 MVC Framework with its own design philosophy.

Why another AS3 MVC Framework?

I’ve been working with different Frameworks in the last years, such as PureMVC, Cairngorm and Mate for the well-known. I’ve always knew that I would write my own “MVC design philosophy”, without taking big words, because I would have some needs that existing Frameworks wouldn’t completely fill.

That’s what happened. I needed a Flash lightweight framework, not DI, event based, working both for Flex or Pure AS3. The biggest inspirations have been PureMVC for the proxies and mediators, and Mate for their event system.

I’ll be starting an interesting AIR Modular app and I needed something that will easily allow me to have views and models free of Framework code, without creating tons of files or use any injection. I also wanted a Framework very flexible, so I can use it even for smaller project, being sure I’ll be effective in terms of development time.

Free the views and models

First problem, free the views and models of Framework code (loose-coupling). It seems there’s a wave of DI Framework but… I’ve never really been into DI Framework, because they tend to control the way you’re doing things. If you stick to it, it is fine, but I’ve always felt more freedom with framework like PureMVC. I might be wrong, it is just an opinion and not even entirely true as I didn’t felt that problem with Mate.

So, to solve this problem, I used the events Mate concept. A basic Flash Events that has a bubble property set to true can become Commands when they are mapped to a Command class. Those events can be intercepted, stopped and processed by the Framework (execute Commands). The great thing is, views and models are free of Framework code and can use Commands because they are just Flash native events.

Wires introduction

Second problem, was to “update” data or states in the views and models. PureMVC is using proxies and mediators and I like that approach. However, you end up by creating tons of files for the sake of loose-coupling pratice. So I’ve created something that I call “Wire”. Now software engineers or PureMVC adept might say that what I’m doing is wrong. I have no idea, I’m no computer scientist, I do what I feel and I’m sharing it with you.

Wire are classes that can contain Framework code and they will be the links between the models, the views, the Framework and… whatever you like. Wire can be proxies, they can be mediators, but they can also be both and handle more than one view or model.

Basically, they are as free as you want them to be. They can even be optional if you don’t care about good practice or loose-coupling programming. Wires have easy access to all the framework, models, commands and views. They can register create models, views, register commands or create other wires.

Update from comment:

So far I saw two ways to inject/update information into views without having framework code inside:

- Dependency Injection
- Buffer classes (such as Mediators and Proxies in PureMVC for the analogy, respectively for Views and Models). I mean “buffer” by classes that act as steward of other classes.

I’ve chosen the second way, and I’ve created a “buffer” class that I called a Wire.

Wires are completely free classes. I won’t tell you how to use them (because that’s up to you) but I can tell what you can do with them. Wires can be used to update views and models but they are not tight to anything. They are not even only tight to one tier. To create a wire class you extend Wire and implements IWire, and here are the roles they can take:

- a wire can act as steward of a view (such as Mediator in PureMVC)
- a wire can act as steward of a model (such as Proxies in PureMVC)
- a wire can manage both a view and a model
- a wire can manage multiple views and/or multiple models
- a wire can be considered as a subdivision of the framework and create its own views, create its own models and register its own commands. Much like you would create a specific package to hold a specific matter.

When I build something, I always try to keep a good level of freedom to handle problems how I like but most importantly, how they should be. If you like to have the framework telling you (or forcing you) how to build your application, fair enough but you won’t like it.

The wires are the free elements that will let you built your application the way you like or the way it is required to be. They can make your application rigid, segmented, flexible or centralized, depending of the role you are going to give them. They are so free that I believe remove (or lesser) what I call “Framework Fight”.

Let’s take an example, the Cafe TownSend below.

There are 2 wires: the LoginWire and the Employee Wire. They both register their own commands to control their views and models.

The Login Wire only handles a Login View.

The EmployeeWire handles 2 views: a list of employees and an employee details. But also 1 model (the employees data), all of them only related to employees matter.

SomaCore

I temporarily named this framework SomaCore and it has nothing to do with the Framework I released on this blog (Soma). However, this framework might become the core of what will be Soma v3.

I post this code hoping to get your feedback or point of view of what might be great or wrong in this framework.

Here is a diagram:

SomaCore MVC Diagram


Click here to download a zip file containing the Framework sources code (classes and SWC).

And here are some demos. I made a Flex Cafe TownSend demo and a pure AS3 demo.

SomaCore Flex Cafe TownSend SomaCore Flash AS3 Demo
View Demo
View Source
Download Source
View Demo
View Source
Download Source

This is a very early state, this Framework has not been used yet in a real project beside the demos above. Have a look and please comment what you feel is good or wrong in the core concept.

Romu

Vote in HexoSearch

Comments 10 Comments »

This is not Flash related but I had to post something about as I’m really annoyed. I’m now working all the time on Mac, I believe I couldn’t bear anymore spywares and other Windows annoyances.

Anyway, I’m almost fine on the Mac but there’s one thing I can’t understand is that they didn’t implement a “merge folders” capability when you copy and paste something. On a Mac, if you copy a source folder containing folder and files to paste it to a target folder, if you choose replace, the content of the folders will disappear and be replaced by the source. meaning if you have files on the folder target that doesn’t exist in the source folder, they will just disappear. On Windows, it asks you if you want to overwrite or not because anyway, it is always going to merge.

I could use the Unix command ditto and the terminal, but wow, how is it possible something as simple as that is not implemented? People from windows will know what I’m talking about. Actually, there’s a lot people complaining and tons of app that does the job.

So I tried to find a simple and quick app, which actually wasn’t really easy as they all want to merge the content of the files. I don’t want to do that at all, that’s more a code matter to merge the content of a file. I found 2 or 3 that does the job but kind of heavy for such a common task, I want to do that as quickly as I could do on windows.

The best I found is: Merge Folders

You select the source, the target, if you want to overwrite and that’s it. Perfect? Almost…

My problem was mostly related to SVN, copy file from local copy to other local copy, or whatever. This app would have been perfect if I could choose “include hidden files, yes or not”.

So I need first to export a package not to have the hidden folders .svn and then merge my exported copy to a repo or local copy. That’s ok but again, on a Mac, things are not that easy when it comes to development, maybe I passed too much time on Windows? I’m sorry but Windows and tortoiseSVN is kind of wonderful compare to a what I get on the Mac. So as I can’t make an export with the “SVN-finder-integrated” (scplugin), I use mostly SynchroSVN, great but still a lot slower than on Windows. When you have some delicate actions to make like merging branches, tortoiseSVN on Windows is really great.

I’m sure some of you have the same problem, what are you solutions? What do you use? Is there something simple and quick that I missed?

Romu

Vote in HexoSearch

Comments No Comments »

Flash Switcher Firefox extension allows you to easily switch from one flash player version to another. It works great but unfortunately only after some tweaking. Flash Switcher still works with the last Firefox version, at the time I’m talking (Firefox 3.5).

There are already some posts about Vista and Flash Switcher, to solve some bugs that are related to folders permissions. I had some trouble to find the folders on Mac and as I still see people asking how to make it work, I’m going to tell you the paths and what to do on Vista and Mac.

First you can install Flash Switcher there:
http://www.sephiroth.it/firefox/flash_switcher/

Restart Firefox.

You need to change the permissions on some folders before you start using it. On the following folders, right click + get info on Mac and right click + properties on windows, and give full access. Your paths will be different, those ones contains my user name and generated Firefox profile string, but you’ll find out.

Vista

Plugin path:
C:\Windows\System32\Macromed

Firefox Plugin path:
C:\Users\romuald\AppData\Roaming\Mozilla\Firefox\Profiles\squnf11y.default\extensions\flash_switcher@sephiroth.it\plugins\win

Mac

Plugin path:
/Library/Internet Plug-Ins

Firefox Plugin path:
/Users/romuald/Library/Application Support/Firefox/Profiles/9ly9womf.default/extensions/flash_switcher@sephiroth.it/plugins/mac

Once done, click on the Flash Switcher icon in the status bar. Save your current Flash Player (or it will be removed the first time you use it, I don’t know why), by selecting it and click on “save as”.

Now it should just work, at least that’s what I’ve done this morning and it is working for me. You should get a javascript alert saying “ok, the new plugin has been installed”, or something similar. And if you still get an error, it is probably still the paths permissions, try to re-apply the permissions (I had to do it twice, don’t ask me why).

To get more players in the list, just uninstall and install other versions, or you can get the plugins files straight from there:

Archive Flash Players

Hope it helps.

Vote in HexoSearch

Comments 4 Comments »

I found a nice actionscript search engine:

http://www.hexosearch.com/

It looks like a beta for now, but I like the concept. Basically you can register your blog so the search engine will easily find actionscript talks. You can even choose AS2, AS3 or Flex.

Worth trying :)

By the way, if some of you want a bit more (direct) news about my work, and probably Soma, I’m trying to tweet a bit!

http://twitter.com/soundstep

Vote in HexoSearch

Comments 1 Comment »