Un espacio para los entusiastas del web

8 com comentarios en total.
13 Jun 2009
4,694 Lecturas
Tags: PHP, ,

«Twitpocalypse» : Más allá del límite de los enteros de 32bits

TwitpocalypseCualquiera 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.

Twitterrific FAIL

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.

Javier ArocheJavier Aroche para Maestros del Web.
Agrega tu comentario | Enlace permanente al artículo

Síguenos en: @maestros | Fan page

Comentarios

  1. creo que es mejor convertir $status->id a float desde el prinicipio antes de la implementacion :P

    public $id = 0;

    settype($this->id,”float”);

    Responder
  2. @David en realidad $status es la respuesta de Twitter procesada con SimpleXML :)

    Responder
  3. Ironlion

    WTF????

    Responder
  4. karmakoma

    “Al no haber tenido en cuenta esta sutil diferencia…”

    Responder
  5. 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.

    Responder
  6. yo uso twitterific en mi ipod touch, y fui victima del error. que aplicacion de ipod saben que no halla sufrido ese bug?

    Responder
  7. Estas cosas suelen pasar jejejejeje….

    Responder
  8. 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.

    Responder

Deja tu Comentario

Maestros del Web se reserva el derecho de moderación de los comentarios. Evita utilizar palabras soeces, ataques directos, descalificativos, insultos, de lo contrario tu comentario será eliminado.



Acerca de
Maestros del Web nace cuando intentamos traducir Webmaster al Español. Nacimos orientados al diseño y desarrollo web. Hoy somos un espacio de apoyo para los entusiastas que participan en proyectos en la red.
Leer más de Maestros del Web