Upgrade to Pro — share decks privately, control downloads, hide ads and more …

32bit OSは、今すぐ捨てろ! 六本木心中編

32bit OSは、今すぐ捨てろ! 六本木心中編

sapi_kawahara

June 11, 2018
Tweet

More Decks by sapi_kawahara

Other Decks in Business

Transcript

  1. 自己紹介 • 川原 英明 • 埼玉県川越市在中の2児のパパです。 • 派遣会社に所属し、****的な大手企業などで開発を行っており ます。 •

    スキルは • Perlちょっと出来ます。 • PHPちょっとで出来ます。 • Javaちょっと出来ます。 • C言語ちょっと出来ます。(元ゲーム屋なので) • フロントサイド(JavaScriptなど)ちょっと出来ます。 • サーバーサイド(Shell,AWKなど)ちょっと出来ます。 • 最近は、RubyやPythonにも手を出しています。
  2. 前回話したこと • 32ビットOSで動いているPerlで、会員情報が、 「4,294,967,296」を超えた。(実際は超える前に警告を出す よう出すようにしてあり、それが発動し、対応を行った話) • 32ビットOSのPerlではprintf "%d",$num;では 「4,294,967,295」でカウンターストップするので、use Math::BigInt;で対応した。

    • それ以外ではuse bigint; プラグマで逃げた。 • しかし、XML::Simple に、use bigint; プラグマを有効して XMLoutすると、数値項目がMath::BigIntオブジェクトになっ て落ちるので、XML::Simpleをつか使うところだけ、use bigint;を使わないようにした。
  3. ターゲットはMySQL • 色々なシステムが動いているので、言語問いませんが、Perl以外は、 64ビットOSで動いているので、とりあえずセーフでした。 • 色々と大丈夫だったので、ついでに32ビットOSで動いている MySQLのバージョンが古いので、MySQL 5.1 の最終版から、64 ビットOSで動くMySQL

    5.7 の安定版に移行することになりました。 • 設定は、今のスタンダードにしてもらいましたが、10年以上動いて いるシステムなので、日付関連のデフォルトは、ダメ設定「0000- 00-00 00:00:00」のままにしました、ごめんなさい。 • MySQLの0000-00-00 00:00:00は使ってはならない • https://soudai.hatenablog.com/entry/2018/05/12/191050
  4. 一部、アプリが落ちる(PHP含む) • 落ちるところは、INSERTです。 • 数値項目に、数値以外を入れようとしていますと言うエラーが 発生していた。 • MySQL設定のスタンダード、「STRICT_ALL_TABLES」が原 因です。 •

    この設定を辞めることも検討したが、この設定で動かないアプ リが悪い!と言う結論になりました。 • そして、先人が作成したレガシーなソースコードを確認すると、 2つ問題点が発見されました。
  5. 秘伝のタレは害悪 その1 • Queryの組み立ては、文字連結やら、正規表現まで駆使して、 作り上げているタレであった。 • そのくせ、入力値は正しい物として、処理を行うようになって おり、その結果、数値項目に空文字が入っていることに気づか ないまま実装されいる。 •

    MySQLでSTRICT_ALL_TABLESが有効で無い時は、無効な値 はスキーマーでのデフォルト値が入るので、今の今まで問題無 しとして動作しておりました。 • プレースホルダを使い修正しました。
  6. 秘伝のタレは駆逐するべき! • my $num = $input ? $input : '';

    • それはバリデーションじゃない。 • 作った人は、数値がきたらtrueだと思ったんだろうけど、0は falseだ! • 同一人物が実装したと思われるPHPにも似たコードがあました。 • empty($input)とかしている。 • 速やかに、正しいバリデーションに変更しました。