« Mayo 2004 | Inicio | Julio 2004 »

Junio 30, 2004

ø60 horas a la semana?

øQuÈ pasa cuando un proyecto est· mal gestionado?. Cuando no hay recursos suficientes, ni medios, ni tiempo.... Cuando no se escucha a las personas que conocen el proyecto porque lo han desarrollado, cuando se quiere enseÒar a un cliente algo que no est· hecho y que no se va a poder hacer a tiempo, cuando se supedita la calidad del desarrollo a la visibilidad inmediata,......

Pues que al final hay que suplirlo todo con el esfuerzo y sacrificio personal de los miembros del equipo. Lo cual, dicho de otra forma, quiere decir normalmente jornadas de m·s de 12 horas durante perÌodos de tiempo que no suelen ser particularmente cortos. Olvidarse de vacaciones, de fines de semana, de sentarte un rato en una terraza,....

Y sobre todo, y lo peor, el ver cÛmo el nivel de ilusiÛn decae, y que cada mes, cada dÌa que pasa tienes menos fuerzas y ganas de hacer cosas.

øEs cosa mÌa, o la balanza de las responsabilidades est· muy desequilibrada?

Junio 24, 2004

Redescubriendo el libro de B. Hall y S. Wan

No hace mucho ( no sabrÌa ahora mismo cuantificar cuanto, si fue hace dos meses, tres, cuatro...) contaba Oscar Trelles en su blog que estaba releyendo el libro de Branden Hall y de Samuel Wan "Object-Oriented Programming with ActionScript" y que le estaba resultando muy interesante, bastante m·s que la primera vez que lo leyÛ.

Bueno, pues a mÌ me est· pasando algo parecido. La primera vez que lo leÌ, no lo entendÌa bien y me parecÌa como un tanto abstracto.

Ahora estoy procediendo a releerlo y est· todo como muy claro y evidente. Es normal, ha pasado mucho desde que lo leÌ, y desde entonces aprendÌ mucho.

Me est· resultando muy interesante los capÌtulos 4 y 5, con el patrÛn MVP ( modelo vista presentador ) que como explica es una versiÛn del muy comentado estos dÌas MVC.
Bueno, sigo leyendo, y cuando termine pues a por el siguiente, que ser· el de C. Moock y luego el de flashcom de Brian Lesser y Peldi y compaÒÌa y luego el de... y luego el de.....

Que tiempos cuando me iba a la cama o viajaba en tren leyendo novelas de espÌas. :(

Junio 23, 2004

TerminÛ el curso de AS

Bueno, pues ayer terminÛ el curso de AS que he estado impartiendo durante toda la semana pasada, y lunes y martes de esta semana en el CETIC , el centro de nuevas tecnologÌas de la informaciÛn y comunicaciÛn del ayuntamiento de Vitoria-Gasteiz.
La conclusiÛn es que ha sido interesante. Con respecto a mis alumnos, bueno, pues todos han aprendido, y todos han aprendido bastante, aunque ellos mismos no se lo crean cuando se lo digo.
Claro, cuando alguien est· empezando siempre se come un ; o coloca mal una llave o.. y por eso no le funciona el programa. Eso es lo que les pasaba. Sin embargo, a fuerza de obligarles a pensar antes de lanzarse sobre el teclado, en las ˙ltimas aplicaciones que hicimos, pude comprobar que sus errores se limitaban a eso, a errores de sintaxis, pero que la lÛgica del programa la tenÌan bien. SabÌan perfÈctamente cuando utilizar una variable booleana, o cuando una de tipo numÈrico, o cuando usar un if o un else if , o un bucle for o cuando tenÌan que prepara el programa para cargar datos externos o...... El desarrollo lo tenÌan bien, les faltaban esos pequeÒos detalles que da la pr·ctica.

Luego tambiÈn hemos visto que flash ( afortunadamente ) ya no es la una herramienta sÛlo para diseÒadores que te permite hacer algo con programaciÛn, sino que la programaciÛn de flash por sÌ sola te permite hacer grandes cosas. Han visto ejemplos de cosas que ni sabÌan que se podÌan hacer, y lo que tengo claro una vez terminado el curso es que, les llevar· m·s o menos tiempo pero todos ir·n por el buen camino. CÛdigos en archivos externos, o en el primer frame de la pelÌcula, pero no dentro de los mcs, carga de los datos din·micamente, bien sea mediante loadMovie o cargando un XML ( sÌ, los m·s avanzados del curso, el ˙ltimo dÌa que puse un pequeÒo ex·men para que cada uno se evaluara lo que habÌa aprendido, bueno pues los m·s avanzados, como le terminaron pronto, en lo que terminaban los dem·s, aprendieron a cargar un xml simple ).
Esto, unido al ejemplo de una fotogalerÌa que habÌamos hecho dias antes para ilustrar el uso de loadMovie, nos permitiÛ hacer una pequeÒa aplicaciÛn en la que carg·bamos los datos de un XML( el xml contenÌa el nombre y tamaÒo de una serie de fotografÌas ), los coloc·bamos en un campo de texo de tipo html, de tal modo que el nombre de la foto fuese un link, y al pinchar sobre el link te cargaba la foto. Una aplicaciÛn con pocas lÌneas de cÛdigo pero para alguien que no sabÌa nada de AS 28 horas antes es toda una epopeya.
Bueno, pues les costar· m·s o menos, pero ya saben que flash puede ayudarte y mucho para hacer grandes aplicaciones, y que no sirve sÛlo para tener cosas saltando por pantalla.
Espero que ahora sigan haciendo cosas por su parte y no abandonen el AS, como todo, lo que hace mejorar es la pr·ctica.
El curso ha ido acompaÒado de un foro en el que se colgaban los ejercicios y en el que podÌan ( y pueden , pues estar· abierto un mes m·s ) colocarme preguntas que irÈ respondiendo.

TambiÈn les enseÒÈ donde pueden encontrar ayuda cuando no les salen las cosas, el devnet de macromedia, las listas de correo, foros como flashLa o were-here etc...

( Por cierto, el ex·men del ˙ltimo dÌa no era evaluable, no servÌa para ponerles nota, sÛlo servÌa para que viesen lo que habÌan aprendido. Y adem·s como pretendÌa que se enfrentasen a Èl del mismo modo en que un programador se enfrenta a su trabajo diario, no les dejÈ que mirasen la documentaciÛn que les dÌ al principio del curso donde estaban las respuestas, pero les dejÈ que usasen las herramientas que tiene un programador de flash a mano, es decir, el diccionario de AS que trae el programa, y por supueso internet. PodÌan mirar el diccionario o buscar en foros o... En realidad no les hizo falta ninguna de las dos cosas excepto cuando les preguntÈ cu·ntos mÈtodos tiene el objeto MovieClip, pregunta que servÌa ˙nicamente para obligarles a localizar en la ayuda dÛnde est· el objeto MC y que viesen que hay muchos y que los usar·n con frecuencia )
Bueno, al final del curso, igual que yo les tenÌa que evaluar a ellos, ellos me tenÌan que evaluar a mÌ. øHabrÈ superado el ex·men? :$

Junio 14, 2004

AS1 y AS2 en el Metro de Madrid

Dos fotos que he hecho esta maÒana en el Metro ( en la estaciÛn de Gran VÌa, salida a Montera ). ø Curioso, no ?

as1_metro.jpg

as2_metro.jpg


Si hay alguien interesado en la foto de alta resoluciÛn, que lo diga...

Curso de AS

Saludos,
bueno, ya casi 5 meses en mi nuevo trabajo, y una de las cosas que tengo que hacer es dar un curso de ActionScript en el CETIC ( Centro de TecnologÌas de la InformaciÛn y la ComunicaciÛn ), dependiente del Ayuntamiento de Vitoria-Gasteiz. El curso empieza esta misma tarde, y est· enfocado a la programaciÛn orientada a objetos. Espero que les resulte interesante a mis alumnos y no se me duerman en clase ( 4 horas al dÌa )

Bueno, pues hablando ya de todo un poco, sigo sin internet ( hay que ponerle soluciÛn a esto ya ) y sigo con mucho trabajo. Afortunadamente, aunque yo no postee nada o casi nada en el blog este sigo vivo gracias a interesantes posts de mi hermano.
Bueno, un saludo.

Junio 09, 2004

Un ejemplo del patrÛn Proxy

Quiero salvar una lista de usuarios registrados, pero no sÈ exactamente donde. La cuestiÛn es que dependiendo del valor de un checkbox ( en el que el usuario elige si est· conectado a internet o no ), debo mandar los datos a servidor ( en formato XML ) o guardarlos en disco en un Shared Object

°Esta es una misiÛn para el patrÛn Proxy. ø Por quÈ?. Porque quiero aislar el proceso de guardar los datos del resto del programa, simplemente quiero decir, "eh, guardame esto" y olvidarme de cÛmo o dÛnde se guarda.

Eso es lo que hace este patrÛn. El proxy guarda una referencia a un objeto, que es quien realmente se encargar· de ejecutar la acciÛn. Pero es el proxy el que crea ese objeto, por lo que puede crear una instancia de una u otra clase dependiendo de ciertas condiciones en tiempo de ejecuciÛn

Por tanto, todas las clases que puedan ser instanciadas por el proxy, deben implementar el mismo interfaz. Y dependiendo del tipo de proxy, puede ser una buena idea que incluso Èl mismo implemente ese interfaz, para que se pueda eliminar si es necesario.

Basta ya de literatura. Primero, el interface:

interface ISaveable { public function saveUserList( theList: Array ); }

Sencillo, øno?. Queremos salvar una lista de usuarios, por lo tanto hemos definido un mÈtodo saveUserList

Ahora, la clase que se encarga de enviar los datos a servidor

class myXML extends XML implements ISaveable { private var userArray: Array; function myXML( ) { this.userArray = new Array( ); } function sendData( ) { //this.sendAndLoad( ); } public function saveUserList( theList: Array ) { trace( "The XML is handling the data" ); this.userArray = theList; //create the XML nodes, and send to server } }

Nada complicado. Simplemente un mÈtodo p˙blico que recibe el array de usuarios, que se utilizar· para crear el XML que se enviar· a servidor

Bien, ahora la clase que guarda los datos en disco:

class mySO implements ISaveable { private var theSO: SharedObject; private var userArray: Array; function mySO( ) { this.userArray = new Array( ); } public function saveUserList( theList: Array ) { trace( "The Shared Object handles the data" ); this.userArray = theList; } }

Esta clae implementa ISaveable, y al recibir los datos, intentar· guardarlos en un Shared Object

Ahora la parte compleja. En este ejemplo, he representado el valor del checkbox ( el estado de la conexiÛn ) utilizando una variable en _root. Pero para obtener el valo9r de esa variable, voy a utilizar un singleton. Simplemente, porque me parece una manera mejor, en este caso, que hacer una referencia directa a _root desde el proxy

class singleton { private static var inst:singleton; private function singleton() {} public static function get instance():singleton { if (inst == null) inst = new singleton(); return inst; } public function isConnected( ): Boolean { return _root.connected; } }

Y, por fin, el proxy

class saveUserListProxy implements ISaveable { private var realClass: ISaveable; function saveUserListProxy( ) { var config: singleton = singleton.instance; var conFlag: Boolean = config.isConnected( ); if ( conFlag ) { this.realClass = ISaveable( new myXML( ) ); } else { this.realClass = ISaveable( new mySO( ) ); } } public function saveUserList( theList: Array ) { this.realClass.saveUserList( theList ); } }

Y finalmente, en este ejemplo, en la lÌnea de tiempo principal tendrÌamos:

var connected: Boolean = false; var theUserList: Array = new Array( ); theUserList.push( { id: 0, name: "Cesar" } ); theUserList.push( { id: 1, name: "Javier" } ); var myProxy: saveUserListProxy = new saveUserListProxy( ); myProxy.saveUserList( theUserList );

Podeis probar que todo funciona cambiando el valor de la variable "connected"

Y eso es todo. Son casi las dos de la maÒana de otra jornada laboral de casi 11 horas. Creo que ya va siendo hora de irse a la cama.....