Contenido

Internet Explorer 6 pierde cuota de mercado

7 jul

+ 16

Hace unos días que vamos viendo noticias muy interesantes sobre la disminución de los usuarios de Internet Explorer 6 en Internet. No tenemos que engañarnos por que a su vez, Internet Explorer 8 está subiendo como la espuma.

browser-version-last-year
(Ver Imagen)

Esto es lógico debido a la actualización crítica de IE8 por parte de Microsoft. Y sin duda se trata de una gran noticia para los desarrolladores, ya que aunque IE8 no sea la panacea de los navegadores web, pero es una mejoría importante frente a la versión más antigua de Microsoft.

browser-last-year
(Ver Imagen)

¿Y los navegadores móviles?

Pues tambien hay cambios y es posible ver la evolución de las diferentes versiones disponibles en el mercado.

mobile-browser-last-year
(Ver Imagen)

Opera continua llevando la voz cantante frente a la versión iPhone de Webkit que cada vez pierde más cota de mercado. Se comienza a notar la incursión de Nokia en los dispositivos Wifi haciendo que se mantenga en una discreta tercera posición y la espectacular subida de Android que en 1 mes ha llegado a recoger un 2-3% del total, aún lejos de ser un navegador a tener en cuenta en estas estadísticas.

(Gráficas sacadas de StatCounter).

jQuery Visualize, gráficas con canvas y Javascript

7 jul

+ 7

jQuery Visualize, es un plugin de jQuery que nos permite generar gráficas dinámicas usando <canvas /> para alogar los gráficos.

jquery.visualize
(Ver Imagen)

Usando los datos alojados en tablas el resultado no puede ser más accesible, ya que en caso de que el usuario no tenga el Javascript activo, este podrá ver la tabla con los datos. Posibilitando así su comprensión.

¿Como funciona?

<table>
	<caption>2009 Individual Sales by Category</caption>
	<thead>
		<tr>
			<td></td>
			<th>food</th>
			<th>auto</th>
			<th>household</th>
			<th>furniture</th>
			<th>kitchen</th>
			<th>bath</th>
		</tr>
	</thead>
	<tbody>
		<tr>
			<th>Mary</th>
			<td>150</td>
			<td>160</td>
			<td>40</td>
			<td>120</td>
			<td>30</td>
			<td>70</td>
		</tr>
		<tr>
			<th>Tom</th>
			<td>3</td>
			<td>40</td>
			<td>30</td>
			<td>45</td>
			<td>35</td>
			<td>49</td>
		</tr>
		...repetitive rows removed for brevity.
	</tbody>
</table>

Usando una estructura de tabla normal, almacenamos los datos en ella y posteriormente el plugin los usará para generar el gráfico con estos valores.

$('table').visualize({options});

Opciones

  • type: string. Valors aceptados ‘bar’, ‘area’, ‘pie’, ‘line’. Default: ‘bar’.
  • width: number. Ancho de la gráfica. Por defecto el tamaño de la tabla.
  • height: number. Altura de la gráfica. Por defecto el tamaño de la tabla.
  • appendTitle: boolean. Añadir título a la gráfica. Default: true.
  • title: string. Título de la gráfica. Por defecto se usa el <caption /> de la tabla.
  • appendKey: boolean. Añadir color principal. Default: true.
  • colors: array. Array de colores usados. Default: ['#be1e2d','#666699','#92d5ea','#ee8310','#8d10ee','#5a3b16','#26a4ed','#f45a90','#e9e744']
  • textColors: array. Array de colores para el texto. Default: [].
  • parseDirection: string. Dirección de parseo de datos de la tabla Acepta ‘x’ e ‘y’. Default: ‘x’.
  • pieMargin: number.Espacio alrededor de la gráfica tipo “Pie”. Default: 20.
  • pieLabelPos: string. Posición del texto de etiqueta en la gráfica tipo “Pie”. Acepta ‘inside’ y ‘outside’. Default: ‘inside’.
  • lineWeight: number. Tamaño de la línea de la gráfica. Default: 4.
  • barGroupMargin: number. Espacio entre barras. Default: 10.
  • barMargin: number.Margenes de la gráfica. Default: 1

Podeis ver una gráfica dinámica y descargar el plugin directamente desde este enlace.

Chuleta HTML5

6 jul

+ 4

Smashing Magazine publica una chuleta para ayudarnos con la transición a HTML5.[PDF]

Todo lo que siempre quisiste saber sobre JSON

6 jul

+ 7

JSON es la abreviatura de Javascript Objecto Notation y se trata de una forma de almacenar información de forma organizada y de fácil acceso.

var aNieto2k = {
    "edad" : "28",
    "ciudad" : "Palma de Mallorca, ES",
    "genero" : "hombre"
};

A simple vista se obtiene una estructura muy clara y que ayuda a su comprensión. En este ejemplo hemos definido un pequeño objeto JSON llamado aNieto2k compuesto de una serie de atributos. De esta forma, podemos usarlos posteriomente siguiendo la siguiente estructura.

alert("aNieto2k tiene " + aNieto2k.edad + " años");

Funciones (no para transportar información)

Gracias a la versatilidad de las variables en Javascript nos es posible igualar uno de estos atributos a una función, generando así un método propio del objeto:

var aNieto2k = {
    "edad" : "28",
    "ciudad" : "Palma de Mallorca, ES",
    "genero" : "hombre",
    "saludar" : function(aquien) {
    	alert("Hola, soy aNieto2k de " + this.ciudad + ", ¿Como estás " + aquien + "?");
    },
};

Ahora ya puedo saludar() :D

aNieto2k.saludar("Usuario");

Al formar parte del objeto JSON, podemos hacer uso de los atributos desde el propio método mediante el uso del operador this.

Las funciones no tienen sentido para el uso de JSON como transportador de información, así que únicamente lo dejamos como una curiosidad de la notación de objetos :D

Arrays

Otra facultad de los elementos JSON es la capacidad de insertar arrays como atributos y asu vez dentro definimos elementos JSON:

var aNieto2k = {
    "edad" : "28",
    "ciudad" : "Palma de Mallorca, ES",
    "genero" : "hombre",
    "saludar" : function(aquien) {
    	alert("Hola, soy aNieto2k de " + this.ciudad + ", ¿Como estás " + aquien + "?");
    },
    "proyectos":[
    	{
    		"nombre" : 	"iMeneame.net",
    		"url"		 : 	"http://www.imeneame.net"
    	},
    	{
    		"nombre" :	"BlogoEdad",
    		"url"		 :  "http://edad.anieto2k.com"
    	}
    ]
};

De esta forma podemos recorrerlos como arrays que son:

var proyectos = aNieto2k.proyectos, html = '';
for (var x = 0 ; x < proyectos.length ; x++) {
	html += '<li><a href="' + proyectos[x].url + '">' + proyectos[x].nombre + '</a></li>';
}

Encadenando objetos JSON

Otra forma de agrupar elementos JSON es la de usar objetos JSON embebidos dentro de otros objetos JSON:

var aNieto2k = {
    "edad" : "28",
    "ciudad" : "Palma de Mallorca, ES",
    "genero" : "hombre",
    "saludar" : function(aquien) {
    	alert("Hola, soy aNieto2k de " + this.ciudad + ", ¿Como estás " + aquien + "?");
    },
    "proyectos":{
    	"imeneame": {
    		"url"		 : 	"http://www.imeneame.net"
	    	},
  	  "blogoedad": {
    		"url"		 :  "http://edad.anieto2k.com"
	    	}
    }
};

Como podemos ver, realmente lo único que hemos hecho es insertar un objeto JSON dentro de un atributo padre, por lo que podemos acceder a el de la siguiente forma:

var URL = aNieto2k.proyectos.imeneame.url;

Úsos prácticos

Como sistema de almacenaje de datos, es perfecto para transportarlos de una página a otra, incluso de un sitio web a otro. Un ejemplo muy sencillo y recurrido es la posibilidad de obtener datos de Flickr mediante el uso de jQuery para obtener estos datos.

$.getJSON("http://api.flickr.com/services/feeds/photos_public.gne?tags=cat&tagmode=any&format=json&jsoncallback=?",
        function(data){
          $.each(data.items, function(i,item){
            $("<img/>").attr("src", item.media.m).appendTo("#images");
            if ( i == 3 ) return false;
          });
        });

En este ejemplo, sacado de la documentación de jQuery, vemos como lanzamos una petición de las últimas imagenes enviadas a Flickr que hayan sido catalogadas con el tag “Cat”. El resultado será evaluado y procesado para al final llegarnos a nosotros dentro de data, una variable que podremos recorrer como si de una variable estuvieramos hablando.

JSON nativo

Uno de los problemas encontrados con JSON es la evaluación de código, ya que este debe ser transformado en una variable para poder usarla y esto requiere el uso de eval() lo que hace que el tiempo de proceso se incremente considerablemente (ya vimos algo al respecto).

// Eval
var myObject = eval('(' + myJSONtext + ')');

// JSON Nativo
var myObject = JSON.parse(myJSONtext);

// Mix
var myObject = (JSON)?JSON.parse(myJSONtext): eval('(' + myJSONtext + ')');

Por suerte, los navegadores modernos (IE8, FF3.5, WebKit, ….) están implementado funcionalidades para olvidarnos de eval() y mejorar considerablemente el tiempo de proceso.

Enviate copias de seguridad de tu base de datos a tu email

6 jul

+ 5

Alguna de las rutinas que debemos tener siempre presentes es la de hacer copias de seguridad periódicas de nuestros datos. Y es que más vale prevenir que curar.

Una buena práctica es la de programar copias de seguridad cada X tiempo (dependiendo de la importancia de los datos) y esa copia enviarla por email. Servicios como gMail son ideales para estas cosas ya que tienen una capacidad importante y teóricamente están online el 100% del tiempo.

En mi caso, cada noche se realiza un backup de todas las bases de datos y automáticamente me envia un email que posteriormente (y gracias a un filtro aplicado a los emails) estos mails son almacenados en una etiqueta de mi cuenta de correo en gMail.

Backup2Mail

Se trata de un pequeño PHP que se encarga de realizar el backup automáticamente por nosotros y enviarlo por email al que nosotros le hayamos especificado.

Configuración

/***************************************************
	Database settings
****************************************************/
	$db_server		    = 'localhost'; // Database server, usually "localhost"
 	$db_name 		    = '';	   // Database name, leave empty for 'all databases'
	$db_user 		    = '';	   // Database username
	$db_pass 		    = '';	   // Database password

/***************************************************
	E-mail settings
****************************************************/
 	$website            = 'yoursite.com';			// Your site's domain (without www. part)
	$send_to 	    = 'mail@yoursite.com';		// backup file will be sent to?

Es realmente sencillo, si editamos el fichero index.php que podemos descargar directamente desde aquí, encontraremos las 4 opciones necesarias para configurar el script. Simplemente introduciendo los datos de nuestra base de datos y el email al que queramos enviar el fichero de base de datos ya tendremos configurado nuestro script.

Automatizando

Ahora solo nos queda hacer que nuestro script se ejecute cada X tiempo, para ello haremos uso del demonio Cron (en Linux) que nos permitirá especificar el momento en el que se ejecute.

// cada minuto
* * * * *	php /home/your_account/backup2mail/index.php >/dev/null 2>&1 

// cada día a media noche
0 0 * * *	php /home/your_account/backup2mail/index.php >/dev/null 2>&1 

// cada día a las 05:00
0 5 * * *	php /home/your_account/backup2mail/index.php >/dev/null 2>&1 

// cada Domingo a media noche
0 0 * * 0	php /home/your_account/backup2mail/index.php >/dev/null 2>&1

Para más información sobre como funciona Cron, revisar este manual.