Categories
Eventos Flash Flex Interactividad

Papervision 3D for dummies – Slides y ejemplos

De MIF OnSite III

Para los afortunados que pudimos asistir al evento MIF OnSite III y para los que no puedieron asistir, hoy es nuestro día de suerte, ya que Joan ha publicado y colgado las slides y los ejemplos de su charla en el evento. La charla, junto con las slides y los ejemplos son muy buenos, van desde lo básico las escenas, renders, cámaras, viewports, luces, materiales, primitivas y demás elementos básicos del 3D hasta las animaciones, todo esto desde un punto de vista de programador y acompañado de ejemplos súper sencillos.

Más información y descarga de los recursos:

Papervision 3D for dummies en Made in Flex

Papervision 3D for dummies en Joan Garnet

Categories
Php Tutoriales

Tutorial PHP – Leer ficheros de parte privada

Hace poco hablaba con mis amigos Álvaro y Joan sobre como cargar contenidos en php que se encuentran en la parte privada de nuestro servidor y les dije que en cuanto tuviera un rato libre escribiría un tutorial, así es que aquí lo tienen.

Introducción, por lo general nuestro servidor suele venir con alguna de las siguientes carpetas:

  • web
  • www
  • httpdocs

En estas carpetas es donde se almacena todo el contenido al que el usuario puede acceder mediante http (salvo restringirlo mediante un fichero .htaccess).

Supongamos que tenemos un proyecto en el que necesitamos guardar los contenidos en la parte privada, es decir, en una carpeta por ejemplo al mismo nivel que nuestra carpeta pública (web, www, httpdocs) para así evitar que se acceda a estos contenidos mediante una petición http, pero que la aplicación necesitará acceder a estos contenidos. Aquí es donde viene tiene sentido este post, jejeje :D.

Bueno, para poder acceder a estos contenidos necesitamos contar con tres piezas:

La primera la tenemos que conseguir de alguna forma a través de nuestra aplicación, la segunda partirá del tipo de fichero y la tercera la obtenemos a partir de la primera, jejeje.

Ahora si, sin más historias pongo el código de ejemplo que hice para este pequeño tutorial:

<?php
//Configuramos la tabla de tipo
$tipos = array();
$tipos['xml'] = array("text", "xml");
$tipos['swf'] = array("application", "x-shockwave-flash");
$tipos['pdf'] = array("application", "pdf");
$tipos['ppt'] = array("application", "vnd.ms-powerpoint");
$tipos['doc'] = array("application", "vnd.ms-word");
$tipos['xls'] = array("application", "vnd.ms-excel");
$tipos['zip'] = array("application", "x-zip-compressed");
$tipos['rar'] = array("application", "x-rar-compressed");
$tipos['gif'] = array("image", "gif");
$tipos['png'] = array("image", "png");
$tipos['jpg'] = array("image", "jpg");
$tipos['flv'] = array("video", "x-flv");

//Definimos la ruta base de los ficheros
$ruta_base_fichero = "../contenidos/fichero_";

//Recogemos el tipo de fichero que nos solicitan
$tipo_fichero = $_GET['fichero'];

//Obtenemos la ruta del fichero combinando la rutaBaseFichero y el tipo_fichero
$ruta_fichero = $ruta_base_fichero . $tipo_fichero . "." . $tipo_fichero;

//Verificamos que el fichero exista, en caso contrario interrumpimos la ejecucion del proceso.
if(!file_exists($ruta_fichero)) die("El fichero solicitado no existe.");

//Obtenemos el tamanyo del fichero
$tamano_fichero = @filesize($ruta_fichero);

//Indicamos en la cabecera el tipo de fichero, para esto utilizamos la tabla de tipos que creamos en la parte superior
header("Content-Type:" . $tipos[$tipo_fichero][0] . "/" . $tipos[$tipo_fichero][1]);

//Indicamos en la cabecera el nombre del fichero, para esto utilizamos la variable $ruta_fichero, esto es para que el navegador entienda que el fichero no es contenidos.php sino el fichero solicitado
header("Content-Disposition: inline; filename=\"" . rawurlencode(basename($ruta_fichero)) . "\"");

//Indicamos en la cabecera el tamanyo del fichero
header("Content-Length:" . $tamano_fichero);
header("Accept-Ranges:" . $tamano_fichero);
@readfile($ruta_fichero);
?>

El código está comentado, casi línea a línea, para que quede más claro. Puede optimizarse muchísimo el código, se pueden encapsular constantes, crear clases para reutilizarlo y muchísimas más cosas, pero el fin de este ejemplo es que sirva para iniciarse y entender como consumir contenidos en php de la parte privada de nuestro sevidor.

A continuación los ejemplos:

Todos los ficheros están en la parte privada de mi servidor, por tanto desde http no se puede acceder a ellos, de tal forma que para acceder a ellos se pasa por un router que es un fichero php que puede acceder a los ficheros y devolverlos.

Un beneficio muy importante que obtenemos al hacer uso de esta metodología es que podemos almacenar en un fichero de log o en base de datos todas las peticiones que se hagan y así tener más controlado el acceso a estos ficheros, pero bueno este tema da para otro post así que lo dejamos de momento aquí :P.

Espero haberme explicado claramente, si tienen cualquier duda para eso están los comentarios. Ojalá les sea de utilidad. Saludos!!!

Artículos relacionados:

Categories
Flash Flex

Flash Player 10 – Aplicaciones y Ejemplos

Vía Serge Gesperes me encuentro con una lista de aplicaciones y ejemplos en los que podemos ver el potencial de Flash Player 10:

  • Away 3D demo Aquí vemos un bagón sobre una vía, impresionante motor 3D
  • Backflip Aquí vemos una interfaz 3D muy atractiva con movimientos sobre videos
  • Hobnox Audiotool ¿Será esto el principio del fin de las aplicaciones de escritorio?
  • PixelBender example Esta es una de las novedades más interesantes y la vemos en acción.
  • NoteFlight Hace tiempo se inició un proyecto similar, pero la tecnología todavía no lo permitia, ahora sencillamente podemos leer partituras y creas sonido de una manera increible.
  • PhotoBooth No sé que hace porque no tengo webcam, jejeje 😛
  • Picnick Otro ejemplo de lo que podemos hacer con Pixel Bender
  • Boulevart Labs Ejemplos del potencial de Flash Player 10
  • Nascom Labs Más ejemplos del potencial de Flash Player 10

No se los pueden perder, sin lugar a dudas estamos viviendo un gran momento en cuanto al 3D, la interactividad, el video y los contenidos ricos en internet.

Saludos!!!

Entradas relacionadas:

Categories
Flash Interactividad

Flash Player 10 – 3D nativo vs Papervision3D y demás motores 3D

Con la salida de Flash Player 10 vienen muchas cosas, entre ellas las que más interés me causan son el tema del 3D nativo y la cinemática inversa. Es sobre el primero que voy a enfocar este post.

Ahora que Flash nos ofrece un 3D nativo, ¿realmente nos hacen falta todos esos motores 3D que últimamente se ven tanto en la web?, ¿esto significará el principio del fin de estos motores?, teniendo el 3D nativo ¿aportan algo estos motores?

Bueno después de unas cuantas preguntas responderé que SI a todas, si a que nos hacen falta esos motores, si a que es el principio del fin, si a que aportan algo estos motores. Y ahora viene lo importante, el por que.

  • Los desarrolladores ya están acostumbrados a utilizar estos motores 3D.
  • Al igual que los players anteriores no se instalarán de la noche a la mañana, así que llevará tiempo para que la comunidad tenga instalado Flash Player 10, mientras tanto la gente deseará ver contenidos interactivos 3D así que ahí está otro punto. Este punto es muy importante y me viene a la mente un post de Freddie de Cristalab sobre ActionScript 2.0 y ActionScript 3.0, veo que es algo similar.
  • Muy de la mano del punto anterior, los cambios siempre cuestan un poco al principio, así que mientras aprendemos a sacarle provecho a este 3D nativo tendremos muchos proyectos que sacar adelante como ya lo sabemos hacer, es decir con los motores 3D.

A día de hoy creo que hay mucho camino por recorrer todavía con ActionScript 3.0 y los motores 3D, seguramente no pasará mucho tiempo antes que alguién cree un framework de desarrollo 3D utilizando las bondades de Flash Player 10 y el 3D nativo, pero mientras eso llega yo seguiré con mi investigación en este mundo de los motores 3D.

Hasta ahora he encontrado los siguientes:

Actualización a lo que escribí arriba, jejeje, la gente de Alternativa3D ya se puso las pilas y ya han optimizado su código para Flash Player 10.

Alternativa3D engine is ready for Flash Player 10.

Bueno ya veremos que nos depara el futuro, la tecnología avanza rapidísimo y a pasos agigantados, pero la gente de adobe no nos deja dormir ni un solo día, tendremos que hacer algunos días de guardia para no quedarnos obsoletos, jejeje.

Saludos!!!

Categories
Flash

Flash Player 10 – Listo para todos los usuarios

Desde hace tiempo podiamos descargar de los labs de adobe el Flash Player 10, pero esto era más que nada para los desarrolladores. Hoy se ha puesto a disposición de toda la comunidad. Sobre todas las características ya se ha hablado mucho así que simplemente diré que lo veo necesario y quizá un poco tardío pues desde hace un par de semanas ya se podía generar contenido oficialmente para Flash Player 10, esto es desde que se lanzó la Creative Suite CS4.

Retiro un poco lo dicho arriba, aunque se ha hablado ya mucho sobre las características del nuevo player y también hemos visto algunos videos del player en acción, recomiendo ampliamente ver el video de presentación de la página oficial de adobe flash player. Para descargarlo e instalarlo es tan sencillo como las anteriores versiones, simplemente deben acceder a la página de get flash player y listo.

Más información:

Adobe Flash Player

Descargar Flash Player 10

Flash Player 10 released

Categories
Flash JSFL Tutoriales

Tutorial JSFL – Comandos con interfaz gráfica

Ahora veremos la segunda parte de los tutoriales de introducción a JSFL. En esta ocasión vamos a introducirnos en el tema de los comandos asistidos con interfaz gráfica.

Los comandos como vimos en la primera parte del tutorial son ficheros de texto plano con extensión JSFL que alojamos en nuestro equipo y que podemos ejecutarlos desde la opción comandos en la botonera principal del IDE de Flash. Pues bien, en el primer ejemplo requeríamos de la intervención del usuario para indicarnos que nombre se le iba a dar a los elementos seleccionados en la biblioteca, esto lo solucionamos con la función prompt de JavaScript, pero si queremos dotar de mayor inteligencia al comando se nos queda corto con el prompt o podría ser muy complejo su uso, ahí es donde entran en juego las interfaces.

Añadir una interfaz a un comando

Para esta tarea debemos utilizar XML2UI que al fin y al cambo es un fichero XML que sigue el estándar XUL, para más información mirar este post, porque el tema da para escribir mas de un post.

En nuestro caso vamos a añadir más funcionalidad a nuestro comando, permitiendo añadir un prefijo y/o un sufijo al nombre de los elementos seleccionados. Para esto crearemos el siguiente XML que nos ayudará a crear la interfaz gráfica de usuario.



	

Para obtener la siguiente interfaz gráfica:

Con esto podremos obtener en una sola ventana hasta 3 valores que nos servirán para renombrar los items seleccionados en la biblioteca.

En la definición de nuestro XML hemos declarado 3 cajas de texto, para poder acceder al valor de estas cajas de texto nos hace falta diferenciarlas de alguna forma, para esto les asignamos un identificador en el campo id tal como lo hariamos en JavaScript o en Flex en los ficheros MXML.



Ahora debemos modificar un poco el fichero JSFL, pues tenemos que indicarle que utilice el fichero XML que hemos creado como interfaz gráfica, para esta tarea debemos añadir el siguiente código:

var oCfg = fl.getDocumentDOM().xmlPanel(fl.configURI + "Commands/XML/Renombra Items v2.xml");

Como vemos asignamos el resultado del método xmlPanel a una variable, esto es porque a través de esta variable tendremos acceso a los valores que haya introducido el usuario en la interfaz gráfica, por ejemplo para nuestro caso:

oCfg.sPrefijo;
oCfg.sNuevoNombre;
oCfg.sSufijo;

Lo siguiente que tenemos que hacer es una comprobación para verificar que el usuario ha introducido por lo menos un valor en la ventana y así proceder a realizar el cambio de nombres, la comprobación la realizamos de la siguiente manera:

if( oCfg.sPrefijo != "" || oCfg.sNuevoNombre != "" || oCfg.sSufijo != "" )
{
	//Bien, podemos seguir adelante
}
else
{
	alert("Es necesario rellenar por lo menos uno de los tres campos para renombrar los elementos.");
}

Perdonad, se me ha olvidado una parte súper importante, la respuesta de usuario, pues existe la posibilidad de cerrar la ventana y no querer renombrar los elementos, esto lo podemos verificar de la siguiente forma:

if (oCfg.dismiss == "accept")
{
	//Bien, podemos seguir adelante
}
else
{
	//El usuario ha cancelado la operación
}

Ahora si, una vez que hemos verificado que el usuario acepta la operación y que además ha introducido por lo menos uno de los tres valores, ya nos encontramos en condiciones de realizar el renombre de los items, así que realizamos la siguiente modificación dentro del bucle de los elementos seleccionados:

oItem = aItems[i];
sNombreActual = oItem.name.split("/").pop();
sNombre = (this.sNuevoNombre != "") ? this.sNuevoNombre + "_" + (i + 1) : sNombreActual ;
this.oLib.selectItem(oItem.name);
this.oLib.renameItem(this.sPrefijo + sNombre + this.sSufijo);

Con esto dejamos listo nuestro comando Renombra Items v2, aquí dejo los archivos de este tutorial, se deben copiar en la ruta de los comandos del sistema.

Saludos y espero que sea de utilidad.

Más información:

X-Flash: JSFL

Categories
AIR Eventos Flash Flex

MIF OnSite III – Update

A menos de una semana de la celebración del MIF OnSite III me entero vía Joan Garnet que hay un cambio en las charlas y es que por causas de fuerza mayor no contaremos con la presencia de Alberto Albericio en su lugar estará Joan Garnet dándonos una charla sobre Papervision3D, así que ya tenemos otro motivo más para no perdernos este grandioso evento.

Saludos y ahí nos vemos.

Más información:

Papervision3D for dummies: nueva charla para MIF onsite III

MIF OnSite III

Categories
Eventos

Conferencia rails 2008

Se acerca ya este gran evento sobre Ruby on Rails, el lugar, la fecha, las ponencias y los casos de éxito ya los tenemos, pero el precio está por confirmar.

  • Fecha: 13 y 14 de noviembre
  • Lugar: Facultad de telecomunicaciones de la Universidad Politécnica de Madrid
  • Precio: Por confirmar

Este evento tiene una parte sumamente interesante además de las ponencias que son de primer nivel y es que se genera un punto de encuentro entre los desarrolladores profesionales del sector y las empresas que requieren de estos profesionales, tal como ellos lo dicen en la página del evento:

Reunión anual de los desarrolladores y empresas de habla hispana que trabajan con Ruby on Rails. El objetivo de la conferencia es difundir este framework y poner en contacto a profesionales del sector.

En esta ocasión se habilitará durante unas horas un espacio dedicado exclusivamente a poner en contacto a desarrolladores en busca de trabajo o proyectos con empresas, emprendedores u otros programadores que ofrezcan trabajo o soliciten colaboración. Esto es un punto muy importante a tener en cuenta para todos, tanto empresas como desarrolladores. Un punto que me parece muy gracioso es el título que le han dado a este espacio, jejeje:

Fast dating

Saludos y espero ver alguna cara conocida en el evento.

Más información:

Conferencia rails

Programa de conferencias rails 2008

Recruiting en conferencias rails 2008

Categories
Flash JSFL

Flash CS4 – Extendiendo con JSFL

Y desde que trabajo con JSFL, jejeje, esto es algo nuevo que he implementado en mi procedimiento habitual para esta nueva versión de Flash, es leer las novedades sobre JSFL, a simple vista todo sigue como antes, salvo que igual que sucedió entre Flash 8 y Flash CS3, lo único nuevo es dar soporte para las nuevas funcionalidades del IDE en cuanto a nuevos trazos, grupos, bitmap, 3D, ….

Lo siento, he cambiado de parecer, estoy leyendo un poco más que a simple vista la documentación y he encontrado algo que me ha dejado alucinando y es que me viene de perlas para una tarea que tengo pendiente en un proyecto que estoy trabajando, es una de las novedades que implementan súper buena:

SoundItem object

  • soundItem.exportToFile()
  • soundItem.fileLastModifiedDate
  • soundItem.originalCompressionType
  • soundItem.sourceFileExists
  • soundItem.sourceFileIsCurrent
  • soundItem.sourceFilePath

Y es que aunque suene increible, esto antes no se podía hacer. Guauuu, es genial, ahora me internaré un poco más a leer la documentación, así que les dejo el enlace al pdf y probablemente después escriba más cosas interesantes sobre este tema.

Saludos!!!

Categories
Flash

Flash CS4 – Huevo de pascua

Lo segundo que suelo hacer al instalarme una nueva versión de Flash, jejeje, es buscar los huevos de pascua y hasta ahora he encontrado uno, si hacemos clic en Ayuda -> Acerca de Adobe Flash CS4 Professional nos aparecerá la típica ventanita de los créditos, bueno pues si en esta ventanita hacemos clic sobre el número 4 de CS4 veremos un regalito como este:

Que es muy parecido al de las versiones anteriores con imágenes de las personas detrás de nuestra querida y amada herramienta Flash CS4 Professional.

Saludos!!!