La locura del JavaScript: Eventos de teclado

13 de Noviembre del 2007 Escrito por Alex Barros

Trabajar en JavaScript ha tenido siempre una gran dificultad, y es que se trata de un lenguaje no estándar, interpretado por el cliente. Esto provoca desigualdades en los resultados, dependiendo sobretodo de los distintos navegadores, y sus respectivas versiones.

En el caso de los eventos de teclado este desmadre tiene un especial énfasis, y viene a demostrarse en este documento (en inglés) que paso a resumiros.

Eventos keyup keydown y keypress

Estos eventos son disparados en momentos distintos, dependiendo del navegador. Por ejemplo el mantener pulsada la tecla “Alt”, o el pulsar un caracter durante varios segundos, producen resultados distintos en cuanto al disparo de eventos, en cada navegador.

Interpretación de la tecla pulsada

Llegados al punto de que el usuario ha pulsado una tecla, querremos saber cuál de ellas ha pulsado. Pues el resultado también difiere entre navegadores (como era de esperar).

Para complicarnos la vida a los programadores, la codificación es distinta entre los principales navegadores. Aúnque en los caracteres normales (numeros y letras) hay una cierta uniformidad, la diferenciación del lugar donde se pulsan los números (hay dos series de números en un teclado normal), y la mayoría de los signos, adquieren claves distintas que los identifican.

Echa un vistazo a la tabla de códigos más abajo.

Tablas clarificadoras

Navegador Eventos enviados cuando se pulsan teclas modificadoras (Alt, Ctrl, etc)
Gecko
Internet Explorer
keydown
keyup
Opera
Konqueror
keydown
keypress
keyup
Safari
iCab
ningún evento
Navegador Eventos lanzados en cada autorepetición
Gecko (Linux)
Gecko (Macintosh)
Safari (Macintosh)
Konqueror
Opera
sólo keypress
Internet Explorer
Gecko (Windows)
Safari (Windows)
keydown
keypress
iCab keyup
keydown
keypress
Tecla Mozilla Internet Explorer Opera códigos pseudo ASCII
Teclas alfabéticas Código ASCII de la letra en mayúscula
[ Espacio ] 32 32 32 32
[ Enter ] 13 13 13 13
[ Tabulador ] 9 9 9 9
[ Retroceder ] 8 8 8 8
[ Shift ] 16 16 16 16
[ Control ] 17 17 17 17
[ Alt ] 18 18 18 18
izquierda 37 37 37 37
arriba 38 38 38 38
derecha 39 39 39 39
abajo 40 40 40 40
Números en el teclado Código ASCII del número (48 más el número), aúnque esté pulsado un modificador Código ASCII del caracter que será enviado.
[ ; : ] 59 186 59 59 (unshifted) o 58 (shifted)
[ = + ] 61 187 61 61 (unshifted) o 43 (shifted)
[ , < ] 188 188 44 44 (unshifted) o 60 (shifted)
[ - _ ] 109 189 45 45 (unshifted) o 95 (shifted)
[ . > ] 190 190 46 46 (unshifted) o 62 (shifted)
[ / ? ] 191 191 47 47 (unshifted) o 63 (shifted)
[ ` ~ ] 192 192 126 126 (unshifted) o 96 (shifted)
[ \ | ] 220 220 92 92 (unshifted) o 124 (shifted)
[ ' " ] 222 222 39 39 (unshifted) o 34 (shifted)
Números (teclado separado) 96 más número 48 más número (ASCII)

Recomiendo leer la fuente original (inglés).

Categorias: Código, JavaScript, Web | 5 comentarios »

Formas de ejecutar funciones en PHP

11 de Noviembre del 2007 Escrito por Alex Barros

Aúnque a algunos les parezca extraño, existen tres formas distintas de ejecutar una función en PHP (por lo menos que yo conozca). Cada una puede venir bien en situaciones distintas.

Lo primero de todo, crearemos un par de funciones.

  1. function menor($a,$b){ return $a<$b ? $a : $b; }
  2. function mayor($a,$b){ return $a>$b ? $a : $b; }

La función menor() devuelve el menor de los dos números pasados como parámetros. La función mayor() hará lo contrario.

La forma clásica

La forma más típica de ejecutar una función, es símplemente escribiendo su nombre, seguido de unos paréntesis, con los parámetros separados por comas. De esta forma, al escribir:

  1. $a = 12;
  2. $b = 5;
  3.  
  4. echo "Entre $a y $b, el menor es ",menor($a,$b);

Nos devolvería el siguiente texto:

Entre 12 y 5, el menor es 5

Con la función call_user_func(_array)

Las función call_user_func nos permite ejecutar una función, dado el nombre en cadena alfanumérica.

La diferencia con call_user_fucn_array, es que en esta última los parámetros son pasados en un array.

  1. if($_GET[‘comparacion’] == ‘menor’) $func = ‘menor’;
  2. else $func = ‘mayor’;
  3.  
  4. $a = 17;
  5. $b = 32;
  6.  
  7. echo call_user_func($func,$a,$b);

Dependiendo de la variable GET comparación, se ejecutará una función u otra. La alternativa con call_user_func_array es:

  1. if($_GET[‘comparacion’] == ‘menor’) $func = ‘menor’;
  2. else $func = ‘mayor’;
  3.  
  4. $a = 17;
  5. $b = 32;
  6.  
  7. echo call_user_func_array($func,array($a,$b)); //parametros en forma de array

Directamente de una cadena

Esta es una forma sorprendente de ejecutar funciones. Parte de lo mismo que la anterior, el nombre de la función en una variable alfanumérica. Pero en este caso puede ser tratada directamente como función, así por la cara.

  1. $funcion = ‘menor’;
  2. echo $funcion(2,5); //Devuelve 2
  3. echo $funcion(8,-12); //Devuelve -12

Esta libertad recuerda a JavaScript, donde pueden igualarse variables a funciones de forma muy sencilla.

Conocéis alguna forma más? Os parece útil disponer de diferentes métodos para llamar a funciones?

Categorias: Comparativa, Curioso, Código, HOWTO/CóMO, PHP | No hay comentarios »

Razones por las que es recomendable usar Windows XP en la empresa

10 de Noviembre del 2007 Escrito por Alex Barros

He encontrado una lista con muy convincentes argumentos a favor de usar Windows XP en la oficina. Os dejo el link para que os lo planteéis seriamente:

Por qué es mejor usar Windows XP en la oficina

Categorias: Comparativa, Entretenimiento, Windows | 1 comentario »

Flash en mi web? No gracias!

6 de Noviembre del 2007 Escrito por Alex Barros

Estás pensando en hacer una web en flash? Piénsatelo dos veces!

Via Barrapunto encuentro este interesante apunte con cinco razones para no usar Flash. Son:

  • Pérdida de visitas (estrepitosa), por problemas en la indexación
  • Problemas con buscadores, por no haber un código accesible y marcado.
  • Problemas de visualización, por incompatibilidad de un software específico
  • Problemas de navegación, causados por un lenguaje no accesible para el navegador
  • Problemas de gestión y actualización, porque suele ser complicado unir un lenguaje de lado servidor con Flash

Recomiendo echar un buen vistazo, sobretodo a quienes aún no estén convencidos de las enormes desventajas de flash para crear toda una web.

Categorias: Código, Flash, Web | 6 comentarios »

Android, el Sistema Operativo Linux de Google para móviles

5 de Noviembre del 2007 Escrito por José Cabo

android.jpgDespués de montones de meses de rumores los mismos creadores vuelven con el poder y nos ofrecen, hoy, su nuevo producto: Android, el SO móvil de Linux con la mano de Google.

Diversos medios ya se han puesto las pilas para ofrecer información del mismo como puede ser xataka y en Google Dirson. Google Phone se ha convertido en Android, un sistema operativo libre basado en Linux y que se podrá instalar en los teléfonos móviles que lo puedan soportar, algunas marcas que probablemente lo hagan son HTC, Motorola, T-Mobile o Qualcomm que ya tienen muchísima más experiencia en este mundo.

Este SO dispondrá de diversos software que van desde la gestión de las llamadas hasta las fotografías y vídeos, envío a diversos servicios, etc. Probablemente tenga una GRAN integración con todos los servicios que ofrece actualmente online (gmail, gtalk, Google Docs, etc…). Uso masivo de Youtube, búsquedas rápidas e integradas, navegación por las mismas, personalización del móvil. Además, todo en Linux donde se demuestra la versatilidad y la potencia de este núcleo.

Parece ser que telefónica tiene contrato con Google (al igual que otros montones) así que seguramente podamos tener acceso a los móviles con este SO.

Veamos lo que depara el futuro de la telefonía móvil con este sistema operativo nuevo con de la mano de Google. ¿Un cambio radical en precios?, ¿nueva definición de teléfono? Me resulta difícil pensar que los que veíamos en las películas hace algunos años no se pueda usar sin problemas en breve. Algo está claro, pienso comprarme un teléfono de estos.

Categorias: GNU/Linux, Google, Software libre, telefonía | No hay comentarios »

Premio Blog Solidario

5 de Noviembre del 2007 Escrito por Alex Barros

Recibimos desde El vol de l’home ocell un meme, consistente en otorgar siete premios a los que, a nuestro juicio, sean blogs solidarios. Conque manos a la obra.

El primero de todos va derecho a El Cinturón de Hipólita. Este blog de mi ex-instituto nació como un capricho del profesor de Latín, y ha conseguido convertirse en toda una referencia en la blogosfera de la Cultura Clásica, gracias a la enorme dedicación de Salva, el magister, y en parte gracias a las colaboraciones de personalidades como Mercedes Madrid, reconocida experta en el tema.

El segundo, y metiéndonos en temática de programación web (mi rollo), no podría olvidar Anieto2k. Web de referencia donde las haya, actualización contínua, y contenidos frescos e interesantes. Le estoy enormemente agradecido por haber promocionado algunos de mis proyectos en su web.

El tercero va para Alzado, cuya web, aúnque no actualiza de forma muy constante, tiene contenido de muy buena calidad. La temática suele moverse por el márqueting típicamente orientado a la red, pero divaga en muchos otros aspectos.

El cuarto lo envío a mi gran colega de Viciao2k3. Un apasionado de la programación web, con muchas tablas, ha creado una gran variedad de servicios de lo más 2.0. En su blog trata cualquier cosa que le inquiete, mucho código y mucho sentido del humor.

El quinto premio va derechito a La Webera. Su autora muestra a través de sus posts trucos y técnicas para llevar una buena web.

El sexto lo otorgo a HacheMuda, una web que trata todo lo circundante a Linux, junto a alguna curiosidad que otra. Creativo y defensor a ultranza de Ubuntu.

El último de los 7 lo voy a dar a Metal.Ize, web de diseño y maquetación fundamentalmente. Una importante referencia para el buen estilo.

Seguro que me he dejado muchas webs que ofrezcan material de calidad de forma altruista, estas son las 7 que subjetivamente destacaría.

Sólo queda agradecer a Joan que nos haya otorgado el premio. En el mes y medio que llevamos online lo hemos dado todo, y pensamos seguir así mucho tiempo.

Categorias: Boozox, Internet, Pa' gustos colores, Web, meme | No hay comentarios »

El aspecto de un correcto HTML

4 de Noviembre del 2007 Escrito por Alex Barros

Via del.icio.us descubro esta imágen que transmite de una forma muy acertada todo lo que un buen documento HTML debe contener.

Me gustaría transcribir y traducir este interesante recurso a continuación para todos vosotros:

Doctype declarado correctamente

Parece un galimatías, pero los DOCTYPE son importantes. No sólo hace que tu código sea válido, sinó que dicen a tu navegador detalles de cómo debe renderizar tu página.

  1. <!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"  "http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
  2.  
  3. <html xmlns="http://www.w3.org/1999/xhtml">

Encabezado ordenado

Que conste de título, conjunto de caracteres, enlace a hojas de estilo (incluida la de impresión!) y scripts (enlazados, que NO incluidos).
Los archivos externos (CSS o JavaScript) en carpetas propias (css/ y script/ por ejemplo).

  1. <head>
  2.       <title>Titulo del documento</title>
  3.       <meta http-equiv="Content-Type" content="text/html; charset=UTF-8" />
  4.       <link rel="stylesheet" href="css/estilo.css" type="text/css" media="screen, projection"/>
  5.       <link rel="stylesheet" href="css/print.css" type="text/css" media="print"/>
  6.       <script type="text/javascript" src="script/javascript.js"></script>
  7. </head>

ID para Body

El ponerle una id a la etiqueta body te permite crear propiedades CSS específicas para una página en concreto. Por ejemplo diferenciar los h2 del homepage, con un código similar a #home h2 {}, y así no afectar a ningún otro h2.

  1. <body id="home">

Div principal para todo el contenido de la página

El poner un div que contenga todo el contenido nos permite mantener el control del diseño sobre la página en su conjunto. Por ejemplo podemos determinar un ancho fijo de toda la página.

  1. <div id="contenedor">

Menú limpio semánticamente

Un menú debe tener este aspecto:

  1. <div id="menu">
  2.       <ul>
  3.             <li><a href="inicio.php">Inicio</a></li>
  4.             <li><a href="info.php">Info</a></li>
  5.             <li><a href="contacto.php">Contacto</a></li>
  6.       </ul>
  7. </div>

Incluir el contenido repetido

Mucho contenido es común entre página y página. Menús, barras laterales, piés de página, etc. Este tipo de contenido debería ser incluido dinámicamente. Esto puede conseguirse con una simple instrucción de PHP.

  1. <?php include_once("botonero.html") ?>

Contenido importante primero

Es apropiado que incluyas tus contenidos más importantes al principio, como noticias, eventos, que pueden ser listadas al principio del HTML. Si tu barra lateral es sólo para navegación o cosas menos relevantes incluso, deberías ponerla al final del HTML.

Código tabulado

Si cada sección de código se presenta tabulada como un conjunto, la estructura del código queda mucho más comprensible. Cuando un código está completamente alineado a la izquierda es prácticamente imposible de comprender.

Sin estilo!

Tu HTML debe estar completamente orientado a la estructura y al contenido, no al estilo! Deja que el CSS se encargue de todo lo relacionado con el estilo, y por supuesto olvida la etiqueta font

Contenido, contenido, contenido

Aquí has de insertar todo tu contenido, así que manos a la obra. No olvides separar los distintos párrafos con la etiqueta p. Utiliza listas dónde sea apropiado. Utiliza códigos para los símbolos (& copy; & iacute; etc). No abuses de los hr para el salto de línea.

Etiquetas de cierre

Empezaste con fuerza, ahora acaba con fuerza. No seas perezos@ y cierra todas las etiquetas que lo requieran, incluso si la página se renderiza bien sin ellas!

Categorias: Código, HOWTO/CóMO, HTML, Web | 7 comentarios »

Leer y escribir Zip en PHP sin complicarse la vida

2 de Noviembre del 2007 Escrito por Alex Barros

Lo que hoy quiero mostraros es una genial librería, que facilita increíblemente el manejo de archivos zip con PHP; únicamente habrá que incluir un archivo a nuestro código, para gozar de toda su funcionalidad para abrir, explorar y crear archivos de tipo Zip.

Instanciación

El primer paso para usar esta librería es siempre el mismo, independientemente de lo que queramos hacer:

  1. require_once("pclzip.lib.php");
  2. $archivo = new PclZip("archivo.zip");

Como se observa, hemos incluido el fichero de la librería, y hemos instanciado la clase PclZip, con un nombre de archivo.
Este nombre de archivo puede ser uno existente, que queremos manipular, o uno inexistente, que queremos crear a continuación. Será más adelante cuando le indicamos lo que queremos hacer con archivo.zip (leer o escribir), hasta aquí únicamente lo hemos referenciado.

Sigue leyendo esta entrada »

Categorias: Aplicaciones, Código, HOWTO/CóMO, PHP | 4 comentarios »

Siguientes entradas »

del.icio.us meneame.net RSS

Buscar:



Tagcloud

Entradas Recientes

Meta: