« Abril 2004 | Inicio | Junio 2004 »

Mayo 30, 2004

Banco de sonidos del Ministerio de EducaciÛn

El Ministerio de EducaciÛn espaÒol pone a nuestra disposiciÛn casi 5000 sonidos en formato wav y mp3, que pueden ser utilizados libremente en el ·mbito de la educaciÛn. Lo posteo sobre todo para no perder el link ( los aÒos no perdonan ).

La direcciÛn: http://iris.cnice.mecd.es/bancoimagenes/sonidos/index.php

TambiÈn hay vÌdeos, im·genes y seÒales.

ACTUALIZACI”N ( 3/7/2005 ): Mauricio Becerra nos indica que el link correcto para el banco de sonidos es Èste: http://recursos.cnice.mec.es/bancoimagenes/sonidos/index.php

Mayo 19, 2004

Sobre los interfaces de colaboraciÛn

No espereis nada brillante en este post, sÛlo es una historia que muestra cÛmo los interfaces de colabroaciÛn pueden ayudar en el trabajo diario

Durante los ˙ltimos tres meses he estado trabajando en un framework para poder generar juegos con gran rapidez. Estamos llegando a nuestra primera gran entrega, por lo que no tenemos mucho tiempo libre, que digamos

Ayer empecÈ el desarrollo de un grupo de cinco juegos muy similares entre sÌ. Los hemos llamado "juegos de disposiciÛn" porque se trata de disponer diversos elementos en la pantalla, siguiendo una reglas previas. Hay cinco juegos diferentes ( por ejemplo, uno en el que hay que colocar a unos escolares en un autob˙s, sin poner juntos a los niÒos conflictivos, en otro hay que realizar una serie de tareas en un orden correcto, etc )

La arquitectura de los juegos es muy simple. Hay una clase llamada "mundo" que agrega otra llamada "scenario", que contiene la lÛgica del juego. La clase mundo se encarga de controlar el tiempo de juego, enviar mÈtricas a servidor, cargar los elementos gr·ficos, etc. Los cinco juegos son tan similares que hemos intentado construirlos con la mayor cantidad de cÛdigo com˙n posible

Hemos decidido que tendrÌamos un swf ( dispositionMotor ) donde se inicializa el mundo, y que carga otro swf ( nameOfGame.swf ) que contiene el escenario del juego y las reglas del mismo. Por tanto, habr· sÛlo un "dispositionMotor" y cinco ( por ahora ) "nameOfGame"

Se nosplanetan dos posibilidades: primero, podemos tener cinco clases mundo distintas, y que cada una de ellas inicialice el escenario que corresponda, o una sola clase mundo genÈrica y cinco escenarios diferentes ( Èsta, Èsta!! )

Por tanto, en la clase mundo ( entre otras 400 lineas de cÛdigo ) encontramos:

var controller: deIScenarioController = mcTimeline.getController( newMCContainer ); controller.initScenario( ); this.theScenario = controller.getInterface( );

Donde mcTimeline es la lÌnea de tiempo de scenario.swf

En el primer frame de scenario.swf, tenemos:

this.getController = function( arg: MovieClip ) { //Instancia el controlador del escenario, pero devuelve su interfaz de colaboraciÛn var myController: cwScenarioController = new cwScenarioController( arg ); return deIScenarioController( myController ); }

La clase cwScenarioController:

class Code.Ents.cwScenarioController extends ClipController implements deIScenarioController { private var theScenario: cwScenario; private var theClip: MovieClip; function cwScenarioController( clipParam: MovieClip ) { super( clipParam ); this.theClip = clipParam.movieClip; //this.theScenario.initLists( ); } public function initScenario( param: Object ) { this.theScenario = new cwScenario( ); this.theScenario.parentClip = this.theClip; this.theScenario.initLists( param ); } public function getInterface( ): deIScenario { return deIScenario( this.theScenario ); } }

El interfaz dIScenarioController:

interface Code.Ents.deIScenarioController { public function initScenario( param: Object ); public function getInterface( ): deIScenario; }

Bien, pues temenos una referencia al conjunto de mÈtodos p˙blicos del controlador del escenario, y no al escenario, por lo que no nos importa de quÈ hace ese controlador, o de cÛmo lo hace. Dicho de otra forma, tenemos una referencia a un conjunto de mÈtodos como initScenario( ), pero no sabemos cÛmo est·n implementados.

Y el mÈtodo getInterface( ) de la clase cwScenarioController devuelve otro interface, que es el que utiliza el mundo para comunicarse con el escenario ( con todos los escenarios distintos )

Un post largo, pero muuuy relajante, despuÈs de 13 horas de trabajo......

Mayo 17, 2004

Conferencias WWUGM

El prÛximo dÌa 19 tendr· lugar una serie de conferencias en Madrid, Oviedo y Barcelona.

Las conferencias se podr·n seguir tanto on-line (via FlashComm) o de forma presencial. Se han organizado 3 conferencias, 1 de dreamweaver y 2 de flash. Hay algo m·s de informaciÛn en ( http://www.5dms.com/wwugm )

Los organizadores del evento dicen que uno de los objetivos que han buscado al organizar todo esto era ponernos caras los unos a los otros y llevar la comunidad Flash Hispana un pelÌn m·s lejos. El encuentro ser· bastante informal sin pretender ning˙n tipo de formalismo, sino todo lo contrario, que no sean conferencias sino charlas.

El sistema habilitado para las conferencias on-line permitir· hacer preguntas, ver y oir al ponente, etc, etc.

M·s informaciÛn en http://www.5dms.com/wwugm

Mayo 15, 2004

Hosting de php5 gratis en dotgeek.org

Mi hermano Javier me ha enviado este link esta maÒana. En dotgeek est·n ofreciendo hosting con php5 gratis.

Yo ya tengo mi cuenta ( http://ctarda.dotgeek.org ). Ofrecen php5, PostgreSQL, acceso ftp, una cuenta de correo,...

Puedes solicitarlo aquÌ

Mayo 09, 2004

La familia de gadgets crece...

Por fin me he decidido, y el pasado viernes me comprÈ un PocketPC. Ha sido una decisiÛn muy dificil, sobre todo porque hasta el ˙ltimo momento estuve dudando entre el HP iPaq2210 y la Sony CliÈ TH-55.

El arrepentimiento y los sudores frÌos tÌpicos de estas compras me han durado sÛlo unos diez minutos, contando desde el momento en que lo conectÈ. La instalaciÛn ha sido muy f·cil, incluyendo una actualizaciÛn del sistema, y quitando un par de cuelgues ( que teniendo en cuenta que se han juntado dos factores de alto riesgo, a saber: Windows y yo ) est· funcionando bastante bien.

Ahora sÛlo me queda terminar de zambullirme en este mundo ( y empezar a pagar plazos, claro ). Si alguien me quiere recomendar alguna url, aplicaciÛn..... °°no lo dudeis!!.


Por cierto, aquÌ est·n los dos ˙ltimos miembros de la familia. De izquierda a derecha, PACO y PAVA.

gadgets.jpg

Mayo 06, 2004

Ted Patrick anuncia PRIM

Ted Patrick ( desarrollador de, entre otros, PowerSDK ), ha anunciado el inmilente lanzamiento de PRIM.

øPero quÈ es PRIM? B·sicamente es un conjunto de primitivas para flash. Es decir, que proporciona tipado de datos. La diferencia con el tipado de datos propio de AS2 es que, con PRIM, ese tipado se produce en tiempo de ejecuciÛn, y no en tiempo de compilaciÛn.

El misterio est· en la propia estructura de estas librerÌas. En realidad PRIM es un conjunto de getter-setters predefinidos, que son los que, en tiempo de ejecuciÛn, se encargan de mantener el tipado.

Entre los tipos proporcionados est·n Boolean, Integer, Number,....

Puedes ver la documentaciÛn completa aquÌ.

Mayo 03, 2004

Componente Accordion

Este es un ejemplo de cÛmo el componente accordion puede contener otros componentes. De hecho es el cÛdigo fuente del acordeÛn que se puede ver en la p·gina principal de este blog.

Este es el resultado final:

Tiene tres pestaÒas, la primera contiene una lista, la segunda un ·rbol, y la tercera un movieclip sencillo

Lo primero de todo ser· arrastrar al stage una instancia del componente list y otra del componente tree. Una vez en el stage, las borramos. De esta forma, quedan en la librerÌa

TambiÈn he colocado en el stage una instancia del componente accordion, le he asignado altura y anchura, y el nombre de instancia "accordion" ( sin las comillas ). …sta instancia no hay que borrarla

TambiÈn he creado un movieclip con la informaciÛn de contacto. Su linkage ( o vinculaciÛn ) es "contact" ( tambiÈn sin las comillas )

Quiero que las secciones de descargas y enlaces recogan los datos de xmls externos, para que todo sea m·s facil de mantener y actualizar. Puedes ver el xml para las descargas aquÌ, y el de los enlaces aquÌ

Por tanto, nuestro cÛdigo cargar· esos dos xmls, y cuando los haya cargado asignar· el dataProvider correspondiente de cada uno de los componentes:

import mx.controls.Tree; import mx.controls.List; //var language: String = "es"; _global.style.setStyle("fontFamily", "TrebuchetMS" ); _global.style.setStyle("fontSize", 12); _global.style.setStyle("themeColor", "haloOrange"); var ac = this.accordion; ac.createChild( List, "downloadsF", { label: "Downloads", _width: 200, _height: 236 } ); ac.createChild( Tree, "linksF", { label: "Links", _width: 200, _height: 236 } ); ac.createChild( "contact", "contactF", { label: "Contact" } ); var myList = ac.getChildAt( 0 ); myList.vScrollPolicy = "auto"; myList.dataProvider = [ { label: "loading data", data: 0 } ]; myListXML = new XML( ); myListXML.ignoreWhite = true; myListXML[ "theList" ] = myList; myListXML.onLoad = function( success ) { if ( success ) { var theDP: Array = new Array( ); var elements: Array = this.firstChild.childNodes; var numElem: Number = elements.length; for ( var k: Number= 0; k< numElem; k++ ) { theDP.addItem( { label: elements[ k ].attributes[ "label" ], data: elements[ k ].attributes[ "data" ] } ); } this[ "theList" ].dataProvider = theDP; } } if ( language=="es" ) { myListXML.load( "http://www.design-nation.net/enlaces/downloads.xml" ); } else { myListXML.load( "http://www.design-nation.net/enlaces/downloads_en.xml" ); } var myTree = accordion.getChildAt( 1 ); myTree.vScrollPolicy = "auto"; myTree.setStyle("openEasing", mx.transitions.easing.Back.easeInOut ); myTreeDataProvider = new XML(); myTreeDataProvider.ignoreWhite = true; if (language=="es"){ myTreeDataProvider.load("http://www.design-nation.net/enlaces/tree.xml?ran="+ Math.random()); }else{ myTreeDataProvider.load("http://www.design-nation.net/enlaces/tree_en.xml?ran=" + Math.random()); } myTreeDataProvider.onLoad = function(){ myTree.dataProvider = this; } eventListener = new Object(); eventListener[ "tree" ] = myTree; eventListener[ "list" ] = myList; eventListener.change = function(eventObject){ if ( eventObject.target._name == "linksF" ) { var theSelectedNode = eventObject.target.selectedNode; var theSelectedNodeLabel = theSelectedNode.attributes.label; var esLink = theSelectedNode.attributes.isLink; var esBranch = this.tree.getIsBranch( theSelectedNode ) if ( esBranch ){ if ( this.tree.getIsOpen( theSelectedNode ) ){ this.tree.setIsOpen( theSelectedNode, false, true ); }else{ this.tree.setIsOpen( theSelectedNode, true, true ); } }else{ if ( esLink ){ var theSelectedNodeURL = theSelectedNode.attributes.url; getURL( theSelectedNodeURL ); } } } if ( eventObject.target._name == "downloadsF" ) { getURL( myList.selectedItem.data ); } } myTree.addEventListener("change", eventListener); myList.addEventListener( "change", eventListener );

Eso es todo. Enhorabuena si no te has dormido antes de llegar aquÌ.

 

Mayo 02, 2004

øSlashdot banea a ciertas m·quinas de TelefÛnica?

Acabo de intentar entrar en slashdot, y he recibido una p·gina en la que se me avisa de que la ip 80.58.10.172 est· baneada.

Obivamente, esa no es mi ip, pero me suena de haberla visto al intentar detectar mi propia ip en algunos scripts de prueba que he hecho anteriormente. Vamos, que me da en la nariz que es de alguno de los proxies de TelefÛnica.

Supongo, claro, que, como siempre, no serÒa responsabilidad ni culpa de ellos, pero es otro motivo m·s de alegrÌa por ser cliente de TelefÛnica.

Mayo 01, 2004

SindicaciÛn en ATOM

La url: http://www.design-nation.net/es/atom.xml

Si esto es parte del futuro, estamos preparados.

Por cierto, cÛmo se dice en castellano: øsindicaciÛn, canal,..?