lunes, 26 de abril de 2010

Nexus ¿One?


Bueno, me acabo de enterar que en el blog El Androide Libre sortean un Nexus. Y como un Nexus nunca está de más, vamos a ver si hay suerte y puedo llevarme uno xD.

Si me toca, no dudéis que lo usaré para el bien, y solo se desarrollarán programitas de calidad con él :P

Por cierto, hace poco se ha anunciado que el Nexus One saldrá a la venta en España de mano de vodafone en Mayo. Os recomiendo a todos que le echéis un vistazo, olvidaos del iPhone y tiraros a por un androide! XD

Seguir leyendo

viernes, 16 de abril de 2010

Cautivando al Usuario


Uno de los mayores retos a la hora de desarrollar software, y que muchas veces se deja de lado, es la gran importancia de la comunicación de la aplicación con el usuario.

Cuando digo "comunicación", me refiero a un concepto mucho más amplio que el de un campo de texto, un mensaje de ayuda, o al uso de botones y ventanas, me refiero al "feeling", a que la aplicación sea capaz de decirlo todo por si misma, sin necesidad de ayuda o excesivo texto indicatorio.

Hace tiempo leía una entrevista que hacían a Shigueru Miyamoto, el creador de Super Mario, y "gurú" del mundo de los videojuegos. Miyamoto San explicaba como habían diseñado los personajes del primer Super Mario Bros. Y es que no es casualidad que muchos enemigos tuviesen pinchos en la espalda, el jugador debía saber que si se acercaba a esas partes puntiagudas, no pasaría nada bueno! Claro, pensándolo ahora, más de dos décadas después, parece obvio, pero conseguir este tipo de comunicación es más difícil de lo que parece.

Tomando una frase del vicepresidente de diseño industrial de Apple, y padre del iPod, Jonathan Ive, hablando sobre el indicador de hibernación de los nuevos MacBook: "An indicator has a value if it's indicating something, but if it's not indicating something it shouldn't be there", lo que traducido al castellano viene a ser algo como: "Un indicador tiene sentido si está indicando algo, si no esta indicando nada no debería estar ahí".

Volviendo al tema de interfaces gráficas; los mensajes de ayuda, los abominables textos de introducción y parecidos, deben minimizarse al extremo, ser el último recurso, o no ser un recurso en absoluto. El usuario debe comprender en un periodo muy corto de tiempo qué es cada elemento que aparece en la pantalla, y cual es su función.

En el caso de aplicaciones para móviles, especialmente en lo referente a iPhone y Android, esto pasa a ser un punto fundamental, por la elevada competencia, y por el corto periodo de atención del usuario.

Mantén tus interfaces limpias y sencillas, y si no parece que haya una buena forma de hacerlo, siempre puedes ponerle unos pinchos!

Seguir leyendo

sábado, 3 de abril de 2010

while (1) { ... }


Una de las primeras cosas que le enseñan a uno cuando empieza a estudiar ingeniería informática es la potencia de los bucles.

Sí, hablo de esas tareas repetitivas para las que supuestamente tan malos somos los humanos, por eso de que no queremos perder el tiempo calculando a mano los 10 mil primeros decimales de pi, o porque no está bien visto dedicarse a dibujar 30 imágenes por segundo para poder entretener a alguien que quiere jugar al Halo (aunque yo lo vería bien :P)

Para los no iniciados, la estructura de un bucle, en general, es algo como esto:

mientras (condición verdadera)
{ hacer esto }

Los programadores, tan osados ellos, definieron lo que se llama "bucle infinito", esto es, aquel cuya condición siempre se cumple, y que, por tanto, se ejecuta ilimitadamente. El bucle infinito puede tener muchas formas:

Puede ser algo tan sencillo como: while (true) { ... }, algo muy utilizado, por ejemplo, en videojuegos, donde queremos que continuamente se estén dibujando imágenes en la pantalla. Estos bucles infinitos son "los buenos", porque se hacen adrede, y en principio entendiendo lo que significa.

Pero claro, como siempre, hay formas de cagarla, y que aparezca un bucle infinito donde en principio no debería. Suelen ser situaciones mucho más complejas, en las que ocurren cosas concurrentemente, y hay muchos más factores que influyen en la condición del bucle.

Y no, no me he puesto a escribir a las cuatro de la mañana para explicaros lo que es un bucle, sino porque todo esto tiene una analogía bastante clara con lo que es nuestra vida hoy en día.

En general, uno puede comenzar a hacer una tarea repetitiva bien determinada, como por ejemplo lavar los platos. Uno lava un plato, luego lava el siguiente, hasta que lava el último.

Esto, traducido a "lenguaje informático", sería algo como:

while (quedan platos sucios)
{lavar el siguiente plato sucio}

La condición del bucle es muy sencilla, y no corremos peligro de caer en un bucle infinito (a menos claro que haya algún capullo ensuciando los platos según los lavamos xD), de ser así, lavaríamos platos continuamente de por vida, y claro, eso no es muy recomendable...



Pero, al igual que en informática, hay muchas formas, muy peligrosas, de caer en un bucle infinito, y digo muy peligrosas porque las consecuencias no son tan insignificantes como que se cuelgue el ordenador, o que salga el relojito de Windows (o la pelotita de playa de la muerte para mis compañeros de Mac OS). El resultado en la vida real suele ser perder gran parte de la misma, o acabar atrapado en "algo", siendo ese "algo" un ente indefinido, que puede ser tan evidente como la propia rutina de trabajo o estudios, o repetir una y otra vez los mismos errores, hablar siempre de las mismas cosas con las mismas personas, o una secuencia más enrevesada que sea prácticamente inapreciable.

La gran pregunta es ¿cómo evitar esto?

Yo no sé la respuesta, pero las analogías suelen ser útiles para hacernos una idea de como resolver un problema, y en informática esto tiene varias soluciones.

Como por ejemplo, un contador de bucle, es decir, permitir que el bucle se ejecute un número limitado de veces, lo que al otro lado de la analogía podría ser replantearse cada cierto tiempo la situación personal de uno mismo (aunque aquí corremos el peligro de encontrarnos con un bucle más externo que consista en replantearse continuamente la situación pero, por no estar dispuestos a cambiar, esta sea siempre la misma)

También existe la posibilidad de que un agente externo interrumpa el bucle (donde "agente externo" puede ser que el mejor amigo de turno te de un toque de atención).

La otra opción, mucho menos recomendable, es "matar el proceso", y confiar en que alguien pulse el botón de "reportar fallo a microsoft", pero esto es algo mucho más dramático y poco deseable para nuestra integridad física, ¿verdad?

Da un poco de miedo ponerse a pensar en esto detenidamente, porque en nuestra vida hay ocultos muchos más bucles infinitos de los que pensamos...

Seguir leyendo