• Saturday

    • SVB summary.
      • 40 years. Working with mostly startups and VCs.
      • Midquarter update on wednesday. Announced losses and the need to raise.
        • Like all other balance sheets, they raise X by offering Y and use X for Z. In most cases, X is money from investors/depositors. Y is usually equity or interest. Z can be a product/service they’re building/offering (a device, a software app, loans, other investments, whatever the business model is).
        • In this case, X is depositor money, Y is interest, and Z is a mix of investments. Z was mostly split into long-term loans for startups as well as bonds (investment). X was ~175b, Z was ~210b, hence losses.
        • Problem #1: Markets have been bad for a while, so deposits were slowing while investments did not slow as much. More out than in. This was mostly concentrated in bay area tech, so little diversification.
        • Problem #2: Markets have been bad for a while, so the bond investments of Z are down bad (bonds move inversely with interest rates of course). Again, little diversification.
      • SIVB lost a ton of value after the announcement. Confirmed lots of fears depositors already had. Everyone pulled. Bank run. Liquidity was need for withdrawals, so SVB had to sell assets, and all bonds were sold at large loss (+ early sale before maturity), exacerbating the problem (reducing confidence in SVB balances/liquidity). Death spiral. Trading on SIVB Halted.
      • Friday, 2 days later, FDIC places SVB into receivership and takes control.
      • FDIC insurance limit is $250k, which each depositor will receive on monday. Plus certificates for the remainder (the majority). Then the FDIC will sell the remaining SBV assets over time and pay depositors back (maybe in full, maybe not).
      • Another big financial institution can rescue SVB in the next couple days, provide the backstop/balance/liquidity, and take over the business.
    • Remember to use tuple[str, ...] and include ... so that python knows to match size. Python can do the type expansion for mutable iterables like list[str], but tuples have immutable length and so we enforce type on all elements of the collection; tuple[str] by itself implies a tuple with one element.
  • Friday

    • Lots of private work.
    • https://rotatingsandwiches.com/
    • Finished a first pass of all 20 fragrances in the humidifier. My rankings (best -> worst): sandalwood, cedar, lavendar, lemongrass, chamomile, vanilla, frankincense, eucalyptus, peppermint, lemon, grapefruit, orange, rosemary, rose, bergamot, jasmine, vetiver, tea tree, geranium, cinnamon. General order of categories: woods -> fruits -> flowers.
    • SBSC. Modularized the plotting function for stacked bars and regular bars, inferring a ton about the passed data. Really clean now, but took some time. Worth it; I need the inference in order to properly make the data analysis dynamically looped based on variables (rather than hardcoded as variable relationships).
    • Lots of other cleanup in the apps.
  • Thursday

    • Haven’t heard from Gemini in a while (still checking https://www.gemini.com/earn, posts are minimal). Next genesis bankruptcy hearing is next wednesday.
    • Remember that in addition to resident parking in my building, I can request discounted guess passes for single day. Check gmail.
    • SBSC. Continued on the generated cols ticket (and the much-inflated scope).
    • Almost done with the rewrite of the stats module. So much cleaner now with variable hierarchies, adjacency matrices, and dynamic generation of all univariate and multivariate plots.
    • Created a new supercontest.util.math and supercontest.util.plotting module. Also added supercontest.util.results back, for everything supplementing the core results/stats modules.
    • Removed some more pylint disables, mostly too-many-* by refactoring heavier functions into multiple.
    • This included splitting the toplevel create_app factory into multiple functions, logically separated by environment initialization!
  • Wednesday

    • Hedgineer ep 2, Neel Somani (Citadel). Web3 dev, commods, eclipse, zk proofs, batteries, terra luna: https://www.youtube.com/watch?v=SIVQ8QxBIu0
    • The official cutoff for UHNWI is $30M. HNWI is only $1M.
    • Upgraded apt pkgs on the EC2 instance. Docker system pruned to reclaim disk too, was at 90%. Now 10GB of 30 used for /.
    • Ordered fresh. And 10lb peanuts for bars.
    • Lots of private work.
    • Finished a massive redesign of the stats module. Haven’t finished implementation quite yet, but the design details (in full) are here: https://gitlab.com/bmahlstedt/supercontest/-/issues/174#note_1305892617
    • Made the html/js portions of the plots on the stats view dynamic. No more hardcoding ~200 plots.
    • Created a gcontact (in my personal) for brian@privateerliquidity.com. Merged it. Opened the calendar-external-sharing settings in gworkspace admin console, and shared brian@privateer with my personal so I have a consolidated schedule for now (will segregate later).
    • Did a ~medium dive into plotly, on both the python and js sides.
  • Tuesday

    • Lots of private work.
    • The errant massage envy transaction posted today, but so did its cancellation. Did not need to submit a dispute.
    • Created google workspace.
    • Added the MX records to route53. All around pretty easy process.
    • SBSC. Continued the generated cols ticket.
    • Fixed the issue where the graph view (“progression”) would compress weeks with 0 picks (rather than flatlining and keeping all graphs season-long). This was broken in prod too (not just my branch).
    • convert_num_to_int_if_whole and get_percentage are now passed from the app as jinja globals, rather than defining a duplicate macro in html for the same logic.
    • Used to delete old picks and recreate all 5 if the user changed 1 pick. This isn’t necessarily harmful, but causes a lot more writing than necessary, and ratchets the PK ID of the picks table up very quickly. Would be nice if I was storing history, but I’m not (outside of logs). Now it just updates pick rows as necessary. Max 5 per user per week.
    • Mode the score write more efficient as well.
    • Rewrote the entire stats module.
  • Monday

    • Lots of private work.
    • SBSC. Continued on the effort for computed cols.
    • https://gitlab.com/bmahlstedt/supercontest/-/issues/174
    • Effectively rewrote the whole results module today.
    • alltimelb and stats views did not commit scores before building the dataviews. Now they do. Just like LB/allpicks/matchups/etc. It only does this during the regseason, and on SCORE_DAYS, of course.
    • lb / graph / alltimelb views don’t query for scores anymore. They just need picks.
    • The alltimelb used to just run the lb for every season. Now it’s distinct; it just iterates over all picks (mapped by season -> week -> user -> data), just like all other views.
  • Sunday

    • SBSC. Continued on the generated-results effort.
    • https://gitlab.com/bmahlstedt/supercontest/-/issues/174
    • Rearranged the cols on the matchups view a bit: datetime on left, location on the left (instead of home team asterisk).
    • Deleted a ton of logic from results and stats.