Alpha's Manifesto

A black and white figure's thought-hive

QArt Codes

Imágenes en QR Codes

Russ Cox publicó hace no mucho un artículo sobre lo que él denomina QArt Codes, que son QR Codes con una imagen en ellos.

Él comienza contando sobre una anécdota de varias empresas que para marketing generaron QR codes que tenían logos o imágenes en ellos. Sin embargo, estos QR codes eran incorrectos y sólo funcionaban porque hacían uso de la capacidad de corrección de errores. Él se propuso entonces hacer un sistema que pudiera incluir una imagen en un QR code con un formato totalmente correcto. En dicho artículo, nos explica cómo es el funcionamiento y formato de los QR codes y cómo esto se puede utilizar para la inclusión de una imagen.

El sistema resultado de dicha investigación se llama QR y su código está disponible en Google Code.

Cabe destacar que el análisis no es extensivo de todo lo que un QR Code debe incluir. Por mencionar algo extra, en un post de Google Plus él nos cuenta que debe incluir ciertos píxeles de margen para que todos los lectores puedan identificarlo (cosa que Facebook no tuvo en cuenta a la hora de pintar un QR code en su techo, pero Phillips & Company sí).

Soy un zorrinito cuadrado.

¿Por qué distintos dominios para recursos estáticos?

La razón detrás de las URLs raras...

Sabemos que el nombre no es más que un nombre y que no importa cuál sea el servidor actual en donde se están alojando los datos, pero parecería que es una práctica común de muchos sitios grandes (léase: Facebook, Twitter, Google, etc.) hacer referencia a muchos de sus recursos en dominios externos. Por ejemplo, las imágenes de Facebook se encuentran alojadas debajo de http://static.ak.fbcdn.net/ y no debajo de http://www.facebook.com/, ni siquiera debajo de http://imgs.facebook.com/. ¿Por qué?

Alguien ya hizo esa pregunta y la respuesta fue nueva para mí: hay una limitación en varios browsers (y hastas donde yo sabía, algunos sistemas operativos) que previene hacer más de dos, tres o cuatro conexiones simultáneas a un mismo hostname. De hecho, es parte de la especificación HTTP 1.1 (parece que cumplir el estándar no siempre está tan bueno, ¿no?). Ahora, si notaron, la limitación es por hostname, ¿por qué entonces utilizar distintos dominios? La razón es evitar cookies que pueden estar yendo y volviendo en cada uno de los pedidos, y para evitar eso, se puede usar un dominio extra que nunca devuelva cookies. De esa forma, sitios grandes como estos se ahorran mucho bandwidth.

UPDATE: Gracias a Exos, que claramente estaba más informado que yo en este tema, las limitaciones exactas son de tres conexiones por cada dominio y cinco para cada IP. Los distintos dominios/subdominios ayudan a utilizar CDNs para distribución de contenido con mayor velocidad. Exos está en desacuerdo (y demuestra por qué, miren los comentarios) con que las cookies sean una gran carga respecto del bandwidth. Entonces el por qué de los dominios vs. subdominios queda en duda, pero suponemos que debe estar relacionado con políticas de administración interna de cada empresa.

Soy un zorrinito performante.

Link del día: If This Then That

IfTTT.com es un servicio que me atrevo a calificar de “maravilloso” en donde nos permiten integrar distintas redes sociales o servicios 2.0 en workflows que nosotros definiremos. Dependiendo del uso que le demos, puede sernos más o menos útiles.

Aunque su página de WTF lo explica, les daré un ejemplo de lo que se puede hacer para que lo vean de una forma simple, con unas reglas que uso yo:

  • Cuando alguien me taggea en una foto en Facebook, que me envíe una copia de esa foto a mi email
  • Cuando favoriteo un tweet, que me agregue ese tweet a Instapaper (yo uso los favoritos de Twitter para cosas que quiero leer después)
  • Cuando le pongo una estrella a una entrada de Google Reader, que me la copie a Instapaper (yo uso las estrellas de GReader para cosas que quiero leer después)
  • Cuando agrego un post a este blog, que lo twitee automáticamente

Y este servicio todavía está en Beta, me encantaría que agregaran en el futuro nuevos servicios y nuevas integraciones. La idea está fantástica y su utilidad es impresionante. Por supuesto, también podemos hacer interactuar muchos otros servicios (Craiglist, Evernote, Youtube, feeds, Facebook, Twitter, teléfono y sms!, linked.in, vimeo…).

Como extra, podemos utilizar “recetas” (tareas que ya otra gente ha programado) o crear las nuestras propias.

¿Para qué lo utilizarían ustedes?

Soy un zorrinito automatizado.

Link del día: ¿Cómo rankear contenidos?

Hace un tiempo me puse a investigar sobre cómo utilizar alguna técnica que me permitiera rankear contenidos. Es decir, tener algún feedback de parte de los usuarios para saber qué contenido gustaba más y cuál no tanto. “Copiémosnos de los grandes“, pensé yo, y busqué algún ranking de estrellas, al mejor estilo Youtube.

Encontré un plugin de jQuery llamado Star Rating, un sistema que basado en AJAX, y dos o tres imágenes, podemos tener un sistemita de ranking por estrellas muy simpático. Es muy personalizable y fácil de implementar, también muy fácil de acomodar según los distintos layouts que dispongamos para nuestro contenido, y finalmente, algo personalizable en funcionalidad también (por ejemplo, podemos hacer que muestre un promedio o un valor determinado, podemos hacer que sólo se pueda votar una vez o que se pueda cambiar el voto, o que se puedan votar varias veces, etc.)

Fue no mucho después que leí un artículo llamado Youtube Like Rating with jQuery & Ajax, y ahí fue en donde me dí cuenta que los grandes ya no utilizan el sistema de estrellas. Por si se dieron cuenta, Facebook tiene sólo un “Like” (o “Me gusta”, en español), y Youtube ahora tiene un “Like” y un “Don’t like”. ¿Por qué tan simplista?

La respuesta estaba en un artículo del blog oficial de Youtube, llamado Five Stars Dominate Ratings, en donde básicamente explican que de las 5 estrellas, rara vez alguien utilizaba la número 2, 3 y 4. Generalmente, si a alguien le gustaba un video, lo rankeaba como 5 estrellas, y si no le gustaba para nada, simplemente lo abandonaba o lo rankeaba con una estrella. ¿Y en el medio? Una minoría.

Y sobre ese mismo tema encontré un artículo muy interesante, también analítico de la gente de Steepster, Brewing a Better Rating System, en donde explican cuáles fueron las distintas aproximaciones que tuvieron para que la gente rankeara la información de su blog. Es interesante leer esta versión porque a la vez ellos creen que el sistema de sí/no no es del todo apropiado para expresar lo que uno piensa de un artículo, y entonces ellos permitieron una variabilidad en el puntaje.

¿Qué piensan ustedes? ¿Cuál sería la mejor forma de pedirle a alguien que opine, fácilmente, de un artículo/contenido que ustedes hayan generado?

Soy un zorrinito de feedback.

Link del día: Consejitos jQuery, MySQL, AJAX y PHP

Sabemos que los cuatro componentes mencionados (jQuery, MySQL, AJAX y PHP) deben de ser unos de los más comunes para generar aplicaciones web. Cada uno tiene una gran variedad de tutoriales o aproximaciones, podemos buscar y encontrar manuales, libros, ejemplos en abundancia.

Sin embargo, hay algo que resulta muy atractivo, que es lograr buenas aproximaciones, y con “buenas” me refiero a atractivas, usables y novedosas. Ya varios lo han logrado, como es el caso de Facebook, Twitter, Digg y tantos otros servicios con conceptos como el scroll infinito, la manipulación inline del contenido, interfaces avanzadas, etc. Muchos ejemplos pueden servirnos para hacer nuestra propia versión, y como ya alguien me dijo “fijate cómo lo hizo alguien que ya lo haya hecho”.

Para eso el artículo de hoy nos viene muy bien, es jQuery, Ajax, PHP and MySQL projects, de 9Lessons, un compilado de muchos artículos de sus blogs que muestran ejemplos de cosas comunes que querremos lograr, y que, por supuesto, podemos adecuar a nuestras necesidades particulares. Una suerte de cheatsheet pero algo extenso y complejo.

Soy un zorrinito web.

Link del día: OpenGraph Protocol

Hace muy poco tiempo fue que en f8 se anunciaron varios de los proyectos de Facebook para el futuro de la web. Causaron conmoción noticias como la colaboración de enormes empresas (por ejemplo CNN, MTV, Microsoft) y más específicamente, la presentación de OpenGraph, que intenta volver social a la web completa.

Como tal, ya podemos comenzar a utilizarlo. La especificación del OpenGraph Protocol posee un sitio propio que sin duda se irá expandiendo en detalles a medida que pase el tiempo. Hasta que Facebook reconozca a los recursos sociales que existen en la web, muy seguramente nos sirva utilizar integración social de otro tipo en nuestras websites. Por supuesto, no es el único tipo de integración que podemos usar, y para eso podemos interiorizarnos dentro de la documentación para desarrolladores de Facebook.

Sobre OpenGraph, también existe una pequeña presentación que Mark Kinsey publicó en la web Facebook Developers, titulada After f8: Implementing the OpenGraph protocol around the web. Muy simple y muy claro.

Soy un zorrinito social.

Link del día: NoSQL

Gracias a DG quien me compartió este artículo en Google Reader, me enteré que Twitter va a estar migrando sus servidores de datos desde un modelo relacional (que en este caso se trata de MySQL) a un modelo no relacional, en este caso, un family-value non-relational database management system (digan eso cinco veces, bien rápido).

Básicamente de lo que se trata es que ya los datos no se encuentran “atados” por relaciones, o disgregados según los datos relacionados que poseen (lo cual se conoce como leyes de la normalización). Dejemos de ser relacionales por un momento y pensemos las grandes ventajas que esto nos puede traer. Más allá de lo raro que se nos puede hacer, la escalabilidad que esto permite es impresionante.

Para que tengan una idea, este sistema en particular, llamado Cassandra, comenzó a desarrollarlo Facebook, lo compró Google y lo hizo Open Source. Está pensando especialmente para sistemas con muchísima información y para escalar y replicarse fácilmente, agregando, quitando, o moviendo nodos que formen parte de todo el sistema de almacenamiento.

Muchos de los sistemas bajo esta denominación de NoSQL cumplen con estas premisas, los invito a visitar el artículo de Wikipedia sobre NoSQL y ver lo que se dice de varios de estos.

Soy un zorrinito no-relacional.