読んだものメモ
背景とかはこちら
2018/02/22
DynamoDBについての資料
www.slideshare.net
テスト環境のデータのマスキングを AWS Glue 使ってやる方法
t_wadaさんのでぶさみの発表資料後で読む
t_wadaさんつながりで一度は読んでおいたほうがいいと思ったので載せておく
勉強会やったブログ書いたので宣伝
背景とかはこちら
DynamoDBについての資料
www.slideshare.net
テスト環境のデータのマスキングを AWS Glue 使ってやる方法
t_wadaさんのでぶさみの発表資料後で読む
t_wadaさんつながりで一度は読んでおいたほうがいいと思ったので載せておく
勉強会やったブログ書いたので宣伝
背景とかはこちら
スウェーデンの「ラゴム」という考え方による時間の使い方について
データ分析用Dockerコンテナ環境の作り方がまとまってるので今度試そう
phpのみんな大好き静的解析ツール
phan入れる途中でcomposerで管理してるライブラリの依存関係によるコンフリクトが起きてつらかった。。
php の min, max における null 扱いについて ふと気になって調べてみたところ、下記のようになっているようでした。
php > var_dump(min(1, null)); NULL php > var_dump(min(0, null)); int(0) php > var_dump(min(-1, null)); NULL
公式にも少しだけ言及がありました。
// 一方の値が NULL や boolean の場合、それを他の値と比較するときには、 // もう一方の値の型が何であるかにかかわらず、 // FALSE < TRUE / NULL == FALSE というルールを使います。 // 以下の例では、-10 と 10 はどちらも TRUE と評価されます。 $val = min(-10, FALSE, 10); // FALSE $val = min(-10, NULL, 10); // NULL
書いてある通りですが、 boolean が含まれる場合、boolean 以外の数値が強制的に boolean にキャストされ比較されるようです。 また、null の場合は false 扱いとなるようです。ちなみに同じ値の場合は引数の先のものが優先されるようです。
php > var_dump(min(null, 0)); NULL php > var_dump(min(0, null)); int(0) php > var_dump(min(0, null, false)); int(0) php > var_dump(min(null, false, 0)); NULL php > var_dump(min(false, 0, null)); bool(false)
そもそも、min, max に null とか入れるなよ、って感じですが、、
背景とかはこちら
今日は休日だったのでゆっくり Compose file version 3 のリファレンスを読んでた。
qiita にまとめも乗ってたので参考にしながら
CakePHP3が動くようなDockerfileを作って見た
作ったもの
参考にしたもの
php:7.2-alpineのイメージベースにして作ったのでベースイメージのソースとか参考にしながら
CakePHP3動かすにはphp-intlとかが必要なので参考にした
alpineでPHP-intlインストール時にエラーが起きる原因 – WP Advisor
あらためてphpから.envを読み込むやり方を読んだ。別に忘れてたわけじゃないけど。
背景とかはこちら
tiwtterでgithubのコミットつぶやいてる人いたから調べたら公式で機能提供されてるのね。そのうちやってみよ
graceful stop 的な話。
nginx の Connection Draining – 1Q77
php 公式
makefileたまに調べてしまうのでぺたり
apacheでのip制限・許可のかけ方とかコンフィグファイルのテストとか
Apache 2.4系でIP制限の設定方法 - ex1-lab
背景とかはこちら
password_hashね、わかるわかる。
ちゃんとよんでないのであとで読む
インフラエンジニアじゃなくても一度読んどくとよい
当たり前を当たり前のように出来るって大事
長いので途中で飽きたけど図解でセキュリティについて分かりやすい。後輩に聞かれたときに引っ張り出すといいかも。
opensslの脆弱性の件
JVNVU#92830136: OpenSSL に複数の脆弱性
node制のWEBサービスとか提供するのに使うといいらしい
最近業務内外問わず色々な記事を読んだりして知見がたまってきてるが、アウトプットする時間がなかなか取れず、もったいないのでせめて、URLをメモっておいておこうという戦略。 メモして公開しておけば、後から探すときに探しやすくシェアもしやすいなと思ったので、やってみる。 日付にはこだわらず、そういえばこないだ読んだなーってのもてきとーに乗せてく。 後で読んだ感想とか、追記していけたらいいなー。
友人のブログ
16進数から色を当てるやつめっちゃムズイ
DRY原則のやつ、話題になってたので読んだ
phpcon2017に参加したのでざっくりメモ。
※参加しながらのメモなので随時更新します。
スライド:
PHPを実行時はバイトコード命令にコンパイルして逐次実行している。
キャッシュ済みならキャッシュからバイトコード命令を実行する
キャッシュ済みでないならコンパイルしてキャッシュする
コンパイル時に最適化しておけばはやくなるんじゃね?これだ!!
PHP7.2にしよう!!
過去にもリプレースしようとしたが、2年かかる見積もりだったので、ペンドになった。 要因としてソースコードが肥大化していた。ソースコード全体で約60万行くらいあった。
今あるユニットテストを動くようにする。Nginx + php-fpmで動くようにする。
段階的にあげるように戦略を立てた。 推進者一人、インフラ担当一人、アプリエンジニア一人。
アップグレードシェルの実行だけでは動かなかった。変更点のドキュメントを読み修正していく必要があった。 ヘルパーの仕様が変わってた部分については、ラッパークラスを作成する事で対応していった。
アップデートしたブランチを作成し、そこで動作確認しつつ修正を加えていく。 毎週masterから差分を取り込むのが大変、、同じような修正が必要になる。 →オレオレUpgradeShellを作った。
事前にCakePHP1.3でできることは先にやっていく。
まとめて切り替えるのではなく、1コントローラーずつ以降していく事で安全に切り替える。 →1.3と2.8の同居をさせるためにindex.phpに細工を入れる。
PHPのバージョンアップはカナリアテスト。CakePHPのバージョンアップは2バージョンを用意しながら少しずつ進めていく。Codeceptionを利用していく。ユニットテストも2バージョンを用意していく。
スライドは後日公開されるらしい
※諸説ある - イベントドリブン - サーバ単位ではなくイベント単位 - ステートレス - 実行後のコンテナは破棄されるのでステートレスなアーキテクトが求められる
いわゆるLAMPアーキテクチャでは開発者がOSから環境まで、管理する必要がある。 それに対してサーバレスアーキテクチャではイベントを管理、実行を管理する必要がある。 開発者は動くための関数だけを管理すれば良い。
インフラもアプリも一括管理できるデプロイツール
tipsみたいなもの - POST with config - 設定値もステートなので、POSTに含めてしまう - Reserved Timestamp ID - 実は一覧を作るのは難しい - S3を使っている - Instant Job Queue - S3 Object Tagging - Env Sync - デプロイ時の環境変数とfunctionが実行されるコンテナの環境変数に設定する
サーバレスアーキテクトが得意なものとLAMPアーキテクトが得意なものは違う。サーバレスアーキテクトがハマると強力。 Serverless Frameworkを使うとインフラもコードで管理できる。
価値あるコードをよりよくしたい
phpmd, phpcpd, phpdcd, phpcs, phan などを使い複雑そうなところを見つける
アプリケーションベース例外にユーザ向けのメッセージを表示するためのメンバ変数を定義している。 ロギングも例外の中でやってくれるようにしているので、例外を投げるだけでいい。
パフォーマンスモニタリングもできる。 エラーがどこでどれだけ起きてたかなどを見れる。
PHPStormつかってます。
phpcs + php7ccで洗い出しつつ基本はマニュアル読みながら修正。
どんどん使用していないものは削除。テストも合わせて消す。
遅いテストは生産性を落とす。
Redashにたよる。「それRedashでよくない?このクエリでデータ出せますよ」
「最良のコードは、コードなし」いらないコードはどんどん消そう。コードなしで機能を提供できるならない方がいい。
外部ツールにうまく頼ろう!!
PSR-1,2準拠 + php-cs-fixerのci組み込み
@deprecatedをうまく使い、非推奨なコードを明示。消す前に@deprecated入れて本番で出てないかログを見ることで安心して消せる。
まずは守りを固めて、より良いコードをかける体制を作っていく。
必要な事 - ローカルでコンテナを作成 - レジストリにコンテナをPUSH - 本番にリリース
K8S, GKE
マネージドな環境をつかうことで簡単にできる
メモ: 複数のphpのバージョンで実行結果を見ることができるらしい。便利そう。 3v4l.org
php7ではパースした時点でエラーになりうるものをエラーとして扱ってくれる。php7は賢いので。 (絶対実行されないif文の中でも)
php5ではExceptionまたはExceptionを継承したクラス
php7ではThrowableを継承したクラス
エラーと例外(エラー)が混在していて扱いが面倒なので、例外(エラー)に統一してやると楽。
開発時、ユニットテストのときはE_ALLで指定してやって、本番ではE_ALL & ~E_NOTICE & ~E_DEPRECATEDしてやるとよい