diff --git a/data/experience.md b/data/experience.md index adf6045..72e01d9 100644 --- a/data/experience.md +++ b/data/experience.md @@ -1,26 +1,38 @@ ## Senior Software Engineer, Graphics Software Infrastructure -### [Qualcomm](https://www.qualcomm.com/snapdragon/overview) - San Diego, CA · (prev: Boulder, CO; Toronto, ON) -#### 2021 - Present -##### Distributed Pre-Silicon GPU Driver Validation Platform +### [Qualcomm](https://www.qualcomm.com/snapdragon/overview) - San Diego, CA + +#### 2024 - Present -- `Designed and led` end-to-end `pre-silicon` GPU validation platform from concept to production, catching regressions and protecting pass rates on proprietary GPU driver code across `5 generations` of `Snapdragon 8 Elite Extreme` (mobile) and `X Elite Extreme` (PC) series chipsets. +##### Platform Ownership, Scale-Out & Agentic Tooling + +- `Led` validation platform behind `5 generations` of `Snapdragon 8 Elite Extreme` (mobile) and `X Elite Extreme` (PC) chips for `1,000+` developers. - Scaled validation to `300K+ containers/week` on Windows/Linux across an on-prem `HPC` farm through a fault-tolerant runner harness, covering `Vulkan`/`OpenCL`/`OpenGLES` - `CTS`, `VKPerf`, `GFXReconstruct`, and device-capture replay with `billions of tests` in sandboxed, reproducible runtimes. -- Parallelized `1100+ days` of serial `CPU-based Adreno emulation` into a `24-hour` nightly cycle (`1100x`) with `Docker`/`Singularity` on `IBM Spectrum LSF`. -- Built `FastAPI` observability backend on `RedisJSON`/`RediSearch`, powering custom `web dashboards` with `sub-second` live queries over `2M+` records. -- Architected async `RabbitMQ` pipelines into `Postgres` and a `DuckDB` data lake, offloading raw driver logs to `Artifactory` to keep databases lean. - Standardized `Pydantic` result schemas across `10+` Khronos suites that the `on-device benchmark` team adopted directly and extended for KPIs. +- Shipped an `MCP server` secured with `OAuth2` over live infra APIs, making operational data queryable by LLMs and coding agents for local triage. +- Drove org-wide adoption of agentic coding with `Cline`/`Codex`/`Claude Code`, delivering talks on `MCP` workflows and writing custom Skills. ##### Automated Regression Triage System -- `Engineered` a cron-scheduled `CI/CD` pipeline that diffs non-passing rows across consecutive nightly logs, builds `Gerrit` commit DAGs, and dispatches multi-stage `Jenkins` bisection workflows, eliminating operational toil from nightly builds with overlapping test failures. -- Implemented stateful `multi-bisection engine` on a crash-recoverable `JSONL` state loop inspired by [`Karpathy's autoresearch`](https://github.com/karpathy/autoresearch), sharing midpoint builds across failing tests and partitioning commit ranges, isolating C culprits in `O(C log N)` runs instead of `O(K log N)`, cutting compute by `80%`. -- `Left-shifted` driver validation by compressing the failure-to-fix loop, from detection and `root-cause commit` identification to author notification, enabling `rapid fix iteration` and a sustained `99%` pass rate `week over week`. +- Engineered a fully automated cron `CI/CD` dispatcher that diffs nightly failures and launches `Jenkins` bisections across `Gerrit` commits. +- Implemented `multi-bisection engine` on Karpathy's [`autoresearch`](https://github.com/karpathy/autoresearch)-style `JSONL` loop, isolating C culprits in `O(C log N)` runs, cutting compute by `80%`. +- `Left-shifted` driver validation, shrinking `root-cause` triage from `3 days` to under `12 hours` and sustaining a `99%` pass rate week over week. + +--- -##### Agentic Developer Infrastructure +## Software Engineer, Graphics Software Infrastructure -- `Shipped` `MCP` server with `OAuth2` over live infra APIs plus a `LangGraph`/`ChromaDB` RAG over internal docs, making operational data LLM-queryable. -- Drove org-wide adoption of agentic coding with `Cline`, `Codex CLI`, delivering talks on MCP-based developer workflows and writing custom Skills. +### [Qualcomm](https://www.qualcomm.com/snapdragon/overview) - San Diego, CA · (prev: Boulder, CO; Toronto, ON) + +#### 2021 - 2024 + +##### Distributed Pre-Silicon GPU Driver Validation Platform + +- `Designed and built` end-to-end `pre-silicon` GPU validation platform from concept to production, catching regressions in proprietary driver code. +- Automated `Jenkins` deploys on upstream driver changes, pinning each build to its SDK and suite versions for repeatable runs. +- Parallelized `1100+ days` of serial `CPU-based Adreno emulation` into a `24-hour` nightly cycle (`1100x`) with `Docker`/`Singularity` on `IBM Spectrum LSF`. +- Built `FastAPI` observability backend on `RedisJSON`/`RediSearch`, powering custom `web dashboards` with `sub-second` live queries over `2M+` records. +- Architected async `RabbitMQ` pipelines into `Postgres` and a `DuckDB` data lake, offloading raw driver logs to `Artifactory` to keep databases lean. --- @@ -30,8 +42,8 @@ #### 2020 - 2021 -- `Engineered anomaly detection APIs` (`Auto-Thresholds`, `Auto-Device Grouping`) and `ETL pipelines` processing live `IoT` telemetry from `NetFlow`/`Radius` sources to power the `SecurityPro` network diagnostic product. -- `Owned the full ML lifecycle (0-to-1)` from prototyping through deployment; built `PowerBI` dashboards with `3D clustering` visualizations; presented weekly to `C-suite` (`CTO` & `SVPs`), translating ML outcomes into business decisions. +- Engineered `anomaly detection APIs` (Auto-Thresholds, Auto-Device Grouping) and `ETL pipelines` processing live `IoT telemetry` from NetFlow/Radius sources to power the `SecurityPro` network diagnostic product. +- `Owned the full ML lifecycle` from prototype to deployment; built `PowerBI` dashboards with `3D clustering` views and translated ML outcomes into business decisions, presenting weekly to the `C-suite` (`CTO` and `SVPs`). --- diff --git a/data/projects.md b/data/projects.md index 03eb971..cd538d3 100644 --- a/data/projects.md +++ b/data/projects.md @@ -1,6 +1,4 @@ ### [Satellite Terrain Classification - Distributed ML on AWS EMR](https://github.com/hellosaumil/deepsat-aws-emr-pyspark) -##### Distributed ML, Image Classification, PCA, Random Forests, PySpark, AWS EMR, S3 - - Deployed distributed `PySpark ML` pipeline on `AWS EMR` to classify `405K satellite images` across `6 terrain categories`; achieved `92% accuracy`. -- Architected `S3` + Spark ML pipelines processing `5.6 GB` at `<$0.20/run`, cutting training time `~85%` via PCA dimensionality reduction. +- Architected `S3` + `Spark ML` pipelines processing `5.6 GB` at `<$0.20/run`, cutting training time `~85%` via PCA dimensionality reduction. diff --git a/index.html b/index.html index dc2bac1..202de43 100644 --- a/index.html +++ b/index.html @@ -17,7 +17,7 @@ } catch (e) {} })(); - + Publications & Awards - + diff --git a/script.js b/script.js index e2e7b40..3aceee2 100644 --- a/script.js +++ b/script.js @@ -444,6 +444,21 @@ document.addEventListener('DOMContentLoaded', function () { // Initialize Layout updateLayoutUI(settings.pagePreview); + // Disable Page Preview during print; restore afterwards if it was on + let previewHiddenForPrint = false; + window.addEventListener('beforeprint', () => { + if (document.body.classList.contains('show-page-preview')) { + previewHiddenForPrint = true; + document.body.classList.remove('show-page-preview'); + } + }); + window.addEventListener('afterprint', () => { + if (previewHiddenForPrint) { + previewHiddenForPrint = false; + document.body.classList.add('show-page-preview'); + } + }); + // ======================================== // Theme Toggle (Dark Mode) // ======================================== @@ -473,11 +488,28 @@ document.addEventListener('DOMContentLoaded', function () { }); } - // Sync with device theme changes + // Sync with device theme changes (ignored while printing: print engines can + // flip prefers-color-scheme and would overwrite the user's saved theme) + let printingNow = false; + let themeBeforePrint = null; window.matchMedia('(prefers-color-scheme: dark)').addEventListener('change', (e) => { + if (printingNow) return; updateThemeUI(e.matches); }); + window.addEventListener('beforeprint', () => { + printingNow = true; + themeBeforePrint = document.body.classList.contains('dark-mode'); + }); + window.addEventListener('afterprint', () => { + // Restore the pre-print theme, then let late media-query events settle + if (themeBeforePrint !== null) { + updateThemeUI(themeBeforePrint); + themeBeforePrint = null; + } + setTimeout(() => { printingNow = false; }, 500); + }); + // Initialize Theme updateThemeUI(settings.darkMode); diff --git a/styles.css b/styles.css index 0ed2127..dec9628 100644 --- a/styles.css +++ b/styles.css @@ -1,5 +1,5 @@ /* ======================================== - Resume Website - A4 PDF Export Ready + Resume Website - US Letter PDF Export Ready Single Column Layout - Matching Original ======================================== */ @@ -1160,8 +1160,9 @@ body.dark-mode .attribution code { Print / PDF Export Styles ======================================== */ +/* US Letter to match Page Preview (--page-width/--page-height) and LaTeX export */ @page { - size: A4; + size: letter; margin: 0; } @@ -1178,9 +1179,41 @@ body.dark-mode .attribution code { causing light weights (100–300) to appear thinner than on screen. Use darker ink tokens and stepped-up print weights instead of -webkit-text-stroke (which emits duplicate PDF text layers). */ - :root { + /* Always print with light theme tokens, even when dark mode is active */ + :root, + html.dark-mode, + body.dark-mode { + color-scheme: light; + --primary-color: #1a1a1a; + --accent-color: #0066cc; --text-color: #111111; --text-light: #2b2b2b; + --border-color: #cccccc; + --white: #ffffff; + } + + /* Neutralize Page Preview chrome so print matches preview regardless of toggle */ + body, + body.show-page-preview { + padding: 0 !important; + background: #ffffff !important; + min-height: auto !important; + } + + .resume-page, + body.show-page-preview .resume-page, + body.dark-mode.show-page-preview .resume-page { + width: 100% !important; + max-width: none !important; + min-height: auto !important; + box-shadow: none !important; + border: none !important; + background: #ffffff !important; + } + + .resume-page::after, + body.show-page-preview .resume-page::after { + display: none !important; } * { @@ -1205,6 +1238,11 @@ body.dark-mode .attribution code { padding: var(--margin-top) var(--margin-right) var(--margin-bottom) var(--margin-left) !important; } + /* Page edge acts as bottom margin; trailing padding would spill a blank 2nd page */ + .resume-page { + padding-bottom: 0 !important; + } + /* Ensure in-flow painting order for clean ATS stream */ .section-title, h2.section-title {