AGC040 A - ><
今日の問題
今日の言語
所要時間
1h 51m 03s
私の解答
感想
アホみたいに時間かかりました。法則性が全然見つけられませんでした。
1問目にこんなに時間をかけているようじゃ本番だったら一問も解けずに終わってるので、ごちゃごちゃ考えていないでまずはコードを書いてACすべきだったんでしょうね...
参考資料
なし
データベーススペシャリスト試験落ちました
惨敗
そういえば、今年の春に受験したデータベーススペシャリスト試験ですが、午前1で点数が足りず落ちました。
応用情報技術者試験の範囲をしっかり勉強し直してからそのうちまた受験したいです…
ブログ更新と勉強のモチベーション維持のためにも、勉強した内容をちゃんとまとめてブログに投稿するといいかもしれない。
PHP5.6からPHP7.3への移行対応
概要
会社の業務で、PHP5.6環境で動作しているプロダクトをPHP7.3環境に移行する対応を行ったので、対応内容を忘備録として残しておく。
一度に記事を書くのは大変なので、この記事をハブページとして、項目別にいくつかの記事に分けて投稿していく予定。
PHP5.6のサポートが切れている
公式サイトによると、PHP5.6のサポートは2019年1月に切れていることになっている。
セキュリティサポートが切れているといっても、なにも今すぐ危険だというわけではない。とはいえ、今後致命的なセキュリティバグが発見されても修正されないということなので、そのまま放置していいものでもない。
PHP7
およそ10年ぶりのメジャーアップデートというのもあり、PHP5と比べると処理性能もメモリ使用量もかなり改善されている。
理論値では、およそ2倍になるケースもあるのだとか。
「PHP 7」登場。10年ぶりのメジャーバージョンアップで実行速度はPHP 5の2倍以上に、PHPの生みの親が語る。PHPカンファレンス2015(前編) - Publickey
単純にサーバー処理時間が短くなるのでレスポンス速度が速くなるし、CPU負荷も下がるのでスケールアウトしているサービスであればサーバー台数を削減できるかもしれない。
これは移行しない手はない。
対応方針
今回の移行にあたって、メンテナンス期間なしで移行対応を行うことになった。
方法としては、スケールアウトされているサーバー群に対して、PHP7環境のサーバーをサービスインしてPHP5環境をサービスアウトする、という方法で徐々にPHP7環境へと移行していく方式をとる。
その性質上、一時的にPHP5とPHP7のサーバーが混在する期間が発生するため、コードをPHP5でもPHP7でも動作する互換性のあるコードに修正していく方針となった。
下位互換性のない変更点
メジャーアップデートなので、当然(?)下位互換性のない変更点というのがいくつかある。
詳細は公式サイトにまとまっているが、全てのソースコードを目で確認するのは土台無理な話である。
そこで、静的チェックツールを活用しつつ下位互換性のない変更点を修正していくことになる。
静的チェックツールを利用した互換性のない処理の洗い出し
今回はPHPCompatibilityを使用した。
互換コードへの修正対応
これはたくさんあるので後日別記事で書く。
(予定)PHPCompatibilityを活用してPHP5系とPHP7系どちらでも動作する互換コードに書き換える
(予定)PHPCompatibilityではチェックしきれない下位互換性のない変更点の修正
ABC075 B - Minesweeper
今日の問題
今日の言語
所要時間
40m 29s
私の解答
感想
golangにおける文字列操作で、n番目の文字を置換するってどうやるんでしょう?
ちょっと調べた感じでは見つけられませんでした。
私の書いたコードでは、読み込んだ文字列を置換するのではなく、結果文字を文字列連結して別の配列を作ったので実行時間ギリギリになっちゃいましたが、一応ACできました。
十中八苦文字列連結が重たいと思うので、実行速度は改善の余地ありかなと。
参考資料
なし
ABC003 C - AtCoderプログラミング講座
今日の問題
今日の言語
所要時間
42m 53s
私の解答
感想
視聴レートRが大きい動画をK個選んで、視聴レートRが低い順番にK個見ていけば良い。
入力されたRを降順ソートして、K個目から1個目までループを回して計算していけば良い。
よく考えたら、降順ソートしなくても、昇順ソートしてn-k-1個目からn個目まで回せば十分だった。
ARC060 B - Choose Integers
今日の問題
今日の言語
所要時間
36m 24s
私の解答
感想
数字の法則性に気がつくためには紙に書いて整理するのが一番ですね。
数式として頭の中で組み立てられるようになりたい。
参考資料
なし
ARC002 B - 割り切れる日付
今日の問題
今日の言語
所要時間
43m 35s
私の解答
感想
日付の扱いが難しくて手間取りました。
後、最初条件式を「年が月で割りきれるかつ年が日で割り切れる」にしていたんですが、この式は誤りで正しくは「年を月で割った商を日で割る」ということに気がつくまで時間がかかりました。