脳みそスワップアウト

揮発性なもので。おもにPHPのこととか。

多段SSH

PC --(pubkey)--> 踏み台(bastion) --(password)--> リモート(remote1, remote2)

# 踏み台
Host bastion
  Hostname bastion.exapmle.com
  User pen
  PreferredAuthentications publickey
  IdentityFile ~/.ssh/bastion.id_rsa
  IdentitiesOnly yes
# 踏み台の先
Host remote1 remote2
  User www
  PreferredAuthentications password
  ProxyCommand ssh -W %h:%p bastion
Host remote1
  Hostname remote1.example.com
Host remote2
  Hostname remote2.example.com

cmd.exe からネットワーク設定

業務でノートPCを使っていて、固定IPアドレスだったり、DHCPだったり、現場のルールによって頻繁にネットワーク設定を変更しなければならない。
手間なのでバッチファイル化しておくといい。

固定IPアドレスの場合

netsh interface ipv4 set address "Wi-Fi" static 192.168.1.100 255.255.255.0 192.168.1.10
netsh interface ipv4 set dns "Wi-Fi" static 192.168.1.10 primary

DHCPの場合

netsh interface ipv4 set address "Wi-Fi" dhcp
netsh interface ipv4 set dns "Wi-Fi" dhcp

インタフェイス名はこれで調べられる

C:\work>netsh interface show interface

Admin State    State          Type             Interface Name
-------------------------------------------------------------------------
有効             接続             専用               VirtualBox Host-Only Network #4
有効             接続             専用               VirtualBox Host-Only Network #5
有効             接続             専用               VirtualBox Host-Only Network #6
有効             接続             専用               イーサネット
有効             接続             専用               vEthernet (DockerNAT)
有効             切断             専用               Wi-Fi
有効             接続             専用               vEthernet (Default Switch)

イマドキは netsh コマンドではなく、PowerShell を使ってやるのが主流かもしれない。
これは昔ながらの(Windows2000くらい?)方法だけどメモ。

phpunit/dbunit のフォーク

phpunit/dbunit 終了 の続き

phpunit8 で動くようにこそこそ手直しをしていたのだけど (iamapen/dbunit)

すでに先人がいるのを発見した。
とくに kornrunner/dbunit の方がリリースタグも打っていて丁寧。

オリジナルが 4.0 で開発停止だから、バージョンは 4.1 として、self.version で replace されている。
phpunit8 だけでなく、phpunit7 への後方互換も持たせている模様。

packagistにも登録されている(kornrunner/dbunit) ので、こちらを使った方がよさそう。

「本気でメンテしていくつもりがないならフォークはダメよ」という注意書きを読んで私は登録を断念した。

phpunit/dbunit 終了

phpunit/dbunit が終了した。 Wanted (Maybe?): New Maintainer · Issue #217 · sebastianbergmann/dbunit · GitHub
2019-02時点で最新のphpunit8ではもう使えない。

私はこのツールを愛用してきた。
iamapen/commentable-data-set というニッチなものを作るくらいには。

とくに規模の小さなwebアプリの場合、ビジネスロジックがあまりない、少ない。
するとDB読み書きの比率が大きくなり、テスト対象としての優先度も上がる。

DB読み書きが中心のアプリにとって「プログラマが書いたSQLがビジネス要件的に正しいのか」はとても重要であり、このテストはモックではできない。

適切なデータセットに対してDBMSSQLを実行させて、その結果を確認する必要がある。
テストフェーズで目視で確認しているはずだ。
そこを自動化できる phpunit/dbunit はとても有用だった。

今日ではデータソースはRDBだけじゃないし、単体テストにDBは含めないのが流行、という話でもあるのだろう。

とはいえこれ以上のSQLのテストツールを知らない。
さて、どうしようか、、。

ffmpegで無劣化カット

無劣化でカット(切り取り・切り出し)する方法のメモ。
要は無変換とレンジを指定するのだけど、書き方が特殊。とくに -ss
無変換なので処理はとても速い。

input.mp4 の 1分38秒 時点から 46秒間 切り取り、output.mp4 として出力(無劣化)

ffmpeg -ss 00:01:38 -i input.mp4 -ss 0 -t 00:00:46 \
-c:v copy -c:a copy -async 1 output.mp4
-ss 開始時刻までシーク
-i 元ファイル
-ss 0 切り取り開始(==開始時刻)
-t 切り取る秒数(開始時刻との差分)
-c:v copy 映像無変換(無劣化)
-c:a copy 音声無変換(無劣化)
-async 1 音声同期を最初だけにして、後続のサンプルはそのまま