Usabilidad en la UI

Publicado en Usabilidad el 20 de March, 2009 por Lek. (Sin comentarios)

Una interfaz que requiere el uso de ratón para moverse por ella, no es usable

Es una frase que he escuchado muchas veces: Tu programa debería poder manejarse exclusivamente con el teclado.

(al hilo de que ayer en una pantalla de nuestra aplicación principal era imposible rellenar un campo si no ibas con el ratón y pinchabas sobre él. Como digo, muy poco usable)

compareTo vs equals

Publicado en Java el por Lek. (14 comentarios)

Al actualizar el código de un proyecto antiguo uno se puede encontrar cualquier cosa. En una de esas paranoias mías (o eso creía yo) me dio por dedicarme a cambiar todos los compareTo por equals, que me parecía como una instrucción más directa, óptima y mejor. No iba yo muy desencaminado.

La primera nos devuelve un entero que indica si el objeto es mayor que el parámetro de entrada, menor, o igual. La segunda nos devuelve directamente un booleano que nos dice si son iguales o no. Pero yo personalmente no recuerdo haber utilizado nunca el compareTo para algo que no fuera comprobar si un objeto (y más en concreto un String) es igual a otro. Así pues, me he creado un código chorras para saber cuánta diferencia hay (de paso metí el equalsIgnoreCase):

public static void main (String [] args) {
  String s = "necesito una prueba a ver si cuela ésta misma";
  long ini = System.nanoTime ();
  for (int i = 0 ; i < 10000000; i ++ ) {
    boolean b = s.compareTo ("necesito una prueba") == 0;
  }
  System.out.println (
      "CompareTo: " + (System.nanoTime () - ini)/1000000.0);

  ini = System.nanoTime ();
  for (int i = 0 ; i < 10000000; i ++ ) {
    boolean b = s.equals ("necesito una prueba");
  }
  System.out.println (
      "equals: " + (System.nanoTime () - ini)/1000000.0);

  ini = System.nanoTime ();
  for (int i = 0 ; i < 10000000; i ++ ) {
    boolean b = s.equalsIgnoreCase ("necesito una prueba");
  }
  System.out.println (
      "equalsIgnoreCase: " + (System.nanoTime () - ini) /1000000.0);
}

Los resultados son demoledores. compareTo es unas 150 veces más lento que equals:

(el tiempo va en milisegundos)
CompareTo: 1886.853143
equals: 71.728111
equalsIgnoreCase: 60.81111

Sorprende que equalsIgnoreCase sea más rápido que equals, sobre todo porque lo primero que hace es ejecutar el equals. Puede ser cosa del orden, pero probando a cambiarlas los datos no variaban demasiado. Sí puedo decir que de tanto en tanto equals es más rápido. En cualquier caso, puede parecer una chorrada perder 1'8 segundos en 10 millones de consultas que no se van a dar así en un programa real, pero al final todo suma y si los Strings ya son poco óptimos de por sí...

WordPress y su inseguro proceso de identificación

Publicado en Seguridad el 10 de March, 2009 por Fran. (4 comentarios)

Hoy he visto como a un blogger (aloisius, no pongo el enlace para no darle publicidad al tonto ese que te ha jodido el blog) al que suelo seguir le han conseguido robar su contraseña de Wodpress. Parece ser que todo era una broma, aunque lo que cuento de WordPress no es broma.

Y es que WordPress adolece de las siguientes debilidades:

  1. Proporcionar demasiada información al fallar la identificación: Siempre se ha aconsejado que cuando una identificación falle, el mensaje de error sea ambiguo y nunca menciones que parte ha fallado (usuario o contraseña), en WordPress en cambio te dice claramente que parte ha fallado, gracias a esto se podría conseguir una lista de los usuarios registrados en el blog.
  2. Número máximo de intentos de identificación: Para que la gente no te pueda realizar un ataque de fuerza bruta se suele limitar el número de intentos, o incluso poner un retardo cada vez mayor entre intentos. WordPress no hace ni lo uno ni lo otro.

Gracias a estos dos puntos, se puede conseguir realizar un ataque de fuerza bruta contra WordPress, ya que se pueden conseguir los usuarios (amén de que siempre existe uno llamado admin) para acto seguido atacar a cada uno de ellos con un script (los hay en abundancia) que se dedique a probar contraseñas, mientras nosotros esperamos (el tiempo que estaremos esperando dependerá de la complejidad de la contraseña) a que acierte.

Actualización: Para solventar el problema de los intentos (a mí juicio el más grave) he encontrado el complemento Login LockDown.

Guía del Cron

Publicado en Linux el 2 de March, 2009 por Lek. (3 comentarios)

Para las tareas programadas en Linux se utiliza un programa llamado Cron. Su configuración puede resultar algo compleja para los que no estén acostumbrados a utilizar la línea de comandos. Para facilitar las cosas, aquí tenéis una guía gráfica que me envió Bellz esta mañana por correo (click para ver más grande):

Cron Cheatsheet

Más fácil imposible