• 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.
  • Sunday

    • Private work.
    • DP problem, classic knapsack.
    • Bubbles in br ceiling are from AC pipes. Off until next summer, but if leaking (likely), will need attention.
    • Horseback riding, bedford. Pumpkins (Blaze), sleepy hollow.
    • Swapped VPN card.
    • Updated vscode macbook.
    • Friendsgiving planning.
    • YT’s anti-adblocker popup.
    • Python’s itertools.pairwise is helpful, although it’s really easy to write the indexing/iterating yourself. for item in pairwise([1,2,5,6,9]): print(item) will print (1,2) (2, 5) (5, 6) etc.
    • Supercontest. Confirmed scorefetching started at T-30min in prod.
  • Friday

    • FRIDAY THE 13TH.
    • Private work.
    • Atlassian buys loom for 975M.
    • Saw a taping of the It’s Always Sunny podcast at RCMH!
    • Amazon fresh reduced their free-delivery-threshold from 150 back to 100 (they just raised it to 150).
    • Ceiling paint in bedroom is bubbling and soft, as though water is leaking from the unit above me. Submitted request.
    • flask-socketio for client/server bidi.
    • Hydroponics.
      • Remember my tap in nyc is ~7.1 pH. The gardens should be ~5.8.
      • The v2 is ~10gal reservoir. The v1 is ~5. Each level adds another gallon. So totals are 13 and 8.
      • You’re supposed to put 1-2mL of pH-down per gal. So 1.5×13 and 1.5×8 -> 20 and 12. A teaspoon is ~5mL. So final numbers, by recommedation, for a completely fresh fill after cleaning: 4tsp for v2 and 2.5tsp for v1.
      • In practice, I’ve found this to still yield pHs ~6.3, so increase a bit. Add 6tsp (30mL) for v2 and 4tsp (20mL) for v1, if complete refill. If you’re only refilling half the water (weekly maintenance), halve that (or whatever other ratio).
      • Planted new batch. Tomatoes, cucumbers, gochujang peppers, chard, thai basil, stevia, peppermint, lettuce, marjoram, thyme.
    • Supercontest.
      • To get PRE request behavior (like linkbuilding with url_for, you have to use url params, not query params.
      • You could try to circumvent this by wrapping your request.args URL params logic inside a url_defaults function, masquerading them as URL values/params. But there’s no request in this context! It’s just a url_for call. So you can’t access them.