Archivo para la categoría ‘Web’

WWW SQL Designer

Una de las cosas que más me ha llamado la atención estos días, por su simplicidad y potencia a la vez, ha sido WWW SQL Designer.

WWW SQL Designer es una aplicación Web hecha en Javascript que te puedes descargar para que funcione desde tu ordenador y sirve para hacer diseños sencillos de tablas y relaciones de bases de datos.

Ejemplo de funcionamiento de WWW SQL Designer

Desde el propio navegador puedes crear tablas, añadir campos a las tablas de diferentes tipos y añadir relaciones entre campos de diferentes tablas.

Luego, estos datos se pueden guardar en XML o se puede generar el SQL para distintas bases de datos entre las que están MySQL y PostgreSQL. Eso sí, el XML no se puede guardar en un archivo sino que se genera para que tú lo guardes en un archivo local (recordemos que Javascript no puede acceder a otros archivos del ordenador que no sean las cookies) aunque también tiene la opción de guardar tu diseño en su servidor. Por supuesto, también se puede cargar un diseño en XML (el mismo que se generó anteriormente) ya que en cada recarga del navegador se pierden los cambios.

Lo que realmente me gusta de esto no es que sea vía Web, para nada, de hecho en Firefox en Linux va de pena mientras que en Firefox en Windows va muy bien. Lo que realmente me gusta es la sencillez tanto de manejo como de opciones. Es decir, en muy pocos pasos tienes un pequeño diseño válido para cualquier aplicación pequeña (pongamos… un blog :) ).

Y es que esta sencillez no la he encontrado en otros programas que tienen más opciones, que generan mejor el SQL y, sobre todo, que son más caros. En Linux hay algunos, pero ninguno tan sencillo como este. Por supuesto, para diseños grandes o hazlo a mano (cosa que recomiendo, así siempre tendrás el control sobre las tablas) o búscate/cómprate un programa profesional.

¿Y a vosotros qué os parece esa aplicación? ¿Alguna mejora? ¿Algún programa similar a este para el escritorio?

Otra solución para las imágenes PNG en Internet Explorer 6

La solución propuesta en varios sitios (donde lo vi) para solucionar el problema de las imágenes PNG en Internet Explorer 6 no es una buena solución porque es extremadamente lenta. Hay que darse cuenta de que, para cada imagen, ya sea <img src="..." /> en el HTML o cada elemento background-image o background que lleve el CSS , hay que ejecutar el archivo .htc con lo que hay que ir al servidor, bajarlo y ejecutarlo. Por cierto, donde está la caché cuando se la necesita…

A mi no me ha quedado otra que rendirme. Pues sí, qué queréis que os diga. Prefiero que en IE se vean peor las imágenes (ojo, siempre que no sean fondos espectaculares y tu web se base en el diseño en lugar de en la funcionalidad) pero ganar en velocidad; en mucha velocidad.

Es por eso que la otra solución que propongo es: primero, convertir todas las imágenes a formato GIF (por eso de que tengan, al menos, algo de transparencia, aunque se pueden convertir al formato que se necesite). Esto se puede hacer mediante el comando convert en Linux:

diego@dbox:~/projects/MyApp/public/images/:$ find -name ‘*.png’ | while read; do name=`basename $REPLY .png`; convert $REPLY ${name}.gif; done

Una vez hecho esto, nos creamos otro archivo CSS específico para IE donde sólo estén los selectores donde se usa background o background-image. Además, en estos selectores se debería eliminar el resto de código CSS para minimizar el ancho de banda usado por el nuevo CSS. Luego, lógicamente, cambiados todas las referencias a imágenes en PNG por las referencias a las imágenes en GIF.

Para incluir este CSS sólo en IE usamos el truco de inclusión condicional (sólo válido para IE, obviamente):

<!––[if lte IE 6]>
<link rel=”stylesheet” type=”text/css” href=”ie.css” media=”all” />
<![endif]––>

Y para las imágenes dentro del HTML usamos un poco de javascript (yo, personalmente uso jQuery):

$(“document”).ready(function() {
$(“img”).each(function() {
var src = $(this).attr(“src”);
src = src.substring(0,src.length-4);
$(this).attr(“src”,src + “.gif”);
});
});

Esta no es ni de lejos la solución definitiva y, ni muchos menos, es una buena solución, pero es mucho más rápida que la solución del archivo .htc porque una de las cosas que hace es que sí que usa la caché para las imágenes, con lo que después de cargarlo la primera vez, las siguientes van más rápido.

Ahora sois vosotros los desarrolladores los que tenéis que decir qué os interesa más, si que vuestra página se vea perfecta en IE a costa de sacrificar la velocidad, o que vaya rápido a costa de sacrificar vuestro diseño. Yo, en este preciso caso, elegí la velocidad. La proxima vez ya se verá.

Otra vez con incompatibilidades

Pobrecito Opera para Linux, cada vez que intento acceder a alguna página ¿rara? me pasa siempre lo mismo:

El Plural en Opera para Linux
«Esta página no está optimizada para su navegador, ¿quiere continuar?» Igual no, a ver si va a explotar el invento…

Por supuesto, la página se ve correctamente. Por eso Opera es uno de los navegadores que cumplen con los estándares Web.

Por cierto, la noticia que iba a ver y de la que me iba a reir un rato es de que los monjes Salesianos han editado un libro para dejar de ser gay. Lo mismito lo mismito que editar un libro para ser más alto (o para que te crezca la polla el pene, como promenten muchos mensajes de spam. ¿No estarán editados por los mismos?).

Nueva versión del plugin jQuery TimePicker

He reescrito de nuevo el plugin para jQuery que hice hace tiempo, jQuery TimePicker, que sirve para seleccionar la hora (horas y minutos) dentro de una caja de texto mediante la rueda del ratón.

Este plugin ha sido totalmente reescrito ya que no funcionaba correctamente en Internet Explorer y en algunas versiones de Firefox. Además, ahora usa la nueva versión del plugin jQueryMouseWheel que corrige algunos fallos de la anterior versión (de hecho ha cambiado hasta de desarrollador).

Ahora funciona correctamente en Firefox 3 para Windows y Linux, Firefox 2 para Windows y en Internet Explorer 6 y 7, aunque no funciona correctamente en Google Chrome (extrañamente suma las horas y los minutos de dos en dos).

Espero que ahora sea algo más útil que en su versión anterior (que no valía para nada, la verdad). Ya me contaréis si esta versión funciona correctamente en todos los sistemas o si hay que añadirle o quitarle algo.

¿Navegadores no permitidos?

No me puedo creer que todavía existan páginas web donde no se permiten ciertos navegadores:

Navegador Opera no permitido

¿Tendrán miedo? ¿Será que no se ve bien su página en Opera (versión 9.6, por cierto) y tienen vergüenza? ¿Les habrán pagado para que no se vea? En Firefox funciona…

No lo entiendo, en serio.

Represento

- ¿Por qué eres tan jodidamente grande? - Represento el porno en Internet, ¿cómo quieres que sea? - También es verdad

Pequeño fragmento, y muy representativo de Internet, del comic de ¡Eh, tío! que nos explica de una forma muy gráfica lo que es el overselling.

Simulación de un «Pim Watch»

Como se puede ver un poco por la falta de entradas en el blog, vuelvo a estar de vacaciones (las dos semanas que me quedaban). Pero siempre tengo algún rato para dedicarle a esto de la informática friki.

Y, como no, aquí tenéis un ejemplo. ¿Os acordáis de esos relojes que puse por aquí llamados Pim Watches? Pues aquí tenéis una simulación hecha en javascript:








































































Espero que funcione en todos los navegadores porque yo sólo lo he probado en Firefox y Chrome para Windows. En IE 6, por supuesto, no funciona.

Podéis, además, hacer click dentro de él para ver algún efecto que otro de las lucecitas que también se produce una vez por minuto.

Ahora a ver si tengo más tiempo y lo preparo como un plugin de jQuery o algo similar y así se puede poner en cualquier página web además de poder configurar varios aspectos como los efectos, el tiempo entre cada efecto, etc. También, por supuesto, tengo que añadir más efectos (todavía no me he puesto a hacer la espiral) y más colores para las luces y el fondo. Y a ver si se me ocurre algo para añadirle un segundero.

Por cierto, la hora se lee de la siguiente forma: la primera columna crece de abajo a arriba e indica la hora que es en formato de 12 horas según los números de la izquierda. Las siguientes 5 columnas crecen de izquierda a derecha de abajo a arriba indicando los minutos que van de la hora. Cuando una fila de las 5 últimas columnas está toda iluminada, indica que han pasado tantos minutos como indica el número de la derecha.

Y lo siguiente no es hacer otra simulación, lo siguiente es comprármelo… ;)

Rendimiento de PHP

Cuantas veces habré oído que si PHP es lento, que si el código es churrigueresco, que si las aplicaciones con PHP no son buenas… Y todo son bobadas.

Para lo de mal código la respuesta es bien sencilla: es el programador el responsable del código bueno o malo, no el lenguaje. Yo, al menos de momento, en todas las aplicaciones serias (las páginas web para el amigo del amigo pues como que no) hago código en condiciones. Y con «en condiciones» me refiero a utilizando un framework MVC, creando objetos de negocio y utilizando, siempre que algún problema se pueda solucionar con alguno de ellos, los patrones de diseño.

Para lo del rendimiento tenemos una página, The PHP Benchmark, donde nos lo ponen un poco más claro. Incluso tenemos una traducción en Sentido Web:

  • Realizar un foreach es siempre más rápido y si no recuperamos la clave del array mejor aún.
  • Un for es más rápido si no calculamos previamente en una variable el tamaño del array que recorremos. Además, sizeof es más rápido que count.
  • Cuando vamos a asignar el valor de una posición de un array a una variable para tratar con ella, es conveniente hacerlo por referencia ($alias = & $array[$i]).
  • No es más rápido crear un objeto como referencia ($obj =& new SomeClass();).
  • if es más rápido que switch/case y ligeramente más rápido es usar === que == (en la referencia en español está equivocado).
  • Parece ser que el uso de comilla simple o doble en las últimas versiones se ha mejorado y no existe apenas diferencia.
  • Contrariamente a lo que ponía en el manual hace tiempo, un echo "aa"."aa"."aa"; (echo de una cadena concatenada) ahora es más rápido que el echo "aa","aa","aa"; (echo de varias cadenas separadas por coma). No sucede lo mismo para variables donde el tiempo viene siendo similar.

Además, si queremos acelerar un poquito más nuestro código PHP, tenemos lo que se llama un opcode cacher, que es un plugin que cachea el código PHP pero ya precompilado en su bytecode, con lo que en sucesivas llamadas al script, no es necesario recompilarlo y ejecutarlo sino sólo ejecutarlo ya que lo coge precompilado de la caché.

Dos ejemplos de estos plugins son eAccelerator y XCache. eAccelerator lo he probado y funciona bastante bien (no es la panacea pero sí que se nota a simple vista) y ahora quiero probar con XCache.

E independientemente de todo esto del rendimiento tengo que decir que PHP es un lenguaje más. Un lenguaje como otro cualquiera, con sus ventajas e inconvenientes y tan potente o útil como el partido que le pueda sacar el programador. Porque herramientas, plugins, frameworks y clases reusables son lo que sobra para hacer buen código. Ahora ya no hay excusa.

Server Live Load

Otro pequeño proyecto que presento aquí para los que les guste cacharrear un poco con esto de la programación. El proyecto se llama «Server Live Load» y lo que hace es mostrar la carga instantánea del procesador o procesadores del sistema vía Web al mejor estilo de htop:

Pantallazo del proyecto Server Live Load

Mediante esta aplicación se puede monitorizar la carga instantánea del procesador o procesadores del sistema mediante información textual y mediante unas barras que, según su tamaño, indican la carga en porcentaje de cada uno de los procesadores.

La información textual cuenta con el nombre del servidor, el uptime o tiempo que lleva encendida la máquina, el número de tareas totales y las que están en ejecución y la carga media al minuto, 5 minutos y 15 minutos.

La aplicación está desarrollada en PHP y la librería jQuery de Javascript. Lógicamente, para la actualización de los valores de carga se usa AJAX también mediante jQuery.

Para que funcione sólo es necesario tener un servidor con Linux (con Windows como que no funciona), desplegarla en cualquier directorio al que tenga acceso Apache (o lighttpd o cualquier otro servidor Web que soporte PHP) y listo. Lo único a tener en cuenta es que el usuario con el que se ejecute el servidor Web debe tener permiso de acceso al programa /bin/cat y a los directorios /proc/stat y /proc/uptime.

Por supuesto y como (casi) siempre, se puede ver una demostración de esta misma máquina. Y también, si queréis ver las chapuzas de programas que hago, lo podéis descargar:

Descargar CPULoadWebViewer0.1.tar.gz

Para la siguiente versión a ver si pongo la memoria y el swap además de que sea un poco más configurable. Y ya de estar, aunque quizás sea para la 0.3, un histórico del uso de CPU. Pero bueno, eso con tiempo.

También se podrían poner las tareas que se están ejecutando en cada momento, pero eso cargaría demasiado el sistema, así que ahí se queda.

TimePicker: mi primer plugin para jQuery

Dentro de la página de plugins de jQuery existen varios que muestran un calendario para selccionar una fecha en un formulario. Pero he visto muy pocos (casi ninguno) que muestre un selector de hora, por ejemplo, para seleccionar un horario de trabajo. Y los que he visto tampoco es que sean muy interesantes (aunque es cierto que he visto uno muy bueno llamado NoGray Time Picker pero es con la librería Moo Tools).

Por eso, he hecho mi primer plugin para jQuery que es eso mismo, un selector de hora.

Mediante este plugin, en el input que esté activado, saldrá un selector con la hora actual en formato HH:MM donde, mediante la rueda del ratón, se podrá seleccionar una hora que se asignará automáticamente al input.

Este plugin require jQuery versión igual o mayor a la 1.2.6 y el plugin jQuery MouseWheel versión igual o mayor a la 3.0. Para instalarlo basta con incluir las siguientes líneas en el código HTML (en el mismo orden):

<script type=”text/javascript” src=”jquery.js”></script>
<script type=”text/javascript” src=”jquery.mousewheel.js”></script>
<script type=”text/javascript” src=”jquery.timepicker.js”></script>

Y para activarlo se usa el siguiente código:

<html>
[...]
<script type=”text/javascript”>
$(document).ready(function() {
$(“#timepicker”).timepicker();
});
</script>
[...]
<body>
[...]
<input type=”text” id=”timepicker” name=”timepicker” value=”" />
[...]
</body>
</html>

El id que se le asigna dentro del HTML es __timepicker con lo que se pueden usar hojas de estilo personalizadas.

El plugin está en la versión 0.1 y por dentro está bastante chapucero (es lo que hay ;) ) pero más o menos funciona tanto para Firefox en Windows y Linux como para Internet Explorer. Un problema que he detectado es que en IE versión 6 o menores no carga la hoja de estilos propia del TimePicker. Y un problema muy grave que no he corregido es que ¿qué pasa si tu ratón no tiene rueda? Pues que no puedes asignar la hora más que escribiéndola, por tanto el plugin no sirve para nada. A ver si soluciono esto de una forma elegante sin añadir las típicas flechitas de para arriba y para abajo. ¿Alguna sugerencia?

Podéis ver una demostración y, por supuesto, también podéis descargarlo en el siguiente enlace. Por supuesto que se agradece cualqueir comentario sobre todo de los que digan «¡Hey, que esto no va!»:

Descargar jQuery TimePicker Plugin v0.1

¿Dónde buscar en Internet?

Y muchos diréis: ¡¡En Google!!, y no es una mala respuesta, por supuesto. El el buscador más usado hoy en día, incluso en EE.UU. ya ha superado a Yahoo!.

Pero no siempre es la mejor opción para buscar lo que necesitas. Principalmente por el tipo de resultados que devuelve. Google siempre devuelve resultados de páginas Web que pueden ser más o menos adecuados a tus necesidades, pero siempre busca acordes a las palabras que has puesto en el campo de búsqueda, no al contexto de las mismas.

Por ejemplo, si queremos buscar el significado de la palabra «casa», podemos poner en Google la búsqueda «significado casa» o «significado de la palabra casa». Con estas búsquedas, Google nos devolverá todos los resultados que contengan dichas palabras, pero no nos devolverá lo que queríamos decir (el significado de una palabra) porque Google entiende de palabras, no de contextos.

Para buscar el significado de nuestra palabra «casa», ¿qué mejor que ir al diccionario de la RAE?

También, para buscar como se usa o se escribe algún término del lenguaje, por ejemplo cómo se escriben los números o como se usa la b y la v, Google tampoco es una buena opción por el mismo motivo que con nuestra búsqueda de significado. Quizás sea una mejor opción el Diccionario Panhispánico de Dudas, donde están las normas del lenguaje castellano.

En caso de buscar temas muy concretos, yo sobre todo busco temas de informática donde lo que necesito son definiciones rápidas o incluso temas de cultura general, pues lo mejor es, sin duda, la Wikipedia. Como la Wikipedia es una enciclopedia, ahí exiten muy buenos textos. Y si crees que alguno está mal, pues lo cambias (otra cosa es que te dejen hacerlo, pero si lo haces para bien, no tendrás ningún problema). Y si no está en la española, pues nos vamos a la Wikipedia inglesa que, con más de dos millones de artículos, es raro que no encuentres lo que buscas.

Otra búsqueda probable en las visitas a Internet es la traducción de una palabra. Pero no la busques en Google, búscala en un traducctor. Yo personalmente uso Wordreference, pero puedes usar el traductor que más te guste. Y sí, aquí puedes usar Google porque ellos también tienen un traductor.

Ya un poco más técnicos, si buscamos documentación sobre algún tema en general, como el PHP (vamos, todos los días estoy con eso…) pues tampoco es buena idea buscarlo en Google. Lo mejor es buscarlo en su propia documentación: PHP.net. Y así con cualquier documentación o manual técnico. Y es cuando no encuentras nada cuando sí hay que redigirise a un buscador más general.

Vamos, como conclusión, hay que tener en cuenta que Google, Yahoo!, MSN Search, Terra, AltaVista, Lycos, Excite, AOL,… son buscadores genéricos. Son buscadores que buscan en las páginas Web que tienen indexadas las palabras que tú les has puesto en su caja de búsqueda. Pero nada más. Ellos no entienden de contextos, sólo de números. Por eso debes ser tú el que descifre el contexto y sepas buscar en los lugares más adecuados.

Porque, recuerda, la cuestión no es saberlo todo, sino saber donde encontrarlo.

Agencia Estatal de Meteorología

Buscando el tiempo que va a hacer estos días en el INM me encuentro con la noticia de que ¡¡va a desaparecer!! Sí, nuestro querido instituto nos deja. Pero no hay sufrir, porque en su lugar nace la Agencia Estatal de Meteorología.

Y al igual que la nueva agencia, también se ha presentado su nueva página Web con la finalidad de mejorar los servicios ofrecidos por la antigua página del INM. Y aquí está el resultado:

Captura de pantalla de la nueva página de la Agencia Estatal de Meteorología (AEMet)

Como desarrollador, me puse a investigar un rato por dentro. Por fuera pues es normalita. El diseño gráfico te puede gustar o no pero principalmente es una web que da información. Por eso investigo por dentro como lo hice con la del Congreso.

Lo primero que miro, con esta y con todas, es si tiene HTML/XHTML válido. Y ¡¡oh, sorpresa!!, la página principal de la AEMet sí tiene código XHTML válido.

Pero no sólo eso, sino que todas las páginas interiores, navegues por donde navegues, todas tienen XHTML válido. Para mí eso es un punto a su favor. Además, también tiene el CSS válido.

Ya mirando más adentro, en el código fuente generado (supongo que está generado por un gestor de contenidos, lo que no sé es si ya está hecho o se lo han currado) tienen dos cosas interesantes: no tienen el CSS dentro de la página, está todo en archivos externos, y tampoco tienen el Javascript dentro (que no hay mucho) sino que es Javascript no intrusivo. Bien, bien.

Por supuesto no es perfecta, de hecho si pasas todos los validadores habidos y por haber fallará y fallará. Además, algo que hecho en falta es un formulario de contacto. Eso de enviar un correo electrónico no acaba de gustarme…

También, internamente, he visto algunos elementos div usados como párrafos y algunos párrafos vacíos para tener más espacio, cosa que se puede solucionar con padding y margin. Además, el segundo nivel del menú de migas no funciona, no tiene enlace. Pero bueno, esto son nimieces que se solucionan en un minuto.

Más profundamente no he mirado aunque también se puede apreciar que siguen los estándares Web (no sólo por sus pegatinas de la W3C) incluyendo, por ejemplo, el mapa Web, la declaración de accesibilidad, ayuda, etc. Vamos, que este es un buen ejemplo de como los organismos públicos se gastan nuestro dinero en cosas bien hechas.

Desde aquí, mi más sincera enhorabuena, no sólo a los que han desarrollado la página, sino también a los directivos que la han contratado y (supongo) han exigido que siga los estándares Web. Enhorabuena a todos.

P.D.: Como nota curiosa, la imagen de la cabecera cambia según la estación del año, porque por dentro tienen un div cuya clase es cabecera_primavera y eso me hace pensar que habrá una cabecera_verano, cabecera_otoño (¿cabecera_otono?) y cabecera_invierno. Habrá que estar atentos ;) .

Aviso de Firefox de página suplantadora de identidad

No suelo recibir mensajes de páginas que intentan suplantar la identidad de otras para sí hacerte introducir tu nombre de usuario y contraseña, pero de vez en cuando se cuela alguna. Y, como no, hay veces que me gusta ver lo que hay detrás.

Este me llegó a la cuenta de Gmail diciendo que eran los de PayPal y que tenía que introducir mis datos para una actualización.

Primero: no tengo cuenta en PayPal. Curioso como consiguen las direcciones a enviar los correos. Yo por lo menos me preocuparía de que sí tuviesen cuenta.

Segundo: una página web de PayPal en la que sale sólo la IP sin ningún dominio… malo.

Tercero: cuando hago actualizaciones en mis aplicaciones Web no pido al usuario que se conecte. Simplemente actualizo. Más sospechas.

Cuarto: nunca había visto la ventana que pone el Firefox de suplantación aviso de página de suplantación de identidad:

Aviso de Mozilla Firefox de Web de suplantación de identidad

Curioso.

De todas formas, estos personajes que hacen uso de técnicas de ingeniería social para conseguir datos me parece que no la han estudiado bastante. Vale que antes podía funcionar, pero con todo lo que está saliendo por la tele ahora y todos los avisos que dan los navegadores, ¿queda alguien que pique todavía?

Ay, espera. Que no me acordaba que la ignorancia tecnológica en España supera la media y eso de que nos saquen de jugar al solitario y de escribir documentos en el Word para preguntarnos que si cual es la IP de la página, que si cual es la URL verdadera,… no nos acaba de entrar en la cabeza.

Pues ale, a picar como tontos. Igual que para manejar el vídeo (antaño, ahora el DVD) nos leíamos el manual, ¿por qué ahora no nos leemos el manual para saber manejar el ordenador? ¡Ah, si!, que algunos nacen sabidos.

Guardando datos en aplicaciones Web

Hoy toca un poco de desarrollo web, y como ejemplo voy a poner un listado (de lo que queráis) en una tabla con varias columnas y ordenable tomando como criterio cada una de ellas. Además, se pueden filtrar los datos de esta tabla.

La ordenación y las búsquedas no me preocupan. Para la ordenación se puede hacer bien en el cliente por JavaScript (con el problema de la paginación) o bien en el servidor (con tu lenguaje de progarmación favorito – en mi caso el PHP, que no es que sea mi favorito, es que es en el que programo). Para las búsquedas en el servidor (de momento nada de AJAX).

Mi duda es ¿dónde guardo los criterios de ordenación y búsqueda?, es decir ¿dónde guardo la columna por la que se ordena y si es orden ascendente o descendente y los valores de los campos de búsqueda para que entre cambios de página mantenga dicho orden y filtro?

Así, a priori, veo cuatro lugares donde guardarlo:

  • La URL: Añadir variables a la URL con la columna ordenada, si el orden es ascendente o descendente, y también añadir una variable por cada campo de búsqueda con su correspondiente valor. Este tiene el pequeño problema de que las URL crecen y crecen y, si usamos mod_rewrite de Apache (reescritura de URL’s) pues se vuelve un poco difícil de tratar.
  • En la cookie: Guardando en la cookie del navegador (o en varias cookies) todos los criterios de búsqueda y ordenación y cargarlos según la ventana que se cargue y guardarlos cada vez que haya una búsqueda u ordenación. El problema es que las cookies están limitadas (al menos en IE) y si se tiene una aplicación muy grande con varias personas trabajando sin que se preocupen los unos por las cookies de los otros, se pueden llegar a terminar y ya no funcionaría nuestro sistema.
  • En la sesión: Igual que en las cookies, se pueden guardar datos en la sesión con lo que los datos viajarán del cliente al servidor y viceversa contínuamente. El problema es que puede haber aplicaciones que no usen sesiones. Además, PHP no recomienda que guardes grandes cantidades de datos y el id de sesión también se propaga en una cookie o en la URL.
  • En la base de datos: En caso de que haya un usuario conectado al sistema y se mantengan los accesos por usuario (que viene siendo normal en aplicaciones web), se pueden guardar los criterios de ordenación y búsqueda en la base de datos, en el registro asociado a los datos del usuario actual. Esta quizás sea la mejor opción, ya que se puede guardar cualquier cantidad de datos, no hay URL grandes y sólo usa cookies para propagar el id de sesión. El problema es que quizás se sobrecargue más la base de datos (aunque ya está bastante cargada ahora :) ).

Probablemente en la próxima aplicación grande que desarrolle lo guarde en la base de datos (en la actual está en la URL y es bastante chungo gestionarlo sin una clase URL que lo gesione automáticamente).

El problema es que hay que gastar bastante tiempo en diseñar toda la arquitectura de seguridad, incluyendo usuarios y grupos, para poder tener un sistema robusto para guardar, no sólo esto, sino todos los datos asociados a los usuarios incluyendo la configuración y, sobre todo, los permisos.

De todas formas ¿alguien me recomienda otra solución? Yo siempre propongo muchas cosas, pero siempre estoy abierto a nuevas soluciones que, si son mejores que las mías (que suelen serlo), se adoptan sin problemas. Así que ya sabéis, a proponer.

Diseño Web efectivo

Volviendo al tema de los estándares y de la accesibilidad iniciado hace un par de días, veo en Estándares y Accesibilidad otro artículo donde se detallan 10 principio para un diseño Web efectivo.

Todos ellos son perfectamente válidos. De hecho, se deberían aplicar tanto en las páginas Web como en las aplicaciones Web, sobre todo el de la simplicidad, vamos, la metodología KISS (sí, con dos eses).

Pero el que más me ha llamado la atención, porque no se ve en demasiados sitios que hablan de usabilidad, es el de los espacios en blanco:

7. No le tengas miedo al espacio en blanco

Actualmente es difícil valorar la importancia de los espacios en blanco. No sólo ayudan a reducir la carga cognoscitiva, sino que también mejoran la percepción de la información. Cuando un visitante llega a una página lo primero que intenta hacer es examinar la página y dividirla en secciones y los espacios en blanco son esenciales en esta tarea.

Las estructuras complejas son más difíciles de leer, examinar, analizar y de trabajar con ellas. Las estructuras jerárquicas reducen la complejidad (Ley de Simon): entre mejor logres que tus usuarios encuentren un sentido de jerarquía, tu contenido será más fácilmente percibido.

Eso sí, cuando llegéis al final veréis la gracieta: «Prueba temprano, prueba a menudo: Este principio conocido como TETO (Test early, test often)…». Vamos, será que yo tengo la mente sucia, pero esto me suena a un juego muy divertido…

Aunque es cierto que se debería aplicar a todo proyecto probando y probando en todas sus fases y por todos los usuarios posibles. La verdad es que se intenta, pero no todos los usuarios quieren ser conejillos de indias ;) .

Usabilidad en formularios

Desde un blog que he descubierto hoy, Usable y Accesible, me encuentro con dos interesantes artículos sobre la usabilidad y accesibilidad en el diseño Web:

Después de haberlos leído, mi primera conclusión es: la usabilidad es una disciplina seria. Por mucho que la gente se empeñe en sacar las páginas/aplicaciones Web como churros, centrándose únicamente en la funcionalidad y en la rapidez de desarrollo, deberían tener en cuenta que es mejor hacer las cosas bien y centrarse también en la usabilidad y accesibilidad. Y para eso, una buena idea es seguir las reglas básicas de un buen diseño, de las que yo destacaría tres:

  • Diseño centrado en el usuario: Al fin y al cabo, el usuario es quién va a usar tu página/aplicación. Si él no sabe como funciona o no le resulta fácil y amigable, date por seguro de que, aunque lo mejor del mundo, nadie la va a usar.
  • Escribir concisamente evitando el lenguaje comercial/técnico superfluo: Vamos, principalmente las cosas claras, sin rodeos y sin tecnicismos.
  • No incluir gráficos y sonidos sólo por contar con ellos: ¿Qué hay peor que una Web con texto parpadeante y música de fondo?

De todas formas, he notado que en estos artículos se centran mucho en las personas con discapacidad, personas que necesitan lectores de pantalla o magnificadores y, quizás en ciertos momentos, se olvidan del resto de usuarios poniendo información redundante que complica demasiado el desarrollo de las páginas.

Es por eso que, a parte de leer, informarse e intentar aplicar todo lo relacionado con el desarrollo Web, también hay que ver lo que quiere nuestro cliente y los clientes de éste, teniendo también muy en cuenta sus decisiones.

Y, como no, también debería servirnos de mucho nuestra propia experiencia y todos los comentarios que directamente nos proporcionan nuestros usuarios, porque eso puede contradecir alguna norma, pero puede que así tu página vaya mejor.

En resumen: leer, informarse, escuchar a tus usuarios, aplicar los consejos y hacer las cosas bien.