MySQL で年月(yyyy/mm)のデータ型と PERIOD_ADD/DIFF

いわゆる請求データみたいなやつで請求年月のような yyyy/mm の値を表すために DATE 側を使うか整数型で yyyymm みたいにするか。 DATE 型で日付を 1 固定で持っていたとして、例えば請求年月が 2018/01 という条件で検索するとき 請求年月 = 2018/01/01 だ…

Doctrine や Eloquent や CakePHP はいかにして差分更新を実現しているか

PHP

Doctrine や Eloquent や CakePHP などの ORM でDBからフェッチしたエンティティの一部の属性だけ変更して保存したとき、テーブルの行全体が更新されるわけではなく、変更した一部の属性だけが更新されますが、それがどう実装されているか気になったので調べ…

MRP(Meal RePlacement:食事代替品)を食してみたメモ

MRP(Meal RePlacement:食事代替品)をいくつか食してみたメモ。 COMP POWDER COMP GUMI COMP DRINK BASE PASTA quick Myoplex (EAS) RAW MEAL (Garden of Life) 自宅での食事ではこの類のものは食しておらず、職場で昼飯や晩飯を食べるときだけ食していま…

監視ツールはいかにしてカウンター値のチェックを行なうのか

1年ぐらい前に諸事情により調べたメモ。 監視ツールでリソース情報とかのメトリクスに対して、○○を超えたら、みたいな閾値のチェックを設ける場合、元の値がディスク使用率とかロードアベレージのようなそのままの値が取れるものなら良いのですが(いわゆる…

MySQL Group Replication 素振り

公式のドキュメントを読みながら素振りしました。 MySQL :: MySQL 8.0 Reference Manual :: 18 Group Replication グループレプリケーションでは、グループのメンバシップ管理、ノードの障害検出、追加ノードの同期、などが自動で行われます。一方でアプリケ…

mysqldump で default-character-set とか hex-blob とか

とある MySQL のダンプファイルをインポートしようとしたところ、次のような警告が表示されました。 Warning (Code 1300): Invalid utf8 character string: 'FFFFFF' インポートに失敗しているわけではないですがやや気持ち悪いです。 原因 blob とかのバイ…

MySQL の GTID レプリを replicate-do-db でフィルタすると欠番になる?

スレーブ側で--replicate-do-や--replicate-ignore-などのルールを使ってフィルタリングをすると、GTIDに欠番ができて、連番が連続しなくなるため、SHOW SLAVE STATUSの出力が大変なことになってしまう。GTIDを用いるときは、フィルタリングしないのほうが無…

MySQL GTID レプリケーション素振り

従来のレプリケーションとの違いをざっくりと。 ノードに UUID が付与されて「UUID+連番」ですべてのトランザクションに一意なID(GTID)がつく 各ノードが「適用済の GTID」を持っているので循環レプリケーションやマスター切り替えが容易にできる 「適用済の…

MD や LVM 使っている CentOS 6 に Kickstart で CentOS 7 を上書き

例えば CentOS 6 で下記のようなディスク構成だった場合、 zerombr bootloader --location=mbr --driveorder=vda,vdb clearpart --all --initlabel part raid.11 --ondrive=sda --asprimary --size 500 part raid.12 --ondrive=sdb --asprimary --size 500 p…

Prometheus -> InfluxDB でダウンサンプリングしてみたメモ

半年くらい前に社内の勉強会っぽい何かで話すために書いていたけど結局やらずにお蔵入りしたメモ。 半年くらい前なのでわりと古いです Prometheus は単体だとダウンサンプリングができないので長期のデータ保持には向いていません。デフォルトだと 15 日しか…

Prometheus 使ってみたメモ

9ヶ月ぐらい前?に社内の勉強会っぽいなにかで話そうと思ってたけど結局やらなくてお蔵入りになっていたメモ。 このとき試した Prometheus はだいぶ古いです・・・たぶん 1.5 ぐらいです。今が 2.0 とかなので色々変わっていると思います メモ 監視対象でエ…

jQuery の Deferred と Promise/A+

jQuery の Deferred といわゆる Promise/A+ について、ごっちゃになってたのでメモ。 then/catch で発生した例外は reject された Promise になる jQuery 3 から? Promise/A+ 互換になったため then/catch で発生した例外は reject された Promise として次…

Node.js で jQuery を使う

jQuery の DOM とは関係のない Deferred の動きを確認するために jQuery を Node.js で動かしたかったのだけど、下記によるとそういう場合でも window オブジェクトが必要とのこと。 https://www.npmjs.com/package/jquery ただ、この通りにやってもなんか動…

jQuery で data アトリビュートから文字列を取り出すときは .attr() を使うべき

PHP から JS に値を渡したいとき、PHP から適当な要素の data アトリビュートに書き出して jQuery の .data() メソッドで取り出していたんですけど・・・ http://api.jquery.com/data/ ... When the data attribute is an object (starts with '{') or array…

超長い文字列や配列でも実体が同じなら中身の大きさには依存しない

PHP

手元にあった PHP 7.1.10 で試してます。 PHP の配列で、連想配列なのかいわゆる添字が順序通りのただの配列なのかを調べるには、下記の方法が一番手っ取り早いと思います。 array_values($arr) === $arr; がしかし、配列の === は配列の要素の値の比較も行…

DIコンテナ使ってみて思った雑文:その2

アプリケーションにテーブルゲートウェイがあったとして、もちろんDB接続に依存している。 class UserTable { private $connection; public function __construct(Connection $connection) { $this->connection = $connection; } // select/insert/update/de…

Terraform v0.10 でいろいろ変わってた

久しぶりに Terraform を使ってたらちょこちょこ変わってたのでメモ。多分前は v0.8 とかを使ってたと思う。 Initialization 以前は terraform をインストールすると AWS とかのプロバイダのプラグインも一緒に入っていて、すぐに使えていたと思うんですが、…

DIコンテナ使ってみて思った雑文

アプリケーションの流れとして、 コンテナを構築 アプリを実行するなにか(パイプラインとかディスパッチャとか)をコンテナから取り出す リクエストオブジェクトを作成してアプリを実行 みたいな流れかなと思う。順番的にDIコンテナが先に作られるのでリク…

PHPUnit の Functions.php を自動でロードするやつ

下記↓の記事のコメントの通り、 PHPUnitの$this->assertXXXX() の別記法 - Qiita PHPUnit には Functions.php というファイルが含まれていて、これを require するとアサーションなどがグローバル関数に登録されるので、次のようにテストを書くことができま…

MySQL で date_add/sub で年が 0000 になると 0000-00-00 が返る

MySQL の sql_mode で NO_ZERO_IN_DATE,NO_ZERO_DATE とかを指定すると 0000-00-00 や、月や日が 00 などの日時の挿入を禁止できます。 MySQL の NO_ZERO_DATE と NO_ZERO_IN_DATE で無効な日時を禁止 がしかし、年が 0000 の場合の動きが謎いです。 MySQL …

KeepAlive On な Apache+mod_php で HTTP/1.0 クライアントに HTTP/1.1 を返すとタイムアウトを待ってしまう

PHP 7.1.7 Apache 2.4.10 ApacheBench 2.3 zend-expressive 2.0.3 zend-expressive-skeleton 2.0.3 zend-diactoros 1.4.0 zend-stratigility 2.0.1 Docker で Apache+mod_php を実行して、 docker run --rm -p 8888:80 -v "$PWD:/var/www/html" php:apache h…

SNMP v3 の engineID とかのメモ

man snmpcmd とか man snmpd.conf とか man snmptrapd.conf とか tcpdump とかで試行錯誤で推測した内容からのメモ。全然見当違いの可能性もある。 SNMP v3 のエージェントはエージェントを一意に識別するための engineID を設定する必要がある。engineID は…

Windows の SNMP サービスから取れる情報

Windows 10 で SNMP サービスを有効にして取ってみました。概ね下記のような情報が取れます。 SNMPv2-MIB::system sysDescr とか sysUpTime とか IF-MIB::interfaces ネットワークインタフェース RFC1213-MIB::ip RFC1213-MIB::icmp TCP-MIB::tcp UDP-MIB::u…

いろいろなフレームワークのリクエスト/レスポンスクラスの実装

PHP

今日日の PHP のフレームワークでリクエスト/レスポンスクラスがどのように実装されているか調べたメモ。 zend-expressive zend-diactoros https://github.com/zendframework/zend-expressive/blob/2.0.3/src/Application.php zendframework zend-http (not …

シンボリックリンクを用いたアトミックデプロイと opcache と realpath cache

これまで PHP のアプリケーションのデプロイは rsync でどべーとコードを撒いていました。が、それだと新旧のコードが混在するし Capistrano とかはデフォでシンボリックリンク切り替えでアトミックなデプロイになっているし、周回遅れな感じもしますが今後…

シンボリックリンクのアトミックな入れ替えの ln -sfn vs mv -Tf

WEB+DB Press vol.84 読んでて知った、シンボリックリンクのアトミックな入れ替え。 $ mkdir 1 $ touch 1/1.txt $ mkdir 2 $ touch 2/2.txt $ ln -s 1 cur $ strace ln -sfn 2 cur lstat("cur", {st_mode=S_IFLNK|0777, st_size=1, ...}) = 0 lstat("cur", {…

監視とかで定期的に SSH するなら ControlMaster を設定するとスッキリするけど常用はちょっと

Cacti の Percona のテンプレートを使う場合、Cacti から監視対象のサーバに SSH で接続してメトリクスを取ってくることになるのですが・・・普通にやると都度サーバにSSH接続する事になりますし、対象サーバの /var/log/secure にログが無駄に記録されて辛…

Jenkins でビルドのパラメータ化でブランチをフィルタしつつ自動でもビルドするメモ

文章で説明しにくい・・・要するに次のようにしたいとき。 master と issue/* のみをビルドの対象にする Gitlab とかの WebHook で Jenkins の /git/notifyCommit を呼んでプッシュから自動ビルドさせる 手動でビルドするときも↑のパターンにマッチするブラ…

Gitlab CI でカバレッジレポートを公開するメモ

Jenkins で PHPUnit 実行時に出力したカバレッジレポートを Jenkins 上で閲覧できるようにしているのですが、同じことを Gitlab CI でやるときのメモ。 Jenkins の場合 Jenkins なら HTML Publisher plugin でサクッと PHPUnit のカバレッジレポートを公開で…

Gitlab CI を使ってみるメモ

Jenkins からの移行のために今更だけど使ってみたメモ。 なお、うちの Gitlab はソースから入れていてデータベースも MySQL です。たまにしかバージョンアップしていないのでちょっと古いです(8.17.2)。 参考 https://docs.gitlab.com/ee/ci/ 公式のドキュメ…