Múltiples views no-jerárquicas en iPhone
(English version at the bottom of this post)
Recientemente he estado trabajando en XCode y Cocoa Touch para un proyecto que estoy haciendo para el iPhone. Objective-C (el lenguaje de programación usado) tiene sus mañas (como todo lenguaje), pero he encontrado bastante ayuda en la web, gracias especialmente a Stanford, Google y a Stackoverflow.
Creo que es pertinente devolver algo a la comunidad, en particular a los hispanoparlantes, en este caso en forma de un mini framework para desarrollo de aplicaciones con múltiples pantallas no-jerárquicas ni lineales (simplemente que uno pueda saltar de una pantalla a otra sin ningún orden en particular, cuando el UITabBarController no es una opción). En realidad es basado en este otro de Jeffrey Berthiaume, pero con la adición de NIBs (Berthiaume hace las pantallas a punta de código).
Algo importante a tener en cuenta al usar NIBs es que para que el iPhone efectivamente libere la memoria usada por NIBs con imágenes, lo mejor es cargarlas con código (pero ese es otro post). De pronto luego pongo un tip acá pero por ahora mejor visite mi pregunta al respecto de esto en Stackoverflow.
Si lo que acabo de escribir suena un poco a chino avanzado (para aquellos no familiarizados con Obj-C), en parte es porque lo es (para mi Obj-C ha sido como un camino zen… el camino del ninja o algo así). Inauguro, entonces, el tag “iphone” en mi blog con este ZIP que pueden bajar y usar libremente (y si se le tira el proyecto que está haciendo no me eche la culpa):
Para que los angloparlantes puedan llegar a este post, a continuación la versión en inglés:
English version
This is a a framework based on the work of Jeffrey Berthiaume for developing NIB-based iPhone applications with non-linear, non-hierarchichal UIViewControllers, when the UITabBarController is not an option (games with multiple NIBs come to mind). Keep in mind that, in order for Obj-C to free NIBs with UIImageViews from memory, you need to load the images via code without using imageNamed. More info regarding this can be seen in this question in Stackoverflow:
¿su blog de WordPress está lento?
Desde hace rato estaba inconforme con la velocidad de este blog. Suponía que era un tema de hosting, pero MediaTemple ha sido mi proveedor para cualquier cantidad de sitios, propios y ajenos, desde 2001 (o aún antes) y nunca he tenido grandes inconvenientes con ellos. Supuse que era un tema de WordPress (el corazón detrás de este blog) pero he visto muchos blogs WordPress que no son lentos. Reduje la cantidad de posts que salen en cada pantallazo a cinco y nada (igual me parece mejor dejar eso como está ahora… el feed sigue igual con diez posts). El blog ya estaba demasiado lento al punto de ser insoportable. Me puse a buscar y encontré este listado de tips para resolver problemas de velocidad que finalmente resolvió el problema. Como el listado está en inglés, acá publico mi versión en español:
- Para evitar que su presencia como usuario administrador afecte el desempeño del blog, abra la administración de WP en un navegador (Firefox por ejemplo) y el blog como tal, sin estar logueado, en otro (Opera por ejemplo).
- Vuelva a uno de los temas predeterminados/básicos de WordPress.
- Si esto no funciona, desactive todos los plug-ins que tenga instalados.
- Pruebe que el blog funcione bien (sea rápido o más rápido que antes). Si esto no sucede, puede que simplemente sea un tema de hosting… de pronto es momento de pasarse a MediaTemple :)
- Active uno a uno los plug-ins, verificando que la velocidad no se afecte demasiado.
- Eventualmente encontrará uno que sea el culpable de la lentitud.
Cuando encuentre al culpable, busque una versión actualizada del plug-in o de pronto habrá uno equivalente que funcione mejor. En mi caso era BC Enable (no pongo link porque no se los recomiendo) que permite incluir videos de BrightCove (como un YouTube pero comercial/profesional) en el blog. Lo peor de todo es que ni siquiera estaba usando el maldito plug-in (!) (simplemente lo tenía activado en la administración y ya). A veces es mejor simplemente usar el código <embed> de los sitios así no sea “políticamente correcto“.
En restrospectiva parece obvio que el problema fuera un plug-in, pero la verdad nunca pensé que pudieran afectar tanto la velocidad del blog.
Espero el blog sea nuevamente un poco más tolerable (en lo que concierne a velocidad, por lo demás si no respondo) y el tip le sirva a alguien más.
Web design patterns, Will Wright y Spore
Un problema de diseño web puede tener muchas soluciones, no todas necesariamente correctas (lo correcto o apropiado de la solución depende en buena medida del contexto en el que se utiliza). Esto lo había mencionado antes, pero vale la pena ampliar. Tomemos, por ejemplo, algo aparentemente muy sencillo: la restricción de acceso a un sitio. ¿Cuándo es el momento apropiado para pedir el login del visitante? Algunos sitios web permiten que el usuario los utilice sin exigir un registro a menos que éste quiera interactuar con otros usuarios:

… otros, en cambio, excluyen por completo a usuarios nuevos:

… y también hay casos donde el tipo de servicio que ofrece el sitio hace obligatoria la identificación del usuario:

Eso sin tener en cuenta si es necesario exigir que el usuario se registre ni los detalles que se pueden ver en las imágenes como el link “¿olvidó su clave?”, la casilla “recordar mi identidad en este computador” y otros elementos que cambian de un sitio a otro. La “respuesta correcta” depende de diferentes factores como el modelo de negocio del sitio, el carácter costo/beneficio de ese paso (o pasos) adicional (suele ser dispendioso registrarse en un sitio web, al punto de perder potenciales usuarios en ese punto a menos que el contenido o servicio que ofrezca sea valioso para el usuario), el tipo de servicio que se ofrece, y más.
El caso del login, a pesar de aparentemente ya “estar inventado”, muestra la gran cantidad de consideraciones que deben tenerse en cuenta al crear interfases web (o de cualquier tipo). Pero bueno, como diría el Chapulín Colorado: ¡que no panda el cúnico! ya que existen lo que llaman:
Patrones de diseño web
Un patrón de diseño web (web design pattern) describe la solución óptima a un problema común de diseño web en un contexto específico:
Patterns are optimal solutions to common problems. As common problems are tossed around a community and are resolved, common solutions often spontaneously emerge. Eventually, the best of these rise above the din and self-identify and become refined until they reach the status of a Design Pattern. [1]
Una definición bastante darwiniana. Los patrones se generan a partir de una especie de evolución, donde la mejor solución tiende a prevalecer. Los problemas pueden ser muy simples: cómo presentar grandes cantidades de información que viene organizada alfabéticamente; o muy complejos: cómo manejar cambios de estado por medio de transiciones. En internet hay muchas inciativas por agrupar y categorizar esos patrones, algunas de las cuales enumero a continuación:
- Yahoo! Design Pattern Library: En Yahoo! tienen un impresionante listado categorizado de patrones que usan en sus propios proyectos acompañados de imágenes, descripción y recomendaciones. Cada patrón está complementado por una entrada en el blog de interfases.
- A Pattern Library for Interaction Design: De Martijn van Welie, holandés, PhD en Human Computer Interaction y quien ha recopilado y organizado una gran cantidad de patrones e incluye links a otros sitios similares.
- Web Patterns Project: Iniciativa de unos estudiantes de U. C. Berkeley que se preguntaron “Our primary motivation for this project was to consider why user experience, particularly around web-based user interfaces, is so poor across the Berkeley domain. Why is a good user interface so difficult to create? Why is it that at U.C. Berkeley, a leader in technology research, a place of high academic achievement and innovation, good web user experience is hard to come by?”. Este suele ser un sentimiento generalizado.
Adicionalmente está User Interface Engineering, una firma de investigación en usabilidad de interfaces. Tienen una gran cantidad de artículos en el tema.
SPORE
En otra área del diseño (juegos en este caso) pero muy afín con la teoría de la evolución está Will Wright. Mundialmente conocido por ser el diseñador de SimCity y The Sims, exitosos juegos de video: el primero creó un nuevo paradigma (no se pierde ni gana) y el segundo es uno de los más vendidos. Wright fue portada y protagonista de una edición dedicada a juegos de la revista Wired en la que habla de Spore, un juego que permitirá al jugador simular la evolución de una especie (desde un organismo unicelular hasta la conquista del espacio). El juego aún no ha sido lanzado pero las expectativas son altas. En Marzo de 2007 Wright fue invitado a las TED Talks donde hizo una breve presentación de ese juego:
Ayude a evitar el spam: use el Bcc

Más de una vez amigos suyos han querido compartir alguna noticia con ustedes (o vice-versa), y en el proceso su e-mail ha quedado a disposición de los “cazadores de emails” (también conocidos como spammers):
Correos electrónicos con chistes, cadenas, etc. que los usuarios de internet suelen reenviar sin ocultar las direcciones, y que pueden llegar a acumular docenas de direcciones en el cuerpo del mensaje, pudiendo ser capturadas por un troyano o, más raramente, por un usuario malicioso.
Por favor, si definitivamente necesita enviar ese próximo correo a todos sus contactos, ayude a evitar este molesto fenómeno que ya representa el 80% del tráfico en internet (!) usando el campo Bcc: (blind carbon copy o copia de carbón oculta) presente en la mayoría de sistemas de envío de correo. Sobra decir que solo debe enviar dichos correos a personas que hayan aceptado recibirlos y retírelos de su lista en caso de que ellos así lo soliciten (no querrá alimentar la animosidad de otras personas hacia usted). Si simplemente está reenviando un correo que alguien más le envió, borre los correos del contenido del mensaje antes de reenviarlo.
Pasando de Fireworks a CSS…
Un grupo de artículos (en inglés) a manera de tutorial que muestra como se puede pasar de un diseño en Adobe Fireworks a un sitio web basado en CSS y XHTML usando Adobe Dreamweaver.
Vale la pena leerlos si le interesa el diseño web:
Taking a Fireworks comp to a CSS-based layout in Dreamweaver
