パスワードを忘れた? アカウント作成
13311924 story
プログラミング

人気オンライン・チェスサイト、ゲームIDが32ビットの表現範囲を超え32ビットアプリからアクセス不能に 82

ストーリー by hylom
32ビット問題 部門より
あるAnonymous Coward曰く、

オンライン・チェスサイト「Chess.com」で、セッションを識別するためのゲームIDが32ビットで表現できる範囲を超えてしまったために32ビット版のアプリからアクセスできなくなってしまったという(Chess.comSlashdot)。

同サイトの掲示板に投稿された苦情によると、64ビットに対応していないiOS環境でゲームがプレイできなくなっているという。これを受けてChess.comのCEOは、「私は開発者ではないため問題の原因は説明できないが謝罪する」と述べ、対応を行うとした。

この議論は賞味期限が切れたので、アーカイブ化されています。 新たにコメントを付けることはできません。
  • by Anonymous Coward on 2017年06月17日 7時40分 (#3229458)

    って小さいころママから教わらなかったのかい?

    • DBのカラムは全部VARCHAR(65535)にしてるので無問題です!

      親コメント
    • by Anonymous Coward

      あとタイムスタンプ系だな。ミリ秒以下の単位でカウントアップするヤツは特に。

      もっと言うと、小数演算で誤差が許されない場合はfloatでもdoubleでもダメ(丸め誤差や内部表現の誤差がある)。

      • by Anonymous Coward

        マイクロソフトのXACT(Windows用)もやらかしてて、1ヶ月くらい連続でアプリが動いていると
        コールバックが発生しなくなるバグが

        • by Anonymous Coward

          497 日もんだいもある

          • by Anonymous Coward

            95は49.7日で不正動作してたっけ。
            その後のWindowsでタイマが10ms刻みになったのって、やっぱり単純に32ビットのまま稼働時間を10倍に伸ばすためだったのか

    • by Anonymous Coward
      大昔time_tを32bitにした奴もママの愛に飢えてたのかもな
    • by Anonymous Coward

      「大丈夫!
      この仕事は納品すれば終わりだし、メンテは別会社に投げる予定だから。
      どうせその頃に対応するのは赤の他人で、俺たちじゃないから。

      むしろソニータイマーを入れておいた方が、自分達の飯の種になるってもんさ。」

      #2000年問題、なにそれ美味しいの

    • by Anonymous Coward

      って小さいころママから教わらなかったのかい?

      それはそれでいいけど、今回の問題とは別だな。

    • by Anonymous Coward

      int は常に16bitや32bitってわけじゃないぞ。

    • by Anonymous Coward

      ネトゲの経験値とか体力とかも32bitではやばい

  • by Anonymous Coward on 2017年06月17日 7時07分 (#3229453)

    ユーザーが40億人もいたわけじゃないんだろ?
    32bitアプリだとしても32bit以上の数値を扱えないわけじゃないんだが
    32bit云々は言い訳じゃないのか

    • by Anonymous Coward

      セッションなので、最悪アプリを起動しただけで1カウント、1回プレイ開始すればカウントアップですよ。

    • by Anonymous Coward

      おそらく40億回は累計のアクセス。
      32bit云々は言い訳というより利用者がバグの原因を推測したもの。32bitアプリケーションだと標準では32bitの整数を扱うようになっているために注意しないとこういうことが起きる。もちろん32bitより大きい整数を扱うように指定すれば動くようになる。

      # 失敗の原因の解説を言い訳と断じてしまうのはよくないこともあると思いますっ!

    • by Anonymous Coward

      signedなら更に半分

    • by Anonymous Coward

      言い訳をすることにどんなメリットがあると想像したのかお聞きしたい。

      • by Anonymous Coward

        Appleのせいにできる

        • by Anonymous Coward

          ああなんか元コメの意図が分かった。32bit版の仕様だから仕方ないという弁明と取ったのか。バグの原因の説明じゃなくて。

  • by Anonymous Coward on 2017年06月17日 7時35分 (#3229457)

    よくあるじゃないか
    能力が人間の限界を越えて他人からは見たり触れられない存在になってしまうことが

    # そんなにはありません

    • by Anonymous Coward on 2017年06月17日 8時30分 (#3229471)

      ああ、誰からも話しかけられないのはそのせいか!

      親コメント
    • by Anonymous Coward

      オーバーフローすると、自己同一性を喪失して別の存在になってしまうという事ですね。

  • by Anonymous Coward on 2017年06月17日 7時41分 (#3229459)

    > ゲームIDが32ビットで表現できる範囲を超えてしまったために32ビット版のアプリからアクセスできなくなってしまった

    ちょっと何言ってるのかわからない。(SwiftやObjective Cは知らんがC++で言うと)uint64_tを使うべきところでなぜかuintptr_tを使ってたってこと?

    • 簡素にint(or unsined int)で書いちゃってて、それが、ということかな

      直す分には64bit(uint64_t)にするのは難しくないけど

      DBとかにも32bitで波及していると修正範囲デカそうだな...
      # 64bitアプリは平気だから、それはないか

      --
      M-FalconSky (暑いか寒い)
      親コメント
    • by Anonymous Coward

      もっとしょうもない、何処かでatoiしてて32bit環境だと溢れるように→エラーみたいなパターンかと。

    • by Anonymous Coward

      iOSはLP64らしいので多分long型を使ってしまっているのではないかと思います

      • by Anonymous Coward

        Swiftの場合はIntを使っていたという可能性も。
        > On 32-bit platforms, Int is the same size as Int32, and on 64-bit platforms, Int is the same size as Int64.

    • by Anonymous Coward

      32ビットC/C++コンパイラでINT64とかUINT64とかって型ができたのはわりと最近の話でな。
      それ以前はWin32 APIでもSetFilePointer()では独立した32ビット変数を2個渡したり、
      別のAPIではLARGE_INTEGERなどという構造体を使ったりしてたもんじゃ。
      #などと昔話をする年寄りの図

  • by Anonymous Coward on 2017年06月17日 8時57分 (#3229477)

    iPhoneに限っても32bitから移行できない端末は5%程度だし
    仮に対応しなくともあまり騒ぎにならないんじゃないかと

    • by Anonymous Coward

      > iPhoneに限っても32bitから移行できない端末は5%程度だし

      AppleのiOSアップデート率とかiOSバージョンごとの稼働率、iOS端末ごとの稼働率とかは
      「直近3か月くらいでAppStoreにアクセスした端末だけが対象」なので
      古い端末で安定した環境を作りiOSのアップデートもしないアプリのアップデートもしないという人が
      母数から除外されてしまっている

      それどころかiOSアップデートで動作がおかしくなったり互換性がなくなったりして
      アップデートして困った人がAppStoreを見るほど、アップデート率が現実を無視して高くなっていくおかしなことをやってる

      • 「古い端末で安定した環境を作りiOSのアップデートもしないアプリのアップデートもしないという人が」
        ほんとに実在するのかな?
        実際どれくらいの人数/台数が該当するのか、どうすれば知ることができるのだろうか。

        ...しかも、そんな環境なのに「オンライン・チェスサイト」にアクセスしてゲームを楽しんでいた人なんて....

        • by Anonymous Coward

          あなたの親や祖父母がスマホ使ってたら、端末買ってから一度もアップデートしていない層も結構いるんですよ

      • by Anonymous Coward

        オンラインになってればユーザがアップストアにアクセスしなくてもAppstoreAppが勝手にアプリの更新を見に行くのでカウントはされるはずですよ。

  • by Anonymous Coward on 2017年06月17日 11時13分 (#3229519)

    create table ほげ(
      id int not null auto_increment,
     
      .... ,
      .... ,
     
      primary key (id)
    );

    MySQLエエエエエ…

    おい、そこで笑ってるぽすぐれ使い
    君のserialだって何気にヤバいんだぜ?

     

    # idはbigintのauto_increment、あるいはbigserialで振る時代へ・・・・・

    • > # idはbigintのauto_increment、あるいはbigserialで振る時代へ・・・・・

      idを意味する列は全部guidって設計もありますね。
      これならうっかり関連のないテーブルのid列と結合してしまい意味不明な結果になるバグも防げます。(0件になるから)
      連番にならないので前後の比較がしたいときやアプリケーション上の「番号」がほしいときは別の列が追加で必要になる欠点はありますが。

      親コメント
    • by Anonymous Coward on 2017年06月17日 12時48分 (#3229551)

      もう元のストーリーとはかなり外れる話になるけど

      ワイ「「id」って名前はいろんな所で使われるから(HTMLのid属性とか)あまり被らない名前にしたいンゴねえ・・・
         せや!rownumにしたろ!」

      OracleのROWNUM「よろしくニキーwwww」

      ワイ「あああああああ!(ブリブリブリブリ」

      ってなった事がある。後始末大変だった。

      親コメント
    • # idはbigintのauto_increment、あるいはbigserialで振る時代へ・・・・・

      10年くらい昔からとっくにそうしてるぜ。
      身内用アプリだけど、だからこそストレージの心配なんかないからな。

      むしろどうしてそうしてないのか?

      親コメント
typodupeerror

普通のやつらの下を行け -- バッドノウハウ専門家

読み込み中...