• Monday

    • Private work.
    • Some logarithms.
    • Charged the remote control blinds. Just take microusb from desktop, extension cord from drawer, and plug in (red -> blinking green -> green).
    • Remember {:,} for comma separators on numbers in the thousands spots.
    • The equinox increase of 7/mo is in relation to ~260 or whatever I pay. A little under 3% increase.
    • S3.
      • Charges for versioning (if you have it enabled for a bucket) at the same rate as regular storage. If you have 6 versions of the file, it’s 6x the storage (not diffs).
      • Lambdas for pre/post data fetching. Many capabilities.
      • Remember permissions on the bucket are given by the ARN, but permissions on objects within the bucket require the /* suffix.
      • Looked at some policy examples for fine-tuned access control.
      • You can add localhost to Referer in a bucket policy to allow access in dev quickly/temp. This effectively exposes to the public though – any service can refer from localhost.
    • Lol equinox is increasing their rates by $7/mo.
    • Set up the ring cam. Remote control, voice, everything.
    • Supercontest.
      • Finished the larger change to rewrite all the routing
      • https://gitlab.com/bmahlstedt/supercontest/-/issues/218
      • Includes the shifting of the statistics views, the cleanup of the template logic (as far as URL params), and the filtering of stats by season.
      • Changed the logic so season=0 meant ALL (just like league=0 means all). This required some special handling of the season param – ONLY the stats views allow 0 (others just require valid seasons).
      • Moved all static assets to s3. Team logos, branding icons, banners, etc.
      • https://gitlab.com/bmahlstedt/supercontest/-/issues/193
      • Couldn’t find an easy solution for a “pointer” – a generic s3 alias (just a key-value pair) which I can point at anther object path in the bucket. I would update the banner pointer to the specific img in the archive. Oh well, just copying each week’s head as banner.jpg, like I used to do locally.
      • Much easier to manage these assets now. I can change the banner and the docs and everything else without rebuild/redeploy. They’re just s3 refs.
      • There is a flask-s3 python package: https://flask-s3.readthedocs.io/en/latest/. I’ve decided not to use it. The interface of pure URLs is simple/proper/stable enough for me. I don’t need extra functionality.
      • Could add WAF to cloudfront. Slows it down a TINY bit but adds some basic protection. Don’t need for now.
      • The docs were broken. Local and remote builds. Needed to add setuptools back to pyproject.toml – it’s necessary for sphinx.
      • Remember to delete docs/modules, these are autogenerated and if you’ve moved modules around, you’ll have some stale imports.
      • Also remember open in live server for index html files from vscode (useful for autodocs).
  • Sunday

    • Private work.
    • Danse Macabre, Greenwood Cemetery.
    • Mealprep: smoothies, oatmilk, hibiscus.
    • Finished Homeland. So good.
    • AWS is starting to charge for IPs. A single static ipv4 is ~$4/mo I think?
    • Supercontest.
      • Changed the View navbar dropdown to be btn-secondary, standing out from the other season/week/league filters.
      • Moved the alltimelb view to the standard Leaderboard dropdown option for season. Didn’t add the param season=All, since they’re so diff. Cols by week vs cols by season, different values shown in each cell, etc. Best to keep separate. It’s not like stats where it just affects a filter in the query.
      • Still some (now) invalid email addresses of players. Not gonna do anything. That’s their account profiler, I don’t want to modify it. Just have the mailer fail as necessary.
      • Sometimes espn returns unknown statuses: https://bmahlstedt-org.sentry.io/issues/4550103735/?notification_uuid=c2a7fec2-1faf-4ddf-bc71-5576421eb16e&project=1773879&referrer=regression_activity-email
  • Friday

    • Private work.
    • Still a great tweet: https://twitter.com/mxcl/status/608682016205344768 (top tech companies are, and should be, shifting evaluation methods for better candidate filtering).
    • Finished the awful cayenne segment today (>2wks).
    • Qatar Masters finishes. Magnus, Anish, others tied for 9th. Hikaru, Arjun, Gukesh among those tied for 3rd. Abdu and another uzbek 1st/2nd! Swiss is always so weird. You’re only playing a super GM maybe once in the 9 rounds. I’ve only heard of 3/9 players that the winner faced (Arjun, Sindarov, Adhiban).
    • Generators (with recursion) for flattening nested lists (arbitrarily deep). Or appends/extends with iterators.
    • Supercontest.
      • Pulled some logic out of the templates (hard to manage) into the app (easy to manage). Will merge once I migrate to tsx, but this is a helpful change for the timebeing.
      • Remember the do directive in jinja2. Like set to define a variable, do will run some code (like updating dict val, whatever). Need to add the ext to the jinja env tho.
      • Cleaned up all the conditionals in jinja2 for season/week/league. Now it infers from g.params, updating the dict with whatever dropdown you’re iterating over. Eg: season dropdown will retain week and league (from current view), and provide a link for all seasons.
      • Also, the navbar dropdowns had hardcoded route name checks for conditionality. Now it just inspects to see if you’re on a view that has season, week, or league – and presents a dropdown for each present param.
      • Moved the subtitle-building functionality for each contest view from the general header to the 4 specific view templates (they’re diff by season/week/league).
  • Thursday

    • Private work.
    • Goodell’s contract is 200M/3yr, bringing career earnings to >700 for salary alone.
    • Blocked Flowdan on spotify. So bad.
    • You can spoof a phone number to originate from a caller ID you don’t own (like SMTP without TLS, spoofing sender). Happened today with home number / parents.
    • Supercontest.
      • Separated views into diff blueprints, each custom in many ways (an important one = URL path params).
      • The app preprocessor does generics: name/id maps, where in the season it is, etc.
      • The blueprint preprocessors do week/season/league resolution, as appropriate.
      • There are some hardcoded URLs (domains AND endpoints/values) in the email lib. You’d normally use flask.request and url_for to construct these dynamically, so they’re not hardcoded. But there’s no request within those apscheduler jobs for emailing.
      • The utils module should never import other sbsc modules. Only stdlib and other utils. Removed the models.Pick import from types. The email module runs queries to check notification settings and stuff. Moved it out of utilities into the main package.
  • Wednesday

    • Private work.
    • Andreesen’s “tech is good” manifesto: https://a16z.com/the-techno-optimist-manifesto
    • Finished ALL spotify scrapes, full discographies of all artists. 2,183 liked songs. Now onto new releases / discover.
    • Bos’n = boatswain (deck boss).
    • Switched trays (2->3).
    • Slack has “huddles” (video calls).
    • https://hub.selbyjennings.com/hubfs/Selby%20Jennings%202023/Fintech%20Technology%20Salary%20Guide%20-%20USA.pdf
    • Browsing from chatgpt: https://help.openai.com/en/articles/6825453-chatgpt-release-notes
    • Watched Host.
    • Supercontest. Backed up. Updated banner. Tested automatic line commit locally (earlier), then verified it ran nominally in prod. Submitted picks.
  • Tuesday

    • Private work.
    • Billion’s Axelrod = Cohen.
    • Created google passkey for desktop.
    • Updated vscode exts and geforce driver.
    • Spacers in the closet handle so it’s not loose.
    • 32 pieces of mail, only 1 not spam. And that was for auto ins cards, which I have digital copies of. Post is such a waste!
    • Glassdoor blocks a lot of their stuff.
    • Iphone stopwatch can do the wim hof rounds, just have to get used to the lap/reset while you’re a bit out of it. But it doesn’t save, so nevermind.
    • The wim hof app is pretty buggy though. Can’t edit account details, account is coerced to apple id (but there are two of them?), just overall a little shaky. But I’m logged in and functional, and history is being saved.
    • Message queues: At Most Once vs At Least Once vs Exactly Once.
    • Fabi wins US Chess Championship. Magnus crawling back to the lead in Qatar, within reach now (1/2 behind 1st, 3 rounds left of 9).
    • Disabled adblockplus and privacybadger on youtube.com, leaving only ublockorigin. They patched a couple weeks ago (within a couple hours of the YT change).
  • Monday

    • Private work.
    • Apple store temporarily removed metamask. It’s back now.
    • Right Aid filed chapter 11.
    • Supercontest.
      • ESPN score API returned an empty string for the status during multiple (21) fetches within SNF. No damage, no fix: https://bmahlstedt-org.sentry.io/issues/4550103735
      • Resolved all other sentry issues (old), if they happen again I want to be alerted.
    • Excellent question for a candidate to ask an interviewer: Give the most recent example as it relates to YOUR job for the problem you just assessed me on.
    • Google passkeys. One for face on phone, one for fingerprint on macbook.
    • Friendsgiving. Created gsheet for signups (and tinyurl and bitly). Created paperless post for invites.
    • Back to NY.