lunes, 30 de marzo de 2009

Programacion Modular - II Parte

Hace un tiempo escribi sobre los modulos en Flex y aun tengo algo que quisiera compartir y que aprendi hace poco.
Casi siempre cuando se crea un modulo, se extiende de la clase mx.modules.Module (si es en MXML) o de la clase ModuleBase si es en Actionscript.

Ahora, que hay en esa clase Module que la hace tan especial??

En si como tal, la clase no tiene nada especial mas que un metadata que vamos a revisar pronto. La clase Module extiende de "mx.core.LayoutContainer" que extiende a su vez de la clase "Container"; clase base de la mayoria de los componentes contenedores que utilizamos como Box (y sus decendientes: VBox, Hbox), Canvas, etc. Esto quiere decir que por si mismo el modulo nos permite agregarle componentes, como lo hariamos en otro componente contenedor.

Sigamos con el Module, si revisamos el codigo que viene el framework vemos lo siguiente en la clase:

package mx.modules
{

import mx.core.LayoutContainer;

[Frame(factoryClass="mx.core.FlexModuleFactory")]

Encontramos el metadata [Frame]

Sobre este metadata tenemos muy poca informacion, sin embargo es utilizada en otras clases del framework, como es el caso de la clase Application, que siempre utilizamos. Por ejemplo Application utiliza "mx.managers.SystemManager". Aunque siempre pensemos que la clase Application es la base de nuestra aplicacion, en realidad es SystemManager, es la primer clase que se ejecuta, se encarga de setear los eventos principales, cargar las librerias necesarias y pasar al siguiente frame, donde estaria nuestra aplicacion.

Las aplicaciones Flex tienen siempre 2 frames, el primero cuando se corre el preloader y se cargan los recursos necesarios de la aplicacion (RSL, etc) y el segundo donde se tiene la aplicacion en si. Este metadata nos permite especificar la creacion de un framework e indicarle cual clase debe ejecutarse en ese frame. En el caso del Module, le pedimos que ejecute la clase "mx.core.FlexModuleFactory", que si vamos a su codigo podemos entender lo siguiente:
  • Implementa la interfaz "IFlexModuleFactory" al igual que SystemManager. Esta interfaz define dos metodos: create() e info() que nos devuelve la informacion necesaria para cada uno de los modulos.
  • Extiende la clase "MovieClip" que es la unica que nos permite tener mas de un frame a la vez.
  • Una vez que los recursos necesarios por el modulo son cargados la clase se encargara de pasar al siguiente cuadro, con nuestra aplicacion. Esto cuando este todo cargado. Algunas veces usando External RSL el tiempo de carga se alarga y esto es porque no pasara hasta el siguiente cuadro hasta que este todo cargado.
Ahora.. aparte de teoria en general que mas nos provee esto?? Pues haciendo uso del metadata "Frame" y de la clase "FlexModuleFactory" podemos crear a partir de componentes contenedores nuestros modulos con comportamiento especifico. Por ejemplo modulos que se comporten como TitleWindows, como Panels, etc. o incluso como algun componente contenedor que definamos nosotros; solamente ocupamos agregar el metadata
[Frame(factoryClass="mx.core.FlexModuleFactory")]
Esto es super util cuando queremos imitar un mismo estilo entre varios modulos, se crea un componente base, con el comportamiento y estilos repetidos a traves de la aplicacion y posteriormente en lugar de crear modulos basados en "Module" se crean basados en "ComponenteCustomizado"

Espero pueda servir de algo y ampliar un poco el conocimiento en este tema que podemos agregar nuevas cosas a nuestras aplicaciones de manera elegante y optima. El metada "Frame" podria tambien permitir agregar nueva funcionalidad si extendemoslas clases correctas.

jueves, 19 de marzo de 2009

It's all about feedback

It's all about Feedback

Recently Subway set the price of all their foot long sandwiches to $5 (any sandwich) which are great news specially in this tough times..
Now, how is this "important" event related with Software Development? Well for me this a big opportunity that Subway is missing to get to know their clients better since they don't register what kind of sandwich you buy. They don't really have an idea of what kind of sandwich sells better and which is not doing so well...
Many companies are willing to pay for marketing studies, surveys, etc. to get an opinion from their customers, what they like / don't like about their products, what could be improved, etc. and some companies don't take advantage of opportunities like this one to get that feedback from their clients.
Again... how is this related with software development? I believe the developer's best tool for software development is not a programming language, an IDE or what ever new geek stuff is out in the web. For me is feedback from your client, since it lets you make sure that you are doing exactly what they hired you to do.
This feedback will let you know what is the client thinking, are we doing exactly what he needs/wants?, is this field in that form actually required? is the user experience good and pleasant? are we saving all the information we need or are we missing anything? Do you really need this astronaut architecture for your simple image gallery...?
It's not about showing stuff just for the sake of showing something. It's about showing new stuff, new functionality, changes, new concepts, idea. Is trying to get the client (and perhaps the final users of the software) into the development cycle, getting comments, opinions, suggestions (after all - and hopefully - they will have a better idea than you of what they want/need)
How to do this? Constant builds, demo servers, make the application available for demoing as much as possible, screenshots, mockups, wireframes, isolate functionality and presenting it, continuous testing/integration, etc
And all of this, because is the client the one that requested your services and is the client the one that knows what kind of sandwich he wants. And when you see that the BMT sells better than the Turkey Breast sandwich you will try to repeat and improve the recipe every time...


Todo es Feedback

Recientemente la cadena de restaurantes Subway, puso todos sus sandwiches de un pie de largo a $5 (cualquiera de ellos) osea mucho mas barato de lo normal. Esto logicamente alegro el bolsillo de muchos de nosotros y pusieron la cadena de restaurantes como uno de los favoritos para la gente que almuerza afuera.
Ahora, que tiene que ver Subway con software, que es de lo que trata este blog? Pues me parece que la cadena o los restaurantes mismos estan perdiendo una valiosa oportunidad de conocer cuales son los sandwiches favoritos de sus clientes (no se registra que tipo de sandwich se compra) y al hacer esto no pueden utilizar ese feedback para mejorarlos, ponerlos en oferta, anunciarlos mas, etc...
Muchas empresas estan dispuestas a pagar por encuestas y estudios para saber cuales son los gustos/disgustos de sus clientes con su firma sin embargo otras no aprovechan oportunidades como estas para escuchar a su cliente.
Ahora... de nuevo que tiene que ver esto con Software? Pues como dice el titulo, todo es Feedback. La mejor herramienta de un desarrollador es el feedback que pueda recibir durante el desarrollo de la aplicacion. Es el feedback del cliente el que le indica si se esta yendo o no por el camino correcto, si esa pantalla tiene los datos correctos, si la tabla tiene los campos que verdaderamente necesita, etc.
Pero como hacer esto? Pues permitiendo al cliente y usuarios ver e interactuar con la aplicacion lo mas frecuentemente posible, tener dialogos con ellos, exponer screenshots o mockups, isolar funcionalidades y presentarlas por aparte, cualquier forma de interaccion que nos permita asegurarnos que el cliente esta siendo satisfecho con lo que vamos haciendo.
No se trata de ensenar cosas todos los dias a todas las horas aunque no se avance nada o este inestable. Se trata de meter al cliente (y usuarios finales si es posible) lo mas dentro del ciclo de desarrollo para asegurarnos que hacemos lo que ellos quieren/ocupan.
Este feedback nos ayudara a saber cuales son los "sandwiches" favoritos de nuestros clientes y cuando sepas que el Italian BMT vende mejor que el sandwich de pechuga de pavo, vas a intentar repetir y mejorar la receta...

Binding / No Binding

Binding y no Binding...

Hace un tiempo escribi un post sobre binding y a continuacion muestro un ejemplo del uso del mismo.
Este ejercicio muestra la diferencia a la hora de actualizar objetos que usan binding y no.
Se tiene una clase que se llama Producto, con dos campos nombre y precio. Se cargan dentro de un ArrayCollection (que provee binding por si mismo) y se bindea el array collection a un datagrid. Cada vez que se selecciona un producto de la lista, se rellenan los campos de abajo con un objeto bindeado tambien. Al modificar dichos campos y apretar "Update", modificamos directamente el objeto seleccionado asi:

var prod:Product = products.getItemAt(grid.selectedIndex) as Product;
prod.name = namet.text;
prod.price = Number(price.text);

La aplicacion utilizando binding en la clase Product automaticamente nos refresca los campos modificados en el grid. La aplicacion que no utiliza binding al contrario se queda quieta... Si apretamos "reload" veremos los cambios aplicados.
Si en este mismo ejemplo, en lugar de actualizar el producto que esta dentro de la lista, crearamos una nueva instancia de un objeto Product y actualizaramos en el Array Collection con este nuevo objeto, el grid se modificaria automaticamente ya que el ArrayCollection provee binding por si mismo. Algo asi

var prod:Product = new Product();
prod.name = namet.text;
prod.price = Number(price.text);

products.setItemAt(prod, grid.selectedIndex);

El ejemplo trata de mostrar las diferencias entre ambos casos y la importancia de conocer cuando utilizar binding y cuando no.

Con Binding




Sin Binding





Codigo Aqui

martes, 10 de marzo de 2009

Degrafa Patterns






Update (2009-03-29): Download Code Here Example below



I've been trying to spend sometime learning Degrafa, a very nice declarative graphics framework for Flex.
I really like it and enjoy it. It is a very useful tool, specially because it lets you do in few lines very powerful graphic oriented tasks, like the one I just did below...
This pretty simple application allows you draw an icon in a grid, preview how the Icon will look in different sizes and then draw that icon into a canvas and display it as a pattern, that you can interact with since you are able to rotate it. All this using a some Bitmaps, BitmapData and the Surface, Rectangular and VectorFill objects from Degrafa with no hassle...
*Hopefully* I'll upload the code soon but this is a good example of how simple and powerful Degrafa is; for now feel free to try the final application...



Click here to run the application

BTW... did I mention Degrafa has a lot of examples and documentation on their site and that in fact it is an open source project?? :)

viernes, 6 de marzo de 2009

After Flex Camp Miami

Flex Camp was very good, I enjoyed looking that much people interested in Flash/Flex/related technologies here in Miami. Saw some nice projects and ideas. Specially loved the speeches from Christian Saylor about "The Art of Story Telling" - UX related - and Brian LeGros talking about continuous integration and some very good ideas for enterprise development in Flex. He sure has a lot of experience in development processes.
After the event was over I had a chance to talk with some of the guys of Universal Mind and with Laura Arguello and Nahuel Foranda who are the creators of Mate a very nice framework for flex, They are very nice guys and of course a Latin Orgullo :) Good work guys!!
Hope to see more stuff like this in Miami... a Flex User Group maybe??

martes, 3 de marzo de 2009

Flex Camp Miami

Este viernes 6 de Marzo es el Flex Camp aqui en Miami... en realidad estoy bastante emocionado por el evento, hay buenos expositores y algunos de los temas me parecen muy interesantes. El precio.. me parece simbolico, $30.00 con almuerzo incluido.
De las sesiones que mas me interesan estan:
In Search of AOP for AS3 -> Maxim Porges
Spring & BlazeDS Integration -> Jeremy Grelle
Continuous Integration and Flex -> Brian LeGros
Mate Flex Framework -> Laura Arguello

http://flexcampmiami.com/

--

This Friday is the Flex Camp here in Miami. I'm really looking forward to this event. Last year I had a chance to organize with my past company a Flex Camp in Costa Rica (presenting Mike Downey) and it was a great experience.
The price this time is almost symbolic: $30.00 including lunch...
I'm really excited about the following sessions:

In Search of AOP for AS3 -> Maxim Porges
Spring & BlazeDS Integration -> Jeremy Grelle
Continuous Integration and Flex -> Brian LeGros
Mate Flex Framework -> Laura Arguello

http://flexcampmiami.com/