Contenido

Hola mundo en canvas

10 sep

+ 5

En Carsonified.com nos muestran un interesante tutorial con el que iniciarnos en el uso de <canvas /> mediante Javascript.

// Comprobamos que <canvas /> esté disponible
if(drawingCanvas && drawingCanvas.getContext) {
 // Inicializamos el lienzo 2D
 var context = drawingCanvas.getContext('2d');

// Creamos la cara amarilla
 context.strokeStyle = "#000000";
 context.fillStyle = "#FFFF00";
 context.beginPath();
 context.arc(100,100,50,0,Math.PI*2,true);
 context.closePath();
 context.stroke();
 context.fill();

 // Añadimos 2 ojos verdes
 context.strokeStyle = "#000000";
 context.fillStyle = "#FFFFFF";
 context.beginPath();
 context.arc(80,80,8,0,Math.PI*2,true);
 context.closePath();
 context.stroke();
 context.fill();

 context.fillStyle = "#009966";
 context.beginPath();
 context.arc(80,80,5,0,Math.PI*2,true);
 context.closePath();
 context.fill();

 context.strokeStyle = "#000000";
 context.fillStyle = "#FFFFFF";
 context.beginPath();
 context.arc(120,80,8,0,Math.PI*2,true);
 context.closePath();
 context.stroke();
 context.fill();

 context.fillStyle = "#009966";
 context.beginPath();
 context.arc(120,80,5,0,Math.PI*2,true);
 context.closePath();
 context.fill();

 // Creamos una nariz con firma de diamante
 context.fillStyle = "#000000";
 context.beginPath();
 context.moveTo(93,100);
 context.lineTo(100,93);
 context.lineTo(107,100);
 context.lineTo(100,107);
 context.closePath();
 context.fill();

 // Añadimos la sonrisa                   
 context.strokeStyle = "#000000";
 context.beginPath();
 context.moveTo(70,110);
 context.quadraticCurveTo(100,150,130,110);
 context.quadraticCurveTo(100,150,70,110);                
 context.closePath();
 context.stroke();
}

Este código, nos permite generar la cara amarilla que vemos en el “Hello World” que vemos debajo:

hello-world-canvas
(Ver Imagen)

Mucho código pero muchas posibilidades.

Navegadores modernos: ¿para que tanta velocidad?

11 ago

+ 26

Con la llegada de Google Chrome, parece que la palabra “velocidad” se ha puesto de moda.  ¿Pero realmente necesitamos tanta velocidad?

He estado haciendo unas pruebas muy rústicas, osea he copiado la página de Yahoo! España en una copia local y le he añadido 2 líneas de Javascript, una al inicio de la página y otra al final de la misma.

<script type="text/javascript">var timeTest = new Date().getTime();</script>
[...] // Toda la página
<script type="text/javascript">console.log("Tiempo: " + (new Date().getTime() - timeTest) + "ms");</script>

Misteriosamente, tiene un par de <noscript /> fuera del </html>, por eso he puesto la línea al final del fichero, fuera del </html>.

Aclaraciones

No se deben hacer ningún tipo de caso a estas pruebas, no tienen ningún valor científico son simplemente una pequeña prueba que he montado.

La prueba se ha realizado sobre la misma página, en el mismo ordenador, con las mismas aplicaciones abiertas y varios navegadores. Se han hecho 5 cargas y se ha sacado una média aritmética de los resultados obtenidos.

Resultados

Los resultados que he obtenido en la primera carga de la página, la siguientes se notaba el caché de partes de la misma,  son los siguientes.

// Windows XP
Firefox 3.5.2: 2566ms.
Chrome 3.0.195.6: 2435ms *
Safari 4.0: 2450ms.
Opera 10.00 Beta 2: 2422ms.
Internet Explorer 8: 2860ms.

* Despues termina de cargar las imagenes.

imagen(2)
(Ver Imagen)

Hemos de tener en cuenta que Google Chrome, el más rápido de los testeados ha cargado las imagenes despues de mostrar el alert() lo que hace que el tiempo sea tan bajo. Pero esta cutre medición no da para más :D .

La mayor diferencia, la encontramos entre IE8 vs Opera, y es de 438ms. Una diferencia realmente insignificante…

Realmente, ¿es tan importante la velocidad?

PD: No he tenido en cuenta la velocidad de apertura que es la que más fastidia a los usuarios de Firefox.

IE6ify, sientete como en casa con cualquier navegador

29 jul

+ 13

¿Eres un amante devoto de Internet Explorer 6.0? ¿Es el único navegador que muestras las páginas como quieres verlas? ¿Los demás navegadores muestran las páginas demasiado bien? Pues acaba con ello, con IE6ify podrás destrozar cualquier web y sentir que estás de nuevo con tu amado IE6 :D

IE6ify
(Ver Imagen)

Este script, encargado de colocar aleatoriamente todos los elementos de la página, simula a la perfección el algoritmo encargado de interpretar el HTML de Internet Explorer 6. Y nos ayudará mostrar cualquier página con ese toque único que solo un gran navegador puede darnos.

IE6 adictos venir a mi!!!

Mozilla Firefox 3.7, maquetas del nuevo interface

22 jul

+ 19

Acabamos de descubrir Firefox 3.5, y ya vimos algunas de las ideas que podremos disfrutar en Firefox 3.6. Pero la gente de Mozilla no para, y ahora está pensando en rediseñar la interface de la 3.7.

985px-Firefoxnnpre
(Ver Imagen)

A modo de tormenta de ideas con la comunidad de desarrolladores se han generado una serie de maquetas que nos muestran el aspecto que podría tener (para Windows).

Continua —>

Bueno, esto es embarazoso.

7 jul

+ 16

Con esta pantalla tan curiosa me he encontrado al abrir el portátil después de que ayer se me agotara la batería antes de acostarme.
firefox-restore
(Ver Imagen)

Realmente es un detalle  (que ya tienen muchos otros navegadores) que Firefox (Por fin!) lo haya incluido :D

Los usuarios me avisan

29 jun

+ 2

Via email he recibido un par de artículos interesantes que me parece interesante compartir:

  1. Pautas de diseños en Photoshop [peivem.com]
  2. Ventanas gelatinosas con Javascript y CSS Transformations [Turleando.com.ar]
  3. Honda Insight [Vimeo] (Via Hans Christian)

Si quieres compartir algo, solo tienes que hacermelo saber :D

Evita SPAM invirtiendo tu email con CSS

23 jun

+ 23

Via Sentido Web descubro un artículo muy interesante que nos muestra como el ingenio puede ayudarnos a solucionar problemas. En este caso, mediante el uso de la propiedad direction del CSS invertimos nuestro email para mostrarlo correctamente por pantalla.

<style type="text/css">
span.test { direction: rtl; unicode-bidi:bidi-override; }  
</style>
<p><span class="test">moc.liamg@5k2oteina</span></p>

Interesante técnica para evitar el SPAM. Quizás como recomendación recomendaría email con algún punto en el nombre para hacer más dificil la lectura del mismo (xxx.yyy@zzzz.aaa). Incluso deberíamos tener en cuenta a los visitantes que no tengan activas las CSS e informar que ese correo está al revés aunque despues ocultemos el texto mediante CSS para los que si lo tengan activado.

8 innovaciones de los navegadores gracias a Opera

12 jun

+ 21

El otro día nos preguntábamos por que Opera, pese a ser uno de los navegadores más innovadores disponibles era tan poco usado. Al parecer la gente de Geek Technica se pregunta lo mismo y además recuerda 8 de las novedades que Opera introdujo en el mundo de los navegadores web.

  1. SpeedDial: El marcado rápido de los marcadores. Hasta 9 páginas a las que podrás acceder con un simple click.
  2. Tabs: La famosa y tan aclamada navegación por pestañas.
  3. Sesiones: Gestión de diferentes sesiones que permite que diferentes usuarios gestionen el navegador a su antojo.
  4. Bloqueo de Pop-up: Esa maravilla que hizo que al entrar en una página dejaramos de cruzar los dedos por si aparecían miles de ventanas.
  5. Zoom: Opera comenzó haciendo zoom a la página completa y no solo al texto.
  6. BitTorrent: Quizás la más tonta de todas, pero también ha dado lugar a la integración por parte de otros navegadores.
  7. Borrar información privada: La capacidad de eliminar la información almacenada durante la navegación.
  8. Gestos de ratón: Yo no la he usado nunca, pero la gente que lo ha hecho está encantadísima.

En fín, un sin fín de novedades que poco a poco los demás navegadores las van incorporando a sus núcleos.

Interesante curiosidad javascript

10 jun

+ 35

Esta mañana he encontrado un artículo, que esta noche publicaré, en el que me he encontrado una interesante curiosidad javascript, os la dejo y a ver si alguien lo encuentra :D


var divs = document.getElementsByTagName("div");
for (var i=0; i < divs.length; i++) {
       var div = document.createElement("div");
       document.body.appendChild(div);
}

Primero, y sin probar el código intenta comprender que es lo que hace el script, una vez visualizado y comprobado que no haya errores, pruebalo, ya sea en Firebug, o en una página aposta. ¿A ver si alguien me sabe decir por que ocurre esto? Esta noche, o mañana por la mañana pondré la solución y el enlace donde lo ví, pero seguro que lo sacáis antes :D …. tiempo!!

Intenta no leer los comentarios y contestar lo que has pensado.

Actualización

Bueno, los comentaristas están mucho más puestos que yo en Javascript, y nos han deleitado con comentarios explicativos imposibles de mejorar, así que si quieres saber algo más sobre los HTMLCollection, NodeList y demás, lee los comentarios. El código lo he sacado de un artículo de Nicholas C. Zakas sobre optimización Javascript y me ha parecido muy curioso :D

for reverso para grandes interaciones en Javascript

28 may

+ 20

Luigi, me muestra hoy un artículo muy interesante sobre optimización de Javascript. En él encontramos un ejemplo de como mejorar nuestras iteraciones en nuestro código. Simplemente debemos pensar en decrementar la variable que estamos iterando. He montado un pequeño ejemplo para testear 50.000, 500.000 y 5.000.000 de iteraciones simples. Los resultados hablan por si solos:

[increment]50.000 iteraciones: 11ms. (50000)
[decrement]50.000 iteraciones: 2ms. (50000)
[increment]500.000 iteraciones: 115ms. (500000)
[decrement]500.000 iteraciones: 19ms. (500000)
[increment]5.000.000 iteraciones: 1188ms. (5000000)
[decrement]5.000.000 iteraciones: 181ms. (5000000)

Funciones

El código del ejemplo es muy sencillo y como se puede ver, únicamente se encarga de incrementar la variable y, en ambas.

	var fors = {
		increment: function(iterations){
				var y = 0;
				for (var i=0;i<iterations;i++){
					y++;
				}
				return y;
		},
		decrement:function (iterations){
			var y = 0;
			for (var i=iterations;i>0;i--){
				y++;
			}
			return y;
		}
	}

Como podemos ver, un pequeño cambio puede significar reducir entre un 200 y un 600% el tiempo de procesamiento de nuestros scripts. ¿Alguna optimización más?

Explicación

El motivo de esta diferencia de tiempo, es debido a que increment() debe realizar una revisión del valor de iterations por cada pasada por el bucle. De esta forma, se realiza un acceso a memoria para solicitar el valor de la variable, algo que no pasa en decrement() que al comparala con 0, nos ahorramos dicha consulta.