https://gaultier.github.io/blog/body_of_work.html
ME
profile
skills
INFRA
- AWS: Lambda, CloudWatch, EC2, IAM
- PaaS: Cloud Foundry, Platform.sh
- IaC: Terraform, Ansible
- operating systems: Linux
- servers: (Nginx, Gunicorn)
- Algolia
LANGUAGES
- Python: Django/DRF, Flask, FastAPI + libraries (bpython, Black, bandit, coverage, loguru, pdoc, pytest, python-dotenv) scraping (Scrapy, Beautiful Soup)
- JS: Angular, Vue, htmx, Selenium
- various: Java (Spring), PHP
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
- technical writer: Stack Overflow (threads vs. processes, debugging, Docker Compose inheritance), technical article covered by Python Bytes podcast
- code contributor: The Hitchhiker's Guide to Python (PRs on loguru, Clint), various (Portray, CPython, ptpython, bandit, fff)
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