1<!DOCTYPE html> 2<html xmlns="http://www.w3.org/1999/xhtml" lang="en" xml:lang="en"><head> 3 4<meta charset="utf-8"> 5<meta name="generator" content="quarto-1.9.38"> 6 7<meta name="viewport" content="width=device-width, initial-scale=1.0, user-scalable=yes"> 8 9 10<title>Resume â danton.codes</title> 11<style> 12/* Default styles provided by pandoc. 13** See https://pandoc.org/MANUAL.html#variables-for-html for config info. 14*/ 15code{white-space: pre-wrap;} 16span.smallcaps{font-variant: small-caps;} 17div.columns{display: flex; gap: min(4vw, 1.5em);} 18div.column{flex: auto; overflow-x: auto;} 19div.hanging-indent{margin-left: 1.5em; text-indent: -1.5em;} 20ul.task-list{list-style: none;} 21ul.task-list li input[type="checkbox"] { 22 width: 0.8em; 23 margin: 0 0.8em 0.2em -1em; /* quarto-specific, see https://github.com/quarto-dev/quarto-cli/issues/4556 */ 24 vertical-align: middle; 25} 26</style> 27 28
29<script src="site_libs/quarto-nav/quarto-nav.js"></script>
vendor: 1 bytes, line 29
29
30<script src="site_libs/quarto-nav/headroom.min.js"></script>
vendor: 1 bytes, line 30
30
31<script src="site_libs/clipboard/clipboard.min.js"></script>
vendor: 1 bytes, line 31
31
32<script src="site_libs/quarto-search/autocomplete.umd.js"></script>
vendor: 1 bytes, line 32
32
33<script src="site_libs/quarto-search/fuse.min.js"></script>
vendor: 1 bytes, line 33
33
34<script src="site_libs/quarto-search/quarto-search.js"></script>
34 35<meta name="quarto:offset" content="./"> 36<link href="./favicon.ico" rel="icon">
37<script src="site_libs/quarto-html/quarto.js" type="module"></script>
vendor: 1 bytes, line 37
37
38<script src="site_libs/quarto-html/tabsets/tabsets.js" type="module"></script>
vendor: 1 bytes, line 38
38
39<script src="site_libs/quarto-html/popper.min.js"></script>
vendor: 1 bytes, line 39
39
40<script src="site_libs/quarto-html/tippy.umd.min.js"></script>
vendor: 1 bytes, line 40
40
41<script src="site_libs/quarto-html/anchor.min.js"></script>
41 42<link href="site_libs/quarto-html/tippy.css" rel="stylesheet"> 43<link href="site_libs/quarto-html/quarto-syntax-highlighting-15634bcf2e68342d4ad2dfa704d543f6.css" rel="stylesheet" class="quarto-color-scheme" id="quarto-text-highlighting-styles"> 44<link href="site_libs/quarto-html/quarto-syntax-highlighting-dark-0a6b7249c26820e032cb0bd839ff02b1.css" rel="stylesheet" class="quarto-color-scheme quarto-color-alternate" id="quarto-text-highlighting-styles"> 45<link href="site_libs/quarto-html/quarto-syntax-highlighting-15634bcf2e68342d4ad2dfa704d543f6.css" rel="stylesheet" class="quarto-color-scheme-extra" id="quarto-text-highlighting-styles">
46<script src="site_libs/bootstrap/bootstrap.min.js"></script>
46 47<link href="site_libs/bootstrap/bootstrap-icons.css" rel="stylesheet"> 48<link href="site_libs/bootstrap/bootstrap-85545d89869a7d03b8d8b22d16f33e0b.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme" id="quarto-bootstrap" data-mode="light"> 49<link href="site_libs/bootstrap/bootstrap-dark-f7fba41c1ef1477727021bb8767eabf3.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme quarto-color-alternate" id="quarto-bootstrap" data-mode="dark"> 50<link href="site_libs/bootstrap/bootstrap-85545d89869a7d03b8d8b22d16f33e0b.min.css" rel="stylesheet" append-hash="true" class="quarto-color-scheme-extra" id="quarto-bootstrap" data-mode="light">
51<script id="quarto-search-options" type="application/json">{ 52 "location": "navbar", 53 "copy-button": false, 54 "collapse-after": 3, 55 "panel-placement": "end", 56 "type": "overlay", 57 "limit": 50, 58 "keyboard-shortcut": [ 59 "f", 60 "/", 61 "s" 62 ], 63 "show-item-context": false, 64 "language": { 65 "search-no-results-text": "No results", 66 "search-matching-documents-text": "matching documents", 67 "search-copy-link-title": "Copy link to search", 68 "search-hide-matches-text": "Hide additional matches", 69 "search-more-match-text": "more match in this document", 70 "search-more-matches-text": "more matches in this document", 71 "search-clear-button-title": "Clear", 72 "search-text-placeholder": "", 73 "search-detached-cancel-button-title": "Cancel", 74 "search-submit-button-title": "Submit", 75 "search-label": "Search" 76 } 77}</script>
77 78 79 80<link rel="stylesheet" href="styles.css"> 81<meta property="og:title" content="Resume â danton.codes"> 82<meta property="og:image" content="https://danton.codes/images/profile.jpeg"> 83<meta property="og:site_name" content="danton.codes"> 84<meta name="twitter:title" content="Resume â danton.codes"> 85<meta name="twitter:image" content="https://danton.codes/images/profile.jpeg"> 86<meta name="twitter:card" content="summary_large_image"> 87</head> 88 89<body class="nav-fixed fullcontent quarto-light">
89<script id="quarto-html-before-body" type="application/javascript"> 90 const toggleBodyColorMode = (bsSheetEl) => { 91 const mode = bsSheetEl.getAttribute("data-mode"); 92 const bodyEl = window.document.querySelector("body"); 93 if (mode === "dark") { 94 bodyEl.classList.add("quarto-dark"); 95 bodyEl.classList.remove("quarto-light"); 96 } else { 97 bodyEl.classList.add("quarto-light"); 98 bodyEl.classList.remove("quarto-dark"); 99 } 100 } 101 const toggleBodyColorPrimary = () => { 102 const bsSheetEl = window.document.querySelector("link#quarto-bootstrap:not([rel=disabled-stylesheet])"); 103 if (bsSheetEl) { 104 toggleBodyColorMode(bsSheetEl); 105 } 106 } 107 const setColorSchemeToggle = (alternate) => { 108 const toggles = window.document.querySelectorAll('.quarto-color-scheme-toggle'); 109 for (let i=0; i < toggles.length; i++) { 110 const toggle = toggles[i]; 111 if (toggle) { 112 if (alternate) { 113 toggle.classList.add("alternate"); 114 } else { 115 toggle.classList.remove("alternate"); 116 } 117 } 118 } 119 }; 120 const toggleColorMode = (alternate) => { 121 // Switch the stylesheets 122 const primaryStylesheets = window.document.querySelectorAll('link.quarto-color-scheme:not(.quarto-color-alternate)'); 123 const alternateStylesheets = window.document.querySelectorAll('link.quarto-color-scheme.quarto-color-alternate'); 124 manageTransitions('#quarto-margin-sidebar .nav-link', false); 125 if (alternate) { 126 // note: dark is layered on light, we don't disable primary! 127 enableStylesheet(alternateStylesheets); 128 for (const sheetNode of alternateStylesheets) { 129 if (sheetNode.id === "quarto-bootstrap") { 130 toggleBodyColorMode(sheetNode); 131 } 132 } 133 } else { 134 disableStylesheet(alternateStylesheets); 135 enableStylesheet(primaryStylesheets) 136 toggleBodyColorPrimary(); 137 } 138 manageTransitions('#quarto-margin-sidebar .nav-link', true); 139 // Switch the toggles 140 setColorSchemeToggle(alternate) 141 // Hack to workaround the fact that safari doesn't 142 // properly recolor the scrollbar when toggling (#1455) 143 if (navigator.userAgent.indexOf('Safari') > 0 && navigator.userAgent.indexOf('Chrome') == -1) { 144 manageTransitions("body", false); 145 window.scrollTo(0, 1); 146 setTimeout(() => { 147 window.scrollTo(0, 0); 148 manageTransitions("body", true); 149 }, 40); 150 } 151 } 152 const disableStylesheet = (stylesheets) => { 153 for (let i=0; i < stylesheets.length; i++) { 154 const stylesheet = stylesheets[i]; 155 stylesheet.rel = 'disabled-stylesheet'; 156 } 157 } 158 const enableStylesheet = (stylesheets) => { 159 for (let i=0; i < stylesheets.length; i++) { 160 const stylesheet = stylesheets[i]; 161 if(stylesheet.rel !== 'stylesheet') { // for Chrome, which will still FOUC without this check 162 stylesheet.rel = 'stylesheet'; 163 } 164 } 165 } 166 const manageTransitions = (selector, allowTransitions) => { 167 const els = window.document.querySelectorAll(selector); 168 for (let i=0; i < els.length; i++) { 169 const el = els[i]; 170 if (allowTransitions) { 171 el.classList.remove('notransition'); 172 } else { 173 el.classList.add('notransition'); 174 } 175 } 176 } 177 const isFileUrl = () => { 178 return window.location.protocol === 'file:'; 179 } 180 const hasAlternateSentinel = () => { 181 let styleSentinel = getColorSchemeSentinel(); 182 if (styleSentinel !== null) { 183 return styleSentinel === "alternate"; 184 } else { 185 return false; 186 } 187 } 188 const setStyleSentinel = (alternate) => { 189 const value = alternate ? "alternate" : "default"; 190 if (!isFileUrl()) { 191 window.localStorage.setItem("quarto-color-scheme", value); 192 } else { 193 localAlternateSentinel = value; 194 } 195 } 196 const getColorSchemeSentinel = () => { 197 if (!isFileUrl()) { 198 const storageValue = window.localStorage.getItem("quarto-color-scheme"); 199 return storageValue != null ? storageValue : localAlternateSentinel; 200 } else { 201 return localAlternateSentinel; 202 } 203 } 204 const toggleGiscusIfUsed = (isAlternate, darkModeDefault) => { 205 const baseTheme = document.querySelector('#giscus-base-theme')?.value ?? 'light'; 206 const alternateTheme = document.querySelector('#giscus-alt-theme')?.value ?? 'dark'; 207 let newTheme = ''; 208 if(authorPrefersDark) { 209 newTheme = isAlternate ? baseTheme : alternateTheme; 210 } else { 211 newTheme = isAlternate ? alternateTheme : baseTheme; 212 } 213 const changeGiscusTheme = () => { 214 // From: https://github.com/giscus/giscus/issues/336 215 const sendMessage = (message) => { 216 const iframe = document.querySelector('iframe.giscus-frame'); 217 if (!iframe) return; 218 iframe.contentWindow.postMessage({ giscus: message }, 'https://giscus.app'); 219 } 220 sendMessage({ 221 setConfig: { 222 theme: newTheme 223 } 224 }); 225 } 226 const isGiscussLoaded = window.document.querySelector('iframe.giscus-frame') !== null; 227 if (isGiscussLoaded) { 228 changeGiscusTheme(); 229 } 230 }; 231 const authorPrefersDark = false;
232 const darkModeDefault = authorPrefersDark; 233 document.querySelector('link#quarto-text-highlighting-styles.quarto-color-scheme-extra').rel = 'disabled-stylesheet'; 234 document.querySelector('link#quarto-bootstrap.quarto-color-scheme-extra').rel = 'disabled-stylesheet'; 235 let localAlternateSentinel = darkModeDefault ? 'alternate' : 'default'; 236 // Dark / light mode switch 237 window.quartoToggleColorScheme = () => { 238 // Read the current dark / light value 239 let toAlternate = !hasAlternateSentinel(); 240 toggleColorMode(toAlternate); 241 setStyleSentinel(toAlternate); 242 toggleGiscusIfUsed(toAlternate, darkModeDefault); 243 window.dispatchEvent(new Event('resize')); 244 }; 245 // Switch to dark mode if need be 246 if (hasAlternateSentinel()) { 247 toggleColorMode(true); 248 } else { 249 toggleColorMode(false); 250 } 251 </script>
251 252 253<div id="quarto-search-results"></div> 254 <header id="quarto-header" class="headroom fixed-top"> 255 <nav class="navbar navbar-expand-lg " data-bs-theme="dark"> 256 <div class="navbar-container container-fluid"> 257 <div class="navbar-brand-container mx-auto"> 258 <a class="navbar-brand" href="./index.html"> 259 <span class="navbar-title">danton.codes</span> 260 </a> 261 </div> 262 <div id="quarto-search" class="" title="Search"></div> 263 <button class="navbar-toggler" type="button" data-bs-toggle="collapse" data-bs-target="#navbarCollapse" aria-controls="navbarCollapse" role="menu" aria-expanded="false" aria-label="Toggle navigation" onclick="if (window.quartoToggleHeadroom) { window.quartoToggleHeadroom(); }"> 264 <span class="navbar-toggler-icon"></span> 265</button> 266 <div class="collapse navbar-collapse" id="navbarCollapse"> 267 <ul class="navbar-nav navbar-nav-scroll me-auto"> 268 <li class="nav-item"> 269 <a class="nav-link" href="./index.html"> 270<span class="menu-text">About Me</span></a> 271 </li> 272 <li class="nav-item"> 273 <a class="nav-link active" href="./resume.html" aria-current="page"> 274<span class="menu-text">Resume</span></a> 275 </li> 276 <li class="nav-item"> 277 <a class="nav-link" href="./posts.html"> 278<span class="menu-text">Posts</span></a> 279 </li> 280 <li class="nav-item"> 281 <a class="nav-link" href="https://dantonnoriega.github.io/SR3TuringQuarto.jl/"> 282<span class="menu-text">SR3TuringQuarto.jl</span></a> 283 </li> 284</ul> 285 </div> <!-- /navcollapse --> 286 <div class="quarto-navbar-tools"> 287 <a href="https://gitlab.com/dantonnoriega/dantonnoriega.gitlab.io" title="Source" class="quarto-navigation-tool px-1" aria-label="Source"><i class="bi bi-gitlab"></i></a> 288 <a href="" class="quarto-color-scheme-toggle quarto-navigation-tool px-1" onclick="window.quartoToggleColorScheme(); return false;" title="Toggle dark mode"><i class="bi"></i></a> 289</div> 290 </div> <!-- /container-fluid --> 291 </nav> 292</header> 293<!-- content --> 294<div id="quarto-content" class="quarto-container page-columns page-rows-contents page-layout-article page-navbar"> 295<!-- sidebar --> 296<!-- margin-sidebar --> 297 298<!-- main --> 299<main class="content" id="quarto-document-content"> 300 301 302<header id="title-block-header" class="quarto-title-block default"> 303<div class="quarto-title"> 304<h1 class="title">Resume</h1> 305</div> 306 307 308 309<div class="quarto-title-meta"> 310 311 312 313 314 </div> 315 316 317 318</header> 319 320 321<div class="d-flex gap-2 mb-3"> 322<p><a href="https://gitlab.com/dantonnoriega/dantonnoriega.gitlab.io/-/raw/main/resume/danton-noriega-resume-single_2026.pdf?inline=true" type="button" class="btn btn-primary"><i class="bi bi-file-earmark-pdf-fill"></i> View </a></p> 323<p><a href="https://gitlab.com/dantonnoriega/dantonnoriega.gitlab.io/-/raw/main/resume/danton-noriega-resume-single_2026.pdf?inline=false" role="button" class="btn btn-info"><i class="bi bi-cloud-download-fill"></i> Download </a></p> 324</div> 325<!-- ------------------------------------------------------------------------ --> 326<section id="experience" class="level3"> 327<h3 class="anchored" data-anchor-id="experience">EXPERIENCE</h3> 328<section id="microsoft-redmond-wa-current" class="level4"> 329<h4 class="anchored" data-anchor-id="microsoft-redmond-wa-current"><strong>Microsoft</strong> | Redmond, WA <em>(Current)</em></h4> 330<ul> 331<li><strong>Principal Data Scientist (CoreAI)</strong> <em>(Nov 2025 - Present)</em> 332<ul> 333<li>Forecast GitHub Copilot LLM traffic to guide third-party capacity planning</li> 334<li>Run what-if scenarios to confirm capacity plans and size new model launches</li> 335<li>Build agents that turn fast-changing repo metadata into maintained dimension tables</li> 336</ul></li> 337</ul> 338</section> 339<section id="apple-cupertino-ca-2017---2025" class="level4"> 340<h4 class="anchored" data-anchor-id="apple-cupertino-ca-2017---2025"><strong>Apple</strong> | Cupertino, CA <em>(2017 - 2025)</em></h4> 341<ul> 342<li><strong>Staff Data Scientist (Engineering)</strong> <em>(Oct 2023 - Oct 2025)</em> 343<ul> 344<li>Forecasted demand for Private Cloud Compute, Appleâs GPU infrastru
344cture for remote AI workloads</li> 345<li>Defined platform usage metrics that drove engineering and capacity decisions</li> 346<li>Worked with SREs and platform engineers to plan regional GPU deployments</li> 347<li>Built demand models from device growth, feature adoption, and latency data</li> 348<li>Investigated demand spikes and explained what changed and why</li> 349<li>Estimated workloads for new AI features using seed performance data before launch</li> 350</ul></li> 351<li><strong>Senior Data Science Manager (Business Operations)</strong> <em>(Oct 2021 - Sep 2024)</em> 352<ul> 353<li>Managed 4 data scientists and 5 contractors focused on cloud infrastructure costs</li> 354<li>Found expensive workloads and recommended fixes, cutting costs even as usage grew</li> 355<li>Mentored junior scientists, recruited new hires, and led cross-team projects</li> 356<li>Developed R packages, reviewed code, and advised on statistical methods</li> 357<li>Pushed for better documentation, reproducibility, and technical pragmatism</li> 358</ul></li> 359<li><strong>Data Science Manager (Finance)</strong> <em>(Oct 2020 - Sep 2021)</em> 360<ul> 361<li>Led a data science team analyzing infrastructure costs across finance and engineering</li> 362</ul></li> 363<li><strong>Senior Data Scientist (Finance)</strong> <em>(Oct 2018 - Sep 2020)</em> 364<ul> 365<li>Modeled storage growth to inform leadership infrastructure investment decisions</li> 366<li>Deployed time-series forecasts, dashboards, and reports used across finance and engineering</li> 367<li>Used difference-in-differences to estimate causal impact of service migrations on storage</li> 368<li>Authored 10+ R packages for telemetry and infrastructure data (e.g. <em>graphiter</em>, <em>hubbler</em>)</li> 369<li>Led recruiting, grew team from 1 to 7 data scientists</li> 370</ul></li> 371<li><strong>Data Scientist (Finance)</strong> <em>(Nov 2017 - Sep 2018)</em> 372<ul> 373<li>Modeled iCloud storage growth and its long-term costs</li> 374</ul></li> 375</ul> 376</section> 377<section id="transloc-durham-nc-2016" class="level4"> 378<h4 class="anchored" data-anchor-id="transloc-durham-nc-2016"><strong>Transloc</strong> | Durham, NC <em>(2016)</em></h4> 379<ul> 380<li><strong>Data Scientist</strong> <em>(Sept 2016 - Dec 2016)</em> 381<ul> 382<li>Worked part-time, refining metrics available to the product team into understandable, actionable information using R</li> 383</ul></li> 384<li><strong>Data Science Intern</strong> <em>(May 2016 - Aug 2016)</em> 385<ul> 386<li>Developed products and packages that simplify working with and understanding transit data. Learned and experimented with implementing agile development philosophy for data science</li> 387</ul></li> 388</ul> 389</section> 390<section id="duke-university-durham-nc-2015---2017" class="level4"> 391<h4 class="anchored" data-anchor-id="duke-university-durham-nc-2015---2017"><strong>Duke University</strong> | Durham, NC <em>(2015 - 2017)</em></h4> 392<ul> 393<li><strong>Research Assistant</strong>, Durham Childrenâs Data Center <em>(Jan 2017 â May 2017)</em> 394<ul> 395<li>Analyzed Durham County Social Services data for DCDC research projects with Dr. Ken Dodge, Dr. Beth Gifford, and Dr. Anna Gassman-Pines</li> 396</ul></li> 397<li><strong>Research Assistant</strong>, Duke-UNC BECR Center <em>(Jan 2015 â May 2016)</em> 398<ul> 399<li>Investigated food purchasing behavior, food-related health outcomes, and food assistance policy (SNAP/WIC). Uncovered trends to help BECR design behavioral nudges for improving food choices. Helped write papers and proposals, providing analytical results (graphics, tables, etc.)</li> 400</ul></li> 401<li><strong>Teaching Assistant</strong>, Sanford School of Public Policy <em>(Spring 2015)</em> 402<ul> 403<li>Co-taught <a href="https://github.com/dantonnoriega/PubPol590-Sp15"><em>PubPol 590: Applied Big Data Science Energy Data Analytics and Policy</em></a> with Dr. Matthew Harding. Students learned introductory causal inference theory and data analysis with large datasets using Python. Designed homework assignments, projects, and exams. Goal was for students to finish with capacity to do basic energy company consulting</li> 404</ul></li> 405</ul> 406<!-- ------------------------------------------------------------------------ --> 407</section> 408</section> 409<section id="education" class="level3"> 410<h3 class="anchored" data-anchor-id="education">EDUCATION</h3> 411<ul> 412<li><strong>Ph.D. Public Policy & Economics</strong> â <em>Aug 2019</em><br> 413<em>Duke University, Sanford School of Public Policy</em> (Durham, NC)</li> 414<li><strong>M.A. Economics</strong> â <em>Feb 2013</em><br> 415<em>Georgetown University</em> (Washington, DC)</li> 416<li><strong>M.S. Applied Statistics</strong> â <em>May 2011</em><br> 417<em>California State University at Long Beach</em> (Long Beach, CA)</li> 418<li><strong>B.S. Applied & Computational Mathematics</strong> â <em>Aug 2006</em><br> 419<em>University of California at Irvine</em> (Irvine, CA) <em>Orange Coast Community College</em> (Costa Mesa, CA)</li> 420</ul> 421<!-- ------------------------------------------------------------------------ --> 422</section> 423<section id="programming" class="level3"> 424<h3 class="anchored" data-anchor-id="programming">PROGRAMMING</h3> 425<ul> 426<li><strong>R</strong> â Expert. 13+ years of experience. First love. CRAN package author and contributor.</li> 427<li><strong>Python</strong> â Advanced. 7+ years. Current language. Pipelines, ETL (PySpark), agents. Taught courses with it. ⥠polars.</li> 428<li><strong>SQL</strong> â Expert. 10+ years. Connoisseur of PostgreSQL, Presto/Trino, and HiveQL docs. Never nester.</li> 429<li><strong>bash</strong> â Expert user, proficient developer. 10+ years. Mostly for processing raw text files. CLIs > GUIs.</li> 430<li><strong>LLMs</strong> â Developer and daily user. 3+ years. Built production agents; Claude preferred for coding.</li> 431<li><strong>Others</strong> â dbt, git, docker. Dabbled with Julia, Stan, and Scala. Reluctantly capable analytics engineer.</li> 432</ul> 433<!-- ------------------------------------------------------------------------ --> 434</section> 435<section id="packages" class="level3"> 436<h3 class="anchored" data-anchor-id="packages">PACKAGES</h3> 437<ul> 438<li><a href="https://github.com/ropenscilabs/gtfsr/">gtfsr</a> â for mapping and validating GTFS data. 439<ul> 440<li>superseded by <a href="https://cran.r-project.org/web/packages/tidytransit/index.html">tidytransit</a></li> 441</ul></li> 442</ul> 443<!-- ------------------------------------------------------------------------ --> 444</section> 445<section id="dissertation" class="level3"> 446<h3 class="anchored" data-anchor-id="dissertation">DISSERTATION</h3> 447<ul> 448<li><em>âDoubled SNAP Dollars and Nudges: An Analysis of Two Pilot Programs Aimed at Increasing the Purchase of Healthy Foodsâ</em> 449<ul> 450<li>My dissertation used difference-in-difference-in-differences models and randomized controlled trials to measure the economic impacts of food policy interventions using transaction-level data from grocery stores and convenience stores. I analyzed controlled experiments to test hypotheses about consumer behavior and provided evidence-based recommendations to policymakers based on causal inference methods.</li> 451<li>The first pilot program was a financial incentive called âDouble Up Food Bucksâ that targeted SNAP participants, encouraging fresh produce purchases by effectively doubling purchasing power. The second pilot program consisted of three behavioral nudges designed to increase banana purchases in convenience store environments.</li> 452</ul></li> 453</ul> 454<!-- ------------------------------------------------------------------------ --> 455</section> 456<section id="awards-and-honors" class="level3"> 457<h3 class="anchored" data-anchor-id="awards-and-honors">AWARDS AND HONORS</h3> 458<ul> 459<li><strong>Merit Based Fellowship (Economics)</strong>, Georgetown University <em>(2011 â 2015)</em></li> 460<li><strong>2010 STIPDG Outstanding Intern Award</strong>, US Department of Transportation <em>(Summer 2010)</em></li> 461<li><strong>Fletcher Jones Fellowship</strong>, University of California at Irvine (Awarded but chose not to pursue Ph.D.) <em>(Fall 2006)</em></li> 462<li><strong>Deanâs Honor List</strong>, University of California at Irvine <em>(Winter 2005 â Spring 2006)</em></li> 463<li><strong>Early Transfer (Academic Excellence)</strong>, Orange Coast College to UCI <em>(Winter 2005)</em></li> 464<li><strong>Presidentâs List for Academic Excellence</strong>, Orange Coast College <em>(Fall 2003 â Fall 2004)</em></li> 465<li><strong>Community College Scholarship Recipient</strong>, Hispanic Education Endowment Fund (HEEF) <em>(Fall 2004)</em></li> 466</ul> 467<!-- ------------------------------------------------------------------------ --> 468</section> 469<section id="fun-facts" class="level3"> 470<h3 class="anchored" data-anchor-id="fun-facts">FUN FACTS</h3> 471<ul> 472<li>Dual citizen of Chile and the US</li> 473<li>Native Spanish-speaker</li> 474<li>Songwriter and lead vocalist in a <a href="https://open.spotify.com/artist/4cM5qMjOXzNK3bjYVbTr7e">SoCal pop punk band</a></li> 475<li>Goaltimate (aging ultimate frisbee) player</li> 476<li>Former AmeriCorps NCCC Team Leader</li> 477<li>Cooks a mean kimchi & onion frittata</li> 478</ul> 479 480 481</section> 482 483</main> <!-- /main -->
484<script id="quarto-html-after-body" type="application/javascript"> 485 window.document.addEventListener("DOMContentLoaded", function (event) { 486 // Ensure there is a toggle, if there isn't float one in the top right 487 if (window.document.querySelector('.quarto-color-scheme-toggle') === null) { 488 const a = window.document.createElement('a'); 489 a.classList.add('top-right'); 490 a.classList.add('quarto-color-scheme-toggle'); 491 a.href = ""; 492 a.onclick = function() { try { window.quartoToggleColorScheme(); } catch {} return false; }; 493 const i = window.document.createElement("i"); 494 i.classList.add('bi'); 495 a.appendChild(i); 496 window.document.body.appendChild(a); 497 } 498 setColorSchemeToggle(hasAlternateSentinel()) 499 const icon = "î§"; 500 const anchorJS = new window.AnchorJS(); 501 anchorJS.options = { 502 placement: 'right', 503 icon: icon 504 }; 505 anchorJS.add('.anchored'); 506 const isCodeAnnotation = (el) => { 507 for (const clz of el.classList) { 508 if (clz.startsWith('code-annotation-')) { 509 return true; 510 } 511 } 512 return false; 513 } 514 const onCopySuccess = function(e) { 515 // button target 516 const button = e.trigger; 517 // don't keep focus 518 button.blur(); 519 // flash "checked" 520 button.classList.add('code-copy-button-checked'); 521 var currentTitle = button.getAttribute("title"); 522 button.setAttribute("title", "Copied!"); 523 let tooltip; 524 if (window.bootstrap) { 525 button.setAttribute("data-bs-toggle", "tooltip"); 526 button.setAttribute("data-bs-placement", "left"); 527 button.setAttribute("data-bs-title", "Copied!"); 528 tooltip = new bootstrap.Tooltip(button, 529 { trigger: "manual", 530 customClass: "code-copy-button-tooltip", 531 offset: [0, -8]}); 532 tooltip.show(); 533 } 534 setTimeout(function() { 535 if (tooltip) { 536 tooltip.hide(); 537 button.removeAttribute("data-bs-title"); 538 button.removeAttribute("data-bs-toggle"); 539 button.removeAttribute("data-bs-placement"); 540 } 541 button.setAttribute("title", currentTitle); 542 button.classList.remove('code-copy-button-checked'); 543 }, 1000); 544 // clear code selection 545 e.clearSelection(); 546 } 547 const getTextToCopy = function(trigger) { 548 const outerScaffold = trigger.parentElement.cloneNode(true); 549 const codeEl = outerScaffold.querySelector('code'); 550 for (const childEl of codeEl.children) { 551 if (isCodeAnnotation(childEl)) { 552 childEl.remove(); 553 } 554 } 555 return codeEl.innerText; 556 } 557 const clipboard = new window.ClipboardJS('.code-copy-button:not([data-in-quarto-modal])', { 558 text: getTextToCopy 559 }); 560 clipboard.on('success', onCopySuccess); 561 if (window.document.getElementById('quarto-embedded-source-code-modal')) { 562 const clipboardModal = new window.ClipboardJS('.code-copy-button[data-in-quarto-modal]', { 563 text: getTextToCopy, 564 container: window.document.getElementById('quarto-embedded-source-code-modal') 565 }); 566 clipboardModal.on('success', onCopySuccess); 567 } 568 var localhostRegex = new RegExp(/^(?:http|https):\/\/localhost\:?[0-9]*\//); 569 var mailtoRegex = new RegExp(/^mailto:/); 570 var filterRegex = new RegExp("https:\/\/danton\.codes"); 571 var isInternal = (href) => { 572 return filterRegex.test(href) || localhostRegex.test(href) || mailtoRegex.test(href); 573 } 574 // Inspect non-navigation links and adorn them if external 575 var links = window.document.querySelectorAll('a[href]:not(.nav-link):not(.navbar-brand):not(.toc-action):not(.sidebar-link):not(.sidebar-item-toggle):not(.pagination-link):not(.no-external):not([aria-hidden]):not(.dropdown-item):not(.quarto-navigation-tool):not(.about-link)'); 576 for (var i=0; i<links.length; i++) { 577 const link = links[i]; 578 if (!isInternal(link.href)) { 579 // undo the damage that might have been done by quarto-nav.js in the case of 580 // links that we want to consider external 581 if (link.dataset.originalHref !== undefined) { 582 link.href = link.dataset.originalHref; 583 } 584 } 585 } 586 function tippyHover(el, contentFn, onTriggerFn, onUntriggerFn) { 587 const config = { 588 allowHTML: true, 589 maxWidth: 500, 590 delay: 100,
591 arrow: false, 592 appendTo: function(el) { 593 return el.parentElement; 594 }, 595 interactive: true, 596 interactiveBorder: 10, 597 theme: 'quarto', 598 placement: 'bottom-start', 599 }; 600 if (contentFn) { 601 config.content = contentFn; 602 } 603 if (onTriggerFn) { 604 config.onTrigger = onTriggerFn; 605 } 606 if (onUntriggerFn) { 607 config.onUntrigger = onUntriggerFn; 608 } 609 window.tippy(el, config); 610 } 611 const noterefs = window.document.querySelectorAll('a[role="doc-noteref"]'); 612 for (var i=0; i<noterefs.length; i++) { 613 const ref = noterefs[i]; 614 tippyHover(ref, function() { 615 // use id or data attribute instead here 616 let href = ref.getAttribute('data-footnote-href') || ref.getAttribute('href'); 617 try { href = new URL(href).hash; } catch {} 618 const id = href.replace(/^#\/?/, ""); 619 const note = window.document.getElementById(id); 620 if (note) { 621 return note.innerHTML; 622 } else { 623 return ""; 624 } 625 }); 626 } 627 const xrefs = window.document.querySelectorAll('a.quarto-xref'); 628 const processXRef = (id, note) => { 629 // Strip column container classes 630 const stripColumnClz = (el) => { 631 el.classList.remove("page-full", "page-columns"); 632 if (el.children) { 633 for (const child of el.children) { 634 stripColumnClz(child); 635 } 636 } 637 } 638 stripColumnClz(note) 639 if (id === null || id.startsWith('sec-')) { 640 // Special case sections, only their first couple elements 641 const container = document.createElement("div"); 642 if (note.children && note.children.length > 2) { 643 container.appendChild(note.children[0].cloneNode(true)); 644 for (let i = 1; i < note.children.length; i++) { 645 const child = note.children[i]; 646 if (child.tagName === "P" && child.innerText === "") { 647 continue; 648 } else { 649 container.appendChild(child.cloneNode(true)); 650 break; 651 } 652 } 653 if (window.Quarto?.typesetMath) { 654 window.Quarto.typesetMath(container); 655 } 656 return container.innerHTML 657 } else { 658 if (window.Quarto?.typesetMath) { 659 window.Quarto.typesetMath(note); 660 } 661 return note.innerHTML; 662 } 663 } else { 664 // Remove any anchor links if they are present 665 const anchorLink = note.querySelector('a.anchorjs-link'); 666 if (anchorLink) { 667 anchorLink.remove(); 668 } 669 if (window.Quarto?.typesetMath) { 670 window.Quarto.typesetMath(note); 671 } 672 if (note.classList.contains("callout")) { 673 return note.outerHTML; 674 } else { 675 return note.innerHTML; 676 } 677 } 678 } 679 for (var i=0; i<xrefs.length; i++) { 680 const xref = xrefs[i]; 681 tippyHover(xref, undefined, function(instance) { 682 instance.disable(); 683 let url = xref.getAttribute('href'); 684 let hash = undefined; 685 if (url.startsWith('#')) { 686 hash = url; 687 } else { 688 try { hash = new URL(url).hash; } catch {} 689 } 690 if (hash) { 691 const id = hash.replace(/^#\/?/, ""); 692 const note = window.document.getElementById(id); 693 if (note !== null) { 694 try { 695 const html = processXRef(id, note.cloneNode(true)); 696 instance.setContent(html); 697 } finally { 698 instance.enable(); 699 instance.show(); 700 } 701 } else { 702 // See if we can fetch this 703 fetch(url.split('#')[0]) 704 .then(res => res.text()) 705 .then(html => { 706 const parser = new DOMParser(); 707 const htmlDoc = parser.parseFromString(html, "text/html"); 708 const note = htmlDoc.getElementById(id); 709 if (note !== null) { 710 const html = processXRef(id, note); 711 instance.setContent(html); 712 } 713 }).finally(() => { 714 instance.enable(); 715 instance.show(); 716 }); 717 } 718 } else { 719 // See if we can fetch a full url (with no hash to target)
720 // This is a special case and we should probably do some content thinning / targeting 721 fetch(url) 722 .then(res => res.text()) 723 .then(html => { 724 const parser = new DOMParser(); 725 const htmlDoc = parser.parseFromString(html, "text/html"); 726 const note = htmlDoc.querySelector('main.content'); 727 if (note !== null) { 728 // This should only happen for chapter cross references 729 // (since there is no id in the URL) 730 // remove the first header 731 if (note.children.length > 0 && note.children[0].tagName === "HEADER") { 732 note.children[0].remove(); 733 } 734 const html = processXRef(null, note); 735 instance.setContent(html); 736 } 737 }).finally(() => { 738 instance.enable(); 739 instance.show(); 740 }); 741 } 742 }, function(instance) { 743 }); 744 } 745 let selectedAnnoteEl; 746 const selectorForAnnotation = ( cell, annotation) => { 747 let cellAttr = 'data-code-cell="' + cell + '"'; 748 let lineAttr = 'data-code-annotation="' + annotation + '"'; 749 const selector = 'span[' + cellAttr + '][' + lineAttr + ']'; 750 return selector; 751 } 752 const selectCodeLines = (annoteEl) => { 753 const doc = window.document; 754 const targetCell = annoteEl.getAttribute("data-target-cell"); 755 const targetAnnotation = annoteEl.getAttribute("data-target-annotation"); 756 const annoteSpan = window.document.querySelector(selectorForAnnotation(targetCell, targetAnnotation)); 757 const lines = annoteSpan.getAttribute("data-code-lines").split(","); 758 const lineIds = lines.map((line) => { 759 return targetCell + "-" + line; 760 }) 761 let top = null; 762 let height = null; 763 let parent = null; 764 if (lineIds.length > 0) { 765 //compute the position of the single el (top and bottom and make a div) 766 const el = window.document.getElementById(lineIds[0]); 767 top = el.offsetTop; 768 height = el.offsetHeight; 769 parent = el.parentElement.parentElement; 770 if (lineIds.length > 1) { 771 const lastEl = window.document.getElementById(lineIds[lineIds.length - 1]); 772 const bottom = lastEl.offsetTop + lastEl.offsetHeight; 773 height = bottom - top; 774 } 775 if (top !== null && height !== null && parent !== null) { 776 // cook up a div (if necessary) and position it 777 let div = window.document.getElementById("code-annotation-line-highlight"); 778 if (div === null) { 779 div = window.document.createElement("div"); 780 div.setAttribute("id", "code-annotation-line-highlight"); 781 div.style.position = 'absolute'; 782 parent.appendChild(div); 783 } 784 div.style.top = top - 2 + "px"; 785 div.style.height = height + 4 + "px"; 786 div.style.left = 0; 787 let gutterDiv = window.document.getElementById("code-annotation-line-highlight-gutter"); 788 if (gutterDiv === null) { 789 gutterDiv = window.document.createElement("div"); 790 gutterDiv.setAttribute("id", "code-annotation-line-highlight-gutter"); 791 gutterDiv.style.position = 'absolute'; 792 const codeCell = window.document.getElementById(targetCell); 793 const gutter = codeCell.querySelector('.code-annotation-gutter'); 794 gutter.appendChild(gutterDiv); 795 } 796 gutterDiv.style.top = top - 2 + "px"; 797 gutterDiv.style.height = height + 4 + "px"; 798 } 799 selectedAnnoteEl = annoteEl; 800 } 801 }; 802 const unselectCodeLines = () => { 803 const elementsIds = ["code-annotation-line-highlight", "code-annotation-line-highlight-gutter"]; 804 elementsIds.forEach((elId) => { 805 const div = window.document.getElementById(elId); 806 if (div) { 807 div.remove(); 808 } 809 }); 810 selectedAnnoteEl = undefined; 811 }; 812 // Handle positioning of the toggle 813 window.addEventListener( 814 "resize", 815 throttle(() => { 816 elRect = undefined; 817 if (selectedAnnoteEl) { 818 selectCodeLines(selectedAnnoteEl); 819 } 820 }, 10) 821 ); 822 function throttle(fn, ms) { 823 let throttle = false;
824 let timer; 825 return (...args) => { 826 if(!throttle) { // first call gets through 827 fn.apply(this, args); 828 throttle = true; 829 } else { // all the others get throttled 830 if(timer) clearTimeout(timer); // cancel #2 831 timer = setTimeout(() => { 832 fn.apply(this, args); 833 timer = throttle = false; 834 }, ms); 835 } 836 }; 837 } 838 // Attach click handler to the DT 839 const annoteDls = window.document.querySelectorAll('dt[data-target-cell]'); 840 for (const annoteDlNode of annoteDls) { 841 annoteDlNode.addEventListener('click', (event) => { 842 const clickedEl = event.target; 843 if (clickedEl !== selectedAnnoteEl) { 844 unselectCodeLines(); 845 const activeEl = window.document.querySelector('dt[data-target-cell].code-annotation-active'); 846 if (activeEl) { 847 activeEl.classList.remove('code-annotation-active'); 848 } 849 selectCodeLines(clickedEl); 850 clickedEl.classList.add('code-annotation-active'); 851 } else { 852 // Unselect the line 853 unselectCodeLines(); 854 clickedEl.classList.remove('code-annotation-active'); 855 } 856 }); 857 } 858 const findCites = (el) => { 859 const parentEl = el.parentElement; 860 if (parentEl) { 861 const cites = parentEl.dataset.cites; 862 if (cites) { 863 return { 864 el, 865 cites: cites.split(' ') 866 }; 867 } else { 868 return findCites(el.parentElement) 869 } 870 } else { 871 return undefined; 872 } 873 }; 874 var bibliorefs = window.document.querySelectorAll('a[role="doc-biblioref"]'); 875 for (var i=0; i<bibliorefs.length; i++) { 876 const ref = bibliorefs[i]; 877 const citeInfo = findCites(ref); 878 if (citeInfo) { 879 tippyHover(citeInfo.el, function() { 880 var popup = window.document.createElement('div'); 881 citeInfo.cites.forEach(function(cite) { 882 var citeDiv = window.document.createElement('div'); 883 citeDiv.classList.add('hanging-indent'); 884 citeDiv.classList.add('csl-entry'); 885 var biblioDiv = window.document.getElementById('ref-' + cite); 886 if (biblioDiv) { 887 citeDiv.innerHTML = biblioDiv.innerHTML; 888 } 889 popup.appendChild(citeDiv); 890 }); 891 return popup.innerHTML; 892 }); 893 } 894 } 895 }); 896 </script>
896 897</div> <!-- /content --> 898<footer class="footer"> 899 <div class="nav-footer"> 900 <div class="nav-footer-left"> 901 902 </div> 903 <div class="nav-footer-center"> 904<p>âï¸ copyright © 2026. made with â¤ï¸ by danton.</p> 905</div> 906 <div class="nav-footer-right"> 907 908 </div> 909 </div> 910</footer> 911 912 913 914 915</body></html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.