¿Qué ha pasado realmente con el contador de visitas de Gangnam Style?

Esta semana Gangnam Style ha superado las 2.147.483.647 visitas en YouTube, un número que habría parecido como cualquier otro si no fuese por la pequeña lección de aritmética binaria que nos hemos llevado todos. Es el máximo valor que puede almacenar un integer o entero de 32 bits, un concepto muy técnico relacionado con la programación que ahora todo el mundo parece saber lo que es. Se ha escrito mucho sobre ello y sobre si se ha “roto” el contador de visitas y cosas así, como si un int de 32 bits fuese algo que todo el mundo maneja todos los días, además de las actualizaciones que ha tenido que hacer Google. Una sencilla búsqueda en Google News basta para deleitarse. Como ingeniero informático voy a intentar explicar “para dummies” pero con seriedad qué es esto de un integer de 32 bits, por qué es importante y qué actualizaciones ha podido necesitar YouTube. Oppan Gangnam Style, digo, vamos a ello.

gangnam noticias

¿Por qué 2.147.483.647 visitas?

Como todos sabemos, muy en el fondo, los ordenadores sólo entienden de 0 y 1, por lo que la aritmética binaria es un concepto matemático básico que todo informático aprende al programar. El binario no es más que otra forma de representar los números, solo que en una base diferente a la que estamos acostumbrados, que es la base 10 o decimal. Digamos que la base es cuántos valores numéricos se pueden representar con una sola cifra, siendo 10 en el sistema decimal (0-9) y 2 en el binario (0 y 1). Combinando cifras formamos números mayores, pero la cantidad de números que podemos representar no se suma, sino que se multiplica:

2 cifras (00):       102 = 100 valores
3 cifras (000):     103 = 1.000 valores
4 cifras (0000): 104 = 10.000 valores

De la misma forma ocurre con el sistema binario. En este caso una cifra representa dos valores, 0 ó 1, por lo que nos podemos imaginar que para alcanzar valores mayores son necesarias muchas más cifras que en el sistema decimal. Dos cifras tan sólo representan cuatro valores, del 0 al 3, siendo 00, 01, 10 y 11 respectivamente. No me voy a centrar en cómo se representan porque se me va de las manos, únicamente necesitáis saber que la cantidad de valores que puedo representar se calcula igual que en el sistema decimal, la base elevada al número de cifras:

2 cifras (00):       22 = 4 valores
3 cifras (000):     23 = 8 valores
4 cifras (0000): 24 = 16 valores

32 cifras: 232 = 4.294.967.296 valores

Visto que con 32 cifras puedo almacenar 232 = 4.294.967.296 valores, ya estamos ya muy cerca del número mágico de las 2.147.483.647 visitas. Únicamente considerad que hasta ahora sólo he hablado de valores positivos, pero los negativos también se representan. Aunque hay varios sistemas de representación, únicamente considerad que el signo “se come” una cifra que si vale 0 será positivo y si vale 1 negativo. Por tanto con 32 bits en realidad puedo representar 231 = 2.147.483.648 valores positivos. Dado que el 0 ocupa espacio, así es como puedo almacenar de 0 a 2.147.483.647 visitas.

Evolución de las visitas de Gangnam Style

¿Qué es un integer de 32 bits?

Un bit no es más que la unidad mínima de almacenamiento en informática y representa, como no podía ser de otra manera, un 0 o un 1. Por tanto, todo lo que hasta ahora he llamado cifra es equivalente a un bit y con 32 bits puedo almacenar 2.147.483.647 valores positivos y negativos y el 0.

En programación los valores de las cosas se almacenan en variables y las variables pueden ser de distinto tipo: números enteros, decimales, caracteres, cadenas de caracteres, valores de verdadero o falso… De aquí es de donde sale el término “integer”, entero en inglés, que es un tipo de variable para almacenar números enteros y que se abrevia comúnmente como int. En la mayoría de los lenguajes de programación el int estándar ocupa 32 bits y puede almacenar los valores que he explicado.

Por tanto, un señor de YouTube hace unos años decidió que para almacenar el número de visitas de un vídeo utilizaría un int de 32 bits, lo cual les permitiría contar hasta 2.147.483.647 visitas, que creo que por entonces era una cifra perfectamente adecuada.

Nota avanzada: algunos programadores estaréis pensando por qué no utilizaron un unsigned int. Para los no programadores, eso no es más que una variante del int que sólo puede almacenar valores positivos, por lo que llegaríamos hasta 4.294.967.295 visitas con 32 bits. Pues bien, realmente se utilizan poco los unsigned ya que no son una práctica recomendada de programación al poder provocar bucles infinitos si, por ejemplo, hacemos una condición de salida del bucle que tenga que evaluar un número negativo. En la guía de estilo de programación de Google desaconsejan su uso.

 ¿Ha roto algo el Gangnam Style?

Tranquilos, nada se ha roto

No, claro que no. YouTube lo tenía bien pensado y ha tomado medidas, pero eso lo explicaré después, antes os voy a decir por qué no se ha roto. Si se hubiese “roto” no se habría borrado el vídeo, no se habría caído la página, no habría ardido la sede de YouTube ni habría explotado internet. ¿Sabéis lo que le pasa a un cuentakilómetros cuando llega al final verdad? Pues exactamente eso habría pasado, se habría dado la vuelta, y yo nunca he oído a nadie decir que se le ha roto el cuentakilómetros cuando ha llegado al final. Únicamente habría habido una significativa diferencia, no se habría puesto a 0 sino a -2.147.483.647, ya que de la misma manera que 0 es el primer valor del cuentakilómetros, ese número es el primer valor de un integer de 32 bits. Aunque desconozco el código detrás de YouTube y tal vez tener un número negativo en un lugar donde sólo puede haber positivos a lo mejor habría afectado a algo, lo más posible es que el único trastorno hubiese sido ver el contador en negativo.

gangnam contador

Si os habéis metido en el vídeo y habéis puesto el ratón sobre el contador de visitas habréis visto que el contador rota hasta alcanzar un valor negativo. Gracioso guiño a programadores que ha hecho YouTube y que es muy similar al cuentakilómetros que os he puesto de ejemplo, llegando a un valor negativo que no es otro que el que os he explicado, sumándole las visitas que va teniendo en una carrera hacia el cero y los positivos de nuevo. Pero esto no deja de ser un guiño que han querido hacer totalmente a propósito, el contador de visitas continúa su curso normal.

¿Qué ha hecho YouTube?

Comunicado de YouTube

Comunicado de YouTube

Haciendo click en el contador de visitas nos lleva a un enlace de Google+ (alguien tenía que usar G+) en lo que nos cuenta eso, que es todo lo que ha dicho YouTube al respecto y que ha dado lugar a millones de suposiciones. Aseguran que han tenido que actualizar a 64 bits para que les quepa el número de visitas y que si pones el ratón encima hacen un poco de “magia matemática” que no es otra cosa que lo que ya os he contado. No me he querido quedar aquí y he investigado un poco en foros de desarrolladores a ver qué ha pasado. Gracias a que se puede inspeccionar el código de cualquier web, la gente ha podido comprobar que lo que han hecho ha sido meter un javascript llamado ‘watch_gangnam_overflow.js’ encima del contador de visitas para mostrar el valor correcto, la animación del cuentakilómetros y el link que al hacer click te lleva a la página de G+. Para el que no esté familiarizado, el código javascript es ampliamente utilizado en el desarrollo web para crear elementos visuales dinámicos con los que el usuario puede interactuar. Profundizando en el código, vemos que hay una línea en la que hace -4294967294 + 2148027550, es decir, el doble del valor negativo que os he explicado más el valor real de visitas, dando como resultado el número negativo que simula el contador dado la vuelta.

Sobre la actualización a 64 bits, con lo que ya os he explicado, no os costará saber qué es eso. Si antes tenía 32 bits para almacenar visitas que me permitían 232 valores (positivos y negativos), ahora con 64 puedo almacenar 264 = 18.446.744.073.709.551.616, que si me quedo con los positivos son 9.223.372.036.854.775.807. Una barbaridad de visitas, no me he puesto a hacer la cuenta de cuántas veces tendrían que ver el vídeo todos los habitantes de la Tierra para alcanzar ese valor, pero me atrevería a decir que es imposible.

¿Qué ha podido actualizar YouTube?

A partir de aquí no podemos hacer más que suponer qué ha podido hacer YouTube con su código, hasta dónde ha podido llegar esa actualización a 64 bits que nos mencionan. Tengo varias teorías, y aquí sí que me voy a poner más técnico ya:

Trust me, I'm engineer

Trust me, I’m engineer

  •  No ha hecho nada. Bueno, nada más que lo del javascript, es decir, almacena en algún lugar el valor de visitas en una variable que efectivamente será de 64 y ya está, sus bases de datos están intactas, siguen almacenando valores de 32 y lo único que hacen es cargar este javascript en la página del Gangnam Style en concreto (está comprobado que ese javascript sólo aparece en ese vídeo). Esta teoría se basa en que no merece la pena cambiar el tipo de variable de miles de millones de vídeos por uno sólo que hay de momento y los hipotéticos vídeos futuros que cada uno o dos años puedan alcanzar esos valores. Haces una lista y para los n vídeos que superen el valor cargas un javascript.
  • Han hecho una actualización completa. Esto implicaría que han actualizado el tipo de variable en la base de datos donde tengan almacenados toooooodos los vídeos además de todo el código que utilice la variable del número de visitas. No es moco de pavo, aunque sería factible y sería la solución duradera, para futuros vídeos virales de la otra punta del mundo y que tendría en cuenta el posible aumento de estos fenómenos con el aumento de usuarios en la web y el mayor tiempo que llevan online muchos vídeos. Para hacer esto, la solución es que se hayan creado una nueva tabla con el campo de 64 bits, hayan estado copiando todo a ella (durante días, posiblemente), la hayan probado y, cuando se asegurasen que todo iba bien, sustituir la vieja por la nueva. Pura especulación, insisto, pero es un procedimiento que se utiliza en la realidad con bases de datos grandes que no puedan estar caídas nunca.
  • Ha hecho una solución intermedia. Aún más especulativo es esta opción en la que hayan decidido que no merece la pena cambiarlo todo para unos pocos vídeos que superen este valor, pero que sin embargo quieran algo más duradero que un javascript. Esto pasaría por crear una pequeña tabla auxiliar en la que se almacenen aquellos pocos vídeos que alguna vez superen el valor maldito y que se hubiesen apañado de alguna manera para usar ambas tablas.

Lo dicho, esto último son puras suposiciones con algo de fundamento, que ya es más de lo que se ha podido leer en muchos medios. Espero que haya quedado todo mucho más claro que leyendo ciertos medios. Keep on Gangnam.

Anuncios

Responder

Introduce tus datos o haz clic en un icono para iniciar sesión:

Logo de WordPress.com

Estás comentando usando tu cuenta de WordPress.com. Cerrar sesión / Cambiar )

Imagen de Twitter

Estás comentando usando tu cuenta de Twitter. Cerrar sesión / Cambiar )

Foto de Facebook

Estás comentando usando tu cuenta de Facebook. Cerrar sesión / Cambiar )

Google+ photo

Estás comentando usando tu cuenta de Google+. Cerrar sesión / Cambiar )

Conectando a %s