• Thursday

    • Private work.
    • Rocket Lab: https://spacenews.com/electron-fails-during-capella-space-launch/
    • Chrome will re-request a non-200 page every minute if it’s the active tab (at least that’s what I’m seeing locally).
    • Supercontest.
      • Finished all the pre-2023-season prep (and backfill since late).
      • https://gitlab.com/bmahlstedt/supercontest/-/issues/202
      • Just a quick reminder of db/model hierarchy: teams, coverage options, location options, prediction options, seasons/weeks, leagues, etc. These are all the (relatively) static tables. Then 2 complex tables. There’s the games table, with datetime, line, and status (no teams/scores/results). And there’s the contestants table, two rows pointing to a single game, each identifying the team/prediction/location/score. opponent_score is denormalized here, so that we can autocalculate coverage/margin locally – the only 2 generated cols in the app. The picks table just points at a user and a contestant.
      • Some bugs in the picks flow.
      • Scores, added User-Agent to requests for scores rather than full webdriver. Some APIs this year started 403ing without this header.
      • Gunicorn perceiving upstream errors (requests within a worker, from the app to elsewhere) as downstream (client, requests to the app) – https://github.com/benoitc/gunicorn/issues/1507
      • Be careful using python’s next iterator inside of webapp routes served by gunicorn. The StopIteration exception raised when there’s no result is caught by gunicorn and perceived to be a client disconnect, so the route returns nothing, swallowing all useful info.
    • Niners giants, trivia, ues, murphy’s law, old citadel friends.