thebleucheese®
Developer System · MHC-1370
PROJECTS
INDEX // 09 ENTRIES
TUNER STEREO DIGITAL
PRINCIPAL ENGINEER // FULL STACK
VOL 36
POWER
Input · Select
Projects About Resume Blog
16-BIT · 44.1 kHz
Disc · Project Index ONBOARD DAC
01

MACAT

Easy to use desktop and cli tool for endpoint adversary simulation (and automation).

5:12|
2022-26
▶ OPEN MANUAL
02

Stealth Python / Proxmox

Python FastAPI project controlling 2 self-hosted Proxmox instances. Proprietary / Non-Public.

3:58|
2026
▶ OPEN MANUAL
03

Stealth Pydantic AI

A personal Python project built on Pydantic AI running a combo of agentic and deterministic flows on a FastAPI service.

4:20|
2026
▶ OPEN MANUAL
04

TAXII 2 Server

A TAXII 2 threat-intel server, started as a Node.js + MongoDB learning project, ended up being used at work.

6:45|
2017
▶ OPEN MANUAL
05

Digibuyer

Serverless Python lambda to search for specific Digimon memorabilia for my wife.

4:08|
2023
▶ OPEN MANUAL
06

Enterprise App Modernization

Long term modernization of a large enterprise app including migrations, framework, frontend architecture.

8:30|
2018-24
▶ OPEN MANUAL
07

Enterprise App New UI

New UI design and component system for a large enterprise app while continuing to ship features.

5:55|
2023
▶ OPEN MANUAL
08

Enterprise App Data Portability

Runtime import / export and migration tools allowing application data sharing.

7:22|
2019-24
▶ OPEN MANUAL
09

Yardbolt

Security event query fabric to connect to 40+ different defense tools.

6:18|
2019-21
▶ OPEN MANUAL
thebleucheese
Enterprise App Data Portability Service Manual
P. 1 / 1

Enterprise App Data Portability

2019-24

How do you take a lot of data from a large relational database, make it easy to import & export, and make it so that it isn't invalidated each time you change your schema or release a new application version? How do you handle importing older data? How do you handling importing multiple very different data types? This was an interesting problem. I initially "cheated" on this. I didn't really solve it. Instead, when we were on a document database, I just created a blank temporary database for each import and overlayed the imported data on it, then reran all the migrations (yay idempotency). This worked and was easy to implement, but felt kind of gross. Once we moved to a relational DB things got more interesting. Building a temporary DB and running migrations came with a lot of drawbacks so instead we did a baseline schema to class dump and then schema diff on each build. Any time the schema that is used in data import / export changes, we write a new versioned class file for the schema. This allows us to keep a baseline behavior for import and override it when there are changes to behavior, new fields, or some form of migration in code that's needed to handle the import process. This also underpins a more user-friendly content creation process in the API which makes it much faster to get data into the system for users so they don't need to know the details of the entire data model.

TypeData portability
OperationsImport / export / migrate
PropertyResumable, idempotent
Span2019-2024
VisibilityWork (proprietary)
SourceClosed
Caution
Proprietary work project. Details generalized above.