<?xml version="1.0" encoding="UTF-8"?>
<?xml-stylesheet type="text/xsl" media="screen" href="/~d/styles/atom10full.xsl"?><?xml-stylesheet type="text/css" media="screen" href="http://feeds.feedburner.com/~d/styles/itemcontent.css"?><feed xmlns="http://www.w3.org/2005/Atom" xmlns:openSearch="http://a9.com/-/spec/opensearch/1.1/" xmlns:georss="http://www.georss.org/georss" xmlns:gd="http://schemas.google.com/g/2005" xmlns:feedburner="http://rssnamespace.org/feedburner/ext/1.0" gd:etag="W/&quot;Ck4CRnY-cSp7ImA9WxNUGUg.&quot;"><id>tag:blogger.com,1999:blog-8994512745672600714</id><updated>2009-11-11T06:49:27.859-08:00</updated><title>Venza al Cocodrilo</title><subtitle type="html">Blog de Ivan Ramirez: Persona y Programador en Flex</subtitle><link rel="http://schemas.google.com/g/2005#feed" type="application/atom+xml" href="http://venzaalcocodrilo.blogspot.com/feeds/posts/default" /><link rel="alternate" type="text/html" href="http://venzaalcocodrilo.blogspot.com/" /><link rel="hub" href="http://pubsubhubbub.appspot.com/" /><link rel="next" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default?start-index=26&amp;max-results=25&amp;redirect=false&amp;v=2" /><author><name>Ivan</name><uri>http://www.blogger.com/profile/18204902014543207004</uri><email>noreply@blogger.com</email></author><generator version="7.00" uri="http://www.blogger.com">Blogger</generator><openSearch:totalResults>45</openSearch:totalResults><openSearch:startIndex>1</openSearch:startIndex><openSearch:itemsPerPage>25</openSearch:itemsPerPage><link rel="self" href="http://feeds.feedburner.com/VenzaAlCocodrilo" type="application/atom+xml" /><feedburner:emailServiceId>VenzaAlCocodrilo</feedburner:emailServiceId><feedburner:feedburnerHostname>http://feedburner.google.com</feedburner:feedburnerHostname><atom10:link xmlns:atom10="http://www.w3.org/2005/Atom" rel="hub" href="http://pubsubhubbub.appspot.com" /><entry gd:etag="W/&quot;C0ABSXw5eCp7ImA9WxNUF0k.&quot;"><id>tag:blogger.com,1999:blog-8994512745672600714.post-3123378195065480818</id><published>2009-11-08T18:32:00.000-08:00</published><updated>2009-11-08T20:42:38.220-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-11-08T20:42:38.220-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Tamarin" /><category scheme="http://www.blogger.com/atom/ns#" term="Mozilla" /><category scheme="http://www.blogger.com/atom/ns#" term="Flash Player" /><category scheme="http://www.blogger.com/atom/ns#" term="Actionscript3" /><category scheme="http://www.blogger.com/atom/ns#" term="Eval" /><category scheme="http://www.blogger.com/atom/ns#" term="AS3" /><category scheme="http://www.blogger.com/atom/ns#" term="Flex" /><title>Eval function en Actionscript</title><content type="html">Recordando mis tiempos de programador en Java, entre recientemente al site de una herramienta llamada &lt;a href="http://www.beanshell.org/"&gt;Bean Shell&lt;/a&gt; que use hace varios a~nos... La herramienta sencillamente era un interprete de codigo en Java (y en otros lenguajes pues interpretaba Python y combinacion entre Python y Java), en tiempo de ejecucion, es decir sin tener que compilar un archivo .class y generar el bytecode para que sea ejecutado por el virtual machine...&lt;br /&gt;Nosotros utilizabamos de esta funcionalidad para una herramienta administrativa, donde ejecutabamos scripts en un  pseudolenguaje para consultar multiples y distintos servidores de informacion. Esto nos permitia tener multiples consultas dinamicas sin tener que recompilar la aplicacion principal o que los usuarios finales tuvieran que aprender a programar en algun lenguaje extra~no para ellos o usar SQL o algo por el estilo.&lt;br /&gt;Viendo esto, me intereso encontrar algo parecido en Flash/Flex. La funcion &lt;a href="http://en.wikipedia.org/wiki/Eval"&gt;Eval&lt;/a&gt; que esta disponible en multiples lenguajes, incluyendo &lt;a href="http://www.w3schools.com/jsref/jsref_eval.asp"&gt;Javascript&lt;/a&gt;, tiene una funcionalidad algo  parecida, nos recibe de parametro una cadena de caracteres donde se tiene codigo que sera interpretado (y ejecutado) por esa funcion. En Flash era comun encontrar esta funcion (o algo parecido) en ActionScript 2 pero fue eliminada en la version 3.&lt;br /&gt;Sin embargo haciendo uso del trabajo hecho en &lt;a href="http://www.mozilla.org/projects/tamarin/"&gt;Tamarin Project&lt;/a&gt; de Mozilla, donde se tuvo acceso a parte del codigo del &lt;a href="www.adobe.com/devnet/actionscript/articles/avm2overview.pdf"&gt;AVM2&lt;/a&gt; osea el nuevo Action Virtual Machine que corre en el Flash Player 9.x y mas versiones mas recientes. Tamarin nos permite ver como funciona internamente el virtual machine, como se ejecuta el codigo, como  se procesa, etc. Es algo bastante interesante y avanzado a la vez y permitiria la optimizacion de aplicaciones en la plataforma flash, incluso hay &lt;a href="http://loom.ninjitsoft.com/"&gt;proyectos&lt;/a&gt; donde se promueve el uso de &lt;a href="http://en.wikipedia.org/wiki/Aspect-oriented_programming"&gt;AOP&lt;/a&gt; o aplicaciones que convierten codigo de C# o Java a codigo ejecutable por el flash player... todo con la informacion que provee este proyecto; pero bueno, esto seran tema de otros posts.&lt;br /&gt;Como decia anteriormente - antes de desviarme diciendo cuan impresionante es el proyecto - haciendo uso  del proyecto Tamarin, "&lt;a href="http://metal.hurlant.com/blog/"&gt;Metal Hurlant&lt;/a&gt;" (creador de multiples librerias open source como &lt;a href="http://code.google.com/p/as3crypto/"&gt;AS3Cripto&lt;/a&gt;) creo una &lt;a href="http://eval.hurlant.com/"&gt;libreria&lt;/a&gt; que se comporta como la funcion Eval, interpretando codigo de Actionscript en tiempo  de ejecucion. Pueden acceder a un demo desde &lt;a href="http://eval.hurlant.com/demo/"&gt;aqui&lt;/a&gt;.&lt;br /&gt;Solo puedo decir que este es un trabajo brillante y que tomando las medidas de seguridad pertinentes (para que no se inyecte codigo maligno en tiempo de ejecucion entre otras) y no abusando de la misma por cuestiones de rendimiento (este proceso demanda algo  de recursos) puede llegar a ser de mucha utilidad. La creacion de aplicaciones mas dinamicas, mas inteligentes en tiempo de ejecucion, etc. nos permitira ofrecer mejores aplicaciones a nuestros usuarios y a la vez creando aplicaciones menos complejas y flexibles... nuevamente sin abusar de esto...&lt;br /&gt;Disfruten...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8994512745672600714-3123378195065480818?l=venzaalcocodrilo.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VenzaAlCocodrilo/~4/ZNCE_wnbzwo" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://venzaalcocodrilo.blogspot.com/feeds/3123378195065480818/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8994512745672600714&amp;postID=3123378195065480818" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/3123378195065480818?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/3123378195065480818?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VenzaAlCocodrilo/~3/ZNCE_wnbzwo/eval-function-en-actionscript.html" title="Eval function en Actionscript" /><author><name>Ivan</name><uri>http://www.blogger.com/profile/18204902014543207004</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08204656968868651884" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://venzaalcocodrilo.blogspot.com/2009/11/eval-function-en-actionscript.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkENRXk6fip7ImA9WxNVGEo.&quot;"><id>tag:blogger.com,1999:blog-8994512745672600714.post-3670025158444018056</id><published>2009-10-29T16:10:00.000-07:00</published><updated>2009-10-29T19:44:54.716-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-10-29T19:44:54.716-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Costa Rica" /><category scheme="http://www.blogger.com/atom/ns#" term="Trabajo" /><category scheme="http://www.blogger.com/atom/ns#" term="Flex" /><category scheme="http://www.blogger.com/atom/ns#" term="Oferta Empleo" /><category scheme="http://www.blogger.com/atom/ns#" term="TrabajoCR" /><title>Oferta de Empleo - Desarrolladores Flex en Costa Rica</title><content type="html">Si hay algun interesado en conseguir empleo como Flex Developer en Costa Rica, la empresa &lt;a href="http://rivetlogic.com"&gt;Rivet Logic&lt;/a&gt; esta buscando 3 desarrolladores en Flex ojala con experiencia en el uso de frameworks como Mate y PureMVC y algo de BlazeDS&lt;br /&gt;&lt;br /&gt;Mas informacion con Manuel Calvo, en &lt;a href="mailto:mcalvo@rivetlogic.com"&gt;mcalvo@rivetlogic.com&lt;/a&gt; y &lt;a href="http://www.elempleo.co.cr/clientes/detalle_oportunidad.asp?ofe=51212"&gt;aqui.&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;* Yo solo paso el mensaje :), no soy responsable del mismo o parte de la empresa.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8994512745672600714-3670025158444018056?l=venzaalcocodrilo.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VenzaAlCocodrilo/~4/8vTwmFqneZE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://venzaalcocodrilo.blogspot.com/feeds/3670025158444018056/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8994512745672600714&amp;postID=3670025158444018056" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/3670025158444018056?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/3670025158444018056?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VenzaAlCocodrilo/~3/8vTwmFqneZE/oferta-de-empleo-desarrolladores-flex.html" title="Oferta de Empleo - Desarrolladores Flex en Costa Rica" /><author><name>Ivan</name><uri>http://www.blogger.com/profile/18204902014543207004</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08204656968868651884" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://venzaalcocodrilo.blogspot.com/2009/10/oferta-de-empleo-desarrolladores-flex.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D08GRn0-eyp7ImA9WxNSEUs.&quot;"><id>tag:blogger.com,1999:blog-8994512745672600714.post-1080586746621349169</id><published>2009-08-09T21:08:00.000-07:00</published><updated>2009-08-24T19:03:47.353-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-24T19:03:47.353-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Tests" /><category scheme="http://www.blogger.com/atom/ns#" term="Fluint" /><category scheme="http://www.blogger.com/atom/ns#" term="Flex" /><category scheme="http://www.blogger.com/atom/ns#" term="Flex Unit" /><title>Flex Unit 4</title><content type="html">Recientemente salió al aire&lt;a href="http://opensource.adobe.com/wiki/display/flexunit/FlexUnit"&gt; Flex Unit 4&lt;/a&gt; (versión Beta en este momento). Esta versión incorpora muchas mejoras, incluyendo mucha funcionalidad incorporada de la libreria para  pruebas Fluint, quien le dono muchas mejoras a la misma, sobre todo en el manejo asincronomo.&lt;br /&gt;Debemos recordar que en Flex/Flash estamos dentro de un ambiente asincronimo, esto es: hacemos el llamado a una función pero no sabemos cuando se hara devolvera el llamado a la función. Esto ya que el Flash Player no soporta multi hilos y al hacer uso de ciertos recursos que no tenemos en realidad una idea clara de cuanto va a durar en responder (llamado al servidor, cargar una pelicula, etc) puede hacer que la aplicación termine pegandose y la experiencia de usuario sea demasiado desagradable.&lt;br /&gt;Una de las nuevas caracteristicas incorporadas en esta versión es el uso de metadatas. Esta es una caracteristica utilizada en Flex sobre todo cuando  marcamos una propiedad como [Bindable]. Mucha gente no esta al tanto que en Actionscript 3 uno puede crear sus propias metadatas y utilizarlas como quieran dentro de su aplicación, lo cual a mi gusto es demasiado elegante.&lt;br /&gt;Otra nueva caracteristica es que ya no se hace uso de la herencia (para crear nuevos tests y suites), ahora se usan metodos estaticos al estar utilizando metadatas. Ademas podemos ejecutar nuestros tests con  distintos Runners (Flex Unit, Fluint, air, etc) que nos brindaran distintas caracteristicas de acuerdo a nuestras necesidades.&lt;br /&gt;A continuacion unos pocos ejemplos de algunos principios. Espero poder agregar mas con el tiempo.&lt;br /&gt;&lt;br /&gt;Creación de Suites:&lt;br /&gt;Los suites son un conjunto de tests. Podemos tener dentro de un suite multiples tests.&lt;br /&gt;&lt;pre name="code" class="Cpp"&gt;&lt;br /&gt;package tests&lt;br /&gt;{&lt;br /&gt;[Suite]&lt;br /&gt;[RunWith("org.flexunit.runners.Suite")]&lt;br /&gt;public class DelegatesTestSuite&lt;br /&gt;{&lt;br /&gt;//Tests se declaran como propiedades&lt;br /&gt;public var test1:MiClaseTest;&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Creando  un Test con un delegate:&lt;br /&gt;&lt;pre name="code" class="Cpp"&gt;&lt;br /&gt;package tests&lt;br /&gt;{&lt;br /&gt;public class MiClaseTest&lt;br /&gt;{&lt;br /&gt;//Metodo asincronomo:&lt;br /&gt;//Marcamos el metodo como test y lo colocamos como primero&lt;br /&gt;//en la lista. Ademas le decimos que espere al menos 3500 ms&lt;br /&gt;//para que nos devuelvan algun valor&lt;br /&gt;[Test (async, timeout="3500",order=1)]&lt;br /&gt;public function loginUser():void&lt;br /&gt;{&lt;br /&gt;var user:User = new User()&lt;br /&gt;user.username = "user2";&lt;br /&gt;user.password = "123xyz";&lt;br /&gt;&lt;br /&gt;var delegate:UserDelegate = new UserDelegate();&lt;br /&gt;var responder:IResponder = Async.asyncResponder(this, new&lt;br /&gt;TestResponder(onLoginUserComplete, onLoginUserFault), 3000);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;//Este es el handler que recibira elresultado del&lt;br /&gt;//servidor.&lt;br /&gt;//@param event ResultEvent del servidor.&lt;br /&gt;//@param token, es el objeto inicial que pasamos en el llamado&lt;br /&gt;private function onLoginUserComplete(event:Object, token:Object):void&lt;br /&gt;{&lt;br /&gt;Assert.assertTrue(event.result.authenticated);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;private function onInsertUserFail(event:FaultEvent, token:Object):void&lt;br /&gt;{&lt;br /&gt;Assert.fail('Error loading user: ' + event.fault);&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Creando Teorias:&lt;br /&gt;&lt;br /&gt;Y que es esto? Es un nuevo  concepto (al menos en el mundo  de testing en Flex) Lo que nos dice es que si creemos que  algo va a ejecutarse correctamente,  tiene que ejecutarse correctamente con cualquier informacion que le sea pasada como parametro, por ejemplo, si debo encontrar que el valor absoluto de un numero va a ser siempre positivo, la teoria me dice que cualquier numero que le pase, va a ser mayor a 0. Entonces en mi test puedo poner un numero infinto de numeros a probar, solo que nosotros no tenemos tanto tiempo como para eso, entonces escogemos un conjunto finito de valores a probar y con ese conjunto validamos nuestra teoria.&lt;br /&gt;&lt;br /&gt;Primero tengo que marcar la clase como que tiene una teoria, para que pueda ser procesada con el metadata [RunWith]&lt;br /&gt;&lt;pre name="code" class="Cpp"&gt;&lt;br /&gt;package tests&lt;br /&gt;{&lt;br /&gt;[RunWith("org.flexunit.experimental.theories.Theories")]&lt;br /&gt;public class MiClaseTest&lt;br /&gt;{&lt;br /&gt;...&lt;/pre&gt;Creando un sets de datos para probar:&lt;br /&gt;Ocupo 2 metadatas [ArrayElementType] utilizado en mxml para especificar el tipo de dato dentro de una coleccion y el metadata [DataPoints] que marca nuestros set como un conjunto para probar.&lt;br /&gt;&lt;pre name="code" class="Cpp"&gt;&lt;br /&gt;[DataPoints]&lt;br /&gt;[ArrayElementType("Object")]&lt;br /&gt;public static var usuariosValidos:Array = [&lt;br /&gt;{username:"user1",password:"123xyz"},&lt;br /&gt;{username:"user2",password:"344112"},&lt;br /&gt;{username:"user3",password:"o5ii33"}&lt;br /&gt;];&lt;br /&gt;&lt;/pre&gt;Creacion de un  test con teoria:&lt;br /&gt;Marcamos el metodo conel metadata [Test] y el  metadata [Theroy]&lt;br /&gt;&lt;pre name="code" class="Cpp"&gt;[Theory]&lt;br /&gt;&lt;br /&gt;[Test(async,timeout="10000")]&lt;br /&gt;public function validUsers(usuarios:Object):void&lt;br /&gt;{&lt;br /&gt;var delegate:UserDelegate = new UserDelegate();&lt;br /&gt;var responder:IResponder = Async.asyncResponder(this, new&lt;br /&gt;TestResponder(onUserLoginComplete, onUserLoginFail), 2500);&lt;br /&gt;&lt;br /&gt;delegate.authUser(usuarios.username, usuarios.password);&lt;br /&gt;}&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Esto hace que el test se ejecute la cantidad de datos que tengamos dentro de nuestro datapoint, en este caso se ejecutara automaicamente 3 veces.&lt;br /&gt;Esto verdaderamente facilitara nuestro  desarrollo en pruebas y nos permitira asegurarnos que podamos testear mejor nuestra aplicacion con menor esfuerzo&lt;br /&gt;&lt;br /&gt;Otros Recursos&lt;br /&gt;&lt;a href="http://blogs.digitalprimates.net/codeSlinger/index.cfm/2009/5/3/FlexUnit-4-in-360-seconds"&gt;Introduccion&lt;/a&gt; (mejor link que  he visto)&lt;br /&gt;&lt;a href="http://www.3wstudio.com.ar/flex-unit-4-562.html"&gt;Excelente Tutorial&lt;/a&gt;&lt;br /&gt;&lt;a href="http://venzaalcocodrilo.blogspot.com/2008/10/pruebas-integracion-de-aplicaciones.html"&gt;Pruebas Integracion&lt;/a&gt;&lt;br /&gt;&lt;a href="http://venzaalcocodrilo.blogspot.com/2009/05/la-importancia-del-feedback-y-las.html"&gt;Importancia Pruebas y Feedback&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8994512745672600714-1080586746621349169?l=venzaalcocodrilo.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VenzaAlCocodrilo/~4/EwdbqLTYcW8" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://venzaalcocodrilo.blogspot.com/feeds/1080586746621349169/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8994512745672600714&amp;postID=1080586746621349169" title="2 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/1080586746621349169?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/1080586746621349169?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VenzaAlCocodrilo/~3/EwdbqLTYcW8/flex-unit-4.html" title="Flex Unit 4" /><author><name>Ivan</name><uri>http://www.blogger.com/profile/18204902014543207004</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08204656968868651884" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://venzaalcocodrilo.blogspot.com/2009/08/flex-unit-4.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkEBRn86cCp7ImA9WxJaGEU.&quot;"><id>tag:blogger.com,1999:blog-8994512745672600714.post-6773133404844833747</id><published>2009-08-09T17:40:00.000-07:00</published><updated>2009-08-09T22:04:17.118-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-08-09T22:04:17.118-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="PHP" /><category scheme="http://www.blogger.com/atom/ns#" term="Desarrollo Software" /><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="AMF3" /><category scheme="http://www.blogger.com/atom/ns#" term="Smartfox Server" /><category scheme="http://www.blogger.com/atom/ns#" term="Flex" /><category scheme="http://www.blogger.com/atom/ns#" term=".Net" /><category scheme="http://www.blogger.com/atom/ns#" term="Integracion" /><title>Integrando aplicaciones y sobreviviendo a ello</title><content type="html">- "Ya está listo! Dalé probá!!"&lt;br /&gt;- Mmmmm... no amigo, no funciona!&lt;br /&gt;- "Es en serio?? Si yo lo probé!"&lt;br /&gt;- Si... pero no funciona! Te voy a enviar el log con el error para que lo revises.&lt;br /&gt;- "Ok mandalo! Solo que voy saliendo, pero lo veo mañana a primera hora..."&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_MJbXozfz0PE/Sn-bgJ_bmYI/AAAAAAAAAY0/NfX3XXRnDAA/s1600-h/frustration.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 200px; height: 133px;" src="http://1.bp.blogspot.com/_MJbXozfz0PE/Sn-bgJ_bmYI/AAAAAAAAAY0/NfX3XXRnDAA/s200/frustration.jpg" alt="" id="BLOGGER_PHOTO_ID_5368180257589008770" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.pay4rides.com/info/wp-content/plugins/photo-dropper/images/cc.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 16px; height: 16px;" src="http://www.pay4rides.com/info/wp-content/plugins/photo-dropper/images/cc.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:78%;"&gt;&lt;span style="font-weight: bold;"&gt;Photo By &lt;/span&gt;&lt;a style="font-weight: bold;" href="http://www.flickr.com/photos/zachklein/"&gt;Zach Klein&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Y así termina otro día para el programador de front end, donde no pudo avanzar todo lo que quería y donde tendrá que atrasarse unas horas mas para poder terminar sus tareas.&lt;br /&gt;&lt;br /&gt;Esta es una historia repetida diariamente para muchos programadores de clientes para internet, donde sus aplicaciones son apenas la interfaz de acceso para sus usuarios a servicios con bases de datos, servicios externos y demas aplicaciones que pueda tener un sitio corporativo.&lt;br /&gt;&lt;br /&gt;Hablando con mi colega y amigo &lt;a href="http://www.riahispano.org/"&gt;Ivan Alvarez&lt;/a&gt; - quien trabaja en la &lt;a href="http://www.bmv.com.mx"&gt;Bolsa Nacional de Valores en Mexico&lt;/a&gt; desarrollando aplicaciones financieras de ultima tecnología con Adobe Flex y Java en el lado del servidor - nos dimos cuenta que nuestros trabajos aunque son en areas totalmente distintas (yo trabajo para &lt;a href="http://scrapblog.com/"&gt;Scrapblog&lt;/a&gt; un sitio en Flex para crear tarjetas y manualidades digitales)  enfrentamos estas mismas situaciones aunque estemos a miles de millas de distancia, con gente completamente distinta.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_MJbXozfz0PE/Sn-ZgpsLkVI/AAAAAAAAAYU/meCSeuIbnL4/s1600-h/teamwork.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 240px; height: 240px;" src="http://3.bp.blogspot.com/_MJbXozfz0PE/Sn-ZgpsLkVI/AAAAAAAAAYU/meCSeuIbnL4/s320/teamwork.jpg" alt="" id="BLOGGER_PHOTO_ID_5368178067074945362" border="0" /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://www.pay4rides.com/info/wp-content/plugins/photo-dropper/images/cc.png"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 16px; height: 16px;" src="http://www.pay4rides.com/info/wp-content/plugins/photo-dropper/images/cc.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:78%;"&gt;Photo by: &lt;a href="http://www.lumaxart.com/"&gt;http://www.lumaxart.com/&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;La integración de aplicaciones con clientes en Flex y código de servidor se puede convertir muchas veces en una tarea titánica y dolorosa. Sin embargo estamos convencidos  que no debe ser así:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Existen distintas formas para comunicarse: Webservices, Rest Services y Remote Objects.&lt;/li&gt;&lt;li&gt;Los tres metodos son robustos, probados y comprobados.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Para Remote Objects, existe un protocolo de comunicacion (para la serializacion y deserializacion de la informacion) definido por Adobe que es AMF3. Este protocolo es bastante rapido, comprimido y binario lo cual hace que la informacion se transmita mas rapido.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Este protocolo ha sido implementado multiples veces para distintas plataformas, empezando  con Java (&lt;a href="http://opensource.adobe.com/wiki/display/blazeds/BlazeDS/"&gt;BlazeDS&lt;/a&gt;, &lt;a href="http://www.adobe.com/products/livecycle/dataservices/"&gt;LifeCycle Data Services&lt;/a&gt;, &lt;a href="http://www.themidnightcoders.com/products/weborb-for-java/overview.html"&gt;Weborb&lt;/a&gt;, &lt;a href="http://www.blogger.com/www.graniteds.org/"&gt;GraniteDS&lt;/a&gt;), .Net (&lt;a href="http://www.themidnightcoders.com/products/weborb-for-net/overview.html"&gt;Weborb&lt;/a&gt;, &lt;a href="http://www.fluorinefx.com/"&gt;FluorineFx&lt;/a&gt;), Rails (&lt;a href="http://www.themidnightcoders.com/products/weborb-for-rails/overview.html"&gt;Weborb&lt;/a&gt;, &lt;a href="http://blog.rubyamf.org/"&gt;RubyAMF&lt;/a&gt;), PHP(&lt;a href="http://www.themidnightcoders.com/products/weborb-for-php/overview.html"&gt;Weborb&lt;/a&gt;, &lt;a href="http://amfphp.org/"&gt;AMFPHP&lt;/a&gt;),  entre otras. Esto quiere decir que puedes hacer tu backend en el lenguaje que quieras y utilizar esta implementación de AMF para comunicar tu aplicación Flex con el servidor de manera rapida, robusta y segura.&lt;/li&gt;&lt;/ul&gt;Con estos antecedentes, podemos decir que crear aplicaciones en Flex conectada a un servidor de aplicaciones con bases de datos o cualquier servicio que se ocupe es bastante sencillo. Sin embargo el problema que mas sufrimos es cuando tratamos de comunicarnos con  los servicios expuestos por nuestro servidor.  Generalmente hemos visto los siguientes problemas:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Los servicios no estan correctamente configurados y por lo tanto es imposible a nuestras aplicaciones accesarlos.&lt;/li&gt;&lt;li&gt;El nombre de los métodos no son los mismos que como se definió previamente (si es que tiene la suerte que le definan los nombres de sus servicios en algún lugar como un Wiki, email o un documento más oficial.&lt;/li&gt;&lt;li&gt;La signatura de los métodos no es la misma que la que esta documentada (error muy parecido al anterior)&lt;/li&gt;&lt;li&gt;El servicio no fue probado y sus métodos tiran excepciones cuando son llamados. Este es el mas común. Parece que nuestros amigos de backend nunca prueban, ya sea por Unit Testing o al menos ejecutar desde un cliente la invocacion al método. Esto tan simple, puede ayudarlos a ellos a darse cuenta mas tempranamente que hay errores y arreglarlos antes de decirnos que ya esta listos nuestros servicios.&lt;/li&gt;&lt;li&gt;Problemas de serialización al enviar la información. Debemos recordar que hay una capa intermedia entre nuestra aplicacion cliente y nuestro servidor. Ese se va a encargar de convertir nuestra informacion y datos en terminos que nuestra contra parte pueda entender. Por ejemplo algunas implementaciones del AMF3 tienen problemas a la hora de serializar fechas (zonas de horario, 24 horas vrs 12 -AM/PM, etc), otras problemas a la hora de serializar numeros, las enumeraciones por ejemplo son estructuras que no todas las implementaciones soportan. Este tipo de problemas hacen que la integración sea mas  lentas, es un constante hacer/probar/repetir.&lt;/li&gt;&lt;/ul&gt;Ahora, todo esto presentado anteriormente no quieredecir que no hay manera de solucionar esta situación:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Documentacion de los servicios, métodos, parametros, valores de retorno,excepciones, etc. No tiene que ser una documentacion  de 3 paginas por servicio. Lo minimo debe incluir eso que puse arriba. Muchos desarrolladores sienten pereza de hacer esta documentacion  y ahi es donde empiezan los problemas.&lt;/li&gt;&lt;li&gt;Uso de unidades de prueba (o algún tipo de prueba) en el código del servidor que sea ejecutado antes de "entregar" el código.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Como dije anteriormente, existe una capa intermedia entre nuestro cliente y el servidor y ocupamos probar que esa capa funciona correctamente, por eso es bueno probar nuestros clientes y los respectivos llamados al servidor con utilidades como Flex Unit 4, Fluint, etc.  Incluso algunas herramientas para  llamados remotos (como Weborb) incluyen consolas para probar directamente estos servicios desde un ambiente creado en Flex.&lt;/li&gt;&lt;li&gt;Investigar la herramienta que utilizamos y conocer cuales son problemas conocidos en las mismas.  Investigar más del proceso de serialización esto nos ayudara a reconocer posibles problemas tempranamente.&lt;/li&gt;&lt;li&gt;Aprender un poco como es el desarrollo en el lado del servidor. Si tienes ese conocimiento vas a tener un valor agregado en el mercado y ademas vas a conocer más del proceso y poder ayudar a detectar errores, sugerir formas de implementación, etc.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Enseñar. Si tienes estos conocimientos de arriba, enseñar a otros desarrolladores sobre todo esto. Iniciar la chispa en ellos para que investiguen igual. Esto debe ser de conocimiento para la mayoría de personas en el proyecto.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Cruzar los dedos y esperar que todo salga bien... :-P&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Saludos!&lt;br /&gt;&lt;br /&gt;Posts Relacionados&lt;br /&gt;&lt;br /&gt;&lt;a href="http://venzaalcocodrilo.blogspot.com/2008/10/integracion-de-aplicaciones-con-flex.html"&gt;Integracion de Aplicaciones&lt;/a&gt;&lt;br /&gt;&lt;a href="http://venzaalcocodrilo.blogspot.com/2008/10/pruebas-integracion-de-aplicaciones.html"&gt;Pruebas de Integracion&lt;/a&gt;&lt;br /&gt;&lt;a href="http://venzaalcocodrilo.blogspot.com/2007/12/llamadas-asincrnicas.html"&gt;Llamadas Asincronimas&lt;/a&gt;&lt;br /&gt;&lt;a href="http://venzaalcocodrilo.blogspot.com/2007/12/interaccion-de-flex-con-datos-externos.html"&gt;Interaccion con sistemas remotos&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8994512745672600714-6773133404844833747?l=venzaalcocodrilo.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VenzaAlCocodrilo/~4/AtGgD_G9G08" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://venzaalcocodrilo.blogspot.com/feeds/6773133404844833747/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8994512745672600714&amp;postID=6773133404844833747" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/6773133404844833747?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/6773133404844833747?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VenzaAlCocodrilo/~3/AtGgD_G9G08/integrando-aplicaciones-y-sobreviviendo.html" title="Integrando aplicaciones y sobreviviendo a ello" /><author><name>Ivan</name><uri>http://www.blogger.com/profile/18204902014543207004</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08204656968868651884" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://1.bp.blogspot.com/_MJbXozfz0PE/Sn-bgJ_bmYI/AAAAAAAAAY0/NfX3XXRnDAA/s72-c/frustration.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://venzaalcocodrilo.blogspot.com/2009/08/integrando-aplicaciones-y-sobreviviendo.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CkQHSXs4fip7ImA9WxJVFE8.&quot;"><id>tag:blogger.com,1999:blog-8994512745672600714.post-5622779148812742669</id><published>2009-06-30T20:40:00.000-07:00</published><updated>2009-06-30T20:52:18.536-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-30T20:52:18.536-07:00</app:edited><title>Control Freak...</title><content type="html">&lt;span style="font-weight: bold;"&gt;Que es controlar? &lt;/span&gt;Controlar es verificar que lo que se esta haciendo actualmente es lo que en realidad se queria hacer de la manera correcta.&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;Por que es importante?&lt;/span&gt; Porque es la unica forma de asegurarnos que lo que se esta haciendo actualmente es correcto.&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://2.bp.blogspot.com/_MJbXozfz0PE/SkrdCZd4AKI/AAAAAAAAAXM/lzWb44vBrfs/s1600-h/117612088_4b282bbb8f.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 213px; height: 320px;" src="http://2.bp.blogspot.com/_MJbXozfz0PE/SkrdCZd4AKI/AAAAAAAAAXM/lzWb44vBrfs/s320/117612088_4b282bbb8f.jpg" alt="" id="BLOGGER_PHOTO_ID_5353334140348924066" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:78%;"&gt;Foto por &lt;a href="http://www.flickr.com/people/germanium/"&gt;germanium&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Muchas personas subestiman la importancia del control en los procesos. Personas que asumen que lo que se esta haciendo esta bien. No hay espacio para &lt;a href="http://venzaalcocodrilo.blogspot.com/2009/03/its-all-about-feedback.html"&gt;feedback&lt;/a&gt; ni para mejoras.&lt;br /&gt;El control es algo que debemos llevar en cada tarea que hagamos en nuestra vida. Sea que desarrollemos software y controlemos que  el sistema funciona correctamente, que los requerimientos esten de acuerdo a las necesidades de nuestro cliente, etc. o sea que estemos cocinando unas galletas en el horno y el control nos permitira asegurarnos que no se esten quemando...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://1.bp.blogspot.com/_MJbXozfz0PE/Skrc41Lt8SI/AAAAAAAAAXE/SxdRcmUbUxc/s1600-h/2128370961_5b9a74c693.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 320px; height: 242px;" src="http://1.bp.blogspot.com/_MJbXozfz0PE/Skrc41Lt8SI/AAAAAAAAAXE/SxdRcmUbUxc/s320/2128370961_5b9a74c693.jpg" alt="" id="BLOGGER_PHOTO_ID_5353333975990268194" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;span style="font-size:78%;"&gt;Foto por &lt;a href="http://www.flickr.com/photos/applesticker/"&gt;applesticker&lt;/a&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;De que sirve en un proceso que existan reglas o procedimientos sino hay nadie que controle que se esten cumpliendo esas reglas? El control hace respetar lo establecido y nos ayuda a enfrentarnos a posibles problemas para buscar soluciones...&lt;br /&gt;&lt;br /&gt;Pero.... de que nos sirve saber que algo no se esta haciendo bien si no estamos haciendo algo para corregirlo. El tener control en un proceso por tenerlo de nada  sirve. El control debe ser respaldado, debe tener consecuencias cuando se incumple lo establecido. El control va de la mano con acciones preventivas o correctivas.&lt;br /&gt;&lt;br /&gt;No dejemos entonces el control de lado y si estamos teniendo control en nuestros proyectos, pues apliquemos acciones a aquellas tareas o personas que se esten saliendo de lo establecido. Sera la unica manera de asegurar nos de entregar un producto de calidad.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8994512745672600714-5622779148812742669?l=venzaalcocodrilo.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VenzaAlCocodrilo/~4/e-fAj1sRjV0" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://venzaalcocodrilo.blogspot.com/feeds/5622779148812742669/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8994512745672600714&amp;postID=5622779148812742669" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/5622779148812742669?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/5622779148812742669?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VenzaAlCocodrilo/~3/e-fAj1sRjV0/control-freak.html" title="Control Freak..." /><author><name>Ivan</name><uri>http://www.blogger.com/profile/18204902014543207004</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08204656968868651884" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://2.bp.blogspot.com/_MJbXozfz0PE/SkrdCZd4AKI/AAAAAAAAAXM/lzWb44vBrfs/s72-c/117612088_4b282bbb8f.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://venzaalcocodrilo.blogspot.com/2009/06/control-freak.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08GQHs-cSp7ImA9WxJVFEg.&quot;"><id>tag:blogger.com,1999:blog-8994512745672600714.post-554288084696057315</id><published>2009-06-30T20:19:00.000-07:00</published><updated>2009-07-01T07:50:21.559-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-07-01T07:50:21.559-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Equipo" /><category scheme="http://www.blogger.com/atom/ns#" term="Motivacion" /><category scheme="http://www.blogger.com/atom/ns#" term="Management" /><category scheme="http://www.blogger.com/atom/ns#" term="Trabajo" /><title>No es solamente el dinero</title><content type="html">Por ahi de 1943 &lt;a href="http://es.wikipedia.org/wiki/Abraham_Maslow"&gt;Abraham Maslow&lt;/a&gt; expuso una teoria donde presentaba una &lt;a href="http://es.wikipedia.org/wiki/Pir%C3%A1mide_de_Maslow"&gt;piramide &lt;/a&gt;con distintos niveles de necesidades de los seres humanos.&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://upload.wikimedia.org/wikipedia/commons/thumb/7/76/Pir%C3%A1mide_de_Maslow.svg/460px-Pir%C3%A1mide_de_Maslow.svg.png"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 460px; height: 299px;" src="http://upload.wikimedia.org/wikipedia/commons/thumb/7/76/Pir%C3%A1mide_de_Maslow.svg/460px-Pir%C3%A1mide_de_Maslow.svg.png" alt="" border="0" /&gt;&lt;/a&gt;&lt;span style="font-size:78%;"&gt;Foto por Wikipedia&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Los primeros cuatro niveles son niveles de necesidades de deficit osea que pueden ser cubiertas por uno mismo o por otras personas, el ultimo nivel es enfocado en la autorealizacion de la persona.&lt;br /&gt;&lt;br /&gt;El &lt;span style="font-weight: bold;"&gt;primer nivel&lt;/span&gt; nos habla de las necesidades fisiologicas, osea las mas basicas: respiracion, alimentacion, descanso, higiene, etc. Buenas instalaciones, lugar limpio, buena luz, temperatura adecuada. Aqui existen factores pasivos que si no se tienen no influyen o no va a mejorar la motivacion de las personas, pero si no se tienen afectan verdaderamente la motivacion de las personas. Un ejemplo de ello es la limpieza en los servicios sanitarios: si estan limpios nadie se emociona, es algo normal... pero si estan sucios la gente no se siente comoda, reclama, exige, se molesta...&lt;br /&gt;&lt;br /&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_MJbXozfz0PE/Skt3mv1H2wI/AAAAAAAAAXU/ZCPCf3IoDVE/s1600-h/Will_code_HTML_for_food.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 265px; height: 320px;" src="http://3.bp.blogspot.com/_MJbXozfz0PE/Skt3mv1H2wI/AAAAAAAAAXU/ZCPCf3IoDVE/s320/Will_code_HTML_for_food.jpg" alt="" id="BLOGGER_PHOTO_ID_5353504089617980162" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;El &lt;span style="font-weight: bold;"&gt;segundo nivel&lt;/span&gt; menciona necesidades de seguridad: fisica, economica, etc. La estabilidad de la empresa, la transparencia en el estado de la misma, salario justo, beneficios, etc&lt;br /&gt;&lt;br /&gt;El &lt;span style="font-weight: bold;"&gt;tercer nivel&lt;/span&gt; nos habla de afiliacion y afecto: cuan comprometido me siento con la empresa? me siento parte con mis companeros? tengo la camiseta de mi equipo puesta? Soy parte del equipo de la empresa o soy solo un empleado que cumple un horario? Trabajamos como un equipo en realidad o solo como un grupo de personas reunidas en un mismo lugar?&lt;br /&gt;&lt;br /&gt;El &lt;span style="font-weight: bold;"&gt;cuarto nivel&lt;/span&gt; son las necesidades de estima: como nos ven las demas personas: obtenemos respeto, reconocimiento, estatus, autoridad de parte de nuestros colegas o somos ignorados, despreciados o menospreciados? y como nos sentimos nosotros mismos: tengo confianza, tengo la experiencia necesaria, tengo el conocimiento?&lt;br /&gt;&lt;br /&gt;El &lt;span style="font-weight: bold;"&gt;ultimo nivel&lt;/span&gt; se basa en la autorealizacion de la persona: hasta donde puede llegar esa persona? como puede ser motivada? de verdad soy de provecho en la organizacion?  cual es mi proposito dentro de la organizacion? demuestro inteligencia emocional? como mejoro para el bien de los demas? Es algo continuo, es algo que debe salir de la persona misma. Si se cumplen los niveles anteriores, es muy factible que este nivel pueda ser llenado.&lt;br /&gt;&lt;br /&gt;Ya ven la satisfaccion de un empleado no se traduce en solamente un cheque o pago que se le haga cada 15 dias o cada mes. Es una serie de elementos que van a afectar la manera en que el empleado sea motivado o no vaya a reaccionar ante el trabajo.&lt;br /&gt;&lt;span style="font-weight: bold;"&gt;&lt;br /&gt;- "Pero si se le paga al empleado para que  haga bien su trabajo...."&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Si, pero eso no significa que no tenga otras necesidades, que no este pensando en que no tiene para comprar comida, que el bienestar de su familia no sea importante, que su aporte a la organizacion no sea reconocido, que no tenga seguridad de por cuanto tiempo va a tener empleo, etc, etc. Al final de cuentas son personas y con necesidades.&lt;br /&gt;&lt;br /&gt;Empleados motivados son empleados que van a hacer mas de lo que se les solicita, un empleado motivado no es solo el que recibe mucho dinero sino el que siente que su trabajo cubre la mayor cantidad de sus necesidades.&lt;br /&gt;&lt;br /&gt;Por cierto... motivar a un empleado no es solamente darle un aumento. El humano es insaciable y despues de 3 meses va a querer mas aumento. Si usted hace eso va a estar alimentando un  monstruo que va a ir creciendo. Mejor dediquese a satisfacer esa area en conjunto con otras mas que son importantes tambien&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8994512745672600714-554288084696057315?l=venzaalcocodrilo.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VenzaAlCocodrilo/~4/eeKX3apiix4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://venzaalcocodrilo.blogspot.com/feeds/554288084696057315/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8994512745672600714&amp;postID=554288084696057315" title="2 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/554288084696057315?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/554288084696057315?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VenzaAlCocodrilo/~3/eeKX3apiix4/no-es-solamente-el-dinero.html" title="No es solamente el dinero" /><author><name>Ivan</name><uri>http://www.blogger.com/profile/18204902014543207004</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08204656968868651884" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://3.bp.blogspot.com/_MJbXozfz0PE/Skt3mv1H2wI/AAAAAAAAAXU/ZCPCf3IoDVE/s72-c/Will_code_HTML_for_food.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://venzaalcocodrilo.blogspot.com/2009/06/no-es-solamente-el-dinero.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkEERn04eCp7ImA9WxJQGUo.&quot;"><id>tag:blogger.com,1999:blog-8994512745672600714.post-8397275047117402068</id><published>2009-06-02T13:26:00.000-07:00</published><updated>2009-06-02T13:30:07.330-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-02T13:30:07.330-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Flex 4" /><category scheme="http://www.blogger.com/atom/ns#" term="Flex Builder" /><category scheme="http://www.blogger.com/atom/ns#" term="Flash Catalyst" /><category scheme="http://www.blogger.com/atom/ns#" term="Flash Builder" /><title>Flash Catalyst y Flash Builder</title><content type="html">Esta semana se hizo publico el release de las versiones beta de Flash Catalyst y de Flash Builder (antiguo Flex Builder) que viene con Gumbo, la version 4 el Framework de Flex.&lt;br /&gt;Para bajar el beta de Catalyst pueden hacerlo desde &lt;a href="https://www.adobe.com/cfusion/entitlement/index.cfm?e=labs_flashcatalyst"&gt;aquí&lt;/a&gt;. Mas info &lt;a href="http://labs.adobe.com/technologies/flashcatalyst/"&gt;aquí&lt;/a&gt;&lt;br /&gt;Se encuentra en versiones para windows y mac.&lt;br /&gt;Para el Flash Builder (y Flex 4) mas info &lt;a href="http://labs.adobe.com/technologies/flashbuilder4/"&gt;aquí&lt;/a&gt; y para bajarlo &lt;a href="http://www.adobe.com/cfusion/entitlement/index.cfm?e=labs_flashbuilder4"&gt;aquí&lt;/a&gt;.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8994512745672600714-8397275047117402068?l=venzaalcocodrilo.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VenzaAlCocodrilo/~4/irMMa-aiDBU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://venzaalcocodrilo.blogspot.com/feeds/8397275047117402068/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8994512745672600714&amp;postID=8397275047117402068" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/8397275047117402068?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/8397275047117402068?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VenzaAlCocodrilo/~3/irMMa-aiDBU/flash-catalyst-y-flash-builder.html" title="Flash Catalyst y Flash Builder" /><author><name>Ivan</name><uri>http://www.blogger.com/profile/18204902014543207004</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08204656968868651884" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://venzaalcocodrilo.blogspot.com/2009/06/flash-catalyst-y-flash-builder.html</feedburner:origLink></entry><entry gd:etag="W/&quot;A08CQn86fyp7ImA9WxJRFU8.&quot;"><id>tag:blogger.com,1999:blog-8994512745672600714.post-233360934469004958</id><published>2009-05-16T19:45:00.001-07:00</published><updated>2009-05-16T20:11:03.117-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-16T20:11:03.117-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Tests" /><category scheme="http://www.blogger.com/atom/ns#" term="Actionscript3" /><category scheme="http://www.blogger.com/atom/ns#" term="Fluint" /><category scheme="http://www.blogger.com/atom/ns#" term="Flex" /><category scheme="http://www.blogger.com/atom/ns#" term="Flex Unit" /><category scheme="http://www.blogger.com/atom/ns#" term="TDD" /><title>La importancia del Feedback y  las pruebas</title><content type="html">Recientemente escribi sobre la importancia de &lt;a href="http://venzaalcocodrilo.blogspot.com/2009/03/its-all-about-feedback.html"&gt;recibir&lt;/a&gt; feedback en nuestra profesion de infomaticos.&lt;br /&gt;No voy a extenderme mucho  al tema, mucho ya lo dije en el &lt;a href="http://venzaalcocodrilo.blogspot.com/2009/03/its-all-about-feedback.html"&gt;post anterior&lt;/a&gt; sin embargo hoy quiero hablar un poco sobre la importancia de hacer pruebas y como se relaciona con el feedback.&lt;br /&gt;Veran, las pruebas que hagamos (me gusta usar &lt;a href="http://code.google.com/p/fluint/"&gt;Fluint&lt;/a&gt; para flex y ultimamente estoy probando con &lt;a href="http://blogs.digitalprimates.net/codeSlinger/index.cfm/2009/5/3/FlexUnit-4-in-360-seconds"&gt;Flex Unit 4&lt;/a&gt; - version alpha en este momento) son una forma de feedback para nuestras aplicaciones y para nosotros mismos.&lt;br /&gt;Cuando hagamos cambios grandes o refactoty en nuestro codigo y ejecutemos las pruebas que hayamos realizado sabremos sabremos si los cambios realizados por nosotros han afectado el comportamiento correcto de nuestra aplicacion. Eso tambien es feedback.&lt;br /&gt;Cuando durante el fin de seman un companero de trabajo cambie algo en su codigo y lleguemos el lunes y nada funcione... podemos correr nuestras pruebas y darnos cuenta que es lo que fallo y encontrar la solucion de forma mas rapida (ademas de poder culparlo :o) ). Eso tambien es feedback.&lt;br /&gt;Soy partidario del TDD (Test Driven Development) y reconozco la importancia de las pruebas, como forma de feedback y de asegurar una mejor calidad en mi desarrollo, pero tambien reconozco que a veces el tiempo no alcanza o el cliente no entiende la importancia de estas pruebas. Por eso es necesario ser prudente a la hora de escoger que probar y que no. Como  decia una abuela mia "Ni mucho que queme al santo ni tan poco que no lo alumbre". Repito Nada malo con probar, pero tambien ser concientes de nuestros tiempos ya que no siempre tendremos el suficiente tiempo para probar todo.&lt;br /&gt;Mis secciones favoritas para probar, son las que estan en constante cambio y que son criticas:&lt;br /&gt;logica de negocio, acceso a datos (servicios remotos o a base de datos en AIR).&lt;br /&gt;Componentes y vistas me gusta probarlos separados, aislarlos en una aplicacion aparte y probar su funcionamientos, estilos, etc. Eso me provee Feedback. Me gusta aislar las vistas que haga y sus interacciones basicas y proveerlas a quien sea que este a cargo de esa vista, sea el disenador grafico o el encargado del proyecto o cliente del mismo. Que jueguen con la vista por separado en lugar de tener que cargar toda la aplicacion y gastar mas tiempo en proveerme feedback, eso lo pueden hacer en otro momento. Existen herramientas para probar la interfaz como &lt;a href="http://code.google.com/p/flexmonkey/"&gt;Flex Monkey&lt;/a&gt; y &lt;a href="http://code.google.com/p/flash-selenium/"&gt;Selenium &lt;/a&gt;que permite grabar interacciones y ejecutarlas automaticamente. Tambien son validas.&lt;br /&gt;Flex Unit 4 Alpha viene con muchas mejoras y cosas nuevas, verdaderamente lo recomiendo! Aqui mas &lt;a href="http://blogs.digitalprimates.net/codeSlinger/index.cfm/2009/5/3/FlexUnit-4-in-360-seconds"&gt;info&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8994512745672600714-233360934469004958?l=venzaalcocodrilo.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VenzaAlCocodrilo/~4/8E9rmFj67No" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://venzaalcocodrilo.blogspot.com/feeds/233360934469004958/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8994512745672600714&amp;postID=233360934469004958" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/233360934469004958?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/233360934469004958?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VenzaAlCocodrilo/~3/8E9rmFj67No/la-importancia-del-feedback-y-las.html" title="La importancia del Feedback y  las pruebas" /><author><name>Ivan</name><uri>http://www.blogger.com/profile/18204902014543207004</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08204656968868651884" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://venzaalcocodrilo.blogspot.com/2009/05/la-importancia-del-feedback-y-las.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkQEQ34yeyp7ImA9WxJRFU8.&quot;"><id>tag:blogger.com,1999:blog-8994512745672600714.post-1152594429549893889</id><published>2009-05-16T18:15:00.000-07:00</published><updated>2009-05-16T19:45:02.093-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-05-16T19:45:02.093-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="APIs" /><category scheme="http://www.blogger.com/atom/ns#" term="Facebook" /><category scheme="http://www.blogger.com/atom/ns#" term="Eventos" /><category scheme="http://www.blogger.com/atom/ns#" term="Actionscript3" /><category scheme="http://www.blogger.com/atom/ns#" term="API" /><category scheme="http://www.blogger.com/atom/ns#" term="AS3" /><category scheme="http://www.blogger.com/atom/ns#" term="Twitter" /><category scheme="http://www.blogger.com/atom/ns#" term="Flex" /><category scheme="http://www.blogger.com/atom/ns#" term="Digg" /><title>Creando APIs en Actionscript</title><content type="html">Recientemente he tenido en mis ratos libres la mania de bajar API's para Actionscript 3 de diferentes servicios que hay por ahi, como &lt;a href="http://code.google.com/p/diggflashdevkit/"&gt;Digg&lt;/a&gt;, &lt;a href="http://twitter.com/"&gt;Twitter&lt;/a&gt;, &lt;a href="http://code.google.com/p/facebook-actionscript-api/"&gt;Facebook&lt;/a&gt;, &lt;a href="http://wiki.developerforce.com/index.php/Tutorial:_Creating_Flex_Salesforce_Mashups"&gt;Salesforce&lt;/a&gt;, etc para probarlos, jugar con ellos y hacer alguna aplicacion sencilla con ellos aunque nunca vaya a ser utilizada.&lt;br /&gt;Esto me divierte en realidad y mas importante me ayuda a ver codigo de otras personas, maneras de pensar y de implementar. Creo que es una experiencia enriquecedora. Muchos desarrolladores piensan que ver el codigo de otros es malo, es bajo, es denigrante. Honestamente creo que no! Primero yo escojo de quien veo  el codigo y la mayoria de personas que hacen estos APIs son mucho mas competentes que yo! Ademas es una manera de aprender de mejorar y de desarollar mejor. Un claro ejemplo es el acceso que tenemos al framework de Flex. Si algo puedo decir de mi &lt;a href="http://www.scrapblog.com/"&gt;actual trabajo&lt;/a&gt; y de los dos maestros de Flex con los que trabajo es que se conocen ese framework de arriba a abajo.  De ahi que puedan hacer las cosas que hacen.&lt;br /&gt;Bueno siguiendo con mi fascinacion tan geek de las ultimas semanas, me he puesto a pensar en que requisitos son necesarios para construir un API en ActionScript.&lt;br /&gt;&lt;br /&gt;Primero pensemos para que necesitamos realizar un API. Un API es utilizado para ofrecer una serie de servicios que puedan ser invocados por otras aplicaciones con el fin de ejecutar una accion. No es lo mismo que un framework. El API debe ser claro, sencillo y definido. Mejor si esta  documentado. Mejor aun si tiene ejemplos. El API debe ser facil de usar, intuitivo y tener todo lo que nuestros futuros clientes vayan a ocupar para interactuar con nuestra plataforma. Incluyendo objetos definidos por nosotros mapeando la informacion de nuestros servicios.&lt;br /&gt;&lt;br /&gt;Segundo analicemos la forma en que vamos a entregar nuestra informacion. Aqui desde dos perspectivas distintas:&lt;br /&gt;a)  Como se accedera a la informacion  que se quiere facilitar (ya pensando en algo mas "fisico"). Esto incluye como se haran los llamados a nuestros servicios:  REST Services? Web Services? Remoting? External Calls (como tiene el API de Facebook)? Todo esto debe ser transparente para el usuario de nuestro API. Si acaso lo mas es la opcion de escoger que tipo de canal usar para comunicarse con  nuestros servicios, pero la implementacion y demas no debe ser de importancia para el.&lt;br /&gt;b) La forma en que entregaremos la informacion recolectada de nuestros servicios. Si recibimos XML, no podemos pasarle simplemente XML al cliente y dejar que el piense que va a hacer con esa informacion (tecnicamente si podemos, pero no debemos :) ). La creacion de objetos que mapeen nuestro servicio hace que nuestro API sea mas facil de usar.&lt;br /&gt;&lt;br /&gt;Tercero consideremos en la naturaleza &lt;a href="http://venzaalcocodrilo.blogspot.com/2007/12/llamadas-asincrnicas.html"&gt;Asincronima &lt;/a&gt;de nuestra plataforma. Cuando hacemos una invocacion a un servicio externo sea por WebService, Remoting o simple REST Services no sabemos cuando vamos a recibir la informacion de vuelta. Esto hace que nuestros APIs no sean  tan facil de usar cuando invocamos servicios remotos como hacer:&lt;br /&gt;&lt;br /&gt;var misUsuarios:ArrayCollection = miAPI.cargarUsuarios();&lt;span style="color: rgb(255, 0, 0);"&gt; //ESTO NO FUNCIONA!!&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;El metodo cargarUsuarios puede demorar un tiempo (incluso has segundos) en devolvernos esta informacion, asi que la asignacion a mis usuarios no va a ser correcta.&lt;br /&gt;&lt;br /&gt;Soluciones:&lt;br /&gt;a) Una forma de hacerlo es pasarle al metodo el arraycollection que queremos cargar y cuando se reciba la informacion se carguen los resultados en esa variable pasada como parametro. Recordemos que nuestros objetos en AS3 se pasan por referencia y no por valor, asi que los cambios que hagamos al objeto pasado por parametro, se reflejaran en nuestro objeto original (a menos que se haga una copia del mismo. En lo personal la siento como valida, pero no es aplicable en todas las ocasiones. A veces ocupamos darnos cuenta cuando algo fue procesado y eso se logra a traves de eventos.&lt;br /&gt;&lt;br /&gt;b) Otra forma de hacerlo es atraves del uso de eventos. Cuando nuestra funcion recibe el resultado, esta manda un evento indicando que fue recibido. Anadiendo un event listener a ese evento, podemos procesar esa informacion desde donde queramos. Algo importante es aislar cada llamada o cada proceso de datos por aparte, para que cada llamada despache un solo evento, en lugar de estar llamando handlers de otras locaciones por eventos que se invocan con otros propositos. Por supuesto es importante recordar el removeEventListener una vez que es ejecutado un event handler que no se ocupa tener mas y poner las referencias como weak, pero igual si no se aislan las llamadas pueden crear conflictos.&lt;br /&gt;&lt;br /&gt;Esta practica es seguida en el &lt;a href="http://code.google.com/p/facebook-actionscript-api/"&gt;API para Facebook&lt;/a&gt;, a continuacion parte del codigo de uno de sus ejemplos:&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;var call:AddComment = new AddComment(story_id, body);&lt;br /&gt;call.addEventListener(FacebookEvent.COMPLETE, onAddComment);&lt;br /&gt;facebook.post(call);&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;onAddComment&lt;span style=";font-family:arial;font-size:100%;"  &gt; Va a encargarse de utilizar  la informacion recibida como se quiera, puesto que ya esta informacion viene procesada y convertida en el tipo de dato que se quiere todo esto cuando se despache el evento de Complete.&lt;/span&gt;&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;c) Otra forma de hacerlo, es aislando el resultado de la funcion invocada y que ella se encargue de manejar el resultado. Esto es como lo que hacen con el API de &lt;a href="http://code.google.com/p/diggflashdevkit/"&gt;Digg&lt;/a&gt; . Esto es delegar la llamada y el procesamienta del resultado y posterior conversion a objetos normales a un objeto  que es devuelto por nuestra funcion invocada. Por ejemplo:&lt;br /&gt;&lt;br /&gt;Del &lt;a href="http://code.google.com/p/diggflashdevkit/"&gt;API de DIGG&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style=";font-family:courier new;font-size:85%;"  &gt;public static function getUser(user:*):UserResponse&lt;br /&gt;{&lt;br /&gt;   var request:URLRequest = new URLRequest(getUserURL(user));&lt;br /&gt;   return load(request, new UserResponse()) as UserResponse;&lt;br /&gt;}&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Esta clase devuelve un UserResponse, que hereda de la clase Response que a su vez es la que hace el llamado al servicio y delega en UserResponse el procesamiento y conversion del resultado en un objeto utilizable en la aplicacion y no simple XML.&lt;br /&gt;&lt;br /&gt;Como ven, enfoques distintos, pero el mismo principio aislar la invocacion para que pueda ser tratada como una llamada distinta.&lt;br /&gt;&lt;br /&gt;Espero esto pueda ayudar a otras personas que tengan que crear APIs para servicios externos para AS3 o que anden buscando como ingresar a esto de APIs y servicios externos y que puedan de este humilde texto encontrar algo que les ayude&lt;br /&gt;Disfruten...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8994512745672600714-1152594429549893889?l=venzaalcocodrilo.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VenzaAlCocodrilo/~4/Itw9Ul1gU00" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://venzaalcocodrilo.blogspot.com/feeds/1152594429549893889/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8994512745672600714&amp;postID=1152594429549893889" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/1152594429549893889?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/1152594429549893889?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VenzaAlCocodrilo/~3/Itw9Ul1gU00/creando-apis-en-actionscript.html" title="Creando APIs en Actionscript" /><author><name>Ivan</name><uri>http://www.blogger.com/profile/18204902014543207004</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08204656968868651884" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://venzaalcocodrilo.blogspot.com/2009/05/creando-apis-en-actionscript.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CE8GQXs9fyp7ImA9WxVaF0s.&quot;"><id>tag:blogger.com,1999:blog-8994512745672600714.post-7501327790946312073</id><published>2009-04-14T17:55:00.000-07:00</published><updated>2009-04-14T19:33:40.567-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-04-14T19:33:40.567-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Outsourcing" /><category scheme="http://www.blogger.com/atom/ns#" term="Desarrollo Software" /><category scheme="http://www.blogger.com/atom/ns#" term="Software Development" /><category scheme="http://www.blogger.com/atom/ns#" term="Latin America" /><title>Some thoughts about Offshore companies in Latin America</title><content type="html">I've been reading lately some posts from &lt;a href="http://www.sowrey.org/"&gt;Geoff Sowrey&lt;/a&gt;, Technology Director of the &lt;a href="http://thehangar.cr/"&gt;Hangar&lt;/a&gt;, &lt;a href="http://criticalmass.com/"&gt;Critical Mass&lt;/a&gt; for Latin America.  He's been &lt;a href="http://www.sowrey.org/2009/04/02/im-just-a-passionate-guy/"&gt;writing &lt;/a&gt;about how &lt;a href="http://www.sowrey.org/2009/04/12/the-failure-of-offshoring/"&gt;difficult &lt;/a&gt;its to start a new company in a different country with different culture, language, timezones, etc.&lt;br /&gt;I really feel his pain, having worked in different companies where we either used or provided services in that way.&lt;br /&gt;For me this is a critical topic that needs more discussion if we really want to have to more companies moving to Latin America; and no just moving but having success.&lt;br /&gt;You see, Latin America's (LA) culture is totally different from North America. Ambitions, goals and priorities as well and if companies moving to LA are not aware of these differences they are going to suffer a lot.&lt;br /&gt;And I'm not talking only about hiring services from companies in other country; I'm talking about moving and creating new companies. That's takes of course more responsibilities and challenges.&lt;br /&gt;Here are some thoughts:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;    Leaders HAVE to reproduce leaders, once you invest time teaching the RIGHT people how/when things need to be done they should be able to guide other people and groups and share the load of responsibility. Of course if the cycle goes on, they should be able to reproduce and have a company that runs by itself.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;    Learning curve, for both sides of the story: you need to learn how people work in Latin America and they need to learn how you guys want things done; but eventually both sides are going to have to give up a little. You can't expect to have a warehouse full of robots programmed to work as you want, as they can't expect that they are going to receive a paycheck just for the sake of being physically present every day in an office.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt; Good resources are very important. Sadly that's the hardest thing to find. But I wonder, are companies from outside really hiring the best (and willing to pay more $$ for them) or they are just hiring people just for the sake of getting people... Hiring people "just in case we get more projects" is one of the biggest errors a company could make. That will create an awful "comfort zone" and that's going to affect the performance of the people waiting for action and the people around them. I've seen this happening before. It is sad, lot of people earning their salary but without enough technical knowledge, no ambition, no will to learn and sadly that affects others. Would it be better to have less (but good or very good) people, even if you have to spend more money but at least you know they understand you, they know what you need and they really feel part of the company? Of course a lot of these companies go  to other countries to save money, but if they really don't invest in the right people at the end of the road they are going to spend more money and loose more clients.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;    Getting people to feel part of the company. Sadly Latin America is full of this: "I'm just working for a &lt;span style="font-style: italic;"&gt;gringo&lt;/span&gt; that is getting rich". And that's something that needs to be changed as soon as possible. They SHOULD say: "I'm working for a GREAT company. I'm making this startup grow. I've been working really hard til midnight but we have the best project and the client is so happy, they are willing to get more things done so there should be no problem with my pay check..." Too emotional? Maybe, but that's the way every employee should feel about the company they work at. How to do this you say?? It should be part of the culture of the company. It starts having great team leads, people with passion, people that could inject that passion to others. It starts with making people feel proud of what they are doing... what about having a section in the company's web site with pictures of the employees, how they work hard? What about having a blog mentioning successful projects and the people that were involved in them? They need to feel damn proud of what they are doing so that they can give the best of them. Again too emotional?? maybe yes... but for some people that emotion is very important and could mean a big change of attitude towards the company, the client and the work they do. They won't feel they are just working for a "gringo", they will feel they are doing this for themselves and their country.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;    Processes are important, creation of standards, DOCUMENTED processes (say wiki, blog, paper, etc), something that lowers the bar for new people or people that don't not knowing exactly how to do things. Processes not only from a technical perspective, but company policies, etc.  Zero tolerance for people having access to this documents and not following them. They should not be written in stone, but they should be clear and detailed for everyone. A lot of work yeah... but is going to save you a lot of work eventually. &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;    Promote ownership of projects (and/or clients), again make people feel proud, but more important RESPONSIBLE. Create teams (real teams, not groups of people in one office working on a random project), combination of people where you see they get along and more important get things done correctly. Specialize people in different skills, take advantage of people with special knowledge.&lt;/li&gt;&lt;/ul&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8994512745672600714-7501327790946312073?l=venzaalcocodrilo.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VenzaAlCocodrilo/~4/___ALItJlTk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://venzaalcocodrilo.blogspot.com/feeds/7501327790946312073/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8994512745672600714&amp;postID=7501327790946312073" title="3 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/7501327790946312073?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/7501327790946312073?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VenzaAlCocodrilo/~3/___ALItJlTk/some-thoughts-about-offshore-companies.html" title="Some thoughts about Offshore companies in Latin America" /><author><name>Ivan</name><uri>http://www.blogger.com/profile/18204902014543207004</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08204656968868651884" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">3</thr:total><feedburner:origLink>http://venzaalcocodrilo.blogspot.com/2009/04/some-thoughts-about-offshore-companies.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUQDRns9eCp7ImA9WxVbFEo.&quot;"><id>tag:blogger.com,1999:blog-8994512745672600714.post-1697727476067810775</id><published>2009-03-30T20:17:00.001-07:00</published><updated>2009-03-30T21:22:57.560-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-30T21:22:57.560-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Modulos" /><category scheme="http://www.blogger.com/atom/ns#" term="Metadata" /><category scheme="http://www.blogger.com/atom/ns#" term="Modules" /><category scheme="http://www.blogger.com/atom/ns#" term="Flex" /><title>Programacion Modular - II Parte</title><content type="html">Hace un  tiempo escribi sobre los &lt;a href="http://venzaalcocodrilo.blogspot.com/2008/02/programacion-modular-en-flex.html"&gt;modulos en Flex&lt;/a&gt; y aun tengo algo que quisiera compartir y que aprendi hace poco.&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Ahora, que hay en esa clase Module que la hace tan especial??&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;&lt;br /&gt;Sigamos con el Module, si revisamos el codigo que viene el framework vemos lo siguiente en la clase:&lt;br /&gt;&lt;style type="text/css"&gt;&lt;br /&gt;.csharpcode, .csharpcode pre&lt;br /&gt;{&lt;br /&gt; font-size: small;&lt;br /&gt; color: black;&lt;br /&gt; font-family: Consolas, "Courier New", Courier, Monospace;&lt;br /&gt; background-color: #ffffff;&lt;br /&gt; /*white-space: pre;*/&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.csharpcode pre { margin: 0em; }&lt;br /&gt;&lt;br /&gt;.csharpcode .rem { color: #008000; }&lt;br /&gt;&lt;br /&gt;.csharpcode .kwrd { color: #0000ff; }&lt;br /&gt;&lt;br /&gt;.csharpcode .str { color: #006080; }&lt;br /&gt;&lt;br /&gt;.csharpcode .op { color: #0000c0; }&lt;br /&gt;&lt;br /&gt;.csharpcode .preproc { color: #cc6633; }&lt;br /&gt;&lt;br /&gt;.csharpcode .asp { background-color: #ffff00; }&lt;br /&gt;&lt;br /&gt;.csharpcode .html { color: #800000; }&lt;br /&gt;&lt;br /&gt;.csharpcode .attr { color: #ff0000; }&lt;br /&gt;&lt;br /&gt;.csharpcode .alt &lt;br /&gt;{&lt;br /&gt; background-color: #f4f4f4;&lt;br /&gt; width: 100%;&lt;br /&gt; margin: 0em;&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;.csharpcode .lnum { color: #606060;&lt;/style&gt;&lt;br /&gt;&lt;pre class="csharpcode"&gt;package mx.modules&lt;br /&gt;{&lt;br /&gt;&lt;br /&gt;import mx.core.LayoutContainer;&lt;br /&gt;&lt;br /&gt;[Frame(factoryClass="mx.core.FlexModuleFactory")]&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;Encontramos el metadata [Frame]&lt;br /&gt;&lt;br /&gt;Sobre este metadata tenemos muy &lt;a href="http://blogs.adobe.com/rgonzalez/2006/06/modular_applications_part_2.html"&gt;poca informacion&lt;/a&gt;, 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.&lt;br /&gt;&lt;br /&gt;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:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Implementa la interfaz  &lt;span style="font-style: italic;"&gt;"IFlexModuleFactory" &lt;/span&gt;al igual que SystemManager. Esta interfaz define dos metodos: create() e info() que nos devuelve la informacion necesaria para cada uno de los modulos.&lt;/li&gt;&lt;li&gt;Extiende la clase &lt;span style="font-style: italic;"&gt;"MovieClip"&lt;/span&gt; que es la unica que nos permite tener mas de un frame a la vez.&lt;/li&gt;&lt;li&gt;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.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;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&lt;br /&gt;&lt;pre class="csharpcode"&gt;[Frame(factoryClass="mx.core.FlexModuleFactory")]&lt;/pre&gt; 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"&lt;br /&gt;&lt;br /&gt;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.&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8994512745672600714-1697727476067810775?l=venzaalcocodrilo.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VenzaAlCocodrilo/~4/DqzEW_w4JHQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://venzaalcocodrilo.blogspot.com/feeds/1697727476067810775/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8994512745672600714&amp;postID=1697727476067810775" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/1697727476067810775?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/1697727476067810775?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VenzaAlCocodrilo/~3/DqzEW_w4JHQ/programacion-modular-ii-parte.html" title="Programacion Modular - II Parte" /><author><name>Ivan</name><uri>http://www.blogger.com/profile/18204902014543207004</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08204656968868651884" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://venzaalcocodrilo.blogspot.com/2009/03/programacion-modular-ii-parte.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkMMQX45eyp7ImA9WxVUFUw.&quot;"><id>tag:blogger.com,1999:blog-8994512745672600714.post-6685912760304394938</id><published>2009-03-19T19:46:00.000-07:00</published><updated>2009-03-19T20:08:00.023-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-19T20:08:00.023-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Desarrollo Software" /><category scheme="http://www.blogger.com/atom/ns#" term="Software Development" /><category scheme="http://www.blogger.com/atom/ns#" term="Clients" /><category scheme="http://www.blogger.com/atom/ns#" term="Feedback" /><category scheme="http://www.blogger.com/atom/ns#" term="Clientes" /><title>It's all about feedback</title><content type="html">It's all about Feedback&lt;br /&gt;&lt;br /&gt;Recently Subway set the price of all their foot long sandwiches to $5 (any sandwich) which are great news specially in this tough times.. &lt;br /&gt;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... &lt;br /&gt;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.&lt;br /&gt;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. &lt;br /&gt;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 &lt;a href="http://www.joelonsoftware.com/articles/fog0000000018.html"&gt;astronaut architecture&lt;/a&gt; for your simple image gallery...?&lt;br /&gt;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) &lt;br /&gt;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&lt;br /&gt;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 &lt;span style="font-style:italic;"&gt;BMT &lt;/span&gt;sells better than the &lt;span style="font-style:italic;"&gt;Turkey Breast sandwich&lt;/span&gt; you will try to repeat and improve the recipe every time...&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;Todo es Feedback &lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;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...&lt;br /&gt;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.&lt;br /&gt;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.&lt;br /&gt;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. &lt;br /&gt;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.&lt;br /&gt;Este feedback nos ayudara a saber cuales son los "sandwiches" favoritos de nuestros clientes y cuando sepas que el&lt;span style="font-style:italic;"&gt; Italian BMT&lt;/span&gt; vende mejor que el sandwich de &lt;span style="font-style:italic;"&gt;pechuga de pavo&lt;/span&gt;, vas a intentar repetir y mejorar la receta...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8994512745672600714-6685912760304394938?l=venzaalcocodrilo.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VenzaAlCocodrilo/~4/6wvdbReN0Ck" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://venzaalcocodrilo.blogspot.com/feeds/6685912760304394938/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8994512745672600714&amp;postID=6685912760304394938" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/6685912760304394938?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/6685912760304394938?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VenzaAlCocodrilo/~3/6wvdbReN0Ck/its-all-about-feedback.html" title="It's all about feedback" /><author><name>Ivan</name><uri>http://www.blogger.com/profile/18204902014543207004</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08204656968868651884" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://venzaalcocodrilo.blogspot.com/2009/03/its-all-about-feedback.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0YFQX0yeSp7ImA9WxVUFEo.&quot;"><id>tag:blogger.com,1999:blog-8994512745672600714.post-5600429962599213941</id><published>2009-03-19T07:54:00.000-07:00</published><updated>2009-03-19T08:05:10.391-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-19T08:05:10.391-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Flex" /><category scheme="http://www.blogger.com/atom/ns#" term="Binding" /><category scheme="http://www.blogger.com/atom/ns#" term="Ejemplos" /><title>Binding / No Binding</title><content type="html">Binding y no Binding...&lt;br /&gt;&lt;br /&gt;Hace un tiempo escribi un &lt;a href=" http://venzaalcocodrilo.blogspot.com/2008/03/data-binding.html"&gt;post sobre binding&lt;/a&gt; y a continuacion muestro un ejemplo del uso del mismo.&lt;br /&gt;Este ejercicio muestra la diferencia a la hora de actualizar objetos que usan binding y no.&lt;br /&gt;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:&lt;br /&gt;&lt;br /&gt;var prod:Product = products.getItemAt(grid.selectedIndex) as Product;&lt;br /&gt;prod.name = namet.text;&lt;br /&gt;prod.price = Number(price.text);&lt;br /&gt;&lt;br /&gt;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.&lt;br /&gt;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&lt;br /&gt;&lt;br /&gt;var prod:Product = new Product();&lt;br /&gt;prod.name = namet.text;&lt;br /&gt;prod.price = Number(price.text);&lt;br /&gt;&lt;br /&gt;products.setItemAt(prod, grid.selectedIndex);&lt;br /&gt;&lt;br /&gt;El ejemplo trata de mostrar las diferencias entre ambos casos y la importancia de conocer cuando utilizar binding y cuando no. &lt;br /&gt;&lt;br /&gt;&lt;b&gt;Con Binding&lt;/b&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="BindingTest" codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab"  width="252" height="295"&gt; &lt;param name="movie" value=".swf"&gt; &lt;param name="quality" value="high"&gt; &lt;param name="bgcolor" value="#FFFFFF"&gt; &lt;param name="allowScriptAccess" value="sameDomain"&gt;&lt;embed src="http://www.grayscaleconsulting.com/BindingTest.swf" bgcolor="#FFFFFF" width="252" height="295" name="BindingTest" align="middle" play="true" loop="false" quality="high" allowscriptaccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br /&gt;&lt;b&gt;Sin Binding&lt;/b&gt;&lt;br /&gt; &lt;br&gt;&lt;br /&gt; &lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="NoBinding" codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab" width="252" height="295"&gt; &lt;param name="movie" value=".swf"&gt; &lt;param name="quality" value="high"&gt; &lt;param name="bgcolor" value="#FFFFFF"&gt;&lt;param name="allowScriptAccess" value="sameDomain"&gt;&lt;embed src="http://www.grayscaleconsulting.com/NoBindingTest.swf" bgcolor="#FFFFFF" width="252" height="295" name="NoBinding" align="middle" play="true" loop="false" quality="high" allowscriptaccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer"&gt;&lt;/embed&gt;&lt;/object&gt;&lt;br /&gt;&lt;br&gt;&lt;br /&gt;&lt;a href="http://www.grayscaleconsulting.com/binding.zip"&gt;Codigo Aqui&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8994512745672600714-5600429962599213941?l=venzaalcocodrilo.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VenzaAlCocodrilo/~4/9A85ta2piLc" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://venzaalcocodrilo.blogspot.com/feeds/5600429962599213941/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8994512745672600714&amp;postID=5600429962599213941" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/5600429962599213941?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/5600429962599213941?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VenzaAlCocodrilo/~3/9A85ta2piLc/binding-no-binding.html" title="Binding / No Binding" /><author><name>Ivan</name><uri>http://www.blogger.com/profile/18204902014543207004</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08204656968868651884" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://venzaalcocodrilo.blogspot.com/2009/03/binding-no-binding.html</feedburner:origLink></entry><entry gd:etag="W/&quot;AkAEQ3wyfSp7ImA9WxVbFEs.&quot;"><id>tag:blogger.com,1999:blog-8994512745672600714.post-8591903149575585047</id><published>2009-03-10T20:13:00.000-07:00</published><updated>2009-03-30T20:05:02.295-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-30T20:05:02.295-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Bitmaps" /><category scheme="http://www.blogger.com/atom/ns#" term="Graphics" /><category scheme="http://www.blogger.com/atom/ns#" term="Flex" /><category scheme="http://www.blogger.com/atom/ns#" term="Degrafa" /><title>Degrafa Patterns</title><content type="html">&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://4.bp.blogspot.com/_MJbXozfz0PE/Sbcv-cAB8mI/AAAAAAAAATY/E4r3s8U1_Rg/s1600-h/pattern.jpg"&gt;&lt;img style="margin: 0pt 10px 10px 0pt; float: left; cursor: pointer; width: 283px; height: 184px;" src="http://4.bp.blogspot.com/_MJbXozfz0PE/Sbcv-cAB8mI/AAAAAAAAATY/E4r3s8U1_Rg/s320/pattern.jpg" alt="" id="BLOGGER_PHOTO_ID_5311767035221504610" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;span style="font-weight:bold;"&gt;Update (2009-03-29): &lt;a href="http://www.grayscaleconsulting.com/degrafapatterns.zip"&gt;Download Code Here&lt;/a&gt; Example below&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;&lt;br /&gt;I've been trying to spend sometime learning &lt;a href="http://www.degrafa.org/"&gt;Degrafa&lt;/a&gt;, a very nice declarative graphics framework for Flex.&lt;br /&gt;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...&lt;br /&gt;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...&lt;br /&gt;*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...&lt;br /&gt;&lt;br /&gt;&lt;a href="http://www.grayscaleconsulting.com/DegrafaPatterns.html"&gt;&lt;br /&gt;&lt;/a&gt;&lt;a onblur="try {parent.deselectBloggerImageGracefully();} catch(e) {}" href="http://3.bp.blogspot.com/_MJbXozfz0PE/SbcvygAHUFI/AAAAAAAAATQ/uvXLHnqadI4/s1600-h/icon.jpg"&gt;&lt;img style="margin: 0px auto 10px; display: block; text-align: center; cursor: pointer; width: 400px; height: 257px;" src="http://3.bp.blogspot.com/_MJbXozfz0PE/SbcvygAHUFI/AAAAAAAAATQ/uvXLHnqadI4/s400/icon.jpg" alt="" id="BLOGGER_PHOTO_ID_5311766830137167954" border="0" /&gt;&lt;/a&gt;&lt;br /&gt;&lt;a href="http://www.grayscaleconsulting.com/DegrafaPatterns.html"&gt;Click here to run the application&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;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?? :)&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8994512745672600714-8591903149575585047?l=venzaalcocodrilo.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VenzaAlCocodrilo/~4/0xs9mlvLSAE" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://venzaalcocodrilo.blogspot.com/feeds/8591903149575585047/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8994512745672600714&amp;postID=8591903149575585047" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/8591903149575585047?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/8591903149575585047?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VenzaAlCocodrilo/~3/0xs9mlvLSAE/degrafa-patterns.html" title="Degrafa Patterns" /><author><name>Ivan</name><uri>http://www.blogger.com/profile/18204902014543207004</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08204656968868651884" /></author><media:thumbnail xmlns:media="http://search.yahoo.com/mrss/" url="http://4.bp.blogspot.com/_MJbXozfz0PE/Sbcv-cAB8mI/AAAAAAAAATY/E4r3s8U1_Rg/s72-c/pattern.jpg" height="72" width="72" /><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://venzaalcocodrilo.blogspot.com/2009/03/degrafa-patterns.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DEEBQHk9eip7ImA9WxVVE0Q.&quot;"><id>tag:blogger.com,1999:blog-8994512745672600714.post-7122963120222493391</id><published>2009-03-06T18:54:00.000-08:00</published><updated>2009-03-06T19:30:51.762-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-06T19:30:51.762-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Miami" /><category scheme="http://www.blogger.com/atom/ns#" term="Flex Camp Miami" /><category scheme="http://www.blogger.com/atom/ns#" term="Flex" /><title>After Flex Camp Miami</title><content type="html">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 &lt;a href="http://flexcampmiami.com/page.cfm/agenda/christian-saylor-the-art-of-storytelling"&gt;Christian Saylor&lt;/a&gt;  about "The Art of Story Telling" - UX related - and &lt;a href="http://flexcampmiami.com/page.cfm/agenda%20/brian-legros-continuous-integration-and-flex"&gt;Brian LeGros&lt;/a&gt; talking about continuous integration and some very good ideas for enterprise development in Flex. He sure has a lot of experience in development processes.&lt;br /&gt;After the event was over I  had  a chance to talk with some of the guys of Universal Mind and with &lt;a href="http://www.asfusion.com/"&gt;Laura Arguello&lt;/a&gt; and &lt;a href="http://www.asfusion.com/"&gt;Nahuel Foranda&lt;/a&gt; who are the creators of &lt;a href="http://mate.asfusion.com/"&gt;Mate &lt;/a&gt;a very nice framework for flex, They are very nice guys and  of course a Latin Orgullo :)  Good work guys!!&lt;br /&gt;Hope to see more stuff like this in Miami... a Flex User Group maybe??&lt;br /&gt;&lt;span style="font-style: italic;"&gt;&lt;/span&gt;&lt;em&gt;&lt;br /&gt;&lt;/em&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8994512745672600714-7122963120222493391?l=venzaalcocodrilo.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VenzaAlCocodrilo/~4/VjVGQwJjMeA" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://venzaalcocodrilo.blogspot.com/feeds/7122963120222493391/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8994512745672600714&amp;postID=7122963120222493391" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/7122963120222493391?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/7122963120222493391?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VenzaAlCocodrilo/~3/VjVGQwJjMeA/after-flex-camp-miami.html" title="After Flex Camp Miami" /><author><name>Ivan</name><uri>http://www.blogger.com/profile/18204902014543207004</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08204656968868651884" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://venzaalcocodrilo.blogspot.com/2009/03/after-flex-camp-miami.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUIMRn47cSp7ImA9WxVVEU4.&quot;"><id>tag:blogger.com,1999:blog-8994512745672600714.post-4623036447095901804</id><published>2009-03-03T17:54:00.000-08:00</published><updated>2009-03-03T18:26:27.009-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-03-03T18:26:27.009-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Miami" /><category scheme="http://www.blogger.com/atom/ns#" term="Flex Camp Miami" /><category scheme="http://www.blogger.com/atom/ns#" term="Flex" /><title>Flex Camp Miami</title><content type="html">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.&lt;br /&gt;De las sesiones que mas me interesan estan:&lt;br /&gt;&lt;a href="http://flexcampmiami.com/page.cfm/agenda/in-search-of-aop-for-as3"&gt;In Search of AOP for AS3&lt;/a&gt; -&gt; Maxim Porges&lt;br /&gt;&lt;a href="http://flexcampmiami.com/page.cfm/agenda/jeremy-grelle-building-spring-powered-rias-with-adobe-flex-and-spring-blazeds-integration"&gt;Spring &amp;amp; BlazeDS Integration&lt;/a&gt; -&gt; Jeremy Grelle&lt;br /&gt;&lt;a href="http://flexcampmiami.com/page.cfm/agenda/brian-legros-continuous-integration-and-flex"&gt;Continuous Integration and Flex&lt;/a&gt; -&gt; &lt;em&gt;Brian LeGros&lt;/em&gt;&lt;br /&gt;&lt;a href="http://flexcampmiami.com/page.cfm/agenda/laura-arguello-mate-flex-framework"&gt;Mate Flex Framework&lt;/a&gt; -&gt; Laura Arguello&lt;br /&gt;&lt;br /&gt;&lt;a href="http://flexcampmiami.com/"&gt;http://flexcampmiami.com/&lt;/a&gt;&lt;br /&gt;&lt;br /&gt;--&lt;br /&gt;&lt;br /&gt;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&lt;a href="http://rbxglobal.com/"&gt; past company&lt;/a&gt; a Flex Camp in Costa Rica (presenting Mike Downey) and it was a great experience.&lt;br /&gt;The price this time is almost symbolic: $30.00 including lunch...&lt;br /&gt;I'm really excited about the following sessions:&lt;br /&gt;&lt;br /&gt;&lt;a href="http://flexcampmiami.com/page.cfm/agenda/in-search-of-aop-for-as3"&gt;In Search of AOP for AS3&lt;/a&gt; -&gt; Maxim Porges&lt;br /&gt;&lt;a href="http://flexcampmiami.com/page.cfm/agenda/jeremy-grelle-building-spring-powered-rias-with-adobe-flex-and-spring-blazeds-integration"&gt;Spring &amp;amp; BlazeDS Integration&lt;/a&gt; -&gt; Jeremy Grelle&lt;br /&gt;&lt;a href="http://flexcampmiami.com/page.cfm/agenda/brian-legros-continuous-integration-and-flex"&gt;Continuous Integration and Flex&lt;/a&gt; -&gt; &lt;em&gt;Brian LeGros&lt;/em&gt;&lt;br /&gt;&lt;a href="http://flexcampmiami.com/page.cfm/agenda/laura-arguello-mate-flex-framework"&gt;Mate Flex Framework&lt;/a&gt; -&gt; Laura &lt;span class="blsp-spelling-error" id="SPELLING_ERROR_0"&gt;Arguello&lt;/span&gt;&lt;br /&gt;&lt;br /&gt;&lt;a href="http://flexcampmiami.com/"&gt;http://flexcampmiami.com/&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8994512745672600714-4623036447095901804?l=venzaalcocodrilo.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VenzaAlCocodrilo/~4/V5kdc1pp94o" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://venzaalcocodrilo.blogspot.com/feeds/4623036447095901804/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8994512745672600714&amp;postID=4623036447095901804" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/4623036447095901804?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/4623036447095901804?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VenzaAlCocodrilo/~3/V5kdc1pp94o/flex-camp-miami.html" title="Flex Camp Miami" /><author><name>Ivan</name><uri>http://www.blogger.com/profile/18204902014543207004</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08204656968868651884" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://venzaalcocodrilo.blogspot.com/2009/03/flex-camp-miami.html</feedburner:origLink></entry><entry gd:etag="W/&quot;D0MDQ384fyp7ImA9WxVRE04.&quot;"><id>tag:blogger.com,1999:blog-8994512745672600714.post-5997050362868640678</id><published>2009-01-18T19:13:00.000-08:00</published><updated>2009-01-18T19:24:32.137-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-01-18T19:24:32.137-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Desarrollo Software" /><category scheme="http://www.blogger.com/atom/ns#" term="Programacion" /><category scheme="http://www.blogger.com/atom/ns#" term="Ingenieria" /><category scheme="http://www.blogger.com/atom/ns#" term="Opinion" /><title>Codificador o Desarrollador...?</title><content type="html">Semanas atras tuve una conversacion con un colega acerca de la diferencia entre un codificador y un desarrollador de software.&lt;br /&gt;A mi gusto (mi opinion)  es clara la diferencia, un excelente codificador (de los que hay muchos) son esos capaces de lograr cosas increibles, ganar concursos, hacer las cosas mas fuera de este mundo, rockstars... sin embargo a la hora de trabajar en equipo, seguir procesos, lineamientos, metodologias,  se vuelve complicado y hasta imposible de trabajar con el. Excelente escritor de codigo!&lt;br /&gt;Un buen desarrollador, me parece (mi opinion) que tiene mas implicito: aparte de ser un buen codificador debe tener buena comunicacion tanto verbal y escrita (de hecho se dice que el trabajo de un desarrollador incluye un 70% de su tiempo comunicandose, sea por codigo, escrito o verbalmente; sin embargo esto es en lo que menos nos preocupamos por mejorar), buen analisis y creatividad para resolver problemas, trabajo en equipo, ayudar a los otros, mejorar a las demas personas, aprender de otros, seguir procesos, estandares, agilidad y muchos atributos mas, que hacen que no sea la unica estrella de un equipo, sino que el equipo completo sea la estrella...&lt;br /&gt;Opionion mia claro, pero en realidad cada dia quiero ser un excelente desarrollador...&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8994512745672600714-5997050362868640678?l=venzaalcocodrilo.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VenzaAlCocodrilo/~4/Le2dIXVtSbk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://venzaalcocodrilo.blogspot.com/feeds/5997050362868640678/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8994512745672600714&amp;postID=5997050362868640678" title="2 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/5997050362868640678?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/5997050362868640678?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VenzaAlCocodrilo/~3/Le2dIXVtSbk/codificador-o-desarrollador.html" title="Codificador o Desarrollador...?" /><author><name>Ivan</name><uri>http://www.blogger.com/profile/18204902014543207004</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08204656968868651884" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://venzaalcocodrilo.blogspot.com/2009/01/codificador-o-desarrollador.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DkQNQns_fCp7ImA9WxJQGUo.&quot;"><id>tag:blogger.com,1999:blog-8994512745672600714.post-2233206819887832155</id><published>2008-12-14T19:10:00.001-08:00</published><updated>2009-06-02T13:26:33.544-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-02T13:26:33.544-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Gumbo" /><category scheme="http://www.blogger.com/atom/ns#" term="Catalyst" /><category scheme="http://www.blogger.com/atom/ns#" term="Flex 4" /><category scheme="http://www.blogger.com/atom/ns#" term="Prototipos" /><category scheme="http://www.blogger.com/atom/ns#" term="Flex Builder" /><category scheme="http://www.blogger.com/atom/ns#" term="Flash Catalyst" /><category scheme="http://www.blogger.com/atom/ns#" term="Flex" /><category scheme="http://www.blogger.com/atom/ns#" term="Disenadores" /><category scheme="http://www.blogger.com/atom/ns#" term="UX" /><category scheme="http://www.blogger.com/atom/ns#" term="Flash" /><category scheme="http://www.blogger.com/atom/ns#" term="Thermo" /><category scheme="http://www.blogger.com/atom/ns#" term="Diseno" /><title>Flash Catalyst</title><content type="html">Update - Junio 1 2009&lt;br /&gt;Para bajar el beta de Catalyst pueden hacerlo desde &lt;a href="https://www.adobe.com/cfusion/entitlement/index.cfm?e=labs_flashcatalyst"&gt;aquí&lt;/a&gt;. Mas info &lt;a href="http://labs.adobe.com/technologies/flashcatalyst/"&gt;aquí&lt;/a&gt;&lt;br /&gt;Se encuentra en versiones para windows y mac.&lt;br /&gt;&lt;br /&gt;A pocas semanas de una presentacion mas oficial de &lt;a href="http://labs.adobe.com/technologies/flashcatalyst/"&gt;Flash Catalyst&lt;/a&gt; (previamente conocido como Thermo) tuve la oportunidad de asistir a una presentacion sobre el tema en el &lt;a href="http://www.augatlanta.org/"&gt;Grupo de Usuarios de Adobe en Atlanta&lt;/a&gt;. Fue una excelente oportunidad para ver la herramienta, hacer preguntas y ver la respuesta de los disenadores y programadores acerca de la herramienta, quienes a final de cuenta son quienes van a utilizarla.&lt;br /&gt;Para quienes aun no saben que es, Flash Catalyst es una herramienta ideada por Adobe para el diseno de aplicaciones RIA, donde se le ofrece a los disenadores la oportunidad de verse involucrados en el desarrollo de la aplicacion de una manera mas sencilla y directa. Actualmente un disenador puede entregarle a los programadores una guia de estilos, imagenes cortadas, skins, etc y es responsabilidad del desarrollador en Flex la de poner esos elementos dentro de la aplicacion, sabiendo de antemano que por regla de dedo para la mayoria de desarrolladores si una imagen quedo en el pixel 253 y el disenador la queria en el 250, es lo mismo; sin embargo los disenadores sufren al ver tales alteraciones a su diseno y se viene la lucha por que quede todo igual como se muestra en el diseno original.&lt;br /&gt;Este tipo de escenario en Flex, se ve muy repetido y de ahi la necesidad de crear una aplicacion que le permitiria al disenador ingresar al flujo de trabajo de la aplicacion. Catalyst permitiria al disenador importar sus disenos desde un PSD o archivo de Ilustrador o Fireworks o incluso crear ciertos elementos basicos desde su IDE, a partir de ahi podra convertir sus disenos en ciertos componentes de Flex con unos cuantos clicks, por ejemplo... podemos tener una caja de colores y el disenador con un par de clicks, lo puede convertir en un boton de Flex y la herramienta por si misma generaria el codigo MXML necesario para eso, que sera provisto posteriormente al programador. Se podran tambien crear estados (que esto cambiara con el Flex 4 de la manera en que se maneja actualmente), animaciones, etc y todo a unos cuantos cliks de distancia.&lt;br /&gt;Programador y disenador podran hacer cambios a los archivos MXML desde Flex Builder u otra herramienta y se supone que Catalyst sera lo suficientemente inteligente para reconocer esos cambios y procesarlos recreando asi los cambios en los archivos sin tener que hacer todo de nuevo, mejorando muchisimo el flujo  e interaccion de diseno-programacion.&lt;br /&gt;&lt;br /&gt;Status Actual:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Catalyst funciona unicamente con el Suite CS4.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Funciona unicamente con &lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/Flex+4"&gt;Flex 4&lt;/a&gt; (que esta en etapa de prueba igualmente)&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Funciona actualmente solo en Mac OSX&lt;br /&gt;&lt;/li&gt;&lt;li&gt;Se encuentra en una fase muy temprana de desarrollo y se espera sacar un release por ahi de finales del 2009.&lt;/li&gt;&lt;/ul&gt;Ventajas:&lt;br /&gt;&lt;br /&gt;En mi opinion Catalyst podra:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Mejorar flujo y comunicacion entre disenadores y programadores.&lt;/li&gt;&lt;li&gt;Mejorar los procesos de desarrollo en empresas que utilicen ambos grupos.&lt;/li&gt;&lt;li&gt;Creacion de Prototipos (esto es lo que mas me gusta). Ya los disenadores e incluso personas de UX podrian crear prototipos funcionales sin necesidad de utilizar un programador o usar muy poco de ellos.&lt;/li&gt;&lt;/ul&gt;Este servidor tiene una copia de Catalyst con la que estara jugando en los proximos dias, mientras vaya encontrando cosas interesantes las pondre por aqui...&lt;br /&gt;Saludos&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8994512745672600714-2233206819887832155?l=venzaalcocodrilo.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VenzaAlCocodrilo/~4/aUc1lNpaMd4" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://venzaalcocodrilo.blogspot.com/feeds/2233206819887832155/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8994512745672600714&amp;postID=2233206819887832155" title="2 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/2233206819887832155?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/2233206819887832155?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VenzaAlCocodrilo/~3/aUc1lNpaMd4/flash-catalyst.html" title="Flash Catalyst" /><author><name>Ivan</name><uri>http://www.blogger.com/profile/18204902014543207004</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08204656968868651884" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://venzaalcocodrilo.blogspot.com/2008/12/flash-catalyst.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CU8BRXozcCp7ImA9WxRbFU0.&quot;"><id>tag:blogger.com,1999:blog-8994512745672600714.post-3645244780780853256</id><published>2008-12-05T11:03:00.000-08:00</published><updated>2008-12-05T11:04:14.488-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-12-05T11:04:14.488-08:00</app:edited><title>El Modelo Alfabetico</title><content type="html">¿Quieres ser hombre completo,&lt;br /&gt;hombre a prueba de alfabeto?&lt;br /&gt;Se amable, activo, aseado,&lt;br /&gt;bondadoso y bienhablado,&lt;br /&gt;Claro, mas cauto en confianzas,&lt;br /&gt;sordo a chismes. parco en chanzas,&lt;br /&gt;libre en digna dependencia&lt;br /&gt;del deber y la conciencia;&lt;br /&gt;Experto en algo especial,&lt;br /&gt;franco, fiel, firme, formal,&lt;br /&gt;Grato, generoso, humano,&lt;br /&gt;buen hijo, esposo y hermano,&lt;br /&gt;ejemplo a la ingenua infancia;&lt;br /&gt;Justo, jovial sin jactancia;&lt;br /&gt;gentil en serios hechizos,&lt;br /&gt;no en modas, polkas y rizos;&lt;br /&gt;Leal a la Ley, laborioso,&lt;br /&gt;modesto, no malicioso,&lt;br /&gt;natural, noble en tu modo;&lt;br /&gt;con orden y objeto en todo;&lt;br /&gt;Paciente y perseverante&lt;br /&gt;( Primer prenda del triunfante);&lt;br /&gt;Patriota puro y pacifico;&lt;br /&gt;puntual, no en parla prolífico&lt;br /&gt;ni Quijote o Quejumbroso.&lt;br /&gt;Se realmente religioso&lt;br /&gt;sin superstición salvaje,&lt;br /&gt;Sobrio en juicio, en boca, en traje;&lt;br /&gt;Servicial muy tolerante&lt;br /&gt;Útil, veraz, vigilante,&lt;br /&gt;Valiente, no vengativo,&lt;br /&gt;ni un Yoista repulsivo.&lt;br /&gt;se exacto como un reloj&lt;br /&gt;nunca zángano, ni Zafio;&lt;br /&gt;se otro Washington, si hay dos;&lt;br /&gt;y haz que diga tu epitafio:&lt;br /&gt;Honro a Padres, Patria y Dios.&lt;br /&gt;&lt;br /&gt;Rafael Pombo&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8994512745672600714-3645244780780853256?l=venzaalcocodrilo.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VenzaAlCocodrilo/~4/abB12D4MaOI" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://venzaalcocodrilo.blogspot.com/feeds/3645244780780853256/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8994512745672600714&amp;postID=3645244780780853256" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/3645244780780853256?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/3645244780780853256?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VenzaAlCocodrilo/~3/abB12D4MaOI/el-modelo-alfabetico.html" title="El Modelo Alfabetico" /><author><name>Ivan</name><uri>http://www.blogger.com/profile/18204902014543207004</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08204656968868651884" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://venzaalcocodrilo.blogspot.com/2008/12/el-modelo-alfabetico.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CUACQH04fCp7ImA9WxRWF0o.&quot;"><id>tag:blogger.com,1999:blog-8994512745672600714.post-1950566850802508434</id><published>2008-11-03T20:36:00.000-08:00</published><updated>2008-11-03T20:42:41.334-08:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-11-03T20:42:41.334-08:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="Games" /><category scheme="http://www.blogger.com/atom/ns#" term="Smartfox Server" /><category scheme="http://www.blogger.com/atom/ns#" term="Terracota" /><category scheme="http://www.blogger.com/atom/ns#" term="Flex" /><category scheme="http://www.blogger.com/atom/ns#" term="SFS" /><category scheme="http://www.blogger.com/atom/ns#" term="Juegos" /><category scheme="http://www.blogger.com/atom/ns#" term="Flash" /><title>Smartfox Server - Servidor Juegos para Flash</title><content type="html">Como muchos de los hits de este blog vienen de un &lt;a href="http://as3gamesclasses.blogspot.com/"&gt;blog&lt;/a&gt;  dedicado a la creacion de juegos en Flash y Flex y como tengo un poco(&lt;span style="font-weight: bold;"&gt;muy poco&lt;/span&gt;) de experiencia en esa area sobre todo tratando con servidores para juegos o para chat, he decidido subir un pequeno codigo que crea una muy simple aplicacion en Flex que se encarga de conectarse a un servidor de juegos que se llama &lt;a href="http://www.smartfoxserver.com/"&gt;SmartFoxServer&lt;/a&gt;  que es uno de los varios servidores de juegos para flash. Este esta basado en Java lo cual permite que el servidor corra en Linux, Windows o Mac OS sin ningun problema. La &lt;a href="http://www.smartfoxserver.com/docs/"&gt;documentacion&lt;/a&gt; y ejemplos es bastante buena, aparte de un buen soporte del vendedor.&lt;br /&gt;Este ejemplo funciona con la licencia gratuita del Smartfox Pro, que es para 20 usuarios concurrentes. Es una simple comunicacion de chat(envio de mensajes) entre varios usarios, conectados a un cuarto, aunque puede crecer utilizando variables de usuario, variables de cuarto ambas excelentes para la creacion de MMOs o Juegos masivos donde los usuarios ven como se mueven los otros usuarios en tiempo real... creacion de cuartos dinamicos, etc, etc, etc.&lt;br /&gt;El servidor es muy completo, lo unico es que su escalabilidad no es tan sencilla aunque ahora se brinda una solucion con &lt;a href="http://www.terracotta.org/"&gt;Terracota&lt;/a&gt;, una utilidad que nos permite tener varias maquinas virtuales en varios servidores, como si fuera una sola.&lt;br /&gt;&lt;br /&gt;Codigo &lt;a href="http://www.grayscaleconsulting.com-a.googlepages.com/SmartfoxProject.zip"&gt;adjunto&lt;/a&gt;, la clase que maneja la interaccion es: SmartfoxInteraction.as, el servidor de SFS debe estar corriendo antes de ejecutar la aplicacion.&lt;br /&gt;Saludos&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8994512745672600714-1950566850802508434?l=venzaalcocodrilo.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VenzaAlCocodrilo/~4/N3xDBDVeTeQ" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://venzaalcocodrilo.blogspot.com/feeds/1950566850802508434/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8994512745672600714&amp;postID=1950566850802508434" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/1950566850802508434?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/1950566850802508434?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VenzaAlCocodrilo/~3/N3xDBDVeTeQ/smartfox-server-servidor-juegos-para.html" title="Smartfox Server - Servidor Juegos para Flash" /><author><name>Ivan</name><uri>http://www.blogger.com/profile/18204902014543207004</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08204656968868651884" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://venzaalcocodrilo.blogspot.com/2008/11/smartfox-server-servidor-juegos-para.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DE4FQ3s6eSp7ImA9WxRXGEw.&quot;"><id>tag:blogger.com,1999:blog-8994512745672600714.post-2772985877091442718</id><published>2008-10-23T19:40:00.001-07:00</published><updated>2008-10-23T19:55:12.511-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-23T19:55:12.511-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="AUGCostaRica" /><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="CRJug" /><category scheme="http://www.blogger.com/atom/ns#" term="Ulatina" /><category scheme="http://www.blogger.com/atom/ns#" term="AJAX" /><category scheme="http://www.blogger.com/atom/ns#" term="Flex" /><title>Costa Rica Java User Group</title><content type="html">Que bueno fue poder haber asistido a la reunion del &lt;a href="http://www.crjug.org/"&gt;Grupo de Usuarios de Java de Costa Rica&lt;/a&gt; hoy en la Ulatina... aparte de que fuera una excelente oportunidad para conocer a otros desarrolladores en otras areas, fue excelente poder ver la exposicion de &lt;a href="http://galbraiths.org/blog/"&gt;Ben Galbraith&lt;/a&gt; y de &lt;a href="http://almaer.com/blog/"&gt;Dion Almaer&lt;/a&gt;.&lt;br /&gt;Estos dos son de los mejores expositores que he visto en mi vida. Una claridad... tanto en los slides usados como en los ejemplos como en la interaccion entre ambos, el conocimiento que tienen... sin palabras!!! En cuanto al contenido de la presentacion bastante claro, empezando por una EXCELENTE introduccion a la necesidad de crear mejores experiencias de interactividad al usuario y como una interfaz no solo bonita, sino que cumpla con el objetivo del usuario puede marcar la diferencia (mostraron bastantes ejemplos). Ademas, fue impresionante ver el desarrollo que ha tenido AJAX y lo que esta pronto por salir... pude ver cosas que pense nunca poder ver en un browser sin correr una maquina virtual como el Flash Player o Java Virtual Machine. Igual... no cambio a Flex... aunque lo que vi fue bastante impresionante y esto ayuda a que todo se ponga mejor y haya mas competencias para brindar mejores experiencias a los usuarios.&lt;br /&gt;Felicidades a &lt;a href="http://www.linkedin.com/in/mquesada"&gt;Maricel &lt;/a&gt;la organizadora del grupo y su grupo de ayudantes... iniciativas de este tipo y &lt;a href="http://augcostarica.org/"&gt;otras &lt;/a&gt;que ya hay, son las que ocupamos para poder crecer como pais en conocimiento y tecnologia...&lt;br /&gt;Por cierto, en la rifa del final me gane un excelente &lt;a href="http://www.amazon.com/Java-Concurrency-Practice-Brian-Goetz/dp/0321349601"&gt;libro&lt;/a&gt;... Yaaayyy!!!&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8994512745672600714-2772985877091442718?l=venzaalcocodrilo.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VenzaAlCocodrilo/~4/FezPQQFFt50" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://venzaalcocodrilo.blogspot.com/feeds/2772985877091442718/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8994512745672600714&amp;postID=2772985877091442718" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/2772985877091442718?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/2772985877091442718?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VenzaAlCocodrilo/~3/FezPQQFFt50/costa-rica-java-user-group.html" title="Costa Rica Java User Group" /><author><name>Ivan</name><uri>http://www.blogger.com/profile/18204902014543207004</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08204656968868651884" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://venzaalcocodrilo.blogspot.com/2008/10/costa-rica-java-user-group.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUcBRX8yfyp7ImA9WxRXE00.&quot;"><id>tag:blogger.com,1999:blog-8994512745672600714.post-1811540232425879432</id><published>2008-10-17T21:46:00.000-07:00</published><updated>2008-10-17T22:17:34.197-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-17T22:17:34.197-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="RPC" /><category scheme="http://www.blogger.com/atom/ns#" term="FlexUnit" /><category scheme="http://www.blogger.com/atom/ns#" term="Tests" /><category scheme="http://www.blogger.com/atom/ns#" term="Fluint" /><category scheme="http://www.blogger.com/atom/ns#" term="AS3" /><category scheme="http://www.blogger.com/atom/ns#" term="Flex" /><category scheme="http://www.blogger.com/atom/ns#" term="Async" /><category scheme="http://www.blogger.com/atom/ns#" term="Integracion" /><title>Pruebas - Integracion de Aplicaciones</title><content type="html">Aunque nuestros desarrolladores de lado del servidor prueben su codigo, y nosotros probemos nuestro codigo (con flex unit, mercury, flexmonkey o lo que queramos usar) el proceso de integracion entre cliente y servidor es necesario probarlo con ambos capas interactuando juntas (no solo por aparte) y de manera &lt;a href="http://martinfowler.com/articles/continuousIntegration.html"&gt;continua y automatizada&lt;/a&gt; para comprobar cualquier cambio o problema que se pueda encontrar.&lt;div&gt;Con Flex el problema es que nuestros llamados son asincronimos y no tenemos idea cuando vamos a recibir la informacion de vuelta. Esto hace que nuestros tests usando &lt;a href="http://opensource.adobe.com/wiki/display/flexunit/FlexUnit"&gt;FlexUnit &lt;/a&gt;(la principal unidad de pruebas para flex) pasen efectivamente aunque la respuesta del servidor no sea correcta (esto por la naturaleza sincronica del flexunit) ya que el assert no se ejecuta hasta que se regrese el llamado del servidor y la unica forma de arreglar esto es usando un pequeno hack con un Timer, que la verdad hace el diseno de pruebas complicado, tedioso y dificil de mantener.&lt;/div&gt;&lt;div&gt;En cambio utilizando la unidad de pruebas llamada &lt;a href="http://code.google.com/p/fluint/"&gt;Fluint&lt;/a&gt; tenemos una orientacion completa a llamados asincronimos. La naturaleza de la unidad es esa y falicita las pruebas no solo de llamadas remotas, sino tambien de creacion de componentes, integracion de componentes, etc. Su documentacion aunque no es la mejor es bastante buena y el codigo es abierto. Tiene ademas un Runner de las pruebas que es ejecutable en AIR,  y genera reportes en archivos XML intepretables por parte de alguna herramienta que utilicemos para el continuous integration, como &lt;a href="http://cruisecontrol.sourceforge.net/"&gt;Cruise Control&lt;/a&gt; o &lt;a href="https://hudson.dev.java.net/"&gt;Hudson&lt;/a&gt;. &lt;/div&gt;&lt;div&gt;En general Fluint cumple mas alla de mis expectativas ya que su soporte asyncronimo es perfecto para todo lo que ocupamos probar, a diferencia de lo que hacer FlexUnit. Mas adelante quisiera exponer un poco con herramientas de automatizacion de pruebas como &lt;a href="http://flexexamples.blogspot.com/2007/12/flex-30-installing-and-configuring-flex.html"&gt;Mercury &lt;/a&gt;o&lt;a href="http://code.google.com/p/flexmonkey/wiki/QuickTutorial"&gt; Flex Monkey&lt;/a&gt; que parece ser una excelente opcion open source para esto.&lt;/div&gt;&lt;div&gt;Todo esto como buenas practicas que desarrolladores de Flex deberiamos de tener en nuestro repertorio... Son cosas MUY importantes y que crearan un desarrollo mas fluido y tranquilo. &lt;/div&gt;&lt;div&gt;Aqui un pequeno y muy BASICO ejemplo para probar llamadas remotas:&lt;/div&gt;&lt;div&gt;&lt;pre class="csharpcode"&gt;/**&lt;br /&gt;* Prueba, invocamos al metodo login de nuestro servicio con&lt;br /&gt;* los parametros &lt;span class="str"&gt;'username y '&lt;/span&gt;password&lt;span class="str"&gt;'&lt;br /&gt;* y se crea un responder de tipo TestRespoder que provee Fluint para&lt;br /&gt;* poder saber quien recibira que en nuestro llamado&lt;br /&gt;*/&lt;br /&gt;public function testLoginService():void&lt;br /&gt;{&lt;br /&gt;   var responder:IResponder = asyncResponder(&lt;br /&gt;                new TestResponder( handleResult, handleFault ) , 3000 );&lt;br /&gt;   var token:AsyncToken = remote.getOperation('&lt;/span&gt;login').send("username",&lt;br /&gt;                                                            "password");&lt;br /&gt;   token.addResponder(responder);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Handle del &lt;span class="kwrd"&gt;result&lt;/span&gt; de la llamada. Hacemos el Assert.&lt;br /&gt;*/&lt;br /&gt;private &lt;span class="kwrd"&gt;function&lt;/span&gt; handleResult( &lt;span class="kwrd"&gt;data&lt;/span&gt;:&lt;span class="kwrd"&gt;Object&lt;/span&gt;, passThroughData:&lt;span class="kwrd"&gt;Object&lt;/span&gt; ):void&lt;br /&gt;{&lt;br /&gt;   trace(&lt;span class="kwrd"&gt;data&lt;/span&gt;);&lt;br /&gt;       assertNotNull(&lt;span class="kwrd"&gt;data&lt;/span&gt;);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;/**&lt;br /&gt;* Handle del fault de la llamada. Inmediatamente despachamos un&lt;br /&gt;* Fail del test.&lt;br /&gt;*/&lt;br /&gt;private &lt;span class="kwrd"&gt;function&lt;/span&gt; handleFault(  info:&lt;span class="kwrd"&gt;Object&lt;/span&gt;, passThroughData:&lt;span class="kwrd"&gt;Object&lt;/span&gt; ):void&lt;br /&gt;{&lt;br /&gt;       fail("Received fault &lt;span class="kwrd"&gt;from&lt;/span&gt; Server: " + info);&lt;br /&gt;}&lt;br /&gt;&lt;br /&gt;&lt;/pre&gt;&lt;br /&gt;&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8994512745672600714-1811540232425879432?l=venzaalcocodrilo.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VenzaAlCocodrilo/~4/41eLjcFH2CU" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://venzaalcocodrilo.blogspot.com/feeds/1811540232425879432/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8994512745672600714&amp;postID=1811540232425879432" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/1811540232425879432?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/1811540232425879432?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VenzaAlCocodrilo/~3/41eLjcFH2CU/pruebas-integracion-de-aplicaciones.html" title="Pruebas - Integracion de Aplicaciones" /><author><name>Ivan</name><uri>http://www.blogger.com/profile/18204902014543207004</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08204656968868651884" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://venzaalcocodrilo.blogspot.com/2008/10/pruebas-integracion-de-aplicaciones.html</feedburner:origLink></entry><entry gd:etag="W/&quot;CEECRH8zfip7ImA9WxRQEUU.&quot;"><id>tag:blogger.com,1999:blog-8994512745672600714.post-2205592038175284368</id><published>2008-10-04T21:54:00.000-07:00</published><updated>2008-10-04T21:57:45.186-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-10-04T21:57:45.186-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Java" /><category scheme="http://www.blogger.com/atom/ns#" term="Remoting" /><category scheme="http://www.blogger.com/atom/ns#" term="Flex" /><category scheme="http://www.blogger.com/atom/ns#" term="Aplicaciones" /><category scheme="http://www.blogger.com/atom/ns#" term="Integracion" /><title>Integracion de Aplicaciones con Flex</title><content type="html">Recientemente me solicitaron dar un training para desarrolladores de Flex para Java. Mi proposito era primordialmente presentar la herramienta de Flex a nuestros desarrolladores (que son bastantes) y a la vez enfocarme en la necesidad de estandarizar el proceso de la creacion de aplicaciones que utilicen ambas tecnologias.&lt;div&gt;&lt;br /&gt;Mi transfondo tecnico viene de Java y hace cuestion de dos anos le agregue a mi carrera el Flex. Fue una desicion dificil y confusa por la falta de conocimiento de dicha tecnologia, pero al final creo que tome la desicion correcta. Java y Flex es una mezcla excelente para la creacion de aplicaciones y tener un conocimiento en ambas tecnologias me ha podido dar una valor agregado para ofrecer. &lt;/div&gt;&lt;div&gt;&lt;br /&gt;Creo que en esto de aplicaciones con Flex y Java hay mucha tela que cortar. He hablado previamente de tecnicas como el remoting, llamadas asincronimas y otras cosas que nos permiten comunicarnos con el servidor para interactuar en nuestra aplicacion, sin embargo el sentido de este post va mas orientado al proceso y trabajo que tiene que haber para unir a estos dos juntos...&lt;br /&gt;Flex como front end provee muchas ventajas que otras herramientas no pueden proveer en un 100%, empezando por que el virtual machine donde corre (Flash Player) esta instalado en mas de un 95% de las computadoras del mundo. Java, un lenguaje maduro, activo, con una comunidad de desarrolladores de mucha experiencia y que va rejuveneciendose poco a poco es una excelente desicion para construir aplicaciones transaccionales. La ventaja con Flex es que no solamente tiene que trabajar con Java, el puede trabajar con .Net, Ruby, PHP, etc... lo cual permite que la escogencia del servidor de aplicacion sea mas flexible.&lt;/div&gt;&lt;div&gt;&lt;br /&gt;Pero como dije.. este post no va en lo tecnico, que es mejor?, cual es mas rapido?, etc... este post va mas orientado al proceso de integracion entre Flex y una aplicacion de servidor, escrita en el lenguaje que usted quiera. Parte de mis conocimientos tecnicos hablare mas sobre java.&lt;br /&gt;He podido trabajar en varias aplicaciones de tamano considerable en las que se usa Flex y una aplicacion en el servidor (Java en cada caso y ayude en una con PHP). En todos los casos noto lo mismo:&lt;br /&gt;&lt;br /&gt;&lt;span style="font-style:italic;"&gt;&lt;span class="Apple-style-span" style="font-weight: bold;"&gt;La integracion es la etapa mas dificil de todo.&lt;/span&gt; &lt;/span&gt;&lt;br /&gt;&lt;br /&gt;Una incorrecta integracion hace que todo el desarrollo sea mucho mas lento. Podemos desarrollar nuestra aplicacion Flex en un dia y la aplicacion en el servidor en un dia tambien... y la integracion de algo sencillo puede tomar 2 dias mas...&lt;br /&gt;Aqui una lista de razones por las que pienso esto pasa:&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Falta de comunicacion entre los equipos de desarrollo. No se mantienen reuniones entre los equipos donde se definan que servicios, metodos, parametros y tipos de retorno se van a maneja o cambios que se hayan realizado. Esto hace que sea todo una caja negra, que se trate de integrar algo y se pasen parametros equivocados, que se llamen a metodos incorrectos, que se esperen valores distintos. &lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Relacionado con lo anterior... no existe documentacion de los servicios expuestos por la aplicacion para ser accesados desde el front end. Si existiera una documentacion detallando descripcion, nombre del metodo, parametros, tipo de retorno, etc. que pueda ser accesado por todos los desarrolladores, en un solo lugar (wiki, etc.) facilitaria muchisimo la comunicacion y el desarrollo no se veria tan parado al hacer la integracion.&lt;br /&gt;&lt;/li&gt;&lt;li&gt;No existen por lo general pruebas de integracion. Podemos crear JUnits para probar nuestros metodos en Java, podemos crear Flex Units para probar metodos en Flex, pero por lo general no existe un mecanismo para probar la integracion. Por que es necesario probar esto? Bueno.. aunque nuestros JUnits salgan correctamente, debemos recordar que en el medio (entre Flex y nuestro back end) hay una capa de comunicacion en lo que pueden pasar muchisimas cosas, desde tipos de datos no reconocidos, nombres incorrectos de metodos hasta problemas con el servidor, que debemos ser capaces de probar. Mi propuesta inicial es hacer Flex Units con soporte para operaciones asincronimas que sean ejecutadas desde la maquina del developer del Back End y se encarguen de llamar los metodos remotos. Si algo falla en esos tests units a la hora de interactuar con los servicios o metodos provistos por nuestro back end, podran ser revisados y corregidos por parte de nuestros desarrolladores. Los programadores en Flex mientras tanto, pueden continuar con otras tareas sin tener que esperar a que cada vez que algo falle, sean arreglados.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;Otra herramienta que he visto y me parece muy interesante es el uso de Mercury Pro, que viene con el Flex Builder y te permite crear pruebas de aplicaciones a modo de macros o robot, donde se graba una interaccion con una aplicacion y se graba toda la secuencia para probar que siempre de el mismo resultado. Igualmente si Flex Unit no te es funcional, puedes crear tu propia unidad de pruebas, talvez demore mas tiempo pero te dara mayor tranquilidad.&lt;br /&gt;&lt;br /&gt;Otros pensamientos relacionados:&lt;br /&gt;&lt;br /&gt;&lt;ul&gt;&lt;li&gt;Quien lleva la batuta a la hora de escoger que metodos o servicios se van a exponer en una aplicacion al front end? Sera tarea solo del back end o tarea del front end? Estoy convencido que es una tarea  de ambos equipos y que la comunicacion tiene que ser clave y en doble via. Front End provee una perspectiva de lo que necesita ser ingresado por el usuario para funcionar, pero back end provee una vision completa de todo lo que ocurre en un sistema y no solo en una pantalla. Nada peor que una aplicacion disenada enteramente por pantallas.. de ahi mi consejo de establecer estos servicios y metodo de forma conjunta.&lt;/li&gt;&lt;/ul&gt;&lt;ul&gt;&lt;li&gt;Aunque de pereza y duplique el trabajo, es NECESARIO el uso de DTO's o Value Objects para comunicar informacion del back end al front end, sobre todo si se usa Remoting. Esto es necesario para evitar problemas con sesiones, enumeraciones y otras cosas que no esten aceptadas por Flex y que vayan a ser recibidas incorrectamete ademas nos permite obtener abstracciones mas exactas a lo que necesitemos.&lt;br /&gt;&lt;/li&gt;&lt;/ul&gt;&lt;br /&gt;Espero poder ahondar en otros temas relacionados a esto en un futuro...&lt;/div&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8994512745672600714-2205592038175284368?l=venzaalcocodrilo.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VenzaAlCocodrilo/~4/hyz0QdG5QWk" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://venzaalcocodrilo.blogspot.com/feeds/2205592038175284368/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8994512745672600714&amp;postID=2205592038175284368" title="0 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/2205592038175284368?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/2205592038175284368?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VenzaAlCocodrilo/~3/hyz0QdG5QWk/integracion-de-aplicaciones-con-flex.html" title="Integracion de Aplicaciones con Flex" /><author><name>Ivan</name><uri>http://www.blogger.com/profile/18204902014543207004</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08204656968868651884" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">0</thr:total><feedburner:origLink>http://venzaalcocodrilo.blogspot.com/2008/10/integracion-de-aplicaciones-con-flex.html</feedburner:origLink></entry><entry gd:etag="W/&quot;DUYGQH4_eyp7ImA9WxRSGUs.&quot;"><id>tag:blogger.com,1999:blog-8994512745672600714.post-52648566762329033</id><published>2008-09-20T19:26:00.000-07:00</published><updated>2008-09-20T20:18:41.043-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2008-09-20T20:18:41.043-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="AIR" /><category scheme="http://www.blogger.com/atom/ns#" term="Componentes" /><category scheme="http://www.blogger.com/atom/ns#" term="Tag Cloud" /><category scheme="http://www.blogger.com/atom/ns#" term="Flex" /><category scheme="http://www.blogger.com/atom/ns#" term="Components" /><title>Flex Tag Cloud Component Version 0.1 - English Below...</title><content type="html">&lt;object classid="clsid:D27CDB6E-AE6D-11cf-96B8-444553540000" id="CloudTag Component" codebase="http://fpdownload.macromedia.com/get/flashplayer/current/swflash.cab" height="400" width="200"&gt;
&lt;br /&gt;&lt;param name="movie" value=".swf"/&gt;
&lt;br /&gt;&lt;param name="quality" value="high"/&gt;
&lt;br /&gt;&lt;param name="bgcolor" value="#869ca7"/&gt;
&lt;br /&gt;&lt;param name="allowScriptAccess" value="sameDomain"/&gt;&lt;embed src="http://www.grayscaleconsulting.com/TagCloudExample.swf" bgcolor="#869ca7" width="400" height="200" name="CloudTag" align="middle" play="true" loop="false" quality="high" allowscriptaccess="sameDomain" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer"/&gt;&lt;/object&gt;&lt;br&gt;
&lt;br /&gt;Trabajando en un proyecto personal en AIR, encontre la necesidad de usar un componente de tipo &lt;a href="http://es.wikipedia.org/wiki/Tag_cloud"&gt;Tag Cloud&lt;/a&gt; Lo primero que hice fue buscar por un componente hecho en Google, pero no pude encontrar nada asi que decididi empezar a disenar el mio. El resultado esta arriba.
&lt;br /&gt;El componente es rellenado con un Array de Tags. Un Tag es un objeto con tres propiedades: tagId,description y count; el primero un identificador unico y numerico del tag en caso que se necesite, el segundo la descripcion o texto del tag y el ultimo la cantidad de repeticiones de un tag, que indicaran el tamano del tag en el componente. Cuando se presiona un tag se despacha un evento tipo TagCloudEvent con la informacion del tag.
&lt;br /&gt;Aun no esta completo, se necesita trabajar en estilos y poner el codigo disponible en alguna forma, por ahora se puede bajar un SWC con el componente y el ejemplo.
&lt;br /&gt;
&lt;br /&gt;&lt;a href="http://www.grayscaleconsulting.com/TagCloudExample.mxml"&gt;Ejemplo&lt;/a&gt;
&lt;br /&gt;&lt;a href="http://www.grayscaleconsulting.com/GrayscaleLibrary.swc"&gt;Componente&lt;/a&gt;
&lt;br /&gt;
&lt;br /&gt;
&lt;br /&gt;While working a personal project in AIR I ran into the need of using a simple sort of "&lt;a href="http://en.wikipedia.org/wiki/Tag_cloud"&gt;Tag Cloud&lt;/a&gt;" component. I decided to "googled" out for a component already created but I wasn't able to find anything so decided to sit and create my own component.. it's not perfect and still needs a lot of work (specially with styles) but is functional...
&lt;br /&gt;The Component is filled with an array of Tag objects. A Tag object contains a numerical Id, a description and a count with the amount of appearances of the tag which is used to decide the size of it in the cloud. When a Tag is clicked a TagCloudEvent is dispatched with the information of the tag so that you can use that information to search or do what ever you need...
&lt;br /&gt;As I said there's still a lot of work needed to be done and will release it's code later, for now you can download the swc component and the example of how to use it.
&lt;br /&gt;
&lt;br /&gt;&lt;a href="http://www.grayscaleconsulting.com/TagCloudExample.mxml"&gt;Example&lt;/a&gt;
&lt;br /&gt;&lt;a href="http://www.grayscaleconsulting.com/GrayscaleLibrary.swc"&gt;Component&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8994512745672600714-52648566762329033?l=venzaalcocodrilo.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VenzaAlCocodrilo/~4/E8qcoqzQrhg" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://venzaalcocodrilo.blogspot.com/feeds/52648566762329033/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8994512745672600714&amp;postID=52648566762329033" title="1 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/52648566762329033?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/52648566762329033?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VenzaAlCocodrilo/~3/E8qcoqzQrhg/flex-cloudtag-component-version-01.html" title="Flex Tag Cloud Component Version 0.1 - English Below..." /><author><name>Ivan</name><uri>http://www.blogger.com/profile/18204902014543207004</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08204656968868651884" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">1</thr:total><feedburner:origLink>http://venzaalcocodrilo.blogspot.com/2008/09/flex-cloudtag-component-version-01.html</feedburner:origLink></entry><entry gd:etag="W/&quot;Dk8MQno_fyp7ImA9WxJQGUo.&quot;"><id>tag:blogger.com,1999:blog-8994512745672600714.post-4907585312925909117</id><published>2008-07-30T14:34:00.000-07:00</published><updated>2009-06-02T13:34:43.447-07:00</updated><app:edited xmlns:app="http://www.w3.org/2007/app">2009-06-02T13:34:43.447-07:00</app:edited><category scheme="http://www.blogger.com/atom/ns#" term="Flex 4" /><category scheme="http://www.blogger.com/atom/ns#" term="Flex Builder" /><category scheme="http://www.blogger.com/atom/ns#" term="Flash Catalyst" /><category scheme="http://www.blogger.com/atom/ns#" term="Flash Builder" /><title>Flex 4</title><content type="html">&lt;span style="font-weight: bold;"&gt;UPDATE:&lt;/span&gt; Junio 1 2009, &lt;a href="http://www.adobe.com/cfusion/entitlement/index.cfm?e=labs_flashbuilder4"&gt;aqui &lt;/a&gt;pueden bajar el &lt;a href="http://labs.adobe.com/technologies/flashbuilder4/"&gt;Flash Builder&lt;/a&gt; (antiguo Flex Builder) version que viene con un nuevo release del beta del Flex 4.  Si busca sobre Catalyst &lt;a href="http://venzaalcocodrilo.blogspot.com/2009/06/flash-catalyst-y-flash-builder.html"&gt;aquí&lt;/a&gt;.&lt;br /&gt;Saludos&lt;br /&gt;&lt;br /&gt;Flex 4 (nombre de codigo Gumbo) se alista para entrar el proximo ano y ya se empiezan a visualizar ciertas cosas nuevas en el framework.&lt;br /&gt;Lo que mas interesante me ha parecido es el manejo que piensan dar a los &lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/Gumbo+Component+Architecture"&gt;componentes&lt;/a&gt;. Me parece que ahora piensan dar mas "composicion" que "herencia" entre los componentes (esto viendolo ahorita) lo cual permitira hacer cosas mas elegantemente y donde se podran ver involucrados disenadores de manera mas sencilla. Pueden comprobarlo a traves de este video.&lt;br /&gt;&lt;br /&gt;&lt;embed src="http://tv.adobe.com/Embed_400x250.swf" bgcolor="#000000" name="AdobeTVPlayer" play="true" loop="false" quality="high" allowscriptaccess="always" type="application/x-shockwave-flash" pluginspage="http://www.adobe.com/go/getflashplayer" flashvars="v=http%3A//adobe.edgeboss.net/flash/adobe/adobetvprod/adc_presents/64_adc_018.flv%3Frss_feedid%3D1216%26xmlvers%3D2&amp;amp;feedid=1216" width="400" height="250"&gt;&lt;/embed&gt;&lt;br /&gt;&lt;br /&gt;Su estructura en el manejo de estados tambien cambio me parece para hacerlo mas sencillo, se creo un nuevo namespace &lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/MXML+2009"&gt;MXML 2009&lt;/a&gt; lo cual en teoria permitiria el manejo de cosas nuevas y otras de la version 3 al mismo tiempo, tambien tiene compatibilidad nativa con nuevas funcionalidades del Flash 10 (en desarrollo aun), un nuevo formato para manejo de imagenes, etc, etc&lt;br /&gt;Parece que esta actualizacion de Flex 3 a Flex 4 va a tener mucho mas cambios que del 2 al 3 lo cual implicara en los desarrolladores un esfuerzo mayor para empezar a aprender y dominar los cambios para estar listos para hacer uso de la funcionalidad que traiga.&lt;br /&gt;En lo personal creo que Flex 3 estara por bastante tiempo mas, pero vale la pena ir enfilandose a los nuevos cambios para estar preparado para cuando sea necesario utilizarlo.&lt;br /&gt;&lt;br /&gt;Mas informacion:&lt;br /&gt;&lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/Gumbo"&gt;Sitio oficial&lt;/a&gt;&lt;br /&gt;&lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/Enhanced+States+Syntax"&gt;Cambios en los estados&lt;/a&gt;&lt;br /&gt;&lt;a href="http://opensource.adobe.com/wiki/display/flexsdk/Gumbo+Component+Architecture"&gt;Cambios en componentes&lt;/a&gt;&lt;div class="blogger-post-footer"&gt;&lt;img width='1' height='1' src='https://blogger.googleusercontent.com/tracker/8994512745672600714-4907585312925909117?l=venzaalcocodrilo.blogspot.com'/&gt;&lt;/div&gt;&lt;img src="http://feeds.feedburner.com/~r/VenzaAlCocodrilo/~4/vaHPGIkrl6w" height="1" width="1"/&gt;</content><link rel="replies" type="application/atom+xml" href="http://venzaalcocodrilo.blogspot.com/feeds/4907585312925909117/comments/default" title="Enviar comentarios" /><link rel="replies" type="text/html" href="https://www.blogger.com/comment.g?blogID=8994512745672600714&amp;postID=4907585312925909117" title="2 comentarios" /><link rel="edit" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/4907585312925909117?v=2" /><link rel="self" type="application/atom+xml" href="http://www.blogger.com/feeds/8994512745672600714/posts/default/4907585312925909117?v=2" /><link rel="alternate" type="text/html" href="http://feedproxy.google.com/~r/VenzaAlCocodrilo/~3/vaHPGIkrl6w/video-flex-4.html" title="Flex 4" /><author><name>Ivan</name><uri>http://www.blogger.com/profile/18204902014543207004</uri><email>noreply@blogger.com</email><gd:extendedProperty name="OpenSocialUserId" value="08204656968868651884" /></author><thr:total xmlns:thr="http://purl.org/syndication/thread/1.0">2</thr:total><feedburner:origLink>http://venzaalcocodrilo.blogspot.com/2008/07/video-flex-4.html</feedburner:origLink></entry></feed>
