Flash y Google, más noticias

Buenas noticias, ahora Google ya puede indexar contenido externo que se cargue dentro de Flash, ya sea TXT, XML, HTML y otros SWF.

Además soporta técnicas de Javascript para embeber contenidos Flash, tales como SWFObject y SWFObject2.
Más información de parte de fuentes oficiales aquí: Official Google Webmaster Central Blog

Saber si un año es bisiesto

Un año es bisiesto si es divisible entre 4, excepto aquellos divisibles entre 100 pero no entre 400.

Codigo Actionscript 3

var today:Date = new Date();
function esBisiesto(year:Number):Boolean {
	return year%4 == 0 && year%100 != 0 || year%400 == 0;
}
//uso:
var yearactual = String(today.getFullYear());
var annoActual = Number(yearactual);
var bisiesto = esBisiesto(annoActual);
trace(bisiesto);//-- devuelve true si es bisiesto, y false si no lo es

Tambien funciona tambien en AS2.

Codigo PHP

function esBisiesto($year=NULL) {
    $year = ($year==NULL)? date('Y'):$year;
    return ( ($year%4 == 0 && $year%100 != 0) || $year%400 == 0 ); // devolvemos true si es bisiesto
}

Este Artículo y scripts son originales de Wikipedia… y me parecio importante publicarlos, con la intensión de promoverlos.

Tambien en el link de wikipedia, encontraran como saber si un año es bisiesto en otros lenguajes de progamación.

Actualización: en el código Actionscript original de wikipedia, lanzaba errores al probarlo en AS3, debido a que la variable today (que debe ser equivalente al objeto Date), no habia sido declarada, tube que hacerlo y problema resuelto.

Insertar datos en Mysql, con Actionscript 3 y PHP.

Bien, este es un tema bastante solicitado, asi que les explico:

Se trata de un formulario Flash, este se comunica con PHP, y este ultimo ejecuta un script encargado de insertar los datos en una base de datos mysql…

Aqui el ejemplo: (escribe un nombre en el formulario Flash)

This movie requires Flash Player 9

Ahora podés ver los registros ya insertados aquí

Veamos los codigos:

Nuestro archivo Fla (actionscript):

stop();
//– importar clases necesarias
import flash.net.*;
import flash.events.*;
//--
//-- la variable url, apunta hacia el archivo php (insertar.php) que insertara datos en mysql
var url:URLRequest=new URLRequest("http://www.tudominio/insertar.php");
var variables:URLVariables=new URLVariables();
var loader:URLLoader=new URLLoader();
//--
btn.addEventListener(MouseEvent.CLICK,insertar);
function insertar(e:MouseEvent) {
	loader.addEventListener(Event.COMPLETE, carga);
	loader.load(url);
}
function carga(e:Event) {
	variables.nombre=nombreTxt.text;
	variables.accion=true;
	url.data=variables;
	url.method=URLRequestMethod.POST;
	sendToURL(url);
	trace(variables.nombre);
	gotoAndStop(2);
}

Archivo insertar.php:

<?
$conn=mysql_connect("servidor","user","pass");
mysql_select_db("database",$conn);
if($_POST["accion"]){
	mysql_query("INSERT INTO try (nombre)value('".$_POST["nombre"]."')");
}
else{
	$query=mysql_query("SELECT * FROM try ORDER BY id DESC");
}
echo "<b>Datos insertados</b>:<br />";
while($row=mysql_fetch_array($query)){
	echo $row["nombre"]."<br />";
}
?>

Nota: no olvides crear una base de datos, y una tabla dentro de ella… en mi caso mi tabla se llama “try”

Eso es todo… si encuentran errores posteen sus comentarios.

Actualización: el formulario no esta validado, por lo tanto se podría introducir datos vacíos… encarguense ustedes de hacerlo válido :)

Pueden descargar los archivos aqui: link

Números primos en Actionscript

Basándonos en un anterior tema sobre como realizar un algoritmo para mostrar números primos, ahora traduzcamos el ese pseudo código a Actionscript 3:

var i:int=1;
var j:int=1;
var aux:int=0;
//-- la variable n será el rango en donde queremos encontrar los números primos;
//-- podés cambiar el numero 20 a uno mayo o menor
var n:int=20;
//--
while (i <= n) {
	while (j <= i) {
		if (i%j==0) {
			aux++;
		}
		j++;
	}
	if (aux <= 2) {
		trace(i+" es primo");
	}
	aux=0;
	j=1;
	i++;
}

Un día sin IE6?

bye ie

Navegando en el famoso maestrosdelweb.com, me encuentro con un artículo que dice: Proponiendo el día sin IE6!

Pues la propuesta es bastante original, ya que dudo que a alguien común y corriente se le hubiera podido ocurrir una idea tan mala… aclaro que no me gusta para nada IE6, es malísimo, detestable, y nada standard… pero sigue siendo muy utilizado por los usuarios de Internet a nivel mundial; algo que también quiero dejar claro es que no son los de maestrosdelweb.com los que iniciaron la idea.

¿Por qué sigue siendo tan utilizado el IE6?, pueden ser muchas razones, una de ellas pienso que puede ser que la mayoría de personas nunca cambiaron su sistema operativo de Windows XP a Windows Vista, entonces en el XP venía predeterminadamente el IE6 y para cambiar a IE7 había que hacer una especie de Update, lo cual para un usuario de nivel no muy avanzado podría ser algo incomprensible, para usuarios de computadora a nivel intermedio y avanzado muchas veces hacer un update era algo innecesario y al mismo tiempo podían haber efectos negativos sobre todo cuando sabemos que la mayoría de personas usan versiones piratas de los sistemas operativos y demás software.

Windows Vista, trae consigo el IE7; si la mayoría de personas hubieran cambiado a esta versión del sistema operativo, hubiésemos sido testigos de la muerte súbita de IE6, pero los resultados al parecer no fueron los mejores para Microsoft, ni para los que desarrollan sitios web.

Volviendo al tema de un día sin IE6, han publicado un script de PHP para que todo aquel que el 18 de octubre entre a los sitios (de los que apoyan la idea), usando IE6, no puedan ver sus contenidos ni nada que se les parezca… me llama la atención que quienes hablan de accesibilidad en la web ahora estén publicando scripts así y promoviendo este tipo de ideas, para discriminar a algunos usuarios… además, defienden el open source (libre), ¿Qué acaso la web no es libre y cada quien puede acceder a ella con los recursos que mas le parezca?….. Bueno esperemos ver si este tipo de propuestas tienen un fuerte impacto o no.

Personalmente, considero que el objetivo es bueno pero la medida no es la adecuada… ademas cerrarle un sitio a los usuarios no causa ningun daño, se cierra uno pero aún quedan millones.

Ver artículo completo: http://www.maestrosdelweb.com/actualidad/noie6day-octubre-18/

Odio a Flash

Ante la impotencia de aprender algo nuevo, consecuencias de la frustración o simplemente el no poder utilizar Flash, lleva a muchos diseñadores a optar por odiar a dicho software y no aceptar que incapacidad de no manejarlo.

Es verdad que Flash presenta problemas, los cuales con el tiempo han logrado ser reducidos… el uso del botón Atrás de los navegadores es uno resuelto en gran porcentaje, gracias a SWF Address; la indexación en buscadores, aun esta en proceso pero se ha avanzado mucho en ello.

Ya mucho se a escrito sobre este tema en otros sitios web, por lo tanto no voy a profundizar mucho en ello… solo aclarar que los críticos de flash son solo diseñadores en su mayoría, fanáticos del copy&paste, y uso de aplicaciones ya prefabricadas que no requieren gran comprensión para incluirlas en los sitios web… diseñadores sin el mas mínimo conocimiento de programación, que dejan de lado a la parte mas importante de Flash, la cual es Actionscript, y cuando se debate y se les pregunta sobre dicho lenguaje de programación, no responden nada….. Como lo he dicho anteriormente, en estos tiempos lo ideal no es solo saber diseñar sino también saber programar.

Finalizo, haciendo las siguientes preguntas para los que odian:

  • ¿Odian a Google Maps, por mostrar mapas y panorámicas de lugares con tecnología flash?
  • ¿Odian a Google Analytics por mostrar graficas con flash?
  • ¿Odian también los Applets de Java ya que necesitan una especie de plug-in para ejecutarse en el navegador?
  • ¿Por qué no debaten sobre Actionscript, y si tanto de Flash (animación)?
  • Cuando ven un sitio HTML horrible, poco optimizado, nada Standard, sin accesibilidad etc etc etc, ¿odian al diseñador o a HTML por haber sido mal utilizado?

    Cuando se me ocurran más preguntas, las escribiré.

    Algoritmo - Números primos

    Antes que todo, debemos tener claro cuales son los números primos… según Wikipedia:

    El conjunto de los números primos es un subconjunto propio de los números naturales que engloba a todos los elementos de este conjunto mayores que 1 que son divisibles únicamente por sí mismos y por la unidad. (Leér completo).

    Debemos entender que si un número es divisible tres veces o más, este deja de ser primo

    Aquí esta un pequeño pseudo código, suponiendo que tenemos N cantidad de números y queremos saber cuales son primos dentro del rango de 1 hasta N:

    Algoritmo numeros-primos
    Inicio
       var entero: i, j, n, aux, num
       i=1
       j=1
       aux=0
       num=0
       Leer(n)
       Hacer mientras(i <= n)
          Leer(num)
          Hacer mientras(j <= num)
             Si (num mod j= 0) entonces
                aux=aux+1
             Fin si
             j=j+1
          Fin mientras
          Si (aux <= 2) entonces
             Imprimir (num & "es primo")
          Fin si
          aux=0
          j=1
          i=i+1
       Fin mientras
    Fin

    La ventaja de realizar algoritmos haciendo uso de pseudo códigos y/o flujogramas (o diagramas de flujo), es que se facilita enormemente la traducción a un lenguaje de programación cualquiera.

    Si le encuentra un error al algoritmo expuesto aquí, informenme, para arreglarlo.

    Crear gif animados ONLINE

    En el lugar donde trabajo, se realizan constantemente aplicaciones para hacer E-marketing, ustedes saben, envío masivo de e-mails a personas registradas… y también este tipo de aplicaciones es vendida a algunos de nuestros clientes, para ellos mismos promocionar sus servicios y productos, publicar info, etc, en forma de boletines electrónicos.

    El asunto es que en una ocasión, un cliente quería agregar por medio del sistema de envío de boletines, gif animados (fotos rotativas sobre productos y servicios)… sabemos que los gif animados deben ser creados primero, darles animación etc, no es una imagen estática; pero el cliente no tenia instalado en su PC, ningún software de creación de gif… además estos, debían ser realizados de forma sencilla para evitarles dolores de cabeza, y por consiguiente dolores de cabeza a nosotros…

    La solución a nuestro pequeño problema es esta:

    Picasion-logo

    Con Picasion, simplemente subís las imágenes para tu gif animado, le ajustas el tamaño, velocidad y listo! … así de fácil!. Picasion, fue el que más me gusto de las aplicaciones que encontre, debido a que no pone marcas de agua a tus fotos ni nada por el estilo.

    También encontré GIFUP, que es otra RIAS, pero la desventaja que veo en este es que si pone marcas de agua a tus fotos, pero no deja de ser una aplicación interesante.

    Combobox dependientes con AS2

    Allá en el 2004, necesitaba hacer un catálogo de propiedades, para lo cual debía hacer un código javascript para selects HTML dependientes; o sea, que al seleccionar una opción del select_1, el select_2 se llenara automáticamente dependiendo del dato obtenido en select_1. La solución la encontré en www.desarrolloweb.com … ya con el tiempo, decidí traducir ese código (original del sitio web mencionado) a actionscript 2 (así que seguramente encontraran semejanzas en el script).

    ¿Porque en AS2 y no en AS3?, pues por que cuando lo hice todavía no había salido al aire AS3 :)

    Empecemos:

    • En Flash, arrastrar dos instancias del componente combobox
    • A uno de ellos, ponerle como nombre de instancia combo, y al otro combo2
    • Colocar el siguiente código en el primer frame:
    //– personalicemos los combobox
    _global.styles.ComboBox.setStyle(”themeColor”, 0×0099cc);
    _global.styles.ComboBox.setStyle(”backgroundColor”, 0xffffff);
    _global.styles.ComboBox.setStyle(”color”, 0×000000);
    _global.styles.ComboBox.setStyle(”rollOverColor”, 0×709FCF);
    _global.styles.ComboBox.setStyle(”selectionColor”, 0xCDE1EB);
    _global.styles.ComboBox.setStyle(”textRollOverColor”, 0xffffff);
    _global.styles.ComboBox.setStyle(”textSelectedColor”, 0×000000);
    _global.styles.ComboBox.setStyle(”fontFamily”, “Tahoma”);
    //–
    //– hacemos un array para llenar el combo (combo1), DESDE donde se obtendran los datos:
    var combo_array:Array = new Array();
    combo_array[0] = {etiqueta:”Seleccione”, dato:0};
    combo_array[1] = {etiqueta:”Mercadeo”, dato:1};
    combo_array[2] = {etiqueta:”Informatica”, dato:2};
    combo_array[3] = {etiqueta:”Contabilidad”, dato:3};
    combo_array[4] = {etiqueta:”Todos”, dato:4};
    //–
    //– llenamos el combo con los datos anteriores
    for (var a:Number = 0; a < combo_array.length; a++) {
    combo.addItem({label:combo_array[a].etiqueta, data:combo_array[a].dato});
    }
    //–
    //– Arrays para llenar combo QUE RECIBIRA los datos… seccion de mercadeo:
    var array_1:Array = new Array();
    array_1[0] = “Angie”;
    array_1[1] = “Karen”;
    array_1[2] = “Oscar”;
    array_1[3] = “Manuel”;
    array_1[4] = “Evangelina”;
    //– seccion informatica:
    var array_2:Array = new Array();
    array_2[0] = “Danilo”;
    array_2[1] = “Pow Wow”;
    array_2[2] = “Flashsv”;
    array_2[3] = “Carolina”;
    array_2[4] = “Socrates”;
    //– seccion contabilidad
    var array_3:Array = new Array();
    array_3[0] = “Isabel”;
    array_3[1] = “Pedro”;
    array_3[2] = “Candy”;
    array_3[3] = “Sofocles”;
    array_3[4] = “Albert”;
    //–
    //– Hacemos un cuarto ARRAY, a con el contenido de
    //– array_1, array_2 y array_3
    var valor:Number = 0;
    var array_4:Array = new Array();
    for (var i:Number = 0; i < array_1.length; i++) {
    array_4[valor] = array_1[i];
    valor++;
    }
    for (var z:Number = 0; z < array_2.length; z++) {
    array_4[valor] = array_2[z];
    valor++;
    }
    for (var j:Number = 0; j < array_3.length; j++) {
    array_4[valor] = array_3[j];
    valor++;
    }
    //–
    //– listener que ejecutara las acciones para
    //– cargar el combo dependiente “combo2″
    var listener:Object = new Object();
    //– al seleccionar una opcion, obtiene los datos y
    //– los muestra en “combo2″:
    listener.change = function(obj:Object) {
    combo2.removeAll();
    var cod:Number = obj.target.selectedIndex;
    if (cod != 0) {
    var array:String = eval(”array_”+cod);
    var numero:Number = array.length;
    combo2.length = numero;
    for (var i:Number = 0; i < numero; i++) {
    combo2.addItem({label:array[i], data:array[i]});
    }
    var predeterminado:String = combo2.selectedItem.label;
    trace(”La opcion predeterminada para ‘”+obj.target.selectedItem.label+”‘, es ‘”+predeterminado+”‘, pero podes cambiarla”);
    }
    };
    //– hace un trace con las opciones seleccionadas en combo dos
    var listener_2:Object = new Object();
    listener_2.change = function(obj_2:Object) {
    var seleccionado:String = obj_2.target.selectedItem.label;
    trace(”Seleccionaste: “+seleccionado);
    };
    //–
    //– ejecutamos los listeners
    combo.addEventListener(”change”, listener);
    combo2.addEventListener(”change”, listener_2);

    Nuestro resultado:

    This movie requires Flash Player 9

    Actionscript 2: Rebobinar SWF (Flash en reversa)

    En el ultimo frame de tu swf, pones un stop() y tambien:

    this.onEnterframe=function(){
    if(_currentframe<=1){
    delete this.onEnterFrame
    }
    else{
    this.prevFrame()
    }
    }

    Lo anterior funciona, si suponemos que quieres que se rebobine hasta el primer fotograma… pero ¿si no quisieras rebobinar hasta el primer frame?, yo uso esta funcion:

    rebobinar = function (regresarHasta:Number) {
    this.onEnterFrame = function() {
    if (this._currentframe<=regresarHasta) {
    delete this.onEnterFrame;
    } else {
    this.prevFrame();
    }
    };
    };

    Ejecución:

    stop();
    rebobinar(10);

    Eso suponiendo que quisieras rebobinar hasta el frame 10.