« Diciembre 2003 | Inicio | Febrero 2004 »

Enero 31, 2004

øPara quÈ puedo utilizar un PocketPC?

Llevo un par de meses pensando en comprarme un PocketPC. Tengo decidido quÈ m·quina comprar, pero al final siempre termino ech·ndome atr·s porque no termino de tener claro que sea algo realmente ˙til. Al menos no como para pagar 500Ä por uno.

SÈ que lo puedo utilizar para leer el periÛdico y algunos libros en el metro, que lo puedo utilizar como agenda, que puedo hacerme mis propias aplicaciones en flash, pero no termino de tenerlo muy claro.

øHay alguien que tenga un PocketPC? øY para quÈ lo utilizais?

Resumen de la primera semana

Los cuatro habituales de este blog recordareis que el lunes pasado comencÈ a trabajar en una empresa nueva.

Bueno, pues ya ha pasado una semana, y aunque el susto inicial no se me ha pasado todavÌa, estoy bastante contento por el nuevo mundo que se abre ante mÌ. De repente, ya no estoy haciendo scripts, sino que estoy participando en la implementaciÛn de patrones de diseÒo bastate complejos (state, observer, facade) y estructuras de datos que se alejan bastante del array de objetos al que estaba tan acostumbrado (listas enlazadas, hashmaps).

Y todo ello, con "la mariconada esa para diseÒadores" (palabras textuales de un antiguo jefe).

No sÈ si podrÈ aprender todo lo que tengo que aprender en el poco tiempo que tengo para hacerlo, pero de lo que sÌ que estoy seguro es de que va a merecer la pena intentarlo. øPara eso somos programadores, no?

Enero 26, 2004

Yo tambiÈn me muevo

Bueno, pues el lunes dia 2 de febrero, yo tambiÈn empiezo a trabajar en otro sÌtio. Estoy un poco nervioso pero expectante, pues ya se que las primeras cosas que voy a tener que hacer, incluyen programaciÛn en flash communication server, y °°°°°°hacer juegos!!!!!. La empresa es una empresa especializada en la animaciÛn y realizaciÛn de pelÌculas, temas en los que no conozco mucho, por lo que estoy seguro que aprenderÈ un montÛn. Tengo ganas de empezar :D

Enero 25, 2004

Un nuevo trabajo

Durante los ˙ltimos dos aÒos y medio he estado trabajando en una empresa de e-learning, construyendo intranets y juegos educativos.

MaÒana lunes, dÌa 26, comienzo una nueva etapa, en una nueva empresa, y totalmente inmerso en el desarrollo de juegos. Sobra decir que estoy contento, expectante, nervioso, un poco preocupado, pero sobre todo, estoy muy ilusionado.

Creo que va a ser una gran oportunidad de aprender, de avanzar y de conocer a mucha gente de la que puedo extraer muchas cosas nuevas.

AsÌ que esta noche no creo que duerma mucho. Espero que maÒana sea un gran dÌa.

Enero 20, 2004

No somos spammers!

A toda la comunidad: No somos spammers!

Entre ayer y hoy he visto nuestro dominio en varios de los archivos de configuraciÛn del MT-BlackList.

Por favor, chequead nuestro blog. Seguro que no es el mejor del mundo, pero tampoco nos merecemos esto..... ;)

Gracias!

Enero 19, 2004

Panel para flash: mySQL

Esto es algo que utilizo habitualmente, y que tal vez os pueda resultar util a alguno.

Se trata de un panel para poder ver la estructura de una base de datos mySQL. Necesita tener un servidor web capaz de ejecutar php's, y no permite ver los registros de la base de datos, tan sÛlo la estructura de la misma.

En una prÛxima versiÛn es probable que incluya la posibilidad de lanzar querys contra la base de datos, y navegar los resultados.

Instrucciones de instalaciÛn
----------------------
1.- Descomprimir y copiar el contenido de la carpeta php a una carpeta del servidor web

Ej: En una m·quina windows, se pueden copiar esos archivos a

c:\apache\htdocs\databases\

2.- Instalar el archivo mxp desde el Extension Manager

3.- Arrancar Flash. Se puede acceder al panel desde el men˙ Ventana->Otros paneles->databasesList

4.- Introducir los datos de configuraciÛn:

4.1.-script: DirecciÛn de la carpeta en la que se encuentran los php. Siguiendo el
ejemplo anterior:

http://localhost/databases/

Debe incluirse la barra final.

4.2.- host: servidor mySQL. Normalmente ser· localhost

4.3.- User: usuario del servidor

4.4.- Password: password para ese usuario

Por favor, dejad cualquier comentario, sugerencia, reporte de errores, etc.

Descargar el panel mySQL

Enero 16, 2004

øPlayer o m·quina virtual?

Buena pregunta. øRealmente podemos referirnos al flash player como m·quina virtual?

El tÈrmino proviene de Java. La m·quina virtual es el intÈrprete que ejecuta el bytecode generado por el compilador Java. Realmente eso es lo mismo que hace el flash player. Pero entonces, øporquÈ uno se llama player y el otro m·quina virtual?.

La diferencia, a mi entender, proviene de la funcionalidad que ambos permiten. Probablemente, uno de los puntos fuertes de flash sea el poco peso del player. Claro, que eso se paga en cuanto nos ponemos a mirar lo que podemos hacer con Èl, que es m·s bien poco. No podemos acceder a disco, ni acceder directamente a bases de datos, ni a la configuraciÛn del sistema, ni un largo etcÈtera. Dicho de otra manera, no podemos hacer demasiadas cosas fuera de un navegador.

Pero, ørealmente tendrÌa sentido que pudiÈramos hacer en flash lo mismo que hacemos en java, o en C#?. Pues la verdad, no lo sÈ.

Tengo la sensaciÛn que la direcciÛn en la que nos estamos moviendo es la de implantar una nueva plataforma de desarrollo, alternativa a Java (Sun) o .Net(Microsoft), sÛlo que esta vez de Macromedia. Y eso me parece bueno, pero tambiÈn me parece que corremos el riesgo de olvidar lo que nos ha hecho llegar hasta aquÌ.

øAlg˙n comentario?

Enero 13, 2004

Componentes de Remoting para mx 2004

VÌa Metalogic recojo la noticia de la salida de componentes de flash remoting para mx 2004. Lo puedes descargar del sitio de macromedia

Enero 11, 2004

Flare 0.5 AS decompiler

VÌa Swftools.com, he encontrado esta herramienta, un AS decompiler freeware. LÈelo aquÌ.

Enero 09, 2004

Crear un mÈtodo com˙n a todas las instancias de MovieClip (AS2)

Muy sencillo, direis: crÈalo en el prototipo de movieclip. Pero, øquÈ sucede cuando estamos escribiendo AS 2.0?

Ahora no podemos modificar la clase MovieClip, sino que sÛlo podemos extenderla, y aÒadir nuevos mÈtodos a esas clases hijas. øSeguro?. Veamos:

La teorÌa sobre programaciÛn orientada a objetos es que si queremos aÒadir alg˙n mÈtodo a la clase movieclip, lo que debemos hacer es:

class net.designnation.exp.Mezcla extends MovieClip{ function Mezcla(){ trace("constructor de mezcla"); } //Este es el mÈtodo que queremos que // tengan todos los movieclips private function metodoAS1(){ trace("este es el mÈtodo particular"); } }

Bien, esto nos permite hacer que la clase Mezcla tenga todos los mÈtodos heredados de MovieClip, y adem·s el mÈtodo metodoAS1. Pero ese mÈtodo AS1 pertenece a la clase Mezcla, y sÛlo a ella. Es decir, que si cre·ramos otra clase que extendiera de movieclip, si queremos que tenga el mÈtodo metodoAS1, deberÌamos definirle.

De todas formas, algunos ya habreis pensado: distintas clases con el mismo mÈtodo.... øinterfaces?. Efectivamente, podemos implementar un interface:

interface net.designnation.exp.MCInterface{ public function metodoAS1():Void; }

Y hacer que nuestras clases lo implementen:

import net.designnation.exp.*; class net.designnation.exp.Mezcla extends MovieClip implements MCInterface{ function Mezcla(){ trace("constructor de mezcla"); } //Este es el mÈtodo que forma parte del interfaz. //debemos definirlo aquÌ!!! private function metodoAS1(){ trace("Èste es el mÈtodo particular"); } }

øEst· nuestro problema solucionado?. No del todo. El hacer que una clase implemente un interfaz sÛlo sirve para que el compilador nos dÈ un error si esa clase no tiene implementados todos los mÈtodos del interfaz. Dicho de otra manera, el hacer que una clas implemente un interfaz, nos sirve sÛlo para asegurarnos que esa clase implementa una serie de mÈtodos, que hemos enumerado en otro lugar (el interfaz).

Pero esos mÈtodos debemos implementarlos en todas y cada una de las clases que implementen el interfaz, con lo que tampoco conseguimos lo que queremos, que por si alguien se ha perdido (y yo estoy a punto) no es m·s que definir una sola vez un mÈtodo, y que ese mÈtodo sea accesible a MovieClip y a todas sus subclases.

Probablemente la soluciÛn m·s estricta y elegante serÌa hacer una clase que heredara de movieclip, con el mÈtodo que queremos implementar definido en ella, y hacer que el resto de clases hereden de esa clase, en vez de hacerlas heredar de movieclip.

Pero si por algo nos caracterizamos los programadores (o desarrolladores, o scripters o lo que seamos) que trabajamos con actionscript es por que no nos gustan demasiado las soluciones estrictas y elegantes. Para eso ya hay gente que sabe muchÌsimo Java.

Por lo tanto, vamos a lo que nos gusta de verdad.

Recordemos la ìviejaî forma de definir un mÈtodo com˙n a todas las instancias de una clase:

MovieClip.prototype.metodoAS1 = function(){ trace("Bien!. Se ha ejecutado el mÈtodo AS1"); };

Si escribimos ese cÛdigo en el primer frame de nuestro fla, antes de cualquier otra cosa, todas las instancias de MovieClip tendr·n implementado ese mÈtodo.

øPero quÈ pasa con nuestra clase?. Veamos: nuestra clase hereda de MovieClip, luego:

class net.designnation.exp.Mezcla extends MovieClip{ function Mezcla(){ trace("constructor de la clase Mezcla"); } private function metodoAS2(){ trace("Y yo soy el mÈtodo AS2"); }; public function onRollOver(){ //Ejecuto el mÈtodo metodoAS1 de la superclase. super.metodoAS1(); metodoAS2(); }; }

Para ilustrar el ejemplo, vamos a crear un movieclip, que utilizaremos como botÛn. Dentro de ese clip, hay que dibujar una forma cualquiera, porque lo que queremos es asignarle a la clase anterior, y ver quÈ pasa cuando hacemos rollOver sobre Èl.

Una vez creado el movieclip, en sus propiedades de vinculaciÛn, asignamos como Indentificador ìMiClipî y como Clase de AS 2.0 ìnet.designnation.exp.Mezclaî

Por tanto, el cÛdigo del primer frame de nuestro fla queda de la siguiente manera:

MovieClip.prototype.metodoAS1 = function(){ trace("Bien!. Se ha ejecutado el mÈtodo AS1"); }; //Al hacer attachmovie, se instanciar· la clase Mezcla this.attachMovie("MiClip", "instancia", 1);

øQuÈ pasa al hacer rollover sobre el clip?. Premio!. Se ejecuta el mÈtodo que definimos en el prototype de MovieClip. Pero, ese mÈtodo reside en la superclase de la clase Mezcla, luego øcÛmo podemos ejecutar desde ese mÈtodo otros mÈtodos de la clase Mezcla?

Modifiquemos un poco los mÈtodos metodoAS2 y onRollOver de Mezcla

private function metodoAS2(arg){ trace("Y yo soy el mÈtodo AS2 " + arg); }; public function onRollOver(){ super.metodoAS1(this); };

TambiÈn la definiciÛn de metodoAS1 en el prototype de MovieClip:

MovieClip.prototype.metodoAS1 = function(ref){ trace("Bien!. MÈtodo AS1" + this.constante); ref.metodoAS2("x " + this._width); };

øQuÈ hemos hecho?. Pues desde la clase Mezcla llamamos al mÈtodo de su superclase, pas·ndole una referencia a la clase desde la que dicho mÈtodo ha sido llamado. Por tanto, ahora, la superclase sabe quÈ clase la ha llamado, y puede saber a quiÈn debe contestar.

øA alguien le han quedado ganas de hacer alg˙n comentario?

Enero 07, 2004

BotÛn redimensionable

El problema: hace falta un botÛn que pueda presentarse en distintos tamaÒos, sin que deforme el texto del mismo.

La soluciÛn: construir el botÛn en tiempo de ejecuciÛn. Para ello, tenemos tres clips: borde izquerdo, borde derecho, y fondo. Lo dem·s, lo resolveremos al inicializar el botÛn.

Pero primero veamos el resultado:

Bien, pues tenemos, como hemos dicho, tres clips: izquierdo, derecho y fondo, con nombre de vinculaciÛn, respectivamente, de "left", "right" y "background"

En el primer frame, tenemos este cÛdigo

Stage.scaleMode = "noScale"; Stage.align="TL"; import net.designnation.botones.*; //funciÛn que ejecutar· el botÛn al cliquearlo function CallBack(){ getURL("javascript:alert('Hey, you clicked me!')"); } /* ** * InicializaciÛn del botÛn * Par·metros: texto a presentar (que se pasa como par·metro desde el html) * nombre de vinculaciÛn de borde izquierdo, derecho y fondo * nombre de la funciÛn a ejecutar en el click * lÌnea de tiempo sobre la que se construye el botÛn ** */ var miBoton:Boton = new Boton(textButton, "left", "right", "background", "CallBack", this); //Se asigna formato al texto miBoton.setFormat("verdana", 20, 0xFFFFFF); //Se inicializa el botÛn miBoton.init(); stop();

La clase que construye el botÛn:

class net.designnation.botones.Boton{ private var left; private var right; private var fondo; private var tempLeft; private var tempRight; private var tempFondo; private var texto:String; private var callback:String; private var timeline; private var ancho:Number; private var alto:Number; private var anchoUtil:Number; private var nDepth = 0; private var innerDepth = 0; private var innerClip; private var innerText; private var formato:TextFormat; function Boton(){ trace("constructor"); texto = arguments[0]; left = arguments[1]; right = arguments[2]; fondo = arguments[3]; callback = arguments[4]; timeline = arguments[5]; //init(); }; public function setFormat(){ formato = new TextFormat(); formato.font = arguments[0]; formato.size = arguments[1]; formato.color = arguments[2]; formato.bold = true; }; public function onOver(){ /* tempLeft.gotoAndStop(2); tempRight.gotoAndStop(2); tempFondo.gotoAndStop(2); */ }; public function onOut(){ /* tempLeft.gotoAndStop(1); tempRight.gotoAndStop(1); tempFondo.gotoAndStop(1); */ }; public function onClick(){ timeline[callback](); }; public function init(){ ancho = Stage.width; alto = Stage.height; //trace("ancho " + ancho + " alto " + alto); tempLeft = timeline.attachMovie(left,"tLeft", nDepth++, {_x:0, _y:0, _height:alto}); tempRight = timeline.attachMovie(right, "tRight", nDepth++, {_y:0, _height:alto}); tempRight._x = ancho - tempRight._width; anchoUtil = ancho-(tempLeft._width*2); tempFondo = timeline.attachMovie(fondo, "tFondo", nDepth++, {_x:tempLeft._width, _width:anchoUtil, _height:alto}); innerClip = timeline.createEmptyMovieClip("tempInner", nDepth++); innerClip.ref = this; innerClip.onRollOver = function(){ this.ref.onOver(); }; innerClip.onRollOut = function(){ this.ref.onOut(); }; innerClip.onRelease = function(){ this.ref.onClick(); }; innerClip.createTextField("tempText", innerDepth++,0,(alto/4),anchoUtil, alto); innerText = innerClip.tempText; innerText.text = texto; innerText._x = tempLeft._width; innerText.setTextFormat(formato); }; }

En este caso queremos que el botÛn ejecute una funciÛn de javascript, que tambiÈn podrÌamos haber pasado como par·metro, pasar tambiÈn como par·metro el formato del texto,....

El pirata del mar de plata

Eres el pirata m·s temido del mar de la plata. °Defiende tu castillo de las tropas del gobernador!






El juego es muy sencillo, pero iremos repasando el cÛdigo poco a poco.

Los gr·ficos del juego son de Celia Carracedo. Es recomendable pasarse por su web ;)

Enero 05, 2004

Problemas de seguridad en aplicaciones flashcom

⁄ltimamente, se suceden casos de sitios en los que se aprovechan para piratear el trabajo flashcom de otros..

Peldi lo ha dejado bien claro en un mensaje a la lista de chattyfig de flashcom ( ver mensaje ), lo que ha dado lugar a un largo hilo.
En funciton, Fernando ha colocado una serie de consejos, como res˙men de dicho hilo. Conviene echarle un vistazo. Finalmente Peldi tambiÈn ha puesto en su blog recomendaciones, echale un ojo

Grata sorpresa, flashcomguru

Hoy en la lista de correo de flashcom de Chattyfig , se ha recibido un mensaje que me ha alegrado el dÌa. Anunciaba flashcomguru. Yo pienso participar en los foros, de hecho ya me he registrado, espero verte por allÌ ( recuerda, firmo como desmond_dekker )

Macromedia anuncia Director MX2004

Cierto!.

Macromedia anuncia la nueva versiÛn de Director. Entre otras novedades, incluye sintaxis Javascript (adem·s de Lingo), integraciÛn con Flash MX2004, componentes especiales de Flash para Director, generaciÛn de proyectores para ambas plataformas......

Si quieres ver todas estas novedades, puedes ver una presentaciÛn en Breeze aquÌ

Enero 04, 2004

Estas vacaciones nos vamos a Marte

Pues si te lo ponen tan f·cil, habr· que visitar Marte con la NASA

Enero 03, 2004

Y saludos a fullasagoog

TambiÈn hemos sido aÒadidos a fullasagoog. Ya figur·bamos en los blends en castellano, pero hemos recibido confirmaciÛn de que en breve estaremos en el blend completo.

Esperamos poder ser de utilidad, y esperamos vuestras aportaciones!

°Somos hÈroes!

Actionscript heroes, por supuesto.

Hemos recibido un e-mail de aSH, comunic·ndonos que, desde hoy, somos nuevos hÈroes del actionscript. Nos puedes encontrar entre los hÈroes internacionales, o los hÈroes que sÛlo hablan en castellano.

Es bonito ser un hÈroe.....

Enero 02, 2004

Actualizaciones desde el blog de C. Moock

ActualizaciÛn de Unity aquÌ. Corrige bugs, y hace un montÛn de cosas.

ActualizaciÛn de moock fpi aquÌ, con previsiÛn para futuras versiones de flash player 8 y 9.

Saludos FlashLA

Saludamos a FlashLa ( www.flashla.com ) magnÌfica comunidad hispanoparlante de flash, con noticias, estupendos foros ( tengo predilecciÛn por el de flashcom ), referencia de AS.. que nos han agregado a su lector de blogs, lo que nos ha hecho mucha ilusiÛn. Un saludoooooo!!!!!!!

Interesantes links

Via FlashLA, he llegado a esta interesante colecciÛn de links para un desarrollador web. ⁄til e interesante. Universidad de Minesota-> Web design references