«Twitpocalypse» : Más allá del límite de los enteros de 32bits
Cualquiera que haya estudiado algo de la Teoría de la Computación, sabrá que las máquinas apestan en las matemáticas o dicho de otra forma, no contamos con una buena representación de los números dentro de estas.
¿A qué viene todo esto? Resulta que hace unas pocas horas el identificador de cada estado en Twitter, pasó el límite de los enteros de 32bis (con signo) o sea, 2,147,483,647
; a lo que le han denominado el Twitpocalypse, el problema no es con Twitter, sino con las aplicaciones que no están preparadas para enteros más grandes que dicho límite.
Las «víctimas» más notables del Twitpocalypse, han sido Twitterrific para el iPhone, TwitterDeck y Destroy Twitter, estos dos últimos ya liberaron nuevas versiones corrigiendo el error y Twitterrific debe esperar el lento/ineficiente proceso de la App Store para que vemos una nueva versión.
Pero esto no se limita solo a clientes de escritorio, seguro también afectará a servicios en linea que dependan de Twitter en alguna forma. Por ejemplo en un script PHP en el que estoy trabajando, por limitar el tipo de datos que inserto a la base de datos estoy haciendo una conversión lo que obtengo de la API de Twitter:
$updateid = (int) $status->id;
El detalle está en que si PHP corre sobre una plataforma de 32bits, el máximo entero es:
$ php -r 'echo PHP_INT_MAX;' 2147483647
Mientras que en una plataforma de 64bits, será:
$ php -r 'echo PHP_INT_MAX;' 9223372036854775807
Al no a ver tenido en cuenta esta sutil diferencia, mi script se ha perdido de algunos tweets en lo que me percaté del problema, en fin gajes del oficio. Al final, lo solucioné de esta forma:
$updateid = (float)$status->id; // o incluso podría ser: $updateid = abs( (float)$status->id ); // solo por limitarlo más ;)
Y claro si están guardando los tweets en alguna base de datos, hay que revisar el tipo de datos para el identificador… de preferencia que sea BIGINT si usan MySQL.
Si notan que alguna aplicación o servicio ha dejado de funcionar recientemente y sin razón alguna… ya saben que es lo que pudo haber pasado. Seguro que dentro de las próximas horas saldrán nuevas versiones… y sino, será mejor buscar alguna alternativa a la cual si le presten más atención.
creo que es mejor convertir $status->id a float desde el prinicipio antes de la implementacion 😛
…
public $id = 0;
…
settype($this->id,”float”);
…
@David en realidad
$status
es la respuesta de Twitter procesada con SimpleXMLWTF????
“Al no haber tenido en cuenta esta sutil diferencia…”
Tweetdeck se actualizó hoy así que parece que ya lo tienen resuelto. El que seguirá con problemas será Twetie y Twitterrific en sus versiones ifoneras.
yo uso twitterific en mi ipod touch, y fui victima del error. que aplicacion de ipod saben que no halla sufrido ese bug?
Estas cosas suelen pasar jejejejeje….
y puede pasar con cualquier aplicacion que maneje una gran cantidad de numeros, lo mejor es usar double en vb (por ejemplo) que enteros, al menos asi no da un overflow, ahi fue mas bien un error de diseño pero a todos nos pasa, que bueno que lo solucionaron.