https://gaultier.github.io/blog/body_of_work.html

ME

profile

skills


INFRA

LANGUAGES

DATA

  • SQL, Mongo aggregation framework
  • dbms: Postgres, Mongo, Oracle, MySQL/MariaDB, DuckDB
  • messaging: RabbitMQ, Qpid, Kafka, ARQ
  • tooling: visidata, litecli https://github.com/dbcli/litecli/pull/217
  • dataframes: Polars, Pandas

open source


https://github.com/lusingander/serie/issues/53

EXPERIENCE

🏀 Kero Sports

🗓️ 2025.10-present


pregame resolution

https://bitbucket.org/kerogaming/rush_ml_v2/pull-requests/4844

  • lookup error happens (per Sentry) on market_info.get("form_actionNumber")
  • nothing has changed in the code around this LOC for 2+ years
  • which makes me think this is a data issue, not a code issue
  • all the issues seem to be with pre-game markets
  • pregame markets don't have PBP data
  • pregame markets can (will occasionally? always? never?) have null actionNumber
  • when the game starts, we attempt to resolve all markets, incl. pregame
  • if pregame markets lack actionNumber, they can't resolve
  • so why is this only happening for select pregame markets (e.g. P_4_23_5, P_4_29_4)?
  • we seemingly handle pregame market state mgmt via get_pregame_publish_market, which should be picking up P_4_23_5, P_4_29_4, and so forth
  • these markets have ownership of their own unpublish logic (unlike other pregame markets?? "There should be one - and preferably only one - obvious way to do it.")
class P_4_23_5(v.TeamNextOffensivePossessionResult):
    ...
    @classmethod
    def resolve_market(cls, event_info, market, last_row, con: BasketballRmgWorkDB):
        ...
        if last_row.get(
            "@matchstatus"
        ) != BetRadarMatchStatus.NOT_STARTED and not market.get("unpublished"):
            res = ResolveOption.UNPUBLISH
  • so the issue could be that when we try to resolve them via BasketballRmgResolving.run(), we're trying to lookup form_actionNumber before their own internal unpublish mechanism resolve_market gets called, which means we'll hit this lookup error, which means we'll never resolve them.
  • Ok, so here's a potential fix for this https://bitbucket.org/kerogaming/rush_ml_v2/branch/fix/basketball/pregame-unpublish-temp-fix?dest=feat_common_service
  • The fix looks idiotically simple, I know, but think it will handle these deviant markets for now. Mid/long-term we should align them with their fellow pregame markets and move ownership of their resolution outside of themselves.

stack

  • FastAPI
  • Sentry
  • Mongo, Postgres
  • Kafka, ARQ

🟥 Capp

🗓️ 2024.08-2025.04

  • project: ERP
  • role: data eng
  • contribution: set up EDI connection for suppliers, wrote product category tooling, modernized price updates (Polars, sqlite-utils, visidata)

💿 United Masters

🗓️ 2022.01-2023.12

  • project: payments
  • role: backend (Flask, Postgres, Mongo, Kafka)
  • contribution: projects include hardening data ingregrity for Split Pay system, integrating Chargebee for subscriptions, moving from 3rd party royalty system to in-house replacement

🏦 Eliassen (BNY, Capital One)

🗓️ 2022.01-2023.12

  • project: infrastructure automation
  • role: backend (Flask, Django)
  • contribution: CLI client and Flask server to run distributed go-to-production testing suites on bare metal and VMWare servers
  • project: risk rating for sector-specific (real estate, energy) commercial lending
  • role: backend (Flask, SQL, Docker)
  • contribution: write microservices, establish SDLC patterns (repo standardization, code review)

🟦 JP Morgan

🗓️ 2016.12-2019.02

  • project: feature-flagging system for high traffic clients (Chase.com)
  • role: backend (Django, DRF, SQL) ops (Cloud Foundry, database migrations, load balancers)
  • contribution: search, user/group perms, ER models
  • project: CRM for HNW clients
  • role: backend (PHP, SugarCRM, SQL) frontend (Angular1, Selenium)
  • contribution: API integrations, Selenium integration test suite, Angular admin dashboard