「なにそれ?」な人はたぶんさまざまなめりっとがわかりやすいと思われます。
ほんで。
うちの会社でやってるボットで、currykutterっつーのがいるんですね。こいつが先日、
currykutter @currykutter |
.@no_image さんがカレー食べたんだって。「中辛はあまり辛くない」らしいよ。http://bit.ly/nJNPX (2009-06-14 23:12:10) | link |
って発言をしてたんだけど、リンク先が、
http://twitter.com/no_image/status/-2129721170
になってしまって、「That page doesn't exist! 」なことになってたんですね。「-2129721170」なんて数字になってるんで、「ああ、やっちまったなー」と。
2,147,483,647問題というのは、「2,147,483,647がsigned integerの上限だから、それを越える数字がTwitterのIDになってしまった場合、signed integerのまま扱ってるシステムはバグる」という問題で、-2129721170というのはつまり、本来、
http://twitter.com/no_image/status/2165246126
になるはずのリンク先の「2165246126」がオーバーフローしてしまって、-2129721170になってしまっていると。
つーわけでいろいろ設定を調べたりしてみたんだけど、結局のところ原因は、Perlのsprintfでした。
print 2147483647 + 1, "\n"; printf ("%d\n", 2147483647 + 1);
をPerlで実行すると、
2147483648 -2147483648
となってしまうと。
と思いつつ一応これまたうちのボットであるscriptterで試してみたところ、
HAGIHARA Yoshiaki @hagitter |
@scriptter pl print 2147483647 + 1, "\n";printf ("%d\n", 2147483647 + 1); (2009-06-15 15:12:11) | link | |
scriptter @scriptter |
@hagitter 2147483648\n2147483648\n (2009-06-15 15:14:08) | link |
ってなったんで、コンパイルの仕方とかにもよるのかな(ちなみにscriptterは小飼弾さんちのAPIを使ってます)。
ま、ひょっとしたら他にも困ってる人とかいるかもなので一応メモ的に。
あ、これってp1dlab日記で書いた方が良かったかな。まあいいや。