CINXE.COM

Pinterest Engineering Blog - Medium

<!DOCTYPE html><html xmlns:cc="http://creativecommons.org/ns#"><head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# medium-com: http://ogp.me/ns/fb/medium-com#"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=contain"><title>Pinterest Engineering Blog - Medium</title><link rel="canonical" href="https://medium.com/pinterest-engineering"><link id="feedLink" rel="alternate" type="application/rss+xml" title="RSS" href="https://medium.com/feed/pinterest-engineering"><meta name="robots" content="index,follow"><meta name="title" content="Pinterest Engineering Blog - Medium"><meta name="referrer" content="unsafe-url"><meta name="description" content="Inventive engineers building the first visual discovery engine, 300 billion ideas and counting."><meta name="keywords" content="ENGINEERING, PINTEREST, VISUAL SEARCH, MACHINE LEARNING, COMPUTER VISION"><meta name="theme-color" content="#000000"><meta property="og:title" content="Pinterest Engineering Blog – Medium"><meta property="twitter:title" content="Pinterest Engineering Blog – Medium"><meta property="og:url" content="https://medium.com/pinterest-engineering"><meta property="og:image" content="https://cdn-images-1.medium.com/max/1200/1*XiUFDZgSFl6n-MM2yXFifQ.png"><meta property="fb:app_id" content="542599432471018"><meta property="og:description" content="Inventive engineers building the first visual discovery engine, 300 billion ideas and counting."><meta name="twitter:description" content="Inventive engineers building the first visual discovery engine, 300 billion ideas and counting."><meta name="twitter:image:src" content="https://cdn-images-1.medium.com/max/1200/1*XiUFDZgSFl6n-MM2yXFifQ.png"><meta property="og:type" content="medium-com:collection"><meta name="twitter:card" content="summary_large_image"><meta property="medium-com:creator" content="https://medium.com/@chrislloyd"><meta name="twitter:site" content="@Medium"><meta property="og:site_name" content="Medium"><meta name="twitter:app:name:iphone" content="Medium"><meta name="twitter:app:id:iphone" content="828256236"><meta name="twitter:app:url:iphone" content="medium://pinterest-engineering"><meta property="al:ios:app_name" content="Medium"><meta property="al:ios:app_store_id" content="828256236"><meta property="al:android:package" content="com.medium.reader"><meta property="al:android:app_name" content="Medium"><meta property="al:ios:url" content="medium://pinterest-engineering"><meta property="al:android:url" content="medium://pinterest-engineering"><meta property="al:web:url" content="https://medium.com/pinterest-engineering"><link rel="search" type="application/opensearchdescription+xml" title="Medium" href="/osd.xml" /><link rel="alternate" href="android-app://com.medium.reader/https/medium.com/pinterest-engineering" /><script type="application/ld+json">{"@context": "http://schema.org", "@graph": [{"@type": "WebSite", "url": "https:\/\/medium.com", "name": "Medium", "alternateName": "Medium is a community of readers and writers offering unique perspectives on ideas large and small."},{"@type": "Organization", "url": "https:\/\/medium.com\/pinterest-engineering", "name": "Pinterest Engineering Blog"}]}</script><link rel="stylesheet" href="https://cdn-static-1.medium.com/_/fp/css/main-branding-base.ouwh4uMviI3QQWIjxRhkHA.12.css"><script>!function(n,e){var t,o,i,c=[],f={passive:!0,capture:!0},r=new Date,a="pointerup",u="pointercancel";function p(n,c){t||(t=c,o=n,i=new Date,w(e),s())}function s(){o>=0&&o<i-r&&(c.forEach(function(n){n(o,t)}),c=[])}function l(t){if(t.cancelable){var o=(t.timeStamp>1e12?new Date:performance.now())-t.timeStamp;"pointerdown"==t.type?function(t,o){function i(){p(t,o),r()}function c(){r()}function r(){e(a,i,f),e(u,c,f)}n(a,i,f),n(u,c,f)}(o,t):p(o,t)}}function w(n){["click","mousedown","keydown","touchstart","pointerdown"].forEach(function(e){n(e,l,f)})}w(n),self.perfMetrics=self.perfMetrics||{},self.perfMetrics.onFirstInputDelay=function(n){c.push(n),s()}}(addEventListener,removeEventListener);</script><script>document.domain = document.domain;</script><script>if (window.top !== window.self) window.location = 'about:blank';var OB_startTime = new Date().getTime(); var OB_loadErrors = []; function _onerror(e) { OB_loadErrors.push(e) }; if (document.addEventListener) document.addEventListener("error", _onerror, true); else if (document.attachEvent) document.attachEvent("onerror", _onerror); function _asyncScript(u) {var d = document, f = d.getElementsByTagName("script")[0], s = d.createElement("script"); s.type = "text/javascript"; s.async = true; s.src = u; f.parentNode.insertBefore(s, f);}function _asyncStyles(u) {var d = document, f = d.getElementsByTagName("script")[0], s = d.createElement("link"); s.rel = "stylesheet"; s.href = u; f.parentNode.insertBefore(s, f); return s}(new Image()).src = "/_/stat?event=pixel.load&origin=" + encodeURIComponent(location.origin);</script><script>window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date; ga("create", "G-7JY7T788PK", "auto", {"allowLinker": true, "legacyCookieDomain": window.location.hostname});ga("send", "pageview");</script><script async src="https://www.google-analytics.com/analytics.js"></script><script>(function () {var height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; document.write("<style>section.section-image--fullBleed.is-backgrounded {padding-top: " + Math.round(1.1 * height) + "px;}section.section-image--fullScreen.is-backgrounded, section.section-image--coverFade.is-backgrounded {min-height: " + height + "px; padding-top: " + Math.round(0.5 * height) + "px;}.u-height100vh {height: " + height + "px !important;}.u-height110vh {height: " + Math.round(1.1 * height) + "px !important;}.u-minHeight100vh {min-height: " + height + "px !important;}.u-maxHeight100vh {max-height: " + height + "px !important;}section.section-image--coverFade {height: " + height + "px;}.section-aspectRatioViewportPlaceholder, .section-aspectRatioViewportCropPlaceholder {max-height: " + height + "px;}.section-aspectRatioViewportBottomSpacer, .section-aspectRatioViewportBottomPlaceholder {max-height: " + Math.round(0.5 * height) + "px;}.zoomable:before {top: " + (-1 * height) + "px; left: " + (-1 * width) + "px; padding: " + height + "px " + width + "px;}</style>");})()</script><!--[if lt IE 9]><script charset="UTF-8" src="https://cdn-static-1.medium.com/_/fp/js/shiv.RI2ePTZ5gFmMgLzG5bEVAA.12.js"></script><![endif]--><link rel="icon" href="https://miro.medium.com/v2/5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19" class="js-favicon"><link rel="apple-touch-icon" sizes="152x152" href="https://cdn-images-1.medium.com/fit/c/304/304/1*XiUFDZgSFl6n-MM2yXFifQ.png"><link rel="apple-touch-icon" sizes="120x120" href="https://cdn-images-1.medium.com/fit/c/240/240/1*XiUFDZgSFl6n-MM2yXFifQ.png"><link rel="apple-touch-icon" sizes="76x76" href="https://cdn-images-1.medium.com/fit/c/152/152/1*XiUFDZgSFl6n-MM2yXFifQ.png"><link rel="apple-touch-icon" sizes="60x60" href="https://cdn-images-1.medium.com/fit/c/120/120/1*XiUFDZgSFl6n-MM2yXFifQ.png"><link rel="mask-icon" href="https://cdn-static-1.medium.com/_/fp/icons/monogram-mask.KPLCSFEZviQN0jQ7veN2RQ.12.svg" color="#171717"></head><body itemscope class=" browser-ie os-windows v-unbound v-glyph v-glyph--m2-unbound-source-serif-pro is-noJs"><script>document.body.className = document.body.className.replace(/(^|\s)is-noJs(\s|$)/, "$1is-js$2")</script><div class="site-main" id="container"><div class="butterBar butterBar--error"></div><div class="surface"><div id="prerendered" class="screenContent"><div class="metabar u-clearfix js-metabar"><div class="branch-journeys-top"></div><div class="js-metabarMiddle metabar-inner u-marginAuto u-maxWidth1032 u-flexCenter u-justifyContentSpaceBetween u-height65 u-xs-height56 u-paddingHorizontal20"><div class="metabar-block u-flex1 u-flexCenter"><div class="js-metabarLogoLeft"><a href="https://medium.com/" data-log-event="home" class="siteNav-logo u-fillBlack u-flex0 u-flexCenter u-paddingTop0"><span class="svgIcon svgIcon--wordmarkMedium svgIcon--120x26px u-flex"><svg class="svgIcon-use" width="120" height="26" ><path d="M29.57 1.404l.036-.008V1.12h-7.27l-6.75 15.979-6.75-15.98H1.003v.278l.035.008c1.327.302 2 .752 2 2.374v18.993c0 1.623-.676 2.073-2.003 2.374L1 25.153v.279h5.315v-.278l-.035-.008c-1.327-.302-2-.751-2-2.374V4.88l8.67 20.552h.492l8.924-21.125V23.24c-.114 1.282-.782 1.677-1.983 1.95l-.036.009v.275h9.259V25.2l-.036-.008c-1.203-.274-1.886-.67-2-1.95l-.006-19.464h.006c0-1.622.674-2.072 2-2.374zm4.23 12.582c.15-3.412 1.367-5.875 3.41-5.918.629.01 1.157.219 1.568.62.872.852 1.282 2.634 1.219 5.298h-6.198zm-.092.962h10.85v-.046c-.03-2.61-.78-4.64-2.228-6.033-1.25-1.204-3.103-1.867-5.048-1.867h-.043c-1.01 0-2.248.246-3.13.693a7.316 7.316 0 00-2.623 2.086c-1.185 1.479-1.903 3.477-2.078 5.724a13.717 13.717 0 00-.04.755c-.004.195-.005.39-.001.587.117 5.087 2.846 9.153 7.692 9.153 4.254 0 6.73-3.132 7.348-7.336l-.312-.11c-1.085 2.259-3.034 3.628-5.252 3.461-3.028-.228-5.347-3.32-5.137-7.066m23.122 6.893c-.356.85-1.099 1.319-2.094 1.319-.995 0-1.905-.689-2.552-1.939-.694-1.342-1.06-3.24-1.06-5.487 0-4.678 1.445-7.704 3.68-7.704.937 0 1.674.468 2.026 1.284v12.527zm7.198 3.335c-1.327-.316-2-.787-2-2.492V0l-8.062 2.392v.293l.05-.004c1.111-.09 1.866.064 2.304.472.343.32.51.809.51 1.498v3.11C56.033 7.25 55.088 7 53.94 7c-2.326 0-4.453.987-5.986 2.779-1.599 1.867-2.444 4.42-2.444 7.38 0 5.287 2.584 8.84 6.43 8.84 2.25 0 4.06-1.242 4.888-3.336v2.811h7.233v-.29l-.035-.008zM70.94 3.085c0-1.65-1.236-2.896-2.875-2.896-1.632 0-2.908 1.272-2.908 2.896 0 1.624 1.278 2.896 2.908 2.896 1.64 0 2.875-1.245 2.875-2.896zm1.903 22.092c-1.327-.316-2-.787-2-2.492h-.006V7.055l-7.234 2.092v.284l.043.004c1.566.14 1.994.683 1.994 2.525v13.515h7.24v-.29l-.037-.008zm18.536 0c-1.327-.316-2-.787-2-2.492V7.055L82.49 9.078v.285l.04.004c1.28.136 1.65.71 1.65 2.56v9.88c-.426.85-1.227 1.356-2.196 1.39-1.573 0-2.439-1.07-2.439-3.012V7.055l-7.234 2.092v.284l.044.004c1.565.14 1.994.683 1.994 2.525v8.362a9.443 9.443 0 00.15 1.741l.13.57C75.243 24.845 76.848 26 79.362 26c2.129 0 3.996-1.328 4.818-3.405v2.885h7.233v-.291l-.034-.012zm28.102.298v-.291l-.035-.009c-1.44-.334-2.001-.964-2.001-2.248V12.295C117.445 8.98 115.597 7 112.5 7c-2.257 0-4.16 1.314-4.893 3.36-.582-2.168-2.257-3.36-4.734-3.36-2.175 0-3.88 1.156-4.612 3.11V7.056l-7.233 2.006v.286l.043.004c1.547.138 1.994.697 1.994 2.492v13.631h6.75v-.29l-.037-.01c-1.148-.271-1.519-.767-1.519-2.04V10.95c.304-.715.917-1.562 2.127-1.562 1.504 0 2.266 1.05 2.266 3.116v12.972h6.751v-.29l-.035-.01c-1.149-.271-1.52-.767-1.52-2.04V12.294a7.107 7.107 0 00-.095-1.21c.322-.777.97-1.696 2.23-1.696 1.524 0 2.265 1.02 2.265 3.116v12.972h7.233z"/></svg></span><span class="u-textScreenReader">Homepage</span></a></div><div class="u-paddingLeft10 u-sm-show r-paddingRight10"><a href="https://rsci.app.link/?%24canonical_url=https%3A%2F%2Fmedium.com/pinterest-engineering%3F~feature=LoMobileNavBar&~channel=ShowCollectionHome&~stage=m2">Open in app</a></div></div><div class="metabar-block u-flex0 u-flexCenter"><div class="u-flexCenter u-height65 u-xs-height56"><div class="buttonSet buttonSet--wide u-lineHeightInherit"><a class="button button--primary button--chromeless u-accentColor--buttonNormal is-inSiteNavBar u-xs-hide js-signInButton" href="https://medium.com/m/signin?redirect=https%3A%2F%2Fmedium.com%2Fpinterest-engineering%3Fsource%3Duser_profile_page---blogroll-------------------7b91bcea825---------------&amp;source=--------------------------nav_reg&amp;operation=login" data-action="sign-in-prompt" data-redirect="https://medium.com/pinterest-engineering?source=user_profile_page---blogroll-------------------7b91bcea825---------------" data-action-source="--------------------------nav_reg">Sign in</a><a class="button button--primary button--withChrome u-accentColor--buttonNormal is-inSiteNavBar js-signUpButton" href="https://medium.com/m/signin?redirect=https%3A%2F%2Fmedium.com%2Fpinterest-engineering%3Fsource%3Duser_profile_page---blogroll-------------------7b91bcea825---------------&amp;source=--------------------------nav_reg&amp;operation=register" data-action="sign-up-prompt" data-redirect="https://medium.com/pinterest-engineering?source=user_profile_page---blogroll-------------------7b91bcea825---------------" data-action-source="--------------------------nav_reg">Get started</a></div></div></div></div></div><div class="metabar metabar--spacer js-metabarSpacer u-height65 u-xs-height56"></div><div class="collectionHeader js-collectionHeaderContainer u-relative collectionHeader--layoutLarge collectionHeader--alignmentLeft collectionHeader--withLogo collectionHeader--withBackground collectionHeader--colorBehaviorSubtle collectionHeader--withNavigation collectionHeader--editorLayoutTitleAndLogo is-modeView"><div class="collectionHeader-aspectRatioTable"><div class="collectionHeader-aspectRatioContent u-backgroundSizeCover js-collectionHeaderBackground" style="background-image: url(&quot;https://cdn-images-1.medium.com/max/2400/1*kDAiebKM-qkprLo3uk5eHg.jpeg&quot;); background-position: 52.142857142857146% 98.93048128342247% !important;"><div class="collectionHeader-overlayBackground u-height100vh"></div><header class="collectionHeader-heroAndInlineNav u-borderBox u-maxWidth1072 u-paddingLeft20 u-paddingRight20 u-marginAuto u-foreground js-collectionHeader"><div class="collectionHeader-hero js-collectionHeaderHero u-clearfix u-imageSpectrum"><div class="collectionHeader-heroInner"><div class="collectionHeader-logo js-collectionHeaderLogo" style="max-width: 100px;"><a class="link u-baseColor--link" href="https://medium.com/pinterest-engineering" title="Go to Pinterest Engineering Blog" aria-label="Go to Pinterest Engineering Blog"><div class="u-relative u-marginAuto"><div style="padding-bottom: 100%"></div><img class="collectionHeader-logoImage js-collectionHeaderLogoImage" src="https://cdn-images-1.medium.com/max/200/1*dXsrUlUXbwyfZ9tiV9viUQ@2x.png" data-image-id="1*dXsrUlUXbwyfZ9tiV9viUQ@2x.png" data-width="200" data-height="200" /></div></a></div><div class="collectionHeader-nameAndDescription"><a class="link link--noUnderline u-baseColor--link" href="https://medium.com/pinterest-engineering" title="Go to Pinterest Engineering Blog" aria-label="Go to Pinterest Engineering Blog"><h1 class="collectionHeader-name js-collectionName u-foreground u-baseColor--textDark u-paddingBottom4 u-lineHeightTightest u-contentSansBold u-fontSize40 u-xs-fontSize32">Pinterest Engineering</h1></a><h2 class="collectionHeader-description js-collectionDescription u-foreground u-baseColor--textNormal u-contentSansRegular u-fontSize24 u-xs-fontSize18">Inventive engineers building the first visual discovery engine, 300 billion ideas and counting.</h2></div></div></div></header></div><div class="collectionHeader-aspectRatioCell"><div class="collectionHeader-aspectRatioFullWidth"></div></div></div><div class="collectionHeader-blockNav"><div class="u-borderBox u-maxWidth1072 u-paddingLeft20 u-paddingRight20 u-marginAuto"><nav class="collectionHeader-nav u-clearfix js-collectionHeaderNav u-lineHeight40 u-overflowHiddenY"><div class="buttonSet u-flex1 u-noWrap u-overflowX u-paddingBottom100 u-xs-marginRight15"><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/pinterest-engineering/medium-com-pinterest-engineering-espanol/home">en Español</a></li><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/pinterest-engineering/eng-culture/home">Eng Culture</a></li><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/pinterest-engineering/pinner-experience/home">Pinner UX</a></li><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/pinterest-engineering/creator-experience/home">Creator UX</a></li><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/pinterest-engineering/infra/home">Infras</a></li><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/pinterest-engineering/monetization/home">Monetization</a></li><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://medium.com/pinterest-engineering/trust-and-safety/home">Trust &amp; Safety</a></li><span class="u-borderLeft1 u-paddingLeft22 u-xs-paddingLeft12 u-baseColor--borderLight"></span><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0 is-external"><a class="link link--darkenOnHover u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://www.pinterestcareers.com?utm_source=medium&amp;utm_medium=navigation-link&amp;utm_campaign=medium-traffic" rel="nofollow noopener" target="_blank">Pinterest Careers</a></li></div><div class="buttonSet u-textAlignRight u-marginLeft18 u-flex0 u-noWrap"><label class="button button--small button--chromeless button--withIcon button--withSvgIcon inputGroup u-sm-hide metabar-predictiveSearch u-baseColor--buttonNormal u-baseColor--placeholderNormal" title="Search"><span class="svgIcon svgIcon--search svgIcon--25px u-baseColor--iconLight"><svg class="svgIcon-use" width="25" height="25" ><path d="M20.067 18.933l-4.157-4.157a6 6 0 10-.884.884l4.157 4.157a.624.624 0 10.884-.884zM6.5 11c0-2.62 2.13-4.75 4.75-4.75S16 8.38 16 11s-2.13 4.75-4.75 4.75S6.5 13.62 6.5 11z"/></svg></span><input class="js-predictiveSearchInput textInput textInput--rounded textInput--darkText u-baseColor--textNormal textInput--transparent" type="search" placeholder="Search" required="true" data-collection-id="4c5a5f6279b6" /></label><a class="button button--chromeless is-touchIconBlackPulse u-baseColor--buttonNormal button--withIcon button--withSvgIcon button--chromeless u-verticalAlignMiddle" href="https://twitter.com/PinterestEng" title="Visit “Pinterest Engineering Blog” on X" aria-label="Visit “Pinterest Engineering Blog” on X" rel="me" target="_blank"><span class="button-defaultState"><span class="svgIcon svgIcon--twitter svgIcon--25px"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M14.215 11.3l5.764-6.7h-1.366l-5.005 5.818L9.611 4.6H5l6.045 8.798L5 20.424h1.366l5.286-6.144 4.221 6.144h4.61L14.216 11.3zm-1.871 2.175l-.612-.876-4.874-6.97h2.098l3.933 5.625.613.876 5.112 7.312h-2.098l-4.172-5.966z" fill="#242424"/></svg></span></span></a><a class="button button--chromeless is-touchIconBlackPulse u-baseColor--buttonNormal button--withIcon button--withSvgIcon button--chromeless u-verticalAlignMiddle" href="//facebook.com/pinterestengineering" title="Visit “Pinterest Engineering Blog” on Facebook" aria-label="Visit “Pinterest Engineering Blog” on Facebook" rel="me" target="_blank"><span class="button-defaultState"><span class="svgIcon svgIcon--facebookFilled svgIcon--25px"><svg class="svgIcon-use" width="25" height="25" ><path d="M21 12.646C21 7.65 16.97 3.6 12 3.6s-9 4.05-9 9.046a9.026 9.026 0 007.59 8.924v-6.376H8.395V12.64h2.193v-1.88c0-2.186 1.328-3.375 3.267-3.375.93 0 1.728.07 1.96.1V9.77H14.47c-1.055 0-1.26.503-1.26 1.242v1.63h2.517l-.33 2.554H13.21V21.6c4.398-.597 7.79-4.373 7.79-8.954"/></svg></span></span></a><a class="button button--chromeless is-touchIconBlackPulse u-baseColor--buttonNormal button--withIcon button--withSvgIcon button--chromeless u-verticalAlignMiddle" href="https://instagram.com/lifeatpinterest" title="Visit “Pinterest Engineering Blog” on Instagram" aria-label="Visit “Pinterest Engineering Blog” on Instagram" rel="me" target="_blank"><span class="button-defaultState"><span class="svgIcon svgIcon--instagram svgIcon--25px"><svg class="svgIcon-use" width="25" height="25" ><path d="M12.497 5.531c2.27 0 2.536.01 3.433.05.83.038 1.279.176 1.579.294.398.156.681.338.978.635.297.296.482.58.634.978.115.3.257.749.294 1.578.04.897.05 1.164.05 3.434 0 2.27-.01 2.537-.05 3.434-.037.83-.176 1.278-.294 1.578a2.637 2.637 0 01-.634.979 2.61 2.61 0 01-.978.634c-.3.114-.749.256-1.579.293-.897.04-1.163.05-3.433.05-2.27 0-2.537-.01-3.434-.05-.83-.037-1.278-.175-1.579-.293a2.638 2.638 0 01-.978-.634 2.596 2.596 0 01-.634-.979c-.115-.3-.256-.748-.293-1.578-.04-.897-.051-1.164-.051-3.434 0-2.27.01-2.537.05-3.434.038-.83.176-1.278.294-1.578.155-.398.337-.682.634-.978a2.6 2.6 0 01.978-.635c.3-.114.75-.256 1.579-.293.897-.044 1.164-.05 3.434-.05zm0-1.531c-2.307 0-2.598.01-3.505.05-.904.041-1.521.186-2.06.395-.56.216-1.033.51-1.505.982a4.214 4.214 0 00-.982 1.504c-.209.54-.354 1.157-.394 2.064C4.01 9.9 4 10.19 4 12.497c0 2.307.01 2.597.05 3.504.041.904.186 1.521.395 2.064.216.56.51 1.033.982 1.505s.948.762 1.504.981c.54.21 1.157.355 2.064.395.908.04 1.195.05 3.505.05 2.31 0 2.597-.01 3.505-.05.904-.04 1.52-.186 2.064-.395a4.14 4.14 0 001.504-.981c.472-.472.762-.948.982-1.505.209-.54.354-1.157.394-2.064.04-.907.051-1.194.051-3.504s-.01-2.598-.05-3.505c-.041-.904-.186-1.521-.395-2.064a4.142 4.142 0 00-.982-1.505 4.215 4.215 0 00-1.504-.981c-.54-.21-1.157-.354-2.064-.395C15.094 4.01 14.804 4 12.497 4z"/><path d="M12.496 8.132a4.365 4.365 0 000 8.73 4.367 4.367 0 004.365-4.365 4.367 4.367 0 00-4.365-4.365zm0 7.198a2.833 2.833 0 110-5.666 2.833 2.833 0 010 5.666z"/><path d="M17.034 8.979a1.019 1.019 0 100-2.038 1.019 1.019 0 000 2.038z"/></svg></span></span></a><button class="button button--primary button--smallest u-noUserSelect button--withChrome u-accentColor--buttonNormal js-relationshipButton is-smallPill" data-action="sign-up-prompt" data-sign-in-action="toggle-follow-collection" data-requires-token="true" data-redirect="https://medium.com/_/subscribe/collection/pinterest-engineering" data-action-source="pub_header----4c5a5f6279b6----------------------follow_pub" data-collection-id="4c5a5f6279b6"><span class="button-label js-buttonLabel">Follow</span></button></div></nav></div></div></div><div class="u-marginBottom40 js-collectionStream"><div class="streamItem streamItem--section js-streamItem"><section class="u-marginTop30 u-xs-margin0 u-marginBottom15 u-maxWidth1032 u-sm-paddingLeft20 u-sm-paddingRight20 u-borderBox u-marginAuto"><div class="row u-marginTop30 u-marginLeftNegative12 u-marginRightNegative12"><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight15 u-size8of12" data-source="collection_home---4------0-----------------------" data-post-id="7e4c357ac527" data-index="0"><div class="u-lineHeightBase postItem u-marginRight3"><a href="https://medium.com/pinterest-engineering/change-data-capture-at-pinterest-7e4c357ac527?source=collection_home---4------0-----------------------" data-action="open-post" data-action-value="https://medium.com/pinterest-engineering/change-data-capture-at-pinterest-7e4c357ac527?source=collection_home---4------0-----------------------" class="u-block u-xs-height170 u-height350 u-width100pct u-floatLeft u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url(&quot;https://cdn-images-1.medium.com/max/2000/0*QsqFF3ZJ_vOR_y7i&quot;); background-position: 50% 50% !important;"><span class="u-textScreenReader">Change Data Capture at Pinterest</span></a></div></div><div class="col u-xs-marginBottom10 u-paddingLeft9 u-paddingRight12 u-paddingTop0 u-sm-paddingTop20 u-paddingBottom25 u-size4of12 u-xs-size12of12 u-marginBottom30"><a class="" href="https://medium.com/pinterest-engineering/change-data-capture-at-pinterest-7e4c357ac527?source=collection_home---4------0-----------------------" data-action-source="collection_home---4------0-----------------------" data-post-id="7e4c357ac527"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp4 u-fontSize30 u-size12of12 u-xs-size12of12 u-xs-fontSize24">Change Data Capture at Pinterest</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Liang Mou; Staff Software Engineer, Logging Platform | Elizabeth (Vi) Nguyen; Software Engineer I, Logging Platform |</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@Pinterest_Engineering" data-action="show-user-card" data-action-value="ef81ef829bcb" data-action-type="hover" data-user-id="ef81ef829bcb" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*iAV-apeVpCJ1h6Znt1AzCg.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Pinterest Engineering"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@Pinterest_Engineering" data-action="show-user-card" data-action-value="ef81ef829bcb" data-action-type="hover" data-user-id="ef81ef829bcb" dir="auto">Pinterest Engineering</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-11-18T22:12:58.942Z">Nov 18</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="7 min read"></span></div></div></div></div></div></div><div class="row u-marginTop15 u-marginLeftNegative12 u-marginRightNegative12"><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------1-----------------------" data-post-id="0dba3afb4609" data-index="1"><div class="u-lineHeightBase postItem"><a href="https://medium.com/pinterest-engineering/resource-management-with-apache-yunikorn-for-apache-spark-on-aws-eks-at-pinterest-0dba3afb4609?source=collection_home---4------1-----------------------" data-action="open-post" data-action-value="https://medium.com/pinterest-engineering/resource-management-with-apache-yunikorn-for-apache-spark-on-aws-eks-at-pinterest-0dba3afb4609?source=collection_home---4------1-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url(&quot;https://cdn-images-1.medium.com/max/800/0*TmkTRuA4ZWGoBpKR&quot;); background-position: 50% 50% !important;"><span class="u-textScreenReader">Resource Management with Apache YuniKorn™ for Apache Spark™ on AWS EKS at Pinterest</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/pinterest-engineering/resource-management-with-apache-yunikorn-for-apache-spark-on-aws-eks-at-pinterest-0dba3afb4609?source=collection_home---4------1-----------------------" data-action-source="collection_home---4------1-----------------------" data-post-id="0dba3afb4609"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Resource Management with Apache YuniKorn™ for Apache Spark™ on AWS EKS at Pinterest</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Yongjun Zhang; Staff Software Engineer | William Tom; Staff Software Engineer | Sandeep Kumar; Software Engineer | Hengzhe Guo; Software…</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@Pinterest_Engineering" data-action="show-user-card" data-action-value="ef81ef829bcb" data-action-type="hover" data-user-id="ef81ef829bcb" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*iAV-apeVpCJ1h6Znt1AzCg.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Pinterest Engineering"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@Pinterest_Engineering" data-action="show-user-card" data-action-value="ef81ef829bcb" data-action-type="hover" data-user-id="ef81ef829bcb" dir="auto">Pinterest Engineering</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-10-23T17:20:34.125Z">Oct 23</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="8 min read"></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------2-----------------------" data-post-id="4faeb652e385" data-index="2"><div class="u-lineHeightBase postItem"><a href="https://medium.com/pinterest-engineering/ray-batch-inference-at-pinterest-part-3-4faeb652e385?source=collection_home---4------2-----------------------" data-action="open-post" data-action-value="https://medium.com/pinterest-engineering/ray-batch-inference-at-pinterest-part-3-4faeb652e385?source=collection_home---4------2-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url(&quot;https://cdn-images-1.medium.com/max/800/0*sW5vo34WgRmRdB8M&quot;); background-position: 50% 50% !important;"><span class="u-textScreenReader">Ray Batch Inference at Pinterest (Part 3)</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/pinterest-engineering/ray-batch-inference-at-pinterest-part-3-4faeb652e385?source=collection_home---4------2-----------------------" data-action-source="collection_home---4------2-----------------------" data-post-id="4faeb652e385"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Ray Batch Inference at Pinterest (Part 3)</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Alex Wang; Software Engineer I | Lei Pan; Software Engineer II | Raymond Lee; Senior Software Engineer | Saurabh Vishwas Joshi; Senior…</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@Pinterest_Engineering" data-action="show-user-card" data-action-value="ef81ef829bcb" data-action-type="hover" data-user-id="ef81ef829bcb" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*iAV-apeVpCJ1h6Znt1AzCg.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Pinterest Engineering"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@Pinterest_Engineering" data-action="show-user-card" data-action-value="ef81ef829bcb" data-action-type="hover" data-user-id="ef81ef829bcb" dir="auto">Pinterest Engineering</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-10-11T14:12:12.040Z">Oct 11</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="10 min read"></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------3-----------------------" data-post-id="e628f8081971" data-index="3"><div class="u-lineHeightBase postItem"><a href="https://medium.com/pinterest-engineering/structured-datastore-sds-multi-model-data-management-with-a-unified-serving-stack-e628f8081971?source=collection_home---4------3-----------------------" data-action="open-post" data-action-value="https://medium.com/pinterest-engineering/structured-datastore-sds-multi-model-data-management-with-a-unified-serving-stack-e628f8081971?source=collection_home---4------3-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url(&quot;https://cdn-images-1.medium.com/max/800/0*L57eiXbiprrKLOrq&quot;); background-position: 50% 50% !important;"><span class="u-textScreenReader">Structured DataStore (SDS): Multi-model Data Management With a Unified Serving Stack</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/pinterest-engineering/structured-datastore-sds-multi-model-data-management-with-a-unified-serving-stack-e628f8081971?source=collection_home---4------3-----------------------" data-action-source="collection_home---4------3-----------------------" data-post-id="e628f8081971"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Structured DataStore (SDS): Multi-model Data Management With a Unified Serving Stack</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Authors: Alberto Ordonez Pereira; Senior Staff Software Engineer | Lianghong Xu; Senior Manager, Engineering |</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@Pinterest_Engineering" data-action="show-user-card" data-action-value="ef81ef829bcb" data-action-type="hover" data-user-id="ef81ef829bcb" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*iAV-apeVpCJ1h6Znt1AzCg.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Pinterest Engineering"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@Pinterest_Engineering" data-action="show-user-card" data-action-value="ef81ef829bcb" data-action-type="hover" data-user-id="ef81ef829bcb" dir="auto">Pinterest Engineering</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-10-02T18:34:29.472Z">Oct 2</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="15 min read"></span></div></div></div></div></div></div></div></section></div><div class="streamItem streamItem--section js-streamItem"><section class="u-marginTop30 u-xs-margin0 u-marginBottom15 u-maxWidth1032 u-sm-paddingLeft20 u-sm-paddingRight20 u-borderBox u-marginAuto"><div class="row u-marginTop30 u-marginLeftNegative12 u-marginRightNegative12"><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size6of12" data-source="collection_home---4------0-----------------------" data-post-id="0248efe4fd52" data-index="0"><div class="u-lineHeightBase postItem"><a href="https://medium.com/pinterest-engineering/ray-infrastructure-at-pinterest-0248efe4fd52?source=collection_home---4------0-----------------------" data-action="open-post" data-action-value="https://medium.com/pinterest-engineering/ray-infrastructure-at-pinterest-0248efe4fd52?source=collection_home---4------0-----------------------" class="u-block u-xs-height170 u-width600 u-height272 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url(&quot;https://cdn-images-1.medium.com/max/1200/0*LNd-DrZO9Kcp-Uhs&quot;); background-position: 50% 50% !important;"><span class="u-textScreenReader">Ray Infrastructure at Pinterest</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/pinterest-engineering/ray-infrastructure-at-pinterest-0248efe4fd52?source=collection_home---4------0-----------------------" data-action-source="collection_home---4------0-----------------------" data-post-id="0248efe4fd52"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Ray Infrastructure at Pinterest</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Chia-Wei Chen; Sr. Software Engineer | Raymond Lee; Sr. Software Engineer | Alex Wang; Software Engineer I | Saurabh Vishwas Joshi; Sr…</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@Pinterest_Engineering" data-action="show-user-card" data-action-value="ef81ef829bcb" data-action-type="hover" data-user-id="ef81ef829bcb" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*iAV-apeVpCJ1h6Znt1AzCg.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Pinterest Engineering"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@Pinterest_Engineering" data-action="show-user-card" data-action-value="ef81ef829bcb" data-action-type="hover" data-user-id="ef81ef829bcb" dir="auto">Pinterest Engineering</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-06-17T21:18:51.458Z">Jun 17</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="14 min read"></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size6of12" data-source="collection_home---4------1-----------------------" data-post-id="3253d2432a0c" data-index="1"><div class="u-lineHeightBase postItem"><a href="https://medium.com/pinterest-engineering/redesigning-pinterests-ad-serving-systems-with-zero-downtime-3253d2432a0c?source=collection_home---4------1-----------------------" data-action="open-post" data-action-value="https://medium.com/pinterest-engineering/redesigning-pinterests-ad-serving-systems-with-zero-downtime-3253d2432a0c?source=collection_home---4------1-----------------------" class="u-block u-xs-height170 u-width600 u-height272 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url(&quot;https://cdn-images-1.medium.com/max/1200/0*aMYxSHF7dZPDGetk&quot;); background-position: 50% 50% !important;"><span class="u-textScreenReader">Redesigning Pinterest’s Ad Serving Systems with Zero Downtime</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/pinterest-engineering/redesigning-pinterests-ad-serving-systems-with-zero-downtime-3253d2432a0c?source=collection_home---4------1-----------------------" data-action-source="collection_home---4------1-----------------------" data-post-id="3253d2432a0c"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Redesigning Pinterest’s Ad Serving Systems with Zero Downtime</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Ning Zhang; Principal Engineer | Ang Xu; Principal Machine Learning Engineer | Claire Liu; Staff Software Engineer | Haichen Liu; Staff…</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@Pinterest_Engineering" data-action="show-user-card" data-action-value="ef81ef829bcb" data-action-type="hover" data-user-id="ef81ef829bcb" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*iAV-apeVpCJ1h6Znt1AzCg.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Pinterest Engineering"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@Pinterest_Engineering" data-action="show-user-card" data-action-value="ef81ef829bcb" data-action-type="hover" data-user-id="ef81ef829bcb" dir="auto">Pinterest Engineering</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-06-07T15:27:36.265Z">Jun 7</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="7 min read"></span></div></div></div></div></div></div></div></section></div><div class="streamItem streamItem--section js-streamItem"><section class="u-marginTop30 u-xs-margin0 u-marginBottom15 u-maxWidth1032 u-sm-paddingLeft20 u-sm-paddingRight20 u-borderBox u-marginAuto"><div class="row u-marginTop30 u-marginLeftNegative12 u-marginRightNegative12"><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight15 u-size8of12" data-source="collection_home---4------0-----------------------" data-post-id="9e0b9d35a11f" data-index="0"><div class="u-lineHeightBase postItem u-marginRight3"><a href="https://medium.com/pinterest-engineering/web-performance-regression-detection-part-2-of-3-9e0b9d35a11f?source=collection_home---4------0-----------------------" data-action="open-post" data-action-value="https://medium.com/pinterest-engineering/web-performance-regression-detection-part-2-of-3-9e0b9d35a11f?source=collection_home---4------0-----------------------" class="u-block u-xs-height170 u-height350 u-width100pct u-floatLeft u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url(&quot;https://cdn-images-1.medium.com/max/2000/1*77TKUwq5GXvKtrNQ2WEOzg.png&quot;); background-position: 50% 50% !important;"><span class="u-textScreenReader">Web Performance Regression Detection (Part 2 of 3)</span></a></div></div><div class="col u-xs-marginBottom10 u-paddingLeft9 u-paddingRight12 u-paddingTop0 u-sm-paddingTop20 u-paddingBottom25 u-size4of12 u-xs-size12of12 u-marginBottom30"><a class="" href="https://medium.com/pinterest-engineering/web-performance-regression-detection-part-2-of-3-9e0b9d35a11f?source=collection_home---4------0-----------------------" data-action-source="collection_home---4------0-----------------------" data-post-id="9e0b9d35a11f"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp4 u-fontSize30 u-size12of12 u-xs-size12of12 u-xs-fontSize24">Web Performance Regression Detection (Part 2 of 3)</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Michelle Vu | Web Performance Engineer;</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@Pinterest_Engineering" data-action="show-user-card" data-action-value="ef81ef829bcb" data-action-type="hover" data-user-id="ef81ef829bcb" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*iAV-apeVpCJ1h6Znt1AzCg.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Pinterest Engineering"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@Pinterest_Engineering" data-action="show-user-card" data-action-value="ef81ef829bcb" data-action-type="hover" data-user-id="ef81ef829bcb" dir="auto">Pinterest Engineering</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-05-24T16:16:33.278Z">May 24</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="7 min read"></span></div></div></div></div></div></div></section></div><div class="streamItem streamItem--section js-streamItem"><section class="u-marginTop30 u-xs-margin0 u-marginBottom15 u-maxWidth1032 u-sm-paddingLeft20 u-sm-paddingRight20 u-borderBox u-marginAuto"><div class="row u-marginTop30 u-marginLeftNegative12 u-marginRightNegative12"><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size6of12" data-source="collection_home---4------0-----------------------" data-post-id="8a99e6c8e6b7" data-index="0"><div class="u-lineHeightBase postItem"><a href="https://medium.com/pinterest-engineering/hbase-deprecation-at-pinterest-8a99e6c8e6b7?source=collection_home---4------0-----------------------" data-action="open-post" data-action-value="https://medium.com/pinterest-engineering/hbase-deprecation-at-pinterest-8a99e6c8e6b7?source=collection_home---4------0-----------------------" class="u-block u-xs-height170 u-width600 u-height272 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url(&quot;https://cdn-images-1.medium.com/max/1200/0*Qdb3b6pNaYQqBn5T&quot;); background-position: 50% 50% !important;"><span class="u-textScreenReader">HBase Deprecation at Pinterest</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/pinterest-engineering/hbase-deprecation-at-pinterest-8a99e6c8e6b7?source=collection_home---4------0-----------------------" data-action-source="collection_home---4------0-----------------------" data-post-id="8a99e6c8e6b7"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">HBase Deprecation at Pinterest</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Alberto Ordonez Pereira | Senior Staff Software Engineer; Lianghong Xu | Senior Manager, Engineering;</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@Pinterest_Engineering" data-action="show-user-card" data-action-value="ef81ef829bcb" data-action-type="hover" data-user-id="ef81ef829bcb" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*iAV-apeVpCJ1h6Znt1AzCg.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Pinterest Engineering"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@Pinterest_Engineering" data-action="show-user-card" data-action-value="ef81ef829bcb" data-action-type="hover" data-user-id="ef81ef829bcb" dir="auto">Pinterest Engineering</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-05-13T19:45:05.793Z">May 13</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="6 min read"></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size6of12" data-source="collection_home---4------1-----------------------" data-post-id="86dcc6d5fce9" data-index="1"><div class="u-lineHeightBase postItem"><a href="https://medium.com/pinterest-engineering/web-performance-regression-detection-part-1-of-3-86dcc6d5fce9?source=collection_home---4------1-----------------------" data-action="open-post" data-action-value="https://medium.com/pinterest-engineering/web-performance-regression-detection-part-1-of-3-86dcc6d5fce9?source=collection_home---4------1-----------------------" class="u-block u-xs-height170 u-width600 u-height272 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url(&quot;https://cdn-images-1.medium.com/max/1200/0*TQ4CFjc2Xlmwx4wi&quot;); background-position: 50% 50% !important;"><span class="u-textScreenReader">Web Performance Regression Detection (Part 1 of 3)</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/pinterest-engineering/web-performance-regression-detection-part-1-of-3-86dcc6d5fce9?source=collection_home---4------1-----------------------" data-action-source="collection_home---4------1-----------------------" data-post-id="86dcc6d5fce9"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Web Performance Regression Detection (Part 1 of 3)</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Michelle Vu | Web Performance Engineer</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@Pinterest_Engineering" data-action="show-user-card" data-action-value="ef81ef829bcb" data-action-type="hover" data-user-id="ef81ef829bcb" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*iAV-apeVpCJ1h6Znt1AzCg.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Pinterest Engineering"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@Pinterest_Engineering" data-action="show-user-card" data-action-value="ef81ef829bcb" data-action-type="hover" data-user-id="ef81ef829bcb" dir="auto">Pinterest Engineering</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-04-22T17:19:18.412Z">Apr 22</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="3 min read"></span></div></div></div></div></div></div></div></section></div><div class="streamItem streamItem--section js-streamItem"><section class="u-marginTop30 u-xs-margin0 u-marginBottom15 u-maxWidth1032 u-sm-paddingLeft20 u-sm-paddingRight20 u-borderBox u-marginAuto"><div class="row u-marginTop30 u-marginLeftNegative12 u-marginRightNegative12"><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size6of12" data-source="collection_home---4------0-----------------------" data-post-id="30bad30dabff" data-index="0"><div class="u-lineHeightBase postItem"><a href="https://medium.com/pinterest-engineering/how-we-built-text-to-sql-at-pinterest-30bad30dabff?source=collection_home---4------0-----------------------" data-action="open-post" data-action-value="https://medium.com/pinterest-engineering/how-we-built-text-to-sql-at-pinterest-30bad30dabff?source=collection_home---4------0-----------------------" class="u-block u-xs-height170 u-width600 u-height272 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url(&quot;https://cdn-images-1.medium.com/max/1200/1*wDKR6-ToiX5UgsUYN41JiQ.png&quot;); background-position: 50% 50% !important;"><span class="u-textScreenReader">How we built Text-to-SQL at Pinterest</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/pinterest-engineering/how-we-built-text-to-sql-at-pinterest-30bad30dabff?source=collection_home---4------0-----------------------" data-action-source="collection_home---4------0-----------------------" data-post-id="30bad30dabff"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">How we built Text-to-SQL at Pinterest</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Adam Obeng | Data Scientist, Data Platform Science; J.C. Zhong | Tech Lead, Analytics Platform; Charlie Gu | Sr. Manager, Engineering</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@Pinterest_Engineering" data-action="show-user-card" data-action-value="ef81ef829bcb" data-action-type="hover" data-user-id="ef81ef829bcb" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*iAV-apeVpCJ1h6Znt1AzCg.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Pinterest Engineering"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@Pinterest_Engineering" data-action="show-user-card" data-action-value="ef81ef829bcb" data-action-type="hover" data-user-id="ef81ef829bcb" dir="auto">Pinterest Engineering</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-04-02T21:26:09.295Z">Apr 2</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="8 min read"></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size6of12" data-source="collection_home---4------1-----------------------" data-post-id="a4dd9089a176" data-index="1"><div class="u-lineHeightBase postItem"><a href="https://medium.com/pinterest-engineering/the-field-guide-to-non-engagement-signals-a4dd9089a176?source=collection_home---4------1-----------------------" data-action="open-post" data-action-value="https://medium.com/pinterest-engineering/the-field-guide-to-non-engagement-signals-a4dd9089a176?source=collection_home---4------1-----------------------" class="u-block u-xs-height170 u-width600 u-height272 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url(&quot;https://cdn-images-1.medium.com/max/1200/1*SCjlmnpB3_uTBvZ-Zz3qng.png&quot;); background-position: 50% 50% !important;"><span class="u-textScreenReader">The Field Guide to Non-Engagement Signals</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/pinterest-engineering/the-field-guide-to-non-engagement-signals-a4dd9089a176?source=collection_home---4------1-----------------------" data-action-source="collection_home---4------1-----------------------" data-post-id="a4dd9089a176"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">The Field Guide to Non-Engagement Signals</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Leif Sigerson | Sr. Data Scientist; Wendy Matheny | Sr. Lead Public Policy Manager</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://medium.com/@Pinterest_Engineering" data-action="show-user-card" data-action-value="ef81ef829bcb" data-action-type="hover" data-user-id="ef81ef829bcb" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*iAV-apeVpCJ1h6Znt1AzCg.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Pinterest Engineering"></a></div><div class="postMetaInline postMetaInline-authorLockup ui-captionStrong u-flex1 u-noWrapWithEllipsis"><a class="ds-link ds-link--styleSubtle link link--darken link--accent u-accentColor--textNormal u-accentColor--textDarken" href="https://medium.com/@Pinterest_Engineering" data-action="show-user-card" data-action-value="ef81ef829bcb" data-action-type="hover" data-user-id="ef81ef829bcb" dir="auto">Pinterest Engineering</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2024-03-26T23:30:55.532Z">Mar 26</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="8 min read"></span></div></div></div></div></div></div></div></section></div></div><style class="js-collectionStyle"> .u-accentColor--borderLight {border-color: #E93335 !important;} .u-accentColor--borderNormal {border-color: #E93335 !important;} .u-accentColor--borderDark {border-color: #C53331 !important;} .u-accentColor--iconLight .svgIcon,.u-accentColor--iconLight.svgIcon {fill: #E93335 !important;} .u-accentColor--iconNormal .svgIcon,.u-accentColor--iconNormal.svgIcon {fill: #E93335 !important;} .u-accentColor--iconDark .svgIcon,.u-accentColor--iconDark.svgIcon {fill: #C53331 !important;} .u-accentColor--textNormal {color: #C53331 !important;} .u-accentColor--hoverTextNormal:hover {color: #C53331 !important;} .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: #B3322E !important;} .u-accentColor--textDark {color: #B3322E !important;} .u-accentColor--backgroundLight {background-color: #E93335 !important;} .u-accentColor--backgroundNormal {background-color: #E93335 !important;} .u-accentColor--backgroundDark {background-color: #C53331 !important;} .u-accentColor--buttonDark {border-color: #C53331 !important; color: #B3322E !important;} .u-accentColor--buttonDark:hover {border-color: #B3322E !important;} .u-accentColor--buttonDark .icon:before,.u-accentColor--buttonDark .svgIcon{color: #C53331 !important; fill: #C53331 !important;} .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: #E93335 !important; color: #C53331 !important;} .u-accentColor--buttonNormal:hover {border-color: #C53331 !important;} .u-accentColor--buttonNormal .icon:before,.u-accentColor--buttonNormal .svgIcon{color: #E93335 !important; fill: #E93335 !important;} .u-accentColor--buttonNormal.button--filled .icon:before,.u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-accentColor--buttonDark.button--filled,.u-accentColor--buttonDark.button--withChrome.is-active,.u-accentColor--fillWhenActive.is-active {background-color: #C53331 !important; border-color: #C53331 !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: #E93335 !important; border-color: #E93335 !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .postArticle.is-withAccentColors .markup--user,.postArticle.is-withAccentColors .markup--query {color: #C53331 !important;}.u-tintBgColor {background-color: rgba(189, 8, 28, 1) !important;}.u-tintBgColor .u-fadeLeft:before {background-image: linear-gradient(to right, rgba(189, 8, 28, 1) 0%, rgba(189, 8, 28, 0) 100%) !important;}.u-tintBgColor .u-fadeRight:after {background-image: linear-gradient(to right, rgba(189, 8, 28, 0) 0%, rgba(189, 8, 28, 1) 100%) !important;} .u-tintSpectrum .u-baseColor--borderLight {border-color: #FF8B7F !important;} .u-tintSpectrum .u-baseColor--borderNormal {border-color: #FFB3A8 !important;} .u-tintSpectrum .u-baseColor--borderDark {border-color: #FFDAD2 !important;} .u-tintSpectrum .u-baseColor--iconLight .svgIcon,.u-tintSpectrum .u-baseColor--iconLight.svgIcon {fill: #FF8B7F !important;} .u-tintSpectrum .u-baseColor--iconNormal .svgIcon,.u-tintSpectrum .u-baseColor--iconNormal.svgIcon {fill: #FFB3A8 !important;} .u-tintSpectrum .u-baseColor--iconDark .svgIcon,.u-tintSpectrum .u-baseColor--iconDark.svgIcon {fill: #FFDAD2 !important;} .u-tintSpectrum .u-baseColor--textNormal {color: #FFB3A8 !important;} .u-tintSpectrum .u-baseColor--textNormal.u-baseColor--textDarken:hover {color: #FFEEE7 !important;} .u-tintSpectrum .u-baseColor--textDark {color: #FFEEE7 !important;} .u-tintSpectrum .u-baseColor--textDarker {color: #FFEEE7 !important;} .u-tintSpectrum .u-baseColor--backgroundLight {background-color: #FF8B7F !important;} .u-tintSpectrum .u-baseColor--backgroundNormal {background-color: #FFB3A8 !important;} .u-tintSpectrum .u-baseColor--backgroundDark {background-color: #FFDAD2 !important;} .u-tintSpectrum .u-baseColor--buttonLight {border-color: #FF8B7F !important; color: #FF8B7F !important;} .u-tintSpectrum .u-baseColor--buttonLight:hover {border-color: #FF8B7F !important;} .u-tintSpectrum .u-baseColor--buttonLight .icon:before,.u-tintSpectrum .u-baseColor--buttonLight .svgIcon {color: #FF8B7F !important; fill: #FF8B7F !important;} .u-tintSpectrum .u-baseColor--buttonDark {border-color: #FFDAD2 !important; color: #FFEEE7 !important;} .u-tintSpectrum .u-baseColor--buttonDark:hover {border-color: #FFEEE7 !important;} .u-tintSpectrum .u-baseColor--buttonDark .icon:before,.u-tintSpectrum .u-baseColor--buttonDark .svgIcon {color: #FFDAD2 !important; fill: #FFDAD2 !important;} .u-tintSpectrum .u-baseColor--buttonNormal {border-color: #FFB3A8 !important; color: #FFB3A8 !important;} .u-tintSpectrum .u-baseColor--buttonNormal:hover {border-color: #FFDAD2 !important;} .u-tintSpectrum .u-baseColor--buttonNormal .icon:before,.u-tintSpectrum .u-baseColor--buttonNormal .svgIcon {color: #FFB3A8 !important; fill: #FFB3A8 !important;} .u-tintSpectrum .u-baseColor--buttonDark.button--filled,.u-tintSpectrum .u-baseColor--buttonDark.button--withChrome.is-active {background-color: #FFDAD2 !important; border-color: #FFDAD2 !important; color: rgba(189, 8, 28, 1) !important; fill: rgba(189, 8, 28, 1) !important;} .u-tintSpectrum .u-baseColor--buttonNormal.button--filled,.u-tintSpectrum .u-baseColor--buttonNormal.button--withChrome.is-active {background-color: #FFB3A8 !important; border-color: #FFB3A8 !important; color: rgba(189, 8, 28, 1) !important; fill: rgba(189, 8, 28, 1) !important;} .u-tintSpectrum .u-baseColor--link {color: #FFB3A8 !important;} .u-tintSpectrum .u-baseColor--link.link--darkenOnHover:hover {color: #FFEEE7 !important;} .u-tintSpectrum .u-baseColor--link.link--darken:hover,.u-tintSpectrum .u-baseColor--link.link--darken:focus,.u-tintSpectrum .u-baseColor--link.link--darken:active {color: #FFEEE7 !important;} .u-tintSpectrum .u-baseColor--link.link--dark {color: #FFEEE7 !important;} .u-tintSpectrum .u-baseColor--link.link--dark.link--darken:hover,.u-tintSpectrum .u-baseColor--link.link--dark.link--darken:focus,.u-tintSpectrum .u-baseColor--link.link--dark.link--darken:active {color: #FFEEE7 !important;} .u-tintSpectrum .u-baseColor--link.link--darker {color: #FFEEE7 !important;} .u-tintSpectrum .u-baseColor--placeholderNormal ::-webkit-input-placeholder {color: #FF8B7F;} .u-tintSpectrum .u-baseColor--placeholderNormal ::-moz-placeholder {color: #FF8B7F;} .u-tintSpectrum .u-baseColor--placeholderNormal :-ms-input-placeholder {color: #FF8B7F;} .u-tintSpectrum .ui-h1,.u-tintSpectrum .ui-h2,.u-tintSpectrum .ui-h3,.u-tintSpectrum .ui-h4,.u-tintSpectrum .ui-brand1,.u-tintSpectrum .ui-brand2,.u-tintSpectrum .ui-captionStrong {color: #FFEEE7 !important; fill: #FFEEE7 !important;} .u-tintSpectrum .ui-body,.u-tintSpectrum .ui-caps {color: #FFEEE7 !important; fill: #FFEEE7 !important;} .u-tintSpectrum .ui-summary,.u-tintSpectrum .ui-caption {color: #FF8B7F !important; fill: #FF8B7F !important;} .u-tintSpectrum .u-accentColor--borderLight {border-color: #FF8B7F !important;} .u-tintSpectrum .u-accentColor--borderNormal {border-color: #FFB3A8 !important;} .u-tintSpectrum .u-accentColor--borderDark {border-color: #FFDAD2 !important;} .u-tintSpectrum .u-accentColor--iconLight .svgIcon,.u-tintSpectrum .u-accentColor--iconLight.svgIcon {fill: #FF8B7F !important;} .u-tintSpectrum .u-accentColor--iconNormal .svgIcon,.u-tintSpectrum .u-accentColor--iconNormal.svgIcon {fill: #FFB3A8 !important;} .u-tintSpectrum .u-accentColor--iconDark .svgIcon,.u-tintSpectrum .u-accentColor--iconDark.svgIcon {fill: #FFDAD2 !important;} .u-tintSpectrum .u-accentColor--textNormal {color: #FFB3A8 !important;} .u-tintSpectrum .u-accentColor--hoverTextNormal:hover {color: #FFB3A8 !important;} .u-tintSpectrum .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: #FFEEE7 !important;} .u-tintSpectrum .u-accentColor--textDark {color: #FFEEE7 !important;} .u-tintSpectrum .u-accentColor--backgroundLight {background-color: #FF8B7F !important;} .u-tintSpectrum .u-accentColor--backgroundNormal {background-color: #FFB3A8 !important;} .u-tintSpectrum .u-accentColor--backgroundDark {background-color: #FFDAD2 !important;} .u-tintSpectrum .u-accentColor--buttonDark {border-color: #FFDAD2 !important; color: #FFEEE7 !important;} .u-tintSpectrum .u-accentColor--buttonDark:hover {border-color: #FFEEE7 !important;} .u-tintSpectrum .u-accentColor--buttonDark .icon:before,.u-tintSpectrum .u-accentColor--buttonDark .svgIcon{color: #FFDAD2 !important; fill: #FFDAD2 !important;} .u-tintSpectrum .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: #FFB3A8 !important; color: #FFB3A8 !important;} .u-tintSpectrum .u-accentColor--buttonNormal:hover {border-color: #FFDAD2 !important;} .u-tintSpectrum .u-accentColor--buttonNormal .icon:before,.u-tintSpectrum .u-accentColor--buttonNormal .svgIcon{color: #FFB3A8 !important; fill: #FFB3A8 !important;} .u-tintSpectrum .u-accentColor--buttonNormal.button--filled .icon:before,.u-tintSpectrum .u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(189, 8, 28, 1) !important; fill: rgba(189, 8, 28, 1) !important;} .u-tintSpectrum .u-accentColor--buttonDark.button--filled,.u-tintSpectrum .u-accentColor--buttonDark.button--withChrome.is-active,.u-tintSpectrum .u-accentColor--fillWhenActive.is-active {background-color: #FFDAD2 !important; border-color: #FFDAD2 !important; color: rgba(189, 8, 28, 1) !important; fill: rgba(189, 8, 28, 1) !important;} .u-tintSpectrum .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-tintSpectrum .u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: #FFB3A8 !important; border-color: #FFB3A8 !important; color: rgba(189, 8, 28, 1) !important; fill: rgba(189, 8, 28, 1) !important;} .u-tintSpectrum .postArticle.is-withAccentColors .markup--user,.u-tintSpectrum .postArticle.is-withAccentColors .markup--query {color: #FFB3A8 !important;} .u-accentColor--highlightFaint {background-color: rgba(255, 216, 207, 1) !important;} .u-accentColor--highlightStrong.is-active .svgIcon {fill: rgba(255, 161, 147, 1) !important;} .postArticle.is-withAccentColors .markup--quote.is-other {background-color: rgba(255, 216, 207, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-other {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 216, 207, 1), rgba(255, 216, 207, 1));} .postArticle.is-withAccentColors .markup--quote.is-me {background-color: rgba(255, 187, 173, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-me {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 187, 173, 1), rgba(255, 187, 173, 1));} .postArticle.is-withAccentColors .markup--quote.is-targeted {background-color: rgba(255, 161, 147, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-targeted {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 161, 147, 1), rgba(255, 161, 147, 1));} .postArticle.is-withAccentColors .markup--quote.is-selected {background-color: rgba(255, 161, 147, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-selected {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 161, 147, 1), rgba(255, 161, 147, 1));} .postArticle.is-withAccentColors .markup--highlight {background-color: rgba(255, 161, 147, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--highlight {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 161, 147, 1), rgba(255, 161, 147, 1));}</style><style class="js-collectionStyleConstant">.u-imageBgColor {background-color: rgba(0, 0, 0, 0.24705882352941178);} .u-imageSpectrum .u-baseColor--borderLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;} .u-imageSpectrum .u-baseColor--borderNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-baseColor--borderDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--iconLight .svgIcon,.u-imageSpectrum .u-baseColor--iconLight.svgIcon {fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-baseColor--iconNormal .svgIcon,.u-imageSpectrum .u-baseColor--iconNormal.svgIcon {fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--iconDark .svgIcon,.u-imageSpectrum .u-baseColor--iconDark.svgIcon {fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--textNormal {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--textNormal.u-baseColor--textDarken:hover {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--textDark {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--textDarker {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--backgroundLight {background-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-baseColor--backgroundNormal {background-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--backgroundDark {background-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important; color: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-baseColor--buttonLight:hover {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;} .u-imageSpectrum .u-baseColor--buttonLight .icon:before,.u-imageSpectrum .u-baseColor--buttonLight .svgIcon {color: rgba(255, 255, 255, 0.8) !important; fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-baseColor--buttonDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonDark:hover {border-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonDark .icon:before,.u-imageSpectrum .u-baseColor--buttonDark .svgIcon {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important; color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--buttonNormal:hover {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--buttonNormal .icon:before,.u-imageSpectrum .u-baseColor--buttonNormal .svgIcon {color: rgba(255, 255, 255, 0.9490196078431372) !important; fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--buttonDark.button--filled,.u-imageSpectrum .u-baseColor--buttonDark.button--withChrome.is-active {background-color: rgba(255, 255, 255, 1) !important; border-color: rgba(255, 255, 255, 1) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-baseColor--buttonNormal.button--filled,.u-imageSpectrum .u-baseColor--buttonNormal.button--withChrome.is-active {background-color: rgba(255, 255, 255, 0.9490196078431372) !important; border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-baseColor--link {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--link.link--darkenOnHover:hover {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--darken:hover,.u-imageSpectrum .u-baseColor--link.link--darken:focus,.u-imageSpectrum .u-baseColor--link.link--darken:active {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--dark {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--dark.link--darken:hover,.u-imageSpectrum .u-baseColor--link.link--dark.link--darken:focus,.u-imageSpectrum .u-baseColor--link.link--dark.link--darken:active {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--darker {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--placeholderNormal ::-webkit-input-placeholder {color: rgba(255, 255, 255, 0.8);} .u-imageSpectrum .u-baseColor--placeholderNormal ::-moz-placeholder {color: rgba(255, 255, 255, 0.8);} .u-imageSpectrum .u-baseColor--placeholderNormal :-ms-input-placeholder {color: rgba(255, 255, 255, 0.8);} .u-imageSpectrum .ui-h1,.u-imageSpectrum .ui-h2,.u-imageSpectrum .ui-h3,.u-imageSpectrum .ui-h4,.u-imageSpectrum .ui-brand1,.u-imageSpectrum .ui-brand2,.u-imageSpectrum .ui-captionStrong {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .ui-body,.u-imageSpectrum .ui-caps {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .ui-summary,.u-imageSpectrum .ui-caption {color: rgba(255, 255, 255, 0.8) !important; fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-accentColor--borderLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;} .u-imageSpectrum .u-accentColor--borderNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-accentColor--borderDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--iconLight .svgIcon,.u-imageSpectrum .u-accentColor--iconLight.svgIcon {fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-accentColor--iconNormal .svgIcon,.u-imageSpectrum .u-accentColor--iconNormal.svgIcon {fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--iconDark .svgIcon,.u-imageSpectrum .u-accentColor--iconDark.svgIcon {fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--textNormal {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--hoverTextNormal:hover {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--textDark {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--backgroundLight {background-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-accentColor--backgroundNormal {background-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--backgroundDark {background-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonDark:hover {border-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonDark .icon:before,.u-imageSpectrum .u-accentColor--buttonDark .svgIcon{color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: rgba(255, 255, 255, 0.8980392156862745) !important; color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--buttonNormal:hover {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--buttonNormal .icon:before,.u-imageSpectrum .u-accentColor--buttonNormal .svgIcon{color: rgba(255, 255, 255, 0.9490196078431372) !important; fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--buttonNormal.button--filled .icon:before,.u-imageSpectrum .u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-accentColor--buttonDark.button--filled,.u-imageSpectrum .u-accentColor--buttonDark.button--withChrome.is-active,.u-imageSpectrum .u-accentColor--fillWhenActive.is-active {background-color: rgba(255, 255, 255, 1) !important; border-color: rgba(255, 255, 255, 1) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-imageSpectrum .u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: rgba(255, 255, 255, 0.9490196078431372) !important; border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .postArticle.is-withAccentColors .markup--user,.u-imageSpectrum .postArticle.is-withAccentColors .markup--query {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--highlightFaint {background-color: rgba(255, 255, 255, 0.2) !important;} .u-imageSpectrum .u-accentColor--highlightStrong.is-active .svgIcon {fill: rgba(255, 255, 255, 0.6) !important;} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-other {background-color: rgba(255, 255, 255, 0.2) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-other {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.2));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-me {background-color: rgba(255, 255, 255, 0.4) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-me {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.4), rgba(255, 255, 255, 0.4));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-targeted {background-color: rgba(255, 255, 255, 0.6) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-targeted {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-selected {background-color: rgba(255, 255, 255, 0.6) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-selected {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--highlight {background-color: rgba(255, 255, 255, 0.6) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--highlight {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));}.u-resetSpectrum .u-tintBgColor {background-color: rgba(255, 255, 255, 1) !important;}.u-resetSpectrum .u-tintBgColor .u-fadeLeft:before {background-image: linear-gradient(to right, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%) !important;}.u-resetSpectrum .u-tintBgColor .u-fadeRight:after {background-image: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 1) 100%) !important;} .u-resetSpectrum .u-baseColor--borderLight {border-color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--borderNormal {border-color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--borderDark {border-color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--iconLight .svgIcon,.u-resetSpectrum .u-baseColor--iconLight.svgIcon {fill: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--iconNormal .svgIcon,.u-resetSpectrum .u-baseColor--iconNormal.svgIcon {fill: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--iconDark .svgIcon,.u-resetSpectrum .u-baseColor--iconDark.svgIcon {fill: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--textNormal {color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--textNormal.u-baseColor--textDarken:hover {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--textDark {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--textDarker {color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--backgroundLight {background-color: rgba(0, 0, 0, 0.09803921568627451) !important;} .u-resetSpectrum .u-baseColor--backgroundNormal {background-color: rgba(0, 0, 0, 0.2) !important;} .u-resetSpectrum .u-baseColor--backgroundDark {background-color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonLight {border-color: rgba(0, 0, 0, 0.2980392156862745) !important; color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonLight:hover {border-color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonLight .icon:before,.u-resetSpectrum .u-baseColor--buttonLight .svgIcon {color: rgba(0, 0, 0, 0.2980392156862745) !important; fill: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonDark {border-color: rgba(0, 0, 0, 0.6) !important; color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--buttonDark:hover {border-color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--buttonDark .icon:before,.u-resetSpectrum .u-baseColor--buttonDark .svgIcon {color: rgba(0, 0, 0, 0.6) !important; fill: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--buttonNormal {border-color: rgba(0, 0, 0, 0.4980392156862745) !important; color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonNormal:hover {border-color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--buttonNormal .icon:before,.u-resetSpectrum .u-baseColor--buttonNormal .svgIcon {color: rgba(0, 0, 0, 0.4980392156862745) !important; fill: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonDark.button--filled,.u-resetSpectrum .u-baseColor--buttonDark.button--withChrome.is-active {background-color: rgba(0, 0, 0, 0.2980392156862745) !important; border-color: rgba(0, 0, 0, 0.2980392156862745) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-baseColor--buttonNormal.button--filled,.u-resetSpectrum .u-baseColor--buttonNormal.button--withChrome.is-active {background-color: rgba(0, 0, 0, 0.2) !important; border-color: rgba(0, 0, 0, 0.2) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-baseColor--link {color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--link.link--darkenOnHover:hover {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--link.link--darken:hover,.u-resetSpectrum .u-baseColor--link.link--darken:focus,.u-resetSpectrum .u-baseColor--link.link--darken:active {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--link.link--dark {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--link.link--dark.link--darken:hover,.u-resetSpectrum .u-baseColor--link.link--dark.link--darken:focus,.u-resetSpectrum .u-baseColor--link.link--dark.link--darken:active {color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--link.link--darker {color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--placeholderNormal ::-webkit-input-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);} .u-resetSpectrum .u-baseColor--placeholderNormal ::-moz-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);} .u-resetSpectrum .u-baseColor--placeholderNormal :-ms-input-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);} .u-resetSpectrum .ui-h1,.u-resetSpectrum .ui-h2,.u-resetSpectrum .ui-h3,.u-resetSpectrum .ui-h4,.u-resetSpectrum .ui-brand1,.u-resetSpectrum .ui-brand2,.u-resetSpectrum .ui-captionStrong {color: rgba(0, 0, 0, 0.8) !important; fill: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .ui-body,.u-resetSpectrum .ui-caps {color: rgba(0, 0, 0, 0.6) !important; fill: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .ui-summary,.u-resetSpectrum .ui-caption {color: rgba(0, 0, 0, 0.2980392156862745) !important; fill: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-accentColor--borderLight {border-color: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--borderNormal {border-color: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--borderDark {border-color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--iconLight .svgIcon,.u-resetSpectrum .u-accentColor--iconLight.svgIcon {fill: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--iconNormal .svgIcon,.u-resetSpectrum .u-accentColor--iconNormal.svgIcon {fill: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--iconDark .svgIcon,.u-resetSpectrum .u-accentColor--iconDark.svgIcon {fill: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--textNormal {color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--hoverTextNormal:hover {color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--textDark {color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--backgroundLight {background-color: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--backgroundNormal {background-color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--backgroundDark {background-color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark {border-color: rgba(17, 128, 14, 1) !important; color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark:hover {border-color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark .icon:before,.u-resetSpectrum .u-accentColor--buttonDark .svgIcon{color: rgba(15, 115, 12, 1) !important; fill: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: rgba(26, 137, 23, 1) !important; color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal:hover {border-color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal .icon:before,.u-resetSpectrum .u-accentColor--buttonNormal .svgIcon{color: rgba(17, 128, 14, 1) !important; fill: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal.button--filled .icon:before,.u-resetSpectrum .u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark.button--filled,.u-resetSpectrum .u-accentColor--buttonDark.button--withChrome.is-active,.u-resetSpectrum .u-accentColor--fillWhenActive.is-active {background-color: rgba(15, 115, 12, 1) !important; border-color: rgba(15, 115, 12, 1) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-resetSpectrum .u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: rgba(17, 128, 14, 1) !important; border-color: rgba(17, 128, 14, 1) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .postArticle.is-withAccentColors .markup--user,.u-resetSpectrum .postArticle.is-withAccentColors .markup--query {color: rgba(17, 128, 14, 1) !important;}</style><div class="js-collectionFooter u-hide"><div class="container u-maxWidth1040"><div class="u-marginTop10 u-paddingTop10 u-paddingBottom30 u-borderTopLighter"><div class="linkSet u-clearfix"><div class="u-floatRight u-textColorNormal u-baseColor--textNormal u-xs-floatLeft"><a class="button button--chromeless u-baseColor--buttonNormal u-marginLeft15 u-lineHeight35 u-xs-block u-xs-marginLeft0" href="https://medium.com/pinterest-engineering/about" title="About Pinterest Engineering Blog" aria-label="About Pinterest Engineering Blog">About Pinterest Engineering Blog</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://medium.com/pinterest-engineering/latest" title="Latest Stories for Pinterest Engineering Blog" aria-label="Latest Stories for Pinterest Engineering Blog">Latest Stories</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://medium.com/pinterest-engineering/archive" title="Archive for Pinterest Engineering Blog" aria-label="Archive for Pinterest Engineering Blog">Archive</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://medium.com/about">About Medium</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://policy.medium.com/medium-terms-of-service-9db0094a1e0f">Terms</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://policy.medium.com/medium-privacy-policy-f03bf92035c9">Privacy</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://medium.com/business">Teams</a></div></div></div></div></div></div></div></div><div class="loadingBar"></div><script>// <![CDATA[ window["obvInit"] = function (opt_embedded) {window["obvInit"]["embedded"] = opt_embedded; window["obvInit"]["ready"] = true;} // ]]></script><script>// <![CDATA[ var GLOBALS = {"audioUrl":"https://d1fcbxp97j4nb2.cloudfront.net","baseUrl":"https://medium.com","buildLabel":"20241126-1740-root","currentUser":{"userId":"lo_d2ed7070cceb","isVerified":false,"subscriberEmail":"","hasPastMemberships":false,"isEnrolledInHightower":false,"isEligibleForHightower":true,"hightowerLastLockedAt":0,"isWriterProgramEnrolled":true,"isWriterProgramInvited":false,"isWriterProgramOptedOut":false,"writerProgramVersion":0,"writerProgramEnrolledAt":0,"friendLinkOnboarding":0,"hasAdditionalUnlocks":false,"hasApiAccess":false,"writerProgramDistributionSettingOptedIn":false,"isSuspended":false,"collectionOnboardingSeen":0,"atsQualifiedAt":0},"currentUserHasUnverifiedEmail":false,"isAuthenticated":false,"isCurrentUserVerified":false,"miroUrl":"https://cdn-images-1.medium.com","moduleUrls":{"base":"https://cdn-static-1.medium.com/_/fp/gen-js/main-base.bundle.95z8xpkUEidhPbIWsh2BVw.12.js","common-async":"https://cdn-static-1.medium.com/_/fp/gen-js/main-common-async.bundle.zqOu8dxaQRtqDyChHdOWlQ.12.js","hightower":"https://cdn-static-1.medium.com/_/fp/gen-js/main-hightower.bundle.y0UkxCxPBUbLlduk5XbwLQ.12.js","home-screens":"https://cdn-static-1.medium.com/_/fp/gen-js/main-home-screens.bundle.eZhPgaD8AglnbC5Rzxqvhg.12.js","misc-screens":"https://cdn-static-1.medium.com/_/fp/gen-js/main-misc-screens.bundle.XeRjm4FlHTBOsUvoOQ6Ppg.12.js","notes":"https://cdn-static-1.medium.com/_/fp/gen-js/main-notes.bundle.r9MSvtAmj0CMkyIC0CCCbA.12.js","payments":"https://cdn-static-1.medium.com/_/fp/gen-js/main-payments.bundle.AiXyuYj3AvxRA1-7HEyP9Q.12.js","posters":"https://cdn-static-1.medium.com/_/fp/gen-js/main-posters.bundle.fsLyLvZO4VZXL_zb4RXgeg.12.js","power-readers":"https://cdn-static-1.medium.com/_/fp/gen-js/main-power-readers.bundle.6Dyc-nVN2MDV_AM9XDAZug.12.js","pubs":"https://cdn-static-1.medium.com/_/fp/gen-js/main-pubs.bundle.rUyrVjlTpUj61voxnZosQw.12.js","stats":"https://cdn-static-1.medium.com/_/fp/gen-js/main-stats.bundle.2I2tXSo7-rbez_WYXfga0Q.12.js"},"previewConfig":{"weightThreshold":1,"weightImageParagraph":0.51,"weightIframeParagraph":0.8,"weightTextParagraph":0.08,"weightEmptyParagraph":0,"weightP":0.003,"weightH":0.005,"weightBq":0.003,"minPTextLength":60,"truncateBoundaryChars":20,"detectTitle":true,"detectTitleLevThreshold":0.15},"productName":"Medium","supportsEdit":false,"termsUrl":"//policy.medium.com/medium-terms-of-service-9db0094a1e0f","textshotHost":"textshot.textshot-production.svc.cluster.local","transactionId":"1732730020374:abb3f346bd8d","useragent":{"browser":"ie","family":"ie","os":"windows","version":7,"supportsDesktopEdit":false,"supportsInteract":false,"supportsView":true,"isMobile":false,"isTablet":false,"isNative":false,"supportsFileAPI":false,"isTier1":false,"clientVersion":"","clientChannel":"","supportsRealScrollEvents":false,"supportsVhUnits":false,"ruinsViewportSections":false,"supportsHtml5Video":false,"supportsMagicUnderlines":false,"isWebView":false,"isFacebookWebView":false,"supportsProgressiveMedia":false,"supportsPromotedPosts":true,"isBot":false,"isNativeIphone":false,"supportsCssVariables":false,"supportsVideoSections":true,"emojiSupportLevel":1,"isSearchBot":false,"isSyndicationBot":false,"isNativeAndroid":false,"isNativeIos":false,"isSeoAuditBot":false,"isInternalApp":false,"supportsApplePay":false,"supportsScrollableMetabar":false},"variants":{"allow_access":true,"allow_signup":true,"allow_test_auth":"disallow","android_enable_editor_new_publishing_flow":true,"android_enable_friend_links_creation":true,"android_enable_friend_links_postpage_banners":true,"android_enable_image_sharer":true,"android_enable_lists_v2":true,"android_enable_syntax_highlight":true,"android_enable_topic_portals":true,"android_rating_prompt_stories_read_threshold":2,"android_two_hour_refresh":true,"available_annual_plan":"2c754bcc2995","available_annual_premium_plan":"4a442ace1476","available_monthly_plan":"60e220181034","available_monthly_premium_plan":"12a660186432","browsable_stream_config_bucket":"curated-topics","can_receive_tips_v0":true,"can_send_tips_v0":true,"coronavirus_topic_recirc":true,"disable_partner_program_enrollment":true,"enable_abandoned_cart_promotion_email":true,"enable_android_dynamic_aspirational_paywall":true,"enable_android_dynamic_programming_paywall":true,"enable_android_miro_v2":true,"enable_android_offline_reading":true,"enable_android_verified_author":true,"enable_app_flirty_thirty":true,"enable_apple_sign_in":true,"enable_apple_webhook":true,"enable_aurora_pub_follower_page":true,"enable_author_cards":true,"enable_author_cards_byline":true,"enable_auto_follow_on_subscribe":true,"enable_automod":true,"enable_bayesian_average_pub_search":true,"enable_bg_post_post":true,"enable_billing_frequency_on_step2":"control","enable_boost_nia_v01":true,"enable_braintree_apple_pay":true,"enable_braintree_client":true,"enable_braintree_google_pay":true,"enable_braintree_integration":true,"enable_braintree_paypal":true,"enable_braintree_trial_membership":true,"enable_braintree_webhook":true,"enable_branch_io":true,"enable_cache_less_following_feed":true,"enable_configure_pronouns":true,"enable_conversion_model_v2":"group_2","enable_conversion_ranker_v2":"control","enable_creator_welcome_email":true,"enable_deprecate_legacy_providers_v3":true,"enable_diversification_rex":true,"enable_entities_to_follow_v2":true,"enable_eventstats_event_processing":true,"enable_explicit_signals":true,"enable_explicit_signals_updated_post_previews":true,"enable_footer_app_buttons":true,"enable_google_one_tap":true,"enable_google_webhook":true,"enable_group_gifting":true,"enable_iceland_forced_android":true,"enable_import":true,"enable_intrinsic_automatic_actions":true,"enable_ios_autorefresh":true,"enable_ios_dynamic_paywall_aspiriational":true,"enable_ios_dynamic_paywall_programming":true,"enable_ios_easy_resubscribe":true,"enable_ios_offline_reading":true,"enable_legacy_feed_in_iceland":true,"enable_lite_archive_page":true,"enable_lite_continue_this_thread":true,"enable_lite_homepage":true,"enable_lite_response_markup":true,"enable_lite_server_upstream_deadlines":true,"enable_lo_homepage":"control","enable_maim_the_meter":true,"enable_marketing_emails":true,"enable_mastodon_avatar_upload":true,"enable_mastodon_for_members":true,"enable_mastodon_for_members_username_selection":true,"enable_medium2_kbfd":true,"enable_members_only_audio":true,"enable_ml_rank_rex_anno":true,"enable_moc_load_processor_all_recs_surfaces":true,"enable_moc_load_processor_c":true,"enable_moc_load_processor_first_story":true,"enable_new_manage_membership_flow":true,"enable_new_stripe_customers":true,"enable_newsletter_lo_flow_custom_domains":true,"enable_pill_based_home_feed":true,"enable_pp_country_expansion":true,"enable_pp_v4":true,"enable_pre_pp_v4":true,"enable_premium_tier":true,"enable_premium_tier_badge":true,"enable_publication_hierarchy_web":true,"enable_ranker_v10":"control","enable_recaptcha_enterprise":true,"enable_recirc_model":true,"enable_recommended_publishers_query":true,"enable_rex_aggregator_v2":true,"enable_rex_new_push_notification_endpoint":true,"enable_rex_reading_history":true,"enable_rito_upstream_deadlines":true,"enable_seamless_social_sharing":true,"enable_see_pronouns":true,"enable_sharer_create_post_share_key":true,"enable_sharer_validate_post_share_key":true,"enable_simplified_digest_v2_b":true,"enable_speechify_ios":true,"enable_speechify_widget":true,"enable_sprig":true,"enable_starspace":true,"enable_susi_redesign_android":true,"enable_susi_redesign_ios":true,"enable_switch_plan_premium_tier":true,"enable_tag_recs":true,"enable_tick_landing_page":true,"enable_tipping_v0_android":true,"enable_tipping_v0_ios":true,"enable_tribute_landing_page":true,"enable_update_explore_wtf":true,"enable_update_topic_portals_wtf":true,"enable_updated_pub_recs_ui":true,"enable_verifications_service":true,"glyph_font_set":"m2-unbound-source-serif-pro","goliath_externalsearch_enable_comment_deindexation":true,"ios_display_paywall_after_onboarding":true,"ios_enable_friend_links_creation":true,"ios_enable_friend_links_postpage_banners":true,"ios_enable_home_post_menu":true,"ios_enable_lock_responses":true,"ios_enable_verified_book_author":true,"ios_iceland_nux":true,"ios_in_app_free_trial":true,"ios_remove_twitter_onboarding_step":true,"ios_social_share_sheet":true,"limit_post_referrers":true,"limit_user_follows":true,"mobile_custom_app_icon":true,"num_post_bottom_responses_to_show":1,"onboarding_tags_from_top_views":true,"reader_fair_distribution_non_qp":true,"redefined_top_posts":true,"reengagement_notification_duration":3,"rex_generator_max_candidates":1000,"signin_services":"twitter,facebook,google,email,google-fastidv,google-one-tap,apple","signup_services":"twitter,facebook,google,email,google-fastidv,google-one-tap,apple","skip_fs_cache_user_vals":true},"xsrfToken":"","iosAppId":"828256236","supportEmail":"yourfriends@medium.com","fp":{"/icons/monogram-mask.svg":"https://cdn-static-1.medium.com/_/fp/icons/monogram-mask.KPLCSFEZviQN0jQ7veN2RQ.12.svg","/icons/favicon-medium-editor.ico":"https://cdn-static-1.medium.com/_/fp/icons/favicon-medium-editor.PiakrZWB7Yb80quUVQWM6g.12.ico"},"authBaseUrl":"https://medium.com","imageUploadSizeMb":25,"isAuthDomainRequest":true,"algoliaApiEndpoint":"https://MQ57UUUQZ2-dsn.algolia.net","algoliaAppId":"MQ57UUUQZ2","algoliaSearchOnlyApiKey":"394474ced050e3911ae2249ecc774921","iosAppStoreUrl":"https://itunes.apple.com/app/medium-everyones-stories/id828256236?pt=698524&mt=8","iosAppLinkBaseUrl":"medium:","algoliaIndexPrefix":"medium_","androidPlayStoreUrl":"https://play.google.com/store/apps/details?id=com.medium.reader","googleClientId":"216296035834-k1k6qe060s2tp2a2jam4ljdcms00sttg.apps.googleusercontent.com","androidPackage":"com.medium.reader","androidPlayStoreMarketScheme":"market://details?id=com.medium.reader","googleAuthUri":"https://accounts.google.com/o/oauth2/auth","androidScheme":"medium","layoutData":{"useDynamicScripts":false,"googleAnalyticsTrackingCode":"G-7JY7T788PK","jsShivUrl":"https://cdn-static-1.medium.com/_/fp/js/shiv.RI2ePTZ5gFmMgLzG5bEVAA.12.js","useDynamicCss":false,"faviconUrl":"https://miro.medium.com/v2/5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19","faviconImageId":"5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19","fontSets":[{"id":8,"url":"https://glyph.medium.com/css/e/sr/latin/e/ssr/latin/e/ssb/latin/m2-unbound-source-serif-pro.css"},{"id":11,"url":"https://glyph.medium.com/css/m2-unbound-source-serif-pro.css"},{"id":9,"url":"https://glyph.medium.com/css/mkt.css"}],"glyphUrl":"https://glyph.medium.com"},"authBaseUrlRev":"moc.muidem//:sptth","stripePublishableKey":"pk_live_7FReX44VnNIInZwrIIx6ghjl","archiveUploadSizeMb":100,"previewConfig2":{"weightThreshold":1,"weightImageParagraph":0.05,"raiseImage":true,"enforceHeaderHierarchy":true,"isImageInsetRight":true},"isAmp":false,"iosScheme":"medium","facebook":{"key":"542599432471018","namespace":"medium-com","scope":{"default":["public_profile","email"],"connect":["public_profile","email"],"login":["public_profile","email"],"share":["public_profile","email"]}},"memberContentTopicId":"13d7efd82fb2","audioContentTopicId":"3792abbd134","isDoNotAuth":false,"buggle":{"videoUrl":"https://cdn-videos-1.medium.com","audioUrl":"https://cdn-audio-1.medium.com"},"referrerType":5,"partnerProgramEmail":"partnerprogram@medium.com","recaptchaKey":"6Lfc37IUAAAAAKGGtC6rLS13R1Hrw_BqADfS1LRk","countryCode":"SG","bypassMeter":false,"branchKey":"key_live_ofxXr2qTrrU9NqURK8ZwEhknBxiI6KBm","paypal":{"clientMode":"production","oneYearGift":{"name":"Medium Membership (1 Year, Digital Gift Code)","description":"Unlimited access to the best and brightest stories on Medium. Gift codes can be redeemed at medium.com/redeem.","price":"50.00","currency":"USD","sku":"membership-gift-1-yr"}},"collectionConfig":{"mediumOwnedAndOperatedCollectionIds":["8a9336e5bb4","b7e45b22fec3","193b68bd4fba","8d6b8a439e32","54c98c43354d","3f6ecf56618","d944778ce714","92d2092dc598","ae2a65f35510","1285ba81cada","544c7006046e","fc8964313712","40187e704f1c","88d9857e584e","7b6769f2748b","bcc38c8f6edf","cef6983b292","cb8577c9149e","444d13b52878","713d7dbc99b0","ef8e90590e66","191186aaafa0","55760f21cdc5","9dc80918cc93","bdc4052bbdba","8ccfed20cbb2"]},"bypassMeterWithShareKey":false,"recaptcha3Key":"6Lf8R9wUAAAAABMI_85Wb8melS7Zj6ziuf99Yot5","braintreeClientKey":"production_zjkj96jm_m56f8fqpf7ngnrd4","cdcMessaging":[{"text":"For more information on the novel coronavirus and Covid-19, visit ","href":"","type":"text","start":0,"end":0},{"text":"cdc.gov","href":"https://www.cdc.gov/coronavirus/2019-nCoV","type":"link","start":66,"end":73},{"text":".","href":"","type":"text","start":0,"end":0}],"braintree":{"merchantId":"m56f8fqpf7ngnrd4"},"diagnostics":{},"domain":"medium.com"} // ]]></script><script charset="UTF-8" src="https://cdn-static-1.medium.com/_/fp/gen-js/main-base.bundle.95z8xpkUEidhPbIWsh2BVw.12.js" async></script><script>// <![CDATA[ window["obvInit"]({"references":{"Collection":{"4c5a5f6279b6":{"id":"4c5a5f6279b6","name":"Pinterest Engineering Blog","slug":"pinterest-engineering","tags":["ENGINEERING","PINTEREST","VISUAL SEARCH","MACHINE LEARNING","COMPUTER VISION"],"creatorId":"a1d1eea6bc86","description":"Inventive engineers building the first visual discovery engine, 300 billion ideas and counting.","shortDescription":"Inventive engineers building the first visual discovery…","image":{"imageId":"1*XiUFDZgSFl6n-MM2yXFifQ.png","filter":"","backgroundSize":"","originalWidth":668,"originalHeight":563,"strategy":"resample","height":0,"width":0},"metadata":{"followerCount":15051,"activeAt":1731967979081},"virtuals":{"permissions":{"canPublish":false,"canPublishAll":false,"canRepublish":false,"canRemove":false,"canManageAll":false,"canSubmit":false,"canEditPosts":false,"canAddWriters":false,"canViewStats":false,"canSendNewsletter":false,"canViewLockedPosts":false,"canViewCloaked":false,"canEditOwnPosts":false,"canBeAssignedAuthor":false,"canEnrollInHightower":false,"canLockPostsForMediumMembers":false,"canLockOwnPostsForMediumMembers":false,"canViewNewsletterV2Stats":false,"canCreateNewsletterV3":false},"isSubscribed":false,"isEnrolledInHightower":false,"isEligibleForHightower":false,"isSubscribedToCollectionEmails":false,"isMuted":false,"canToggleEmail":false,"isWriter":false},"logo":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"twitterUsername":"PinterestEng","facebookPageName":"pinterestengineering","collectionMastheadId":"560b48272565","sections":[{"type":2,"collectionHeaderMetadata":{"title":"Pinterest Engineering","description":"Inventive engineers building the first visual discovery engine, 300 billion ideas and counting.","backgroundImage":{"id":"1*kDAiebKM-qkprLo3uk5eHg.jpeg","originalWidth":5928,"originalHeight":3952,"focusPercentX":52.142857142857146,"focusPercentY":98.93048128342247},"logoImage":{"id":"1*dXsrUlUXbwyfZ9tiV9viUQ@2x.png","originalWidth":200,"originalHeight":200,"alt":"Pinterest Engineering Blog"},"alignment":2,"layout":6}},{"type":1,"postListMetadata":{"source":1,"layout":4,"number":4,"postIds":[]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":2,"postIds":["0248efe4fd52","3253d2432a0c"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":1,"postIds":["9e0b9d35a11f"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":2,"postIds":["8a99e6c8e6b7","86dcc6d5fce9"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":2,"postIds":["30bad30dabff","a4dd9089a176"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":2,"postIds":["fca14b0d1141","08130f25b874"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":2,"postIds":["a43d38840fb9","9d4503fc20d6"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":2,"postIds":["f638c722d9f2","67d90603426e"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":2,"postIds":["629affbf34ff","e2b30b2f6768"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":1,"postIds":["c1010e69f31a"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":2,"postIds":["bbc3406a1695","95f8cc0c5885"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":2,"postIds":["50d3d50384ed","1030edfe445f"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["cb60b547f2e0","5c338a15d2a0","210c122f6afa"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["3a7c0c335016","78a5075a3fe9","608fb5581094"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["8643fe0cc0f9","a74938cb089b","58ad008a1ce9"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["437731fabde","8b7faf9009cf","91fc310c2e33"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["165ae2e8cde8","4be40f1dfc8e","70b4d20e5ea0"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["a0857bf8cf98","43f0fb474b84","8b7b1f562afc"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["92484b5fe39b","351adf9ac1c4","f881aff6580f"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["94a967bdcd27","8d6c026dd4b9","a23a112deb73"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["e0a0609c8e9","116bce917ea2","f49b654bff37"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["997d9243f56a","c5bbe190ba5","7a4a95fa674b"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":2,"postIds":["797fffff45c0","556be1611be"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["9bf09696e99e","4bd9b9ee1308","9e5c3414c8ad"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":1,"postIds":["be94f15a4527"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":2,"postIds":["4402695dd4e7","654f2bb887fc"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["61512ad98a95","ea3889420490","50a07143f444"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["9043776b7b76","e63d5280a1a9","579406ffa374"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":2,"postIds":["b3143ac70b55","b31da4b60fa0"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":2,"postIds":["d6d5bfa6bf16","1c01d8c11a05"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":2,"postIds":["8987fc5ba1c0","7b5eeb411888"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["c9d4e89f2ed6","ccb255fbde20","2a3eaf60ac1b"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["16bc3a4a38b4","8efda19088b0","ed76307e10a0"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":12,"postIds":["e769135734d","10ffb7846958","4b05a409cb5d","c69e78ff2698","17fc35eca1e5","1806b73b40ef","f543b14bb25","68d7f8425882","a23f821168da","723ce072b7d2"]}},{"type":1,"postListMetadata":{"source":2,"layout":6,"number":3,"postIds":[],"sectionHeader":"Trending"}},{"type":1,"postListMetadata":{"source":1,"layout":4,"number":15,"postIds":[]}}],"tintColor":"#FFBD081C","lightText":false,"favicon":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"colorPalette":{"defaultBackgroundSpectrum":{"colorPoints":[{"color":"#FFE93335","point":0},{"color":"#FFD73433","point":0.1},{"color":"#FFC53331","point":0.2},{"color":"#FFB3322E","point":0.3},{"color":"#FFA12F2B","point":0.4},{"color":"#FF8F2C28","point":0.5},{"color":"#FF7C2924","point":0.6},{"color":"#FF692420","point":0.7},{"color":"#FF561E1A","point":0.8},{"color":"#FF421714","point":0.9},{"color":"#FF2D0F0C","point":1}],"backgroundColor":"#FFFFFFFF"},"tintBackgroundSpectrum":{"colorPoints":[{"color":"#FFBD081C","point":0},{"color":"#FFD12F30","point":0.1},{"color":"#FFE34943","point":0.2},{"color":"#FFF26057","point":0.3},{"color":"#FFFF766B","point":0.4},{"color":"#FFFF8B7F","point":0.5},{"color":"#FFFF9F94","point":0.6},{"color":"#FFFFB3A8","point":0.7},{"color":"#FFFFC7BD","point":0.8},{"color":"#FFFFDAD2","point":0.9},{"color":"#FFFFEEE7","point":1}],"backgroundColor":"#FFBD081C"},"highlightSpectrum":{"colorPoints":[{"color":"#FFFFDED6","point":0},{"color":"#FFFFD8CF","point":0.1},{"color":"#FFFFD2C8","point":0.2},{"color":"#FFFFCDC1","point":0.3},{"color":"#FFFFC7BB","point":0.4},{"color":"#FFFFC1B4","point":0.5},{"color":"#FFFFBBAD","point":0.6},{"color":"#FFFFB4A7","point":0.7},{"color":"#FFFFAEA0","point":0.8},{"color":"#FFFFA89A","point":0.9},{"color":"#FFFFA193","point":1}],"backgroundColor":"#FFFFFFFF"},"darkBackgroundSpectrum":{"colorPoints":[{"color":"#FFFF4C48","point":0},{"color":"#FFFF5D56","point":0.1},{"color":"#FFFF6D63","point":0.2},{"color":"#FFFF7C71","point":0.3},{"color":"#FFFF8B7F","point":0.4},{"color":"#FFFF998D","point":0.5},{"color":"#FFFFA79C","point":0.6},{"color":"#FFFFB5AA","point":0.7},{"color":"#FFFFC3B9","point":0.8},{"color":"#FFFFD0C8","point":0.9},{"color":"#FFFFDDD6","point":1}],"backgroundColor":"#FF000000"}},"navItems":[{"type":4,"title":"en Español","url":"https://medium.com/pinterest-engineering/medium-com-pinterest-engineering-espanol/home","topicId":"51c7bf95dfcd","source":"topicId"},{"type":4,"title":"Eng Culture","url":"https://medium.com/pinterest-engineering/eng-culture/home","topicId":"74e33ff4ec2a","source":"topicId"},{"type":4,"title":"Pinner UX","url":"https://medium.com/pinterest-engineering/pinner-experience/home","topicId":"3f90c39488c9","source":"topicId"},{"type":4,"title":"Creator UX","url":"https://medium.com/pinterest-engineering/creator-experience/home","topicId":"c1b04eabcc02","source":"topicId"},{"type":4,"title":"Infras","url":"https://medium.com/pinterest-engineering/infra/home","topicId":"a29dfb3782e2","source":"topicId"},{"type":4,"title":"Monetization","url":"https://medium.com/pinterest-engineering/monetization/home","topicId":"c5792f90322f","source":"topicId"},{"type":4,"title":"Trust & Safety","url":"https://medium.com/pinterest-engineering/trust-and-safety/home","topicId":"1ca95a5189fb","source":"topicId"},{"type":3,"title":"Pinterest Careers","url":"https://www.pinterestcareers.com?utm_source=medium&utm_medium=navigation-link&utm_campaign=medium-traffic"}],"colorBehavior":1,"collectionFeatures":[25],"ampLogo":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"header":{"title":"Pinterest Engineering","description":"Inventive engineers building the first visual discovery engine, 300 billion ideas and counting.","backgroundImage":{"id":"1*kDAiebKM-qkprLo3uk5eHg.jpeg","originalWidth":5928,"originalHeight":3952,"focusPercentX":52.142857142857146,"focusPercentY":98.93048128342247},"logoImage":{"id":"1*dXsrUlUXbwyfZ9tiV9viUQ@2x.png","originalWidth":200,"originalHeight":200,"alt":"Pinterest Engineering Blog"},"alignment":2,"layout":6},"subscriberCount":15051,"tagline":"Inventive engineers building the first visual discovery engine, 300 billion ideas and counting.","instagramUsername":"lifeatpinterest","isOptedIntoAurora":false,"isCurationAllowedByDefault":false,"polarisCoverImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"ptsQualifiedAt":1616092781685,"type":"Collection"}},"User":{"ef81ef829bcb":{"userId":"ef81ef829bcb","name":"Pinterest Engineering","username":"Pinterest_Engineering","createdAt":1476394376184,"imageId":"1*iAV-apeVpCJ1h6Znt1AzCg.jpeg","backgroundImageId":"","bio":"https://medium.com/pinterest-engineering | Inventive engineers building the first visual discovery engine https://careers.pinterest.com/","twitterScreenName":"PinterestEng","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[29,12,5,3,19,2,18,1],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"}},"Post":{"7e4c357ac527":{"id":"7e4c357ac527","versionId":"31eb8cd20e2b","creatorId":"ef81ef829bcb","homeCollectionId":"4c5a5f6279b6","title":"Change Data Capture at Pinterest","detectedLanguage":"en","latestVersion":"31eb8cd20e2b","latestPublishedVersion":"31eb8cd20e2b","hasUnpublishedEdits":false,"latestRev":354,"createdAt":1731966535300,"updatedAt":1731985585541,"acceptedAt":0,"firstPublishedAt":1731967978942,"latestPublishedAt":1731967978942,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Liang Mou; Staff Software Engineer, Logging Platform | Elizabeth (Vi) Nguyen; Software Engineer I, Logging Platform |","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*QsqFF3ZJ_vOR_y7i","filter":"","backgroundSize":"","originalWidth":1600,"originalHeight":1066,"strategy":"resample","height":0,"width":0},"wordCount":1526,"imageCount":8,"readingTime":6.891823899371069,"subtitle":"Liang Mou; Staff Software Engineer, Logging Platform | Elizabeth (Vi) Nguyen; Software Engineer I, Logging Platform |","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":33,"isBookmarked":false,"tags":[{"slug":"pinterest","name":"Pinterest","postCount":10001,"metadata":{"postCount":10001,"coverImage":{"id":"0*QsqFF3ZJ_vOR_y7i","originalWidth":1600,"originalHeight":1066,"isFeatured":true}},"type":"Tag"},{"slug":"engineering","name":"Engineering","postCount":56462,"metadata":{"postCount":56462,"coverImage":{"id":"1*Ztjsdd4j4skhPERiV-NB8w.jpeg","originalWidth":1000,"originalHeight":532,"isFeatured":true}},"type":"Tag"},{"slug":"infrastructure","name":"Infrastructure","postCount":14746,"metadata":{"postCount":14746,"coverImage":{"id":"1*SGqDS2rAoWQ8nXFeAd_wmg.png","originalWidth":1600,"originalHeight":800,"isFeatured":true}},"type":"Tag"},{"slug":"sql","name":"Sql","postCount":39069,"metadata":{"postCount":39069,"coverImage":{"id":"1*NUH2WcNYayhwjeKLyEZt-w.png","originalWidth":810,"originalHeight":388,"isFeatured":true}},"type":"Tag"},{"slug":"database","name":"Database","postCount":52741,"metadata":{"postCount":52741,"coverImage":{"id":"1*BlIUc5iWvR2_7HGNy6YEYQ.png","originalWidth":601,"originalHeight":311,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":1,"links":{"entries":[{"url":"https://www.apache.org/","alts":[],"httpStatus":200},{"url":"https://issues.apache.org/jira/browse/KAFKA-9841","alts":[],"httpStatus":200},{"url":"https://debezium.io/","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1731967979592},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":330,"sectionCount":1,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"change-data-capture-at-pinterest","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"change-data-capture-at-pinterest-7e4c357ac527","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*QsqFF3ZJ_vOR_y7i","originalWidth":1600,"originalHeight":1066,"isFeatured":true}},{"name":"70d2","type":3,"text":"Change Data Capture at Pinterest","markups":[],"alignment":1},{"name":"53fd","type":1,"text":"Liang Mou; Staff Software Engineer, Logging Platform | Elizabeth (Vi) Nguyen; Software Engineer I…","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Liang Mou; Staff Software Engineer, Logging Platform | Elizabeth (Vi) Nguyen; Software Engineer I, Logging Platform |"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"4c5a5f6279b6","isNewsletter":false,"newsletterId":"201b6e7500e4","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":6,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"70d2","type":3,"text":"Change Data Capture at Pinterest","markups":[]},{"name":"53fd","type":1,"text":"Liang Mou; Staff Software Engineer, Logging Platform | Elizabeth (Vi) Nguyen; Software Engineer I, Logging Platform |","markups":[]},{"name":"ebcf","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"0*QsqFF3ZJ_vOR_y7i","originalWidth":1600,"originalHeight":1066,"isFeatured":true}},{"name":"7e68","type":1,"text":"In today’s data-driven world, businesses need to process and analyze data in real-time to make informed decisions. Change Data Capture (CDC) is a crucial technology that enables organizations to efficiently track and capture…","markups":[]}],"sections":[{"name":"757f","startIndex":0}]},"isFullContent":false,"subtitle":"Liang Mou; Staff Software Engineer, Logging Platform | Elizabeth (Vi) Nguyen; Software Engineer I, Logging Platform |"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"0dba3afb4609":{"id":"0dba3afb4609","versionId":"5cfbf6e8fd4e","creatorId":"ef81ef829bcb","homeCollectionId":"4c5a5f6279b6","title":"Resource Management with Apache YuniKorn™ for Apache Spark™ on AWS EKS at Pinterest","detectedLanguage":"en","latestVersion":"5cfbf6e8fd4e","latestPublishedVersion":"5cfbf6e8fd4e","hasUnpublishedEdits":false,"latestRev":232,"createdAt":1729632755248,"updatedAt":1731612646618,"acceptedAt":0,"firstPublishedAt":1729704034125,"latestPublishedAt":1729873243788,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Yongjun Zhang; Staff Software Engineer | William Tom; Staff Software Engineer | Sandeep Kumar; Software Engineer | Hengzhe Guo; Software…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*TmkTRuA4ZWGoBpKR","filter":"","backgroundSize":"","originalWidth":732,"originalHeight":650,"strategy":"resample","height":0,"width":0},"wordCount":1834,"imageCount":3,"readingTime":7.470754716981132,"subtitle":"Yongjun Zhang; Staff Software Engineer | William Tom; Staff Software Engineer | Sandeep Kumar; Software Engineer | Hengzhe Guo; Software…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":12,"isBookmarked":false,"tags":[{"slug":"pinterest","name":"Pinterest","postCount":10001,"metadata":{"postCount":10001,"coverImage":{"id":"0*QsqFF3ZJ_vOR_y7i","originalWidth":1600,"originalHeight":1066,"isFeatured":true}},"type":"Tag"},{"slug":"engineering","name":"Engineering","postCount":56462,"metadata":{"postCount":56462,"coverImage":{"id":"1*Ztjsdd4j4skhPERiV-NB8w.jpeg","originalWidth":1000,"originalHeight":532,"isFeatured":true}},"type":"Tag"},{"slug":"cloud-computing","name":"Cloud Computing","postCount":93622,"metadata":{"postCount":93622,"coverImage":{"id":"1*BqVsCBa2mLv1UWQrdhjX5w.png","originalWidth":1500,"originalHeight":750,"isFeatured":true,"alt":"How I Am Using a Lifetime 100% Free Server"}},"type":"Tag"},{"slug":"batch-processing","name":"Batch Processing","postCount":613,"metadata":{"postCount":613,"coverImage":{"id":"1*UoFrUCzdRPMQS7e7dbVplw.png","originalWidth":1792,"originalHeight":1024,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":1,"links":{"entries":[{"url":"https://medium.com/pinterest-engineering/efficient-resource-management-at-pinterests-batch-processing-platform-61512ad98a95","alts":[{"type":3,"url":"medium://p/61512ad98a95"},{"type":2,"url":"medium://p/61512ad98a95"}],"httpStatus":200},{"url":"https://platformengineering.org/talks-library/so-long-hadoop-moving-data-platforms-to-kubernetes#:~:text=Working%20with%20containers%20was%20way,across%20public%20clouds%20and%20environments","alts":[],"httpStatus":200},{"url":"https://yunikorn.apache.org/docs/get_started/core_features/","alts":[],"httpStatus":200},{"url":"https://yunikorn.apache.org/docs/get_started/core_features/#:~:text=The%20default%20K8s%20scheduler%20simply,etc%2C%20while%20making%20scheduling%20decisions.","alts":[],"httpStatus":200},{"url":"https://thenewstack.io/kubernetes-vs-yarn-for-resource-management-how-to-choose/#:~:text=Kubernetes%20can%20manage%20containerized%20applications,tasks%20within%20the%20Hadoop%20ecosystem","alts":[],"httpStatus":200},{"url":"https://blog.cloudera.com/yunikorn-a-universal-resources-scheduler/","alts":[],"httpStatus":200},{"url":"https://www.pinterestcareers.com/?utm_source=Medium&utm_campaign=engineering-Q42024&utm_medium=blogarticle&utm_content=Zhang","alts":[],"httpStatus":200},{"url":"https://issues.apache.org/jira/browse/YARN-2496","alts":[],"httpStatus":200},{"url":"https://issues.apache.org/jira/browse/YUNIKORN-2030","alts":[],"httpStatus":200},{"url":"https://issues.apache.org/jira/browse/YUNIKORN-970","alts":[],"httpStatus":200},{"url":"https://issues.apache.org/jira/browse/YARN-2497","alts":[],"httpStatus":200},{"url":"https://issues.apache.org/jira/browse/YUNIKORN-790","alts":[],"httpStatus":200},{"url":"https://issues.apache.org/jira/browse/YUNIKORN-1948","alts":[],"httpStatus":200},{"url":"https://issues.apache.org/jira/browse/YUNIKORN-1385","alts":[],"httpStatus":200},{"url":"https://issues.apache.org/jira/browse/YUNIKORN-2115","alts":[],"httpStatus":200},{"url":"https://issues.apache.org/jira/browse/YUNIKORN-1628","alts":[],"httpStatus":200},{"url":"https://developers.google.com/optimization","alts":[],"httpStatus":200},{"url":"https://medium.com/pinterest-engineering","alts":[{"type":2,"url":"medium://pinterest-engineering"},{"type":3,"url":"medium://pinterest-engineering"}],"httpStatus":200},{"url":"https://www.pinterestlabs.com/?utm_source=Medium&utm_campaign=engineering-Q42024&utm_medium=blogarticle&utm_content=Zhang","alts":[],"httpStatus":200},{"url":"https://developers.google.com/optimization/cp/cp_solver","alts":[],"httpStatus":200},{"url":"https://issues.apache.org/jira/secure/attachment/13051969/yunikornResourceUsageVisibility.pdf","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1729873244706},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":84,"sectionCount":1,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"resource-management-with-apache-yunikorn-for-apache-spark-on-aws-eks-at-pinterest","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"resource-management-with-apache-yunikorn-for-apache-spark-on-aws-eks-at-pinterest-0dba3afb4609","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*TmkTRuA4ZWGoBpKR","originalWidth":732,"originalHeight":650,"isFeatured":true}},{"name":"b06f","type":3,"text":"Resource Management with Apache YuniKorn™ for Apache Spark™ on AWS EKS at Pinterest","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Yongjun Zhang; Staff Software Engineer | William Tom; Staff Software Engineer | Sandeep Kumar; Software Engineer | Hengzhe Guo; Software…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"4c5a5f6279b6","isNewsletter":false,"newsletterId":"8d5482bfbce1","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":6,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"b06f","type":3,"text":"Resource Management with Apache YuniKorn™ for Apache Spark™ on AWS EKS at Pinterest","markups":[]},{"name":"ff28","type":1,"text":"Yongjun Zhang; Staff Software Engineer | William Tom; Staff Software Engineer | Sandeep Kumar; Software Engineer | Hengzhe Guo; Software Engineer |","markups":[]},{"name":"0fcc","type":1,"text":"Monarch, Pinterest’s Batch Processing Platform, was initially designed to support Pinterest’s ever-growing number of Apache Spark and MapReduce workloads at scale. During Monarch’s inception in 2016, the most…","markups":[]}],"sections":[{"name":"d747","startIndex":0}]},"isFullContent":false,"subtitle":"Yongjun Zhang; Staff Software Engineer | William Tom; Staff Software Engineer | Sandeep Kumar; Software Engineer | Hengzhe Guo; Software…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"4faeb652e385":{"id":"4faeb652e385","versionId":"99a7f56adaa8","creatorId":"ef81ef829bcb","homeCollectionId":"4c5a5f6279b6","title":"Ray Batch Inference at Pinterest (Part 3)","detectedLanguage":"en","latestVersion":"99a7f56adaa8","latestPublishedVersion":"99a7f56adaa8","hasUnpublishedEdits":false,"latestRev":427,"createdAt":1728583555410,"updatedAt":1731657376429,"acceptedAt":0,"firstPublishedAt":1728655932040,"latestPublishedAt":1730318880743,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Alex Wang; Software Engineer I | Lei Pan; Software Engineer II | Raymond Lee; Senior Software Engineer | Saurabh Vishwas Joshi; Senior…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*sW5vo34WgRmRdB8M","filter":"","backgroundSize":"","originalWidth":1600,"originalHeight":1399,"strategy":"resample","height":0,"width":0},"wordCount":2136,"imageCount":9,"readingTime":9.260377358490565,"subtitle":"Alex Wang; Software Engineer I | Lei Pan; Software Engineer II | Raymond Lee; Senior Software Engineer | Saurabh Vishwas Joshi; Senior…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":48,"isBookmarked":false,"tags":[{"slug":"pinterest","name":"Pinterest","postCount":10001,"metadata":{"postCount":10001,"coverImage":{"id":"0*QsqFF3ZJ_vOR_y7i","originalWidth":1600,"originalHeight":1066,"isFeatured":true}},"type":"Tag"},{"slug":"engineering","name":"Engineering","postCount":56462,"metadata":{"postCount":56462,"coverImage":{"id":"1*Ztjsdd4j4skhPERiV-NB8w.jpeg","originalWidth":1000,"originalHeight":532,"isFeatured":true}},"type":"Tag"},{"slug":"open-source","name":"Open Source","postCount":51189,"metadata":{"postCount":51189,"coverImage":{"id":"1*U4dT88z1buEiUtw_Y8UViQ.png","originalWidth":2240,"originalHeight":1260,"isFeatured":true}},"type":"Tag"},{"slug":"kubernetes","name":"Kubernetes","postCount":60138,"metadata":{"postCount":60138,"coverImage":{"id":"1*t5dwn8IabnCdEpoO-6Toog.png","originalWidth":1920,"originalHeight":1080,"isFeatured":true,"alt":"Kubernetes"}},"type":"Tag"},{"slug":"machine-learning","name":"Machine Learning","postCount":354532,"metadata":{"postCount":354532,"coverImage":{"id":"1*8yJrgGPFwHBY8lpIFg7ERQ.png","originalWidth":940,"originalHeight":788,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":2,"links":{"entries":[{"url":"https://wandb.ai/site","alts":[],"httpStatus":200},{"url":"https://huggingface.co/","alts":[],"httpStatus":200},{"url":"https://spark.apache.org/","alts":[],"httpStatus":200},{"url":"https://en.wikipedia.org/wiki/Software_development_kit","alts":[],"httpStatus":200},{"url":"https://en.wikipedia.org/wiki/Cross-entropy","alts":[],"httpStatus":200},{"url":"https://en.wikipedia.org/wiki/Knowledge_distillation","alts":[],"httpStatus":200},{"url":"https://blog.vllm.ai/2023/06/20/vllm.html","alts":[],"httpStatus":200},{"url":"https://ray-project.github.io/kuberay/","alts":[],"httpStatus":200},{"url":"https://pytorch.org/tutorials/beginner/basics/data_tutorial.html","alts":[],"httpStatus":200},{"url":"https://arxiv.org/abs/2309.06180","alts":[],"httpStatus":200},{"url":"https://www.anyscale.com/blog/streaming-distributed-execution-across-cpus-and-gpus","alts":[],"httpStatus":200},{"url":"https://huggingface.co/docs/text-generation-inference/en/index","alts":[],"httpStatus":200},{"url":"https://mlflow.org/","alts":[],"httpStatus":200},{"url":"https://docs.vllm.ai/en/stable/","alts":[],"httpStatus":200},{"url":"https://www.pinterestcareers.com/?utm_source=Medium&utm_campaign=engineering-Q42024&utm_medium=blogarticle&utm_content=Wang","alts":[],"httpStatus":200},{"url":"https://medium.com/pinterest-engineering/ray-infrastructure-at-pinterest-0248efe4fd52","alts":[{"type":2,"url":"medium://p/0248efe4fd52"},{"type":3,"url":"medium://p/0248efe4fd52"}],"httpStatus":200},{"url":"https://arrow.apache.org/docs/index.html","alts":[],"httpStatus":200},{"url":"https://arrow.apache.org/docs/python/index.html","alts":[],"httpStatus":200},{"url":"https://spark.apache.org/docs/1.6.3/api/java/index.html?org/apache/spark/Accumulator.html","alts":[],"httpStatus":404},{"url":"https://medium.com/pinterest-engineering/last-mile-data-processing-with-ray-629affbf34ff","alts":[{"type":3,"url":"medium://p/629affbf34ff"},{"type":2,"url":"medium://p/629affbf34ff"}],"httpStatus":200},{"url":"https://docs.ray.io/en/latest/ray-core/tasks.html","alts":[],"httpStatus":200},{"url":"https://docs.ray.io/en/latest/ray-core/actors.html","alts":[],"httpStatus":200},{"url":"https://docs.ray.io/en/latest/ray-overview/use-cases.html#batch-inference","alts":[],"httpStatus":200},{"url":"https://docs.ray.io/en/latest/data/data-internals.html#block-formats","alts":[],"httpStatus":200},{"url":"https://docs.ray.io/en/latest/data/data.html","alts":[],"httpStatus":200},{"url":"https://docs.ray.io/en/latest/ray-core/objects/object-spilling.html","alts":[],"httpStatus":200},{"url":"https://medium.com/pinterest-engineering","alts":[{"type":2,"url":"medium://pinterest-engineering"},{"type":3,"url":"medium://pinterest-engineering"}],"httpStatus":200},{"url":"https://www.pinterestlabs.com/?utm_source=Medium&utm_campaign=engineering-Q42024&utm_medium=blogarticle&utm_content=Wang","alts":[],"httpStatus":200},{"url":"https://developers.google.com/machine-learning/crash-course/classification/roc-and-auc","alts":[],"httpStatus":200},{"url":"https://docs.ray.io/en/latest/cluster/kubernetes/user-guides/configuring-autoscaling.html","alts":[],"httpStatus":200},{"url":"https://docs.ray.io/en/latest/data/api/doc/ray.data.Dataset.map_batches.html#ray.data.Dataset.map_batches","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1730318881410},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":232,"sectionCount":1,"readingList":0,"topics":[{"topicId":"1eca0103fff3","slug":"machine-learning","createdAt":1534449726145,"deletedAt":0,"image":{"id":"1*gFJS3amhZEg_z39D5EErVg@2x.png","originalWidth":2800,"originalHeight":1750},"name":"Machine Learning","description":"Teaching the learners.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Machine Learning News and Articles — Medium","type":"Topic"},{"topicId":"ae5d4995e225","slug":"data-science","createdAt":1493923906289,"deletedAt":0,"image":{"id":"1*NHWOEki_ncCX-xzbKtkEWw@2x.jpeg","originalWidth":5760,"originalHeight":3840},"name":"Data Science","description":"Query this.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Data Science News and Articles — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"ray-batch-inference-at-pinterest-part-3","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"ray-batch-inference-at-pinterest-part-3-4faeb652e385","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*sW5vo34WgRmRdB8M","originalWidth":1600,"originalHeight":1399,"isFeatured":true}},{"name":"7f47","type":3,"text":"Ray Batch Inference at Pinterest (Part 3)","markups":[],"alignment":1},{"name":"9534","type":1,"text":"Alex Wang; Software Engineer I | Lei Pan; Software Engineer II | Raymond Lee; Senior…","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Alex Wang; Software Engineer I | Lei Pan; Software Engineer II | Raymond Lee; Senior Software Engineer | Saurabh Vishwas Joshi; Senior…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"4c5a5f6279b6","isNewsletter":false,"newsletterId":"dc22ccbf04a0","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":1,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"7f47","type":3,"text":"Ray Batch Inference at Pinterest (Part 3)","markups":[]},{"name":"9534","type":1,"text":"Alex Wang; Software Engineer I | Lei Pan; Software Engineer II | Raymond Lee; Senior Software Engineer | Saurabh Vishwas Joshi; Senior Staff Software Engineer | Chia-Wei Chen; Senior Software Engineer |","markups":[]},{"name":"2025","type":3,"text":"Introduction","markups":[]},{"name":"3564","type":1,"text":"In Part 1 of our blog series, we discussed why we chose to use Ray(™) as a last…","markups":[{"type":3,"start":3,"end":9,"href":"https://medium.com/pinterest-engineering/last-mile-data-processing-with-ray-629affbf34ff","title":"","rel":"","anchorType":0},{"type":3,"start":173,"end":179,"href":"https://medium.com/pinterest-engineering/ray-infrastructure-at-pinterest-0248efe4fd52","title":"","rel":"","anchorType":0},{"type":3,"start":383,"end":406,"href":"https://docs.ray.io/en/latest/ray-overview/use-cases.html#batch-inference","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"0738","startIndex":0}]},"isFullContent":false,"subtitle":"Alex Wang; Software Engineer I | Lei Pan; Software Engineer II | Raymond Lee; Senior Software Engineer | Saurabh Vishwas Joshi; Senior…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"e628f8081971":{"id":"e628f8081971","versionId":"fbd3e3d8ea09","creatorId":"ef81ef829bcb","homeCollectionId":"4c5a5f6279b6","title":"Structured DataStore (SDS): Multi-model Data Management With a Unified Serving Stack","detectedLanguage":"en","latestVersion":"fbd3e3d8ea09","latestPublishedVersion":"fbd3e3d8ea09","hasUnpublishedEdits":false,"latestRev":603,"createdAt":1727816149328,"updatedAt":1731698150931,"acceptedAt":0,"firstPublishedAt":1727894069472,"latestPublishedAt":1727894069472,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Authors: Alberto Ordonez Pereira; Senior Staff Software Engineer | Lianghong Xu; Senior Manager, Engineering |","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*L57eiXbiprrKLOrq","filter":"","backgroundSize":"","originalWidth":1519,"originalHeight":992,"strategy":"resample","height":0,"width":0},"wordCount":3538,"imageCount":5,"readingTime":14.184276729559748,"subtitle":"Authors: Alberto Ordonez Pereira; Senior Staff Software Engineer | Lianghong Xu; Senior Manager, Engineering |","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":23,"isBookmarked":false,"tags":[{"slug":"pinterest","name":"Pinterest","postCount":10001,"metadata":{"postCount":10001,"coverImage":{"id":"0*QsqFF3ZJ_vOR_y7i","originalWidth":1600,"originalHeight":1066,"isFeatured":true}},"type":"Tag"},{"slug":"engineering","name":"Engineering","postCount":56462,"metadata":{"postCount":56462,"coverImage":{"id":"1*Ztjsdd4j4skhPERiV-NB8w.jpeg","originalWidth":1000,"originalHeight":532,"isFeatured":true}},"type":"Tag"},{"slug":"distributed-systems","name":"Distributed Systems","postCount":9248,"metadata":{"postCount":9248,"coverImage":{"id":"0*PisxKC_f_LoxLQ5D","originalWidth":1024,"originalHeight":1024,"isFeatured":true}},"type":"Tag"},{"slug":"database","name":"Database","postCount":52741,"metadata":{"postCount":52741,"coverImage":{"id":"1*BlIUc5iWvR2_7HGNy6YEYQ.png","originalWidth":601,"originalHeight":311,"isFeatured":true}},"type":"Tag"},{"slug":"tidb","name":"Tidb","postCount":113,"metadata":{"postCount":113,"coverImage":{"id":"1*xhCmUPCGOC-tWfZaWqmUEg.png","originalWidth":1024,"originalHeight":1024,"isFeatured":true,"alt":"Generated Image by Microsoft Bing"}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":1,"links":{"entries":[{"url":"https://thrift.apache.org/","alts":[],"httpStatus":200},{"url":"https://medium.com/pinterest-engineering/tidb-adoption-at-pinterest-1130ab787a10","alts":[{"type":2,"url":"medium://p/1130ab787a10"},{"type":3,"url":"medium://p/1130ab787a10"}],"httpStatus":200},{"url":"https://medium.com/pinterest-engineering/hbase-deprecation-at-pinterest-8a99e6c8e6b7","alts":[{"type":3,"url":"medium://p/8a99e6c8e6b7"},{"type":2,"url":"medium://p/8a99e6c8e6b7"}],"httpStatus":200},{"url":"https://docs.google.com/document/d/1j0nzaSbCtduKYQiM9GqUAggOEZIxCHCbldDdzYOjWOM/edit#bookmark=id.2z99ev3l04kb","alts":[],"httpStatus":401}],"version":"0.3","generatedAt":1727894070145},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":5,"sectionCount":1,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"structured-datastore-sds-multi-model-data-management-with-a-unified-serving-stack","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"structured-datastore-sds-multi-model-data-management-with-a-unified-serving-stack-e628f8081971","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*L57eiXbiprrKLOrq","originalWidth":1519,"originalHeight":992,"isFeatured":true}},{"name":"4927","type":3,"text":"Structured DataStore (SDS): Multi-model Data Management With a Unified Serving Stack","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Authors: Alberto Ordonez Pereira; Senior Staff Software Engineer | Lianghong Xu; Senior Manager, Engineering |"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"4c5a5f6279b6","isNewsletter":false,"newsletterId":"e2e8505270a1","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":1,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"4927","type":3,"text":"Structured DataStore (SDS): Multi-model Data Management With a Unified Serving Stack","markups":[]},{"name":"1717","type":1,"text":"Authors: Alberto Ordonez Pereira; Senior Staff Software Engineer | Lianghong Xu; Senior Manager, Engineering |","markups":[]},{"name":"6124","type":1,"text":"Part 1: HBase Deprecation at Pinterest & Part 2: TiDB Adoption at Pinterest","markups":[{"type":3,"start":8,"end":38,"href":"https://medium.com/pinterest-engineering/hbase-deprecation-at-pinterest-8a99e6c8e6b7","title":"","rel":"","anchorType":0},{"type":3,"start":49,"end":75,"href":"https://medium.com/pinterest-engineering/tidb-adoption-at-pinterest-1130ab787a10","title":"","rel":"","anchorType":0}]},{"name":"e7cb","type":1,"text":"In this blog, we will show how the team transitioned from supporting multiple query serving stacks to provide different data models to…","markups":[]}],"sections":[{"name":"779a","startIndex":0}]},"isFullContent":false,"subtitle":"Authors: Alberto Ordonez Pereira; Senior Staff Software Engineer | Lianghong Xu; Senior Manager, Engineering |"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"0248efe4fd52":{"id":"0248efe4fd52","versionId":"5ccbfbf6c7ae","creatorId":"ef81ef829bcb","homeCollectionId":"4c5a5f6279b6","title":"Ray Infrastructure at Pinterest","detectedLanguage":"en","latestVersion":"5ccbfbf6c7ae","latestPublishedVersion":"5ccbfbf6c7ae","hasUnpublishedEdits":false,"latestRev":864,"createdAt":1718378811136,"updatedAt":1732328936351,"acceptedAt":0,"firstPublishedAt":1718659131458,"latestPublishedAt":1718660119873,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Chia-Wei Chen; Sr. Software Engineer | Raymond Lee; Sr. Software Engineer | Alex Wang; Software Engineer I | Saurabh Vishwas Joshi; Sr…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*LNd-DrZO9Kcp-Uhs","filter":"","backgroundSize":"","originalWidth":1600,"originalHeight":785,"strategy":"resample","height":0,"width":0},"wordCount":3042,"imageCount":16,"readingTime":13.029245283018868,"subtitle":"Chia-Wei Chen; Sr. Software Engineer | Raymond Lee; Sr. Software Engineer | Alex Wang; Software Engineer I | Saurabh Vishwas Joshi; Sr…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":66,"isBookmarked":false,"tags":[{"slug":"pinterest","name":"Pinterest","postCount":10001,"metadata":{"postCount":10001,"coverImage":{"id":"0*QsqFF3ZJ_vOR_y7i","originalWidth":1600,"originalHeight":1066,"isFeatured":true}},"type":"Tag"},{"slug":"engineering","name":"Engineering","postCount":56462,"metadata":{"postCount":56462,"coverImage":{"id":"1*Ztjsdd4j4skhPERiV-NB8w.jpeg","originalWidth":1000,"originalHeight":532,"isFeatured":true}},"type":"Tag"},{"slug":"machine-learning","name":"Machine Learning","postCount":354532,"metadata":{"postCount":354532,"coverImage":{"id":"1*8yJrgGPFwHBY8lpIFg7ERQ.png","originalWidth":940,"originalHeight":788,"isFeatured":true}},"type":"Tag"},{"slug":"mlops","name":"Mlops","postCount":8141,"metadata":{"postCount":8141,"coverImage":{"id":"1*SuUk0NrQ-NkFf66hPQcHBA.png","originalWidth":940,"originalHeight":916,"isFeatured":true}},"type":"Tag"},{"slug":"kubernetes","name":"Kubernetes","postCount":60138,"metadata":{"postCount":60138,"coverImage":{"id":"1*t5dwn8IabnCdEpoO-6Toog.png","originalWidth":1920,"originalHeight":1080,"isFeatured":true,"alt":"Kubernetes"}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":5,"links":{"entries":[{"url":"https://airflow.apache.org/docs/apache-airflow/stable/howto/operator/python.html#pythonoperator","alts":[],"httpStatus":200},{"url":"https://www.oligo.security/blog/shadowray-attack-ai-workloads-actively-exploited-in-the-wild","alts":[],"httpStatus":200},{"url":"https://www.envoyproxy.io/","alts":[],"httpStatus":200},{"url":"https://nvd.nist.gov/vuln/detail/CVE-2023-48022","alts":[],"httpStatus":200},{"url":"https://docs.ray.io/en/latest/cluster/kubernetes/user-guides/logging.html#log-persistence","alts":[],"httpStatus":200},{"url":"https://docs.ray.io/en/latest/cluster/vms/user-guides/launching-clusters/on-premises.html","alts":[],"httpStatus":200},{"url":"https://docs.ray.io/en/latest/ray-core/configure.html?highlight=tls#step-1-generate-a-private-key-and-self-signed-certificate-for-ca","alts":[],"httpStatus":200},{"url":"https://docs.ray.io/en/latest/data/api/doc/ray.data.Dataset.map_batches.html","alts":[],"httpStatus":200},{"url":"https://docs.ray.io/en/latest/cluster/vms/user-guides/large-cluster-best-practices.html","alts":[],"httpStatus":200},{"url":"https://docs.ray.io/en/latest/ray-contribute/testing-tips.html","alts":[],"httpStatus":200},{"url":"https://kubernetes.io/docs/concepts/services-networking/network-policies/","alts":[],"httpStatus":200},{"url":"https://medium.com/pinterest-engineering/goku-building-a-scalable-and-high-performant-time-series-database-system-a8ff5758a181","alts":[{"type":3,"url":"medium://p/a8ff5758a181"},{"type":2,"url":"medium://p/a8ff5758a181"}],"httpStatus":200},{"url":"https://www.youtube.com/watch?v=I1eTzQs9QkU","alts":[{"type":2,"url":"vnd.youtube://www.youtube.com/watch?v=I1eTzQs9QkU&feature=applinks"},{"type":3,"url":"vnd.youtube://www.youtube.com/watch?v=I1eTzQs9QkU&feature=applinks"}],"httpStatus":200},{"url":"https://medium.com/pinterest-engineering/last-mile-data-processing-with-ray-629affbf34ff","alts":[{"type":3,"url":"medium://p/629affbf34ff"},{"type":2,"url":"medium://p/629affbf34ff"}],"httpStatus":200},{"url":"https://medium.com/pinterest-engineering/spinner-pinterests-workflow-platform-c5bbe190ba5","alts":[{"type":3,"url":"medium://p/c5bbe190ba5"},{"type":2,"url":"medium://p/c5bbe190ba5"}],"httpStatus":200},{"url":"https://medium.com/pinterest-engineering/pincompute-a-kubernetes-backed-general-purpose-compute-platform-for-pinterest-8ad408df2d6f","alts":[{"type":2,"url":"medium://p/8ad408df2d6f"},{"type":3,"url":"medium://p/8ad408df2d6f"}],"httpStatus":200}],"version":"0.3","generatedAt":1718660120927},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":452,"sectionCount":1,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"ray-infrastructure-at-pinterest","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"ray-infrastructure-at-pinterest-0248efe4fd52","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*LNd-DrZO9Kcp-Uhs","originalWidth":1600,"originalHeight":785,"isFeatured":true}},{"name":"131a","type":3,"text":"Ray Infrastructure at Pinterest","markups":[],"alignment":1},{"name":"abf8","type":1,"text":"Chia-Wei Chen; Sr. Software Engineer | Raymond Lee; Sr. Software Engineer | Alex Wang; Software Engineer…","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Chia-Wei Chen; Sr. Software Engineer | Raymond Lee; Sr. Software Engineer | Alex Wang; Software Engineer I | Saurabh Vishwas Joshi; Sr…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"4c5a5f6279b6","isNewsletter":false,"newsletterId":"8aebb7a470ef","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":1,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"131a","type":3,"text":"Ray Infrastructure at Pinterest","markups":[]},{"name":"abf8","type":1,"text":"Chia-Wei Chen; Sr. Software Engineer | Raymond Lee; Sr. Software Engineer | Alex Wang; Software Engineer I | Saurabh Vishwas Joshi; Sr. Staff Software Engineer | Karthik Anantha Padmanabhan; Sr. Manager, Engineering | Se Won Jang; Sr. Manager, Engineering |","markups":[]},{"name":"7f54","type":3,"text":"The Journey of our Ray Infrastructure","markups":[]},{"name":"25ff","type":1,"text":"In the Part 1 of our blog series, we discussed…","markups":[{"type":3,"start":7,"end":13,"href":"https://medium.com/pinterest-engineering/last-mile-data-processing-with-ray-629affbf34ff","title":"","rel":"","anchorType":0},{"type":3,"start":425,"end":476,"href":"https://www.youtube.com/watch?v=I1eTzQs9QkU","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"3bcb","startIndex":0}]},"isFullContent":false,"subtitle":"Chia-Wei Chen; Sr. Software Engineer | Raymond Lee; Sr. Software Engineer | Alex Wang; Software Engineer I | Saurabh Vishwas Joshi; Sr…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"3253d2432a0c":{"id":"3253d2432a0c","versionId":"1e8a9a62d0db","creatorId":"ef81ef829bcb","homeCollectionId":"4c5a5f6279b6","title":"Redesigning Pinterest’s Ad Serving Systems with Zero Downtime","detectedLanguage":"en","latestVersion":"1e8a9a62d0db","latestPublishedVersion":"1e8a9a62d0db","hasUnpublishedEdits":false,"latestRev":288,"createdAt":1717706866007,"updatedAt":1732402200260,"acceptedAt":0,"firstPublishedAt":1717774056265,"latestPublishedAt":1717774056265,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Ning Zhang; Principal Engineer | Ang Xu; Principal Machine Learning Engineer | Claire Liu; Staff Software Engineer | Haichen Liu; Staff…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*aMYxSHF7dZPDGetk","filter":"","backgroundSize":"","originalWidth":1024,"originalHeight":1024,"strategy":"resample","height":0,"width":0},"wordCount":1712,"imageCount":2,"readingTime":6.8437106918239,"subtitle":"Ning Zhang; Principal Engineer | Ang Xu; Principal Machine Learning Engineer | Claire Liu; Staff Software Engineer | Haichen Liu; Staff…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":55,"isBookmarked":false,"tags":[{"slug":"pinterest","name":"Pinterest","postCount":10001,"metadata":{"postCount":10001,"coverImage":{"id":"0*QsqFF3ZJ_vOR_y7i","originalWidth":1600,"originalHeight":1066,"isFeatured":true}},"type":"Tag"},{"slug":"engineering","name":"Engineering","postCount":56462,"metadata":{"postCount":56462,"coverImage":{"id":"1*Ztjsdd4j4skhPERiV-NB8w.jpeg","originalWidth":1000,"originalHeight":532,"isFeatured":true}},"type":"Tag"},{"slug":"monetization","name":"Monetization","postCount":15159,"metadata":{"postCount":15159,"coverImage":{"id":"1*RTK8vlF_I82nVS2JCN7p3A.jpeg","originalWidth":1280,"originalHeight":1280}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":2,"links":{"entries":[{"url":"https://www.pinterestcareers.com/?utm_source=Medium&utm_campaign=engineering-Q22024&utm_medium=blogarticle&utm_content=Hu","alts":[],"httpStatus":200},{"url":"https://medium.com/pinterest-engineering","alts":[{"type":3,"url":"medium://pinterest-engineering"},{"type":2,"url":"medium://pinterest-engineering"}],"httpStatus":200},{"url":"https://www.pinterestlabs.com/?utm_source=Medium&utm_campaign=engineering-Q22024&utm_medium=blogarticle&utm_content=Hu","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1717774056910},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":305,"sectionCount":1,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"redesigning-pinterests-ad-serving-systems-with-zero-downtime","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"redesigning-pinterests-ad-serving-systems-with-zero-downtime-3253d2432a0c","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*aMYxSHF7dZPDGetk","originalWidth":1024,"originalHeight":1024,"isFeatured":true}},{"name":"1c82","type":3,"text":"Redesigning Pinterest’s Ad Serving Systems with Zero Downtime","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Ning Zhang; Principal Engineer | Ang Xu; Principal Machine Learning Engineer | Claire Liu; Staff Software Engineer | Haichen Liu; Staff…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"4c5a5f6279b6","isNewsletter":false,"newsletterId":"7e01315078e8","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":6,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"1c82","type":3,"text":"Redesigning Pinterest’s Ad Serving Systems with Zero Downtime","markups":[]},{"name":"0c98","type":1,"text":"Ning Zhang; Principal Engineer | Ang Xu; Principal Machine Learning Engineer | Claire Liu; Staff Software Engineer | Haichen Liu; Staff Software Engineer | Yiran Zhao; Staff Software Engineer | Haoyu He; Sr. Software Engineer | Sergei Radutnuy; Sr. Machine Learning Engineer | Di An; Sr. Software Engineer | Danyal…","markups":[]}],"sections":[{"name":"61ea","startIndex":0}]},"isFullContent":false,"subtitle":"Ning Zhang; Principal Engineer | Ang Xu; Principal Machine Learning Engineer | Claire Liu; Staff Software Engineer | Haichen Liu; Staff…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"9e0b9d35a11f":{"id":"9e0b9d35a11f","versionId":"2924c1212bfc","creatorId":"ef81ef829bcb","homeCollectionId":"4c5a5f6279b6","title":"Web Performance Regression Detection (Part 2 of 3)","detectedLanguage":"en","latestVersion":"2924c1212bfc","latestPublishedVersion":"2924c1212bfc","hasUnpublishedEdits":false,"latestRev":279,"createdAt":1716307239330,"updatedAt":1732538679175,"acceptedAt":0,"firstPublishedAt":1716567393278,"latestPublishedAt":1716926302509,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Michelle Vu | Web Performance Engineer;","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*77TKUwq5GXvKtrNQ2WEOzg.png","filter":"","backgroundSize":"","originalWidth":1223,"originalHeight":546,"strategy":"resample","height":0,"width":0},"wordCount":1442,"imageCount":7,"readingTime":6.491509433962264,"subtitle":"Michelle Vu | Web Performance Engineer;","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":20,"isBookmarked":false,"tags":[{"slug":"pinner-experience","name":"Pinner Experience","postCount":21,"metadata":{"postCount":21,"coverImage":{"id":"1*abkCABc8a7p-Ue6g0HNYkA.png","originalWidth":940,"originalHeight":580,"isFeatured":true}},"type":"Tag"},{"slug":"pinterest","name":"Pinterest","postCount":10001,"metadata":{"postCount":10001,"coverImage":{"id":"0*QsqFF3ZJ_vOR_y7i","originalWidth":1600,"originalHeight":1066,"isFeatured":true}},"type":"Tag"},{"slug":"engineering","name":"Engineering","postCount":56462,"metadata":{"postCount":56462,"coverImage":{"id":"1*Ztjsdd4j4skhPERiV-NB8w.jpeg","originalWidth":1000,"originalHeight":532,"isFeatured":true}},"type":"Tag"},{"slug":"performance","name":"Performance","postCount":29126,"metadata":{"postCount":29126,"coverImage":{"id":"1*KNsJIR3pEoni-r-QimaAjQ.jpeg","originalWidth":976,"originalHeight":549}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":1,"links":{"entries":[{"url":"https://www.pinterestcareers.com/?utm_source=Medium&utm_campaign=engineering-Q22024&utm_medium=blogarticle&utm_content=Vu","alts":[],"httpStatus":200},{"url":"https://www.pinterestlabs.com/?utm_source=Medium&utm_campaign=engineering-Q22024&utm_medium=blogarticle&utm_content=Vu","alts":[],"httpStatus":200},{"url":"https://medium.com/pinterest-engineering","alts":[{"type":2,"url":"medium://pinterest-engineering"},{"type":3,"url":"medium://pinterest-engineering"}],"httpStatus":200},{"url":"https://medium.com/pinterest-engineering/web-performance-regression-detection-part-1-of-3-86dcc6d5fce9","alts":[{"type":3,"url":"medium://p/86dcc6d5fce9"},{"type":2,"url":"medium://p/86dcc6d5fce9"}],"httpStatus":200}],"version":"0.3","generatedAt":1716926303285},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":163,"sectionCount":1,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"web-performance-regression-detection-part-2-of-3","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"web-performance-regression-detection-part-2-of-3-9e0b9d35a11f","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*77TKUwq5GXvKtrNQ2WEOzg.png","originalWidth":1223,"originalHeight":546,"isFeatured":true}},{"name":"22ce","type":3,"text":"Web Performance Regression Detection (Part 2 of 3)","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Michelle Vu | Web Performance Engineer;"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"4c5a5f6279b6","isNewsletter":false,"newsletterId":"8373e382e3e2","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":6,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"22ce","type":3,"text":"Web Performance Regression Detection (Part 2 of 3)","markups":[]},{"name":"7025","type":1,"text":"Michelle Vu | Web Performance Engineer;","markups":[]},{"name":"e659","type":3,"text":"Real Time Real User Monitoring","markups":[]},{"name":"0a1e","type":1,"text":"Fighting regressions has been a priority at Pinterest for many years. In part one of this article series, we provided an overview of the performance program at Pinterest. In this second part, we discuss how we monitor and investigate regressions in our Pinner Wait…","markups":[{"type":3,"start":73,"end":81,"href":"https://medium.com/pinterest-engineering/web-performance-regression-detection-part-1-of-3-86dcc6d5fce9","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"c9b1","startIndex":0}]},"isFullContent":false,"subtitle":"Michelle Vu | Web Performance Engineer;"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"8a99e6c8e6b7":{"id":"8a99e6c8e6b7","versionId":"08b8ceae2f63","creatorId":"ef81ef829bcb","homeCollectionId":"4c5a5f6279b6","title":"HBase Deprecation at Pinterest","detectedLanguage":"en","latestVersion":"08b8ceae2f63","latestPublishedVersion":"08b8ceae2f63","hasUnpublishedEdits":false,"latestRev":325,"createdAt":1715200930361,"updatedAt":1732634914165,"acceptedAt":0,"firstPublishedAt":1715629505793,"latestPublishedAt":1715702220900,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Alberto Ordonez Pereira | Senior Staff Software Engineer; Lianghong Xu | Senior Manager, Engineering;","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*Qdb3b6pNaYQqBn5T","filter":"","backgroundSize":"","originalWidth":1253,"originalHeight":391,"strategy":"resample","height":0,"width":0},"wordCount":1285,"imageCount":2,"readingTime":5.232389937106919,"subtitle":"Alberto Ordonez Pereira | Senior Staff Software Engineer; Lianghong Xu | Senior Manager, Engineering;","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":67,"isBookmarked":false,"tags":[{"slug":"pinterest","name":"Pinterest","postCount":10001,"metadata":{"postCount":10001,"coverImage":{"id":"0*QsqFF3ZJ_vOR_y7i","originalWidth":1600,"originalHeight":1066,"isFeatured":true}},"type":"Tag"},{"slug":"engineering","name":"Engineering","postCount":56462,"metadata":{"postCount":56462,"coverImage":{"id":"1*Ztjsdd4j4skhPERiV-NB8w.jpeg","originalWidth":1000,"originalHeight":532,"isFeatured":true}},"type":"Tag"},{"slug":"distributed-systems","name":"Distributed Systems","postCount":9248,"metadata":{"postCount":9248,"coverImage":{"id":"0*PisxKC_f_LoxLQ5D","originalWidth":1024,"originalHeight":1024,"isFeatured":true}},"type":"Tag"},{"slug":"storage","name":"Storage","postCount":8226,"metadata":{"postCount":8226,"coverImage":{"id":"0*HZbQPyjR_KuJat9O","originalWidth":6000,"originalHeight":4000,"isFeatured":true,"unsplashPhotoId":"Uo6ZI3G_BDs"}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":1,"links":{"entries":[{"url":"https://hbase.apache.org/","alts":[],"httpStatus":200},{"url":"https://omid.incubator.apache.org/","alts":[],"httpStatus":200},{"url":"https://medium.com/pinterest-engineering/building-scalable-near-real-time-indexing-on-hbase-7b5eeb411888","alts":[{"type":2,"url":"medium://p/7b5eeb411888"},{"type":3,"url":"medium://p/7b5eeb411888"}],"httpStatus":200},{"url":"https://medium.com/@Pinterest_Engineering/3-innovations-while-unifying-pinterests-key-value-storage-8cdcdf8cf6aa","alts":[{"type":2,"url":"medium://p/8cdcdf8cf6aa"},{"type":3,"url":"medium://p/8cdcdf8cf6aa"}],"httpStatus":200},{"url":"https://medium.com/pinterest-engineering/open-sourcing-rocksplicator-a-real-time-rocksdb-data-replicator-558cd3847a9d","alts":[{"type":3,"url":"medium://p/558cd3847a9d"},{"type":2,"url":"medium://p/558cd3847a9d"}],"httpStatus":200},{"url":"https://medium.com/pinterest-engineering/goku-building-a-scalable-and-high-performant-time-series-database-system-a8ff5758a181","alts":[{"type":2,"url":"medium://p/a8ff5758a181"},{"type":3,"url":"medium://p/a8ff5758a181"}],"httpStatus":200},{"url":"https://medium.com/pinterest-engineering/pinterests-analytics-as-a-platform-on-druid-part-1-of-3-9043776b7b76","alts":[{"type":2,"url":"medium://p/9043776b7b76"},{"type":3,"url":"medium://p/9043776b7b76"}],"httpStatus":200},{"url":"https://www.pinterestcareers.com/?utm_source=Medium&utm_campaign=engineering-Q22024&utm_medium=blogarticle&utm_content=Pereira","alts":[],"httpStatus":200},{"url":"https://medium.com/pinterest-engineering","alts":[{"type":3,"url":"medium://pinterest-engineering"},{"type":2,"url":"medium://pinterest-engineering"}],"httpStatus":200},{"url":"https://www.pinterestlabs.com/?utm_source=Medium&utm_campaign=engineering-Q22024&utm_medium=blogarticle&utm_content=Pereira","alts":[],"httpStatus":500},{"url":"https://github.com/pingcap/tidb","alts":[],"httpStatus":200},{"url":"https://www.starrocks.io/","alts":[],"httpStatus":200},{"url":"https://medium.com/pinterest-engineering/manas-realtime-enabling-changes-to-be-searchable-in-a-blink-of-an-eye-36acc3506843","alts":[{"type":3,"url":"medium://p/36acc3506843"},{"type":2,"url":"medium://p/36acc3506843"}],"httpStatus":200},{"url":"https://medium.com/pinterest-engineering/upgrading-pinterest-to-hbase-1-2-from-0-94-e6e34c157783","alts":[{"type":3,"url":"medium://p/e6e34c157783"},{"type":2,"url":"medium://p/e6e34c157783"}],"httpStatus":200}],"version":"0.3","generatedAt":1715702221880},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":284,"sectionCount":1,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"hbase-deprecation-at-pinterest","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"hbase-deprecation-at-pinterest-8a99e6c8e6b7","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*Qdb3b6pNaYQqBn5T","originalWidth":1253,"originalHeight":391,"isFeatured":true}},{"name":"be83","type":3,"text":"HBase Deprecation at Pinterest","markups":[],"alignment":1},{"name":"0f90","type":1,"text":"Alberto Ordonez Pereira | Senior Staff Software Engineer; Lianghong Xu | Senior Manager, Engineering;","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Alberto Ordonez Pereira | Senior Staff Software Engineer; Lianghong Xu | Senior Manager, Engineering;"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"4c5a5f6279b6","isNewsletter":false,"newsletterId":"0eada3291e95","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":6,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"be83","type":3,"text":"HBase Deprecation at Pinterest","markups":[]},{"name":"0f90","type":1,"text":"Alberto Ordonez Pereira | Senior Staff Software Engineer; Lianghong Xu | Senior Manager, Engineering;","markups":[]},{"name":"7039","type":1,"text":"This blog marks the first of a three-part series describing our journey at Pinterest transition from managing multiple online storage services supported by HBase to a brand new serving architecture with a new datastore and a…","markups":[{"type":3,"start":156,"end":161,"href":"https://hbase.apache.org/","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"3db0","startIndex":0}]},"isFullContent":false,"subtitle":"Alberto Ordonez Pereira | Senior Staff Software Engineer; Lianghong Xu | Senior Manager, Engineering;"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"86dcc6d5fce9":{"id":"86dcc6d5fce9","versionId":"d611c4ad3e61","creatorId":"ef81ef829bcb","homeCollectionId":"4c5a5f6279b6","title":"Web Performance Regression Detection (Part 1 of 3)","detectedLanguage":"en","latestVersion":"d611c4ad3e61","latestPublishedVersion":"d611c4ad3e61","hasUnpublishedEdits":false,"latestRev":46,"createdAt":1713550620473,"updatedAt":1713871686674,"acceptedAt":0,"firstPublishedAt":1713806358412,"latestPublishedAt":1713806358412,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Michelle Vu | Web Performance Engineer","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*TQ4CFjc2Xlmwx4wi","filter":"","backgroundSize":"","originalWidth":507,"originalHeight":1024,"strategy":"resample","height":0,"width":0},"wordCount":604,"imageCount":1,"readingTime":2.479245283018868,"subtitle":"Michelle Vu | Web Performance Engineer","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":34,"isBookmarked":false,"tags":[{"slug":"pinterest","name":"Pinterest","postCount":10001,"metadata":{"postCount":10001,"coverImage":{"id":"0*QsqFF3ZJ_vOR_y7i","originalWidth":1600,"originalHeight":1066,"isFeatured":true}},"type":"Tag"},{"slug":"engineer","name":"Engineer","postCount":3816,"metadata":{"postCount":3816,"coverImage":{"id":"1*mtuXRL6UHqZ5U9B6JtZq-A.jpeg","originalWidth":1024,"originalHeight":1024}},"type":"Tag"},{"slug":"pinner-experience","name":"Pinner Experience","postCount":21,"metadata":{"postCount":21,"coverImage":{"id":"1*abkCABc8a7p-Ue6g0HNYkA.png","originalWidth":940,"originalHeight":580,"isFeatured":true}},"type":"Tag"},{"slug":"performance","name":"Performance","postCount":29126,"metadata":{"postCount":29126,"coverImage":{"id":"1*KNsJIR3pEoni-r-QimaAjQ.jpeg","originalWidth":976,"originalHeight":549}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://medium.com/pinterest-engineering","alts":[{"type":2,"url":"medium://pinterest-engineering"},{"type":3,"url":"medium://pinterest-engineering"}],"httpStatus":200},{"url":"https://www.pinterestcareers.com/?utm_source=Medium&utm_campaign=engineering-Q22024&utm_medium=blogarticle&utm_content=Vu","alts":[],"httpStatus":200},{"url":"https://www.pinterestlabs.com/?utm_source=Medium&utm_campaign=engineering-Q22024&utm_medium=blogarticle&utm_content=Vu","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1713806359152},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":178,"sectionCount":1,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"web-performance-regression-detection-part-1-of-3","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"web-performance-regression-detection-part-1-of-3-86dcc6d5fce9","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*TQ4CFjc2Xlmwx4wi","originalWidth":507,"originalHeight":1024,"isFeatured":true}},{"name":"c8d2","type":3,"text":"Web Performance Regression Detection (Part 1 of 3)","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Michelle Vu | Web Performance Engineer"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"4c5a5f6279b6","isNewsletter":false,"newsletterId":"3dec56dc2a3d","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":6,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"c8d2","type":3,"text":"Web Performance Regression Detection (Part 1 of 3)","markups":[]},{"name":"2557","type":1,"text":"Michelle Vu | Web Performance Engineer","markups":[]},{"name":"4012","type":1,"text":"Detecting, preventing, and resolving performance regressions has been a standard at Pinterest for many years. Over the years, we have seen many examples showing significant business metric movements resulting from performance optimizations and regressions. These concrete examples motivate us to optimize and maintain performance…","markups":[]}],"sections":[{"name":"5444","startIndex":0}]},"isFullContent":false,"subtitle":"Michelle Vu | Web Performance Engineer"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"30bad30dabff":{"id":"30bad30dabff","versionId":"0deb1b30fae7","creatorId":"ef81ef829bcb","homeCollectionId":"4c5a5f6279b6","title":"How we built Text-to-SQL at Pinterest","detectedLanguage":"en","latestVersion":"0deb1b30fae7","latestPublishedVersion":"0deb1b30fae7","hasUnpublishedEdits":false,"latestRev":387,"createdAt":1712091092886,"updatedAt":1712146487367,"acceptedAt":0,"firstPublishedAt":1712093169295,"latestPublishedAt":1712093169295,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Adam Obeng | Data Scientist, Data Platform Science; J.C. Zhong | Tech Lead, Analytics Platform; Charlie Gu | Sr. Manager, Engineering","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*wDKR6-ToiX5UgsUYN41JiQ.png","filter":"","backgroundSize":"","originalWidth":2312,"originalHeight":1230,"strategy":"resample","height":0,"width":0},"wordCount":1782,"imageCount":6,"readingTime":7.6745283018867925,"subtitle":"Adam Obeng | Data Scientist, Data Platform Science; J.C. Zhong | Tech Lead, Analytics Platform; Charlie Gu | Sr. Manager, Engineering","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":718,"isBookmarked":false,"tags":[{"slug":"pinterest","name":"Pinterest","postCount":10001,"metadata":{"postCount":10001,"coverImage":{"id":"0*QsqFF3ZJ_vOR_y7i","originalWidth":1600,"originalHeight":1066,"isFeatured":true}},"type":"Tag"},{"slug":"engineering","name":"Engineering","postCount":56462,"metadata":{"postCount":56462,"coverImage":{"id":"1*Ztjsdd4j4skhPERiV-NB8w.jpeg","originalWidth":1000,"originalHeight":532,"isFeatured":true}},"type":"Tag"},{"slug":"gen-ai-tools","name":"Gen Ai Tools","postCount":543,"metadata":{"postCount":543,"coverImage":{"id":"1*iNNrt1Od7REZ6IZFukxrHA.png","originalWidth":3456,"originalHeight":2234,"isFeatured":true}},"type":"Tag"},{"slug":"text-to-sql","name":"Text To Sql","postCount":132,"metadata":{"postCount":132,"coverImage":{"id":"1*8iNwLv654tonotr5pKnFhw.png","originalWidth":1792,"originalHeight":1024,"isFeatured":true}},"type":"Tag"},{"slug":"querybook","name":"Querybook","postCount":1,"metadata":{"postCount":1,"coverImage":{"id":"1*wDKR6-ToiX5UgsUYN41JiQ.png","originalWidth":2312,"originalHeight":1230,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":27,"links":{"entries":[{"url":"https://querybook.org","alts":[],"httpStatus":200},{"url":"https://python.langchain.com/docs/expression_language/streaming#working-with-input-streams","alts":[],"httpStatus":200},{"url":"https://github.com/pinterest/querybook/blob/1f14756b2ff08b6b9decb4b1d9f5561ac82d2ea3/querybook/server/lib/ai_assistant/prompts/sql_summary_prompt.py#L4","alts":[],"httpStatus":200},{"url":"https://github.com/pinterest/querybook/blob/1f14756b2ff08b6b9decb4b1d9f5561ac82d2ea3/querybook/server/lib/ai_assistant/prompts/table_summary_prompt.py#L4","alts":[],"httpStatus":200},{"url":"https://github.com/pinterest/querybook/blob/1f14756b2ff08b6b9decb4b1d9f5561ac82d2ea3/querybook/server/lib/ai_assistant/prompts/table_select_prompt.py#L4","alts":[],"httpStatus":200},{"url":"https://github.com/pinterest/querybook/blob/master/querybook/server/lib/ai_assistant/prompts/text_to_sql_prompt.py","alts":[],"httpStatus":200},{"url":"https://medium.com/pinterest-engineering","alts":[{"type":2,"url":"medium://pinterest-engineering"},{"type":3,"url":"medium://pinterest-engineering"}],"httpStatus":200},{"url":"https://www.pinterestcareers.com/?utm_source=Medium&utm_campaign=engineering-Q22024&utm_medium=blogarticle&utm_content=Zhong","alts":[],"httpStatus":200},{"url":"https://arxiv.org/pdf/2204.00498","alts":[],"httpStatus":200},{"url":"https://www.pinterestlabs.com/?utm_source=Medium&utm_campaign=engineering-Q22024&utm_medium=blogarticle&utm_content=Zhong","alts":[],"httpStatus":200},{"url":"https://arxiv.org/pdf/2302.06590.pdf?ref=labnotes-by-assaf-arkin&trk=public_post_comment-text","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1712093170416},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":2431,"sectionCount":1,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"how-we-built-text-to-sql-at-pinterest","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"how-we-built-text-to-sql-at-pinterest-30bad30dabff","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*wDKR6-ToiX5UgsUYN41JiQ.png","originalWidth":2312,"originalHeight":1230,"isFeatured":true}},{"name":"cbfd","type":3,"text":"How we built Text-to-SQL at Pinterest","markups":[],"alignment":1},{"name":"355e","type":1,"text":"Adam Obeng | Data Scientist, Data Platform Science; J.C. Zhong | Tech Lead, Analytics…","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Adam Obeng | Data Scientist, Data Platform Science; J.C. Zhong | Tech Lead, Analytics Platform; Charlie Gu | Sr. Manager, Engineering"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"4c5a5f6279b6","isNewsletter":false,"newsletterId":"645321fdaef8","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":1,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"cbfd","type":3,"text":"How we built Text-to-SQL at Pinterest","markups":[]},{"name":"355e","type":1,"text":"Adam Obeng | Data Scientist, Data Platform Science; J.C. Zhong | Tech Lead, Analytics Platform; Charlie Gu | Sr. Manager, Engineering","markups":[]},{"name":"d3e0","type":1,"text":"Writing queries to solve analytical problems is the core task for Pinterest’s data users. However, finding the right data and translating an analytical problem into correct and efficient SQL…","markups":[]}],"sections":[{"name":"dc6b","startIndex":0}]},"isFullContent":false,"subtitle":"Adam Obeng | Data Scientist, Data Platform Science; J.C. Zhong | Tech Lead, Analytics Platform; Charlie Gu | Sr. Manager, Engineering"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"a4dd9089a176":{"id":"a4dd9089a176","versionId":"bcdab236cae3","creatorId":"ef81ef829bcb","homeCollectionId":"4c5a5f6279b6","title":"The Field Guide to Non-Engagement Signals","detectedLanguage":"en","latestVersion":"bcdab236cae3","latestPublishedVersion":"bcdab236cae3","hasUnpublishedEdits":false,"latestRev":206,"createdAt":1711481795204,"updatedAt":1711570117547,"acceptedAt":0,"firstPublishedAt":1711495855532,"latestPublishedAt":1711570117547,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Leif Sigerson | Sr. Data Scientist; Wendy Matheny | Sr. Lead Public Policy Manager","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*SCjlmnpB3_uTBvZ-Zz3qng.png","filter":"","backgroundSize":"","originalWidth":779,"originalHeight":208,"strategy":"resample","height":0,"width":0},"wordCount":1840,"imageCount":2,"readingTime":7.326729559748428,"subtitle":"Leif Sigerson | Sr. Data Scientist; Wendy Matheny | Sr. Lead Public Policy Manager","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":34,"isBookmarked":false,"tags":[{"slug":"pinterest","name":"Pinterest","postCount":10001,"metadata":{"postCount":10001,"coverImage":{"id":"0*QsqFF3ZJ_vOR_y7i","originalWidth":1600,"originalHeight":1066,"isFeatured":true}},"type":"Tag"},{"slug":"engineering","name":"Engineering","postCount":56462,"metadata":{"postCount":56462,"coverImage":{"id":"1*Ztjsdd4j4skhPERiV-NB8w.jpeg","originalWidth":1000,"originalHeight":532,"isFeatured":true}},"type":"Tag"},{"slug":"generative-ai-use-cases","name":"Generative Ai Use Cases","postCount":5155,"metadata":{"postCount":5155,"coverImage":{"id":"1*Or9pvsgU20ZGhsLnsHPYUA.jpeg","originalWidth":1024,"originalHeight":1024,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":1,"links":{"entries":[{"url":"https://arxiv.org/abs/2402.06831","alts":[],"httpStatus":200},{"url":"https://medium.com/@AnalyticsAtMeta/notifications-why-less-is-more-how-facebook-has-been-increasing-both-user-satisfaction-and-app-9463f7325e7d","alts":[{"type":3,"url":"medium://p/9463f7325e7d"},{"type":2,"url":"medium://p/9463f7325e7d"}],"httpStatus":200},{"url":"https://www.pinterestcareers.com/?utm_source=Medium&utm_campaign=engineering-Q12024&utm_medium=blogarticle&utm_content=Sigerson","alts":[],"httpStatus":200},{"url":"https://blog.youtube/inside-youtube/on-youtubes-recommendation-system/","alts":[],"httpStatus":200},{"url":"https://arxiv.org/abs/2305.16941","alts":[],"httpStatus":200},{"url":"https://www.ft.com/content/6b3137ef-988c-4755-954c-7e2829aaf8d3","alts":[],"httpStatus":200},{"url":"https://www.pinterestlabs.com/?utm_source=Medium&utm_campaign=engineering-Q12024&utm_medium=blogarticle&utm_content=Sigerson","alts":[],"httpStatus":200},{"url":"https://medium.com/pinterest-engineering","alts":[{"type":2,"url":"medium://pinterest-engineering"},{"type":3,"url":"medium://pinterest-engineering"}],"httpStatus":200},{"url":"https://medium.com/pinterest-engineering/building-for-inclusivity-the-technical-blueprint-of-pinterests-multidimensional-diversification-a43d38840fb9","alts":[{"type":3,"url":"medium://p/a43d38840fb9"},{"type":2,"url":"medium://p/a43d38840fb9"}],"httpStatus":200},{"url":"https://inspiredinternet.org/signatory/pinterest/","alts":[],"httpStatus":200},{"url":"https://inspiredinternet.org/","alts":[],"httpStatus":200},{"url":"http://www.inspiredinternet.org","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1711570118801},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":199,"sectionCount":1,"readingList":0,"topics":[{"topicId":"4861fee224fd","slug":"marketing","createdAt":1493928453626,"deletedAt":0,"image":{"id":"1*3blpwADxHq_9ksV-SXek-g@2x.jpeg","originalWidth":4000,"originalHeight":2250},"name":"Marketing","description":"Always be branding.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Marketing Articles and News — Medium","type":"Topic"},{"topicId":"55321ac40456","slug":"design","createdAt":1536181929758,"deletedAt":0,"image":{"id":"1*1aLu20aptPeUTDg_E8KtmA@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Design","description":"Below the surface.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Design Articles and News — Medium","type":"Topic"}]},"coverless":true,"slug":"the-field-guide-to-non-engagement-signals","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"the-field-guide-to-non-engagement-signals-a4dd9089a176","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*SCjlmnpB3_uTBvZ-Zz3qng.png","originalWidth":779,"originalHeight":208,"isFeatured":true}},{"name":"8848","type":3,"text":"The Field Guide to Non-Engagement Signals","markups":[],"alignment":1},{"name":"053a","type":1,"text":"Leif Sigerson | Sr. Data Scientist; Wendy Matheny | Sr. Lead Public Policy Manager","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Leif Sigerson | Sr. Data Scientist; Wendy Matheny | Sr. Lead Public Policy Manager"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"4c5a5f6279b6","isNewsletter":false,"newsletterId":"2701f43bd7ab","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":1,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"8848","type":3,"text":"The Field Guide to Non-Engagement Signals","markups":[]},{"name":"053a","type":1,"text":"Leif Sigerson | Sr. Data Scientist; Wendy Matheny | Sr. Lead Public Policy Manager","markups":[]},{"name":"fcf9","type":1,"text":"User engagement is a critical signal used by Pinterest and other online platforms to determine which content to show users. However, it is widely known that optimizing purely for user engagement can surface content that is…","markups":[{"type":3,"start":294,"end":302,"href":"https://www.ft.com/content/6b3137ef-988c-4755-954c-7e2829aaf8d3","title":"","rel":"","anchorType":0},{"type":1,"start":168,"end":174}]}],"sections":[{"name":"3233","startIndex":0}]},"isFullContent":false,"subtitle":"Leif Sigerson | Sr. Data Scientist; Wendy Matheny | Sr. Lead Public Policy Manager"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"}}},"paging":{"path":"/_/api/collections/4c5a5f6279b6/stream","next":{"to":"1727894069472","ignoredIds":[],"page":6}},"collection":{"id":"4c5a5f6279b6","name":"Pinterest Engineering Blog","slug":"pinterest-engineering","tags":["ENGINEERING","PINTEREST","VISUAL SEARCH","MACHINE LEARNING","COMPUTER VISION"],"creatorId":"a1d1eea6bc86","description":"Inventive engineers building the first visual discovery engine, 300 billion ideas and counting.","shortDescription":"Inventive engineers building the first visual discovery…","image":{"imageId":"1*XiUFDZgSFl6n-MM2yXFifQ.png","filter":"","backgroundSize":"","originalWidth":668,"originalHeight":563,"strategy":"resample","height":0,"width":0},"metadata":{"followerCount":15051,"activeAt":1731967979081},"virtuals":{"permissions":{"canPublish":false,"canPublishAll":false,"canRepublish":false,"canRemove":false,"canManageAll":false,"canSubmit":false,"canEditPosts":false,"canAddWriters":false,"canViewStats":false,"canSendNewsletter":false,"canViewLockedPosts":false,"canViewCloaked":false,"canEditOwnPosts":false,"canBeAssignedAuthor":false,"canEnrollInHightower":false,"canLockPostsForMediumMembers":false,"canLockOwnPostsForMediumMembers":false,"canViewNewsletterV2Stats":false,"canCreateNewsletterV3":false},"isSubscribed":false,"isEnrolledInHightower":false,"isEligibleForHightower":false,"isSubscribedToCollectionEmails":false,"isMuted":false,"canToggleEmail":false,"isWriter":false},"logo":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"twitterUsername":"PinterestEng","facebookPageName":"pinterestengineering","collectionMastheadId":"560b48272565","sections":[{"type":2,"collectionHeaderMetadata":{"title":"Pinterest Engineering","description":"Inventive engineers building the first visual discovery engine, 300 billion ideas and counting.","backgroundImage":{"id":"1*kDAiebKM-qkprLo3uk5eHg.jpeg","originalWidth":5928,"originalHeight":3952,"focusPercentX":52.142857142857146,"focusPercentY":98.93048128342247},"logoImage":{"id":"1*dXsrUlUXbwyfZ9tiV9viUQ@2x.png","originalWidth":200,"originalHeight":200,"alt":"Pinterest Engineering Blog"},"alignment":2,"layout":6}},{"type":1,"postListMetadata":{"source":1,"layout":4,"number":4,"postIds":["7e4c357ac527","0dba3afb4609","4faeb652e385","e628f8081971"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":2,"postIds":["0248efe4fd52","3253d2432a0c"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":1,"postIds":["9e0b9d35a11f"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":2,"postIds":["8a99e6c8e6b7","86dcc6d5fce9"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":2,"postIds":["30bad30dabff","a4dd9089a176"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":2,"postIds":["fca14b0d1141","08130f25b874"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":2,"postIds":["a43d38840fb9","9d4503fc20d6"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":2,"postIds":["f638c722d9f2","67d90603426e"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":2,"postIds":["629affbf34ff","e2b30b2f6768"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":1,"postIds":["c1010e69f31a"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":2,"postIds":["bbc3406a1695","95f8cc0c5885"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":2,"postIds":["50d3d50384ed","1030edfe445f"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["cb60b547f2e0","5c338a15d2a0","210c122f6afa"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["3a7c0c335016","78a5075a3fe9","608fb5581094"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["8643fe0cc0f9","a74938cb089b","58ad008a1ce9"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["437731fabde","8b7faf9009cf","91fc310c2e33"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["165ae2e8cde8","4be40f1dfc8e","70b4d20e5ea0"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["a0857bf8cf98","43f0fb474b84","8b7b1f562afc"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["92484b5fe39b","351adf9ac1c4","f881aff6580f"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["94a967bdcd27","8d6c026dd4b9","a23a112deb73"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["e0a0609c8e9","116bce917ea2","f49b654bff37"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["997d9243f56a","c5bbe190ba5","7a4a95fa674b"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":2,"postIds":["797fffff45c0","556be1611be"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["9bf09696e99e","4bd9b9ee1308","9e5c3414c8ad"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":1,"postIds":["be94f15a4527"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":2,"postIds":["4402695dd4e7","654f2bb887fc"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["61512ad98a95","ea3889420490","50a07143f444"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["9043776b7b76","e63d5280a1a9","579406ffa374"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":2,"postIds":["b3143ac70b55","b31da4b60fa0"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":2,"postIds":["d6d5bfa6bf16","1c01d8c11a05"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":2,"postIds":["8987fc5ba1c0","7b5eeb411888"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["c9d4e89f2ed6","ccb255fbde20","2a3eaf60ac1b"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":3,"postIds":["16bc3a4a38b4","8efda19088b0","ed76307e10a0"]}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":12,"postIds":["e769135734d","10ffb7846958","4b05a409cb5d","c69e78ff2698","17fc35eca1e5","1806b73b40ef","f543b14bb25","68d7f8425882","a23f821168da","723ce072b7d2"]}},{"type":1,"postListMetadata":{"source":2,"layout":6,"number":3,"postIds":[],"sectionHeader":"Trending"}},{"type":1,"postListMetadata":{"source":1,"layout":4,"number":15,"postIds":[]}}],"tintColor":"#FFBD081C","lightText":false,"favicon":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"colorPalette":{"defaultBackgroundSpectrum":{"colorPoints":[{"color":"#FFE93335","point":0},{"color":"#FFD73433","point":0.1},{"color":"#FFC53331","point":0.2},{"color":"#FFB3322E","point":0.3},{"color":"#FFA12F2B","point":0.4},{"color":"#FF8F2C28","point":0.5},{"color":"#FF7C2924","point":0.6},{"color":"#FF692420","point":0.7},{"color":"#FF561E1A","point":0.8},{"color":"#FF421714","point":0.9},{"color":"#FF2D0F0C","point":1}],"backgroundColor":"#FFFFFFFF"},"tintBackgroundSpectrum":{"colorPoints":[{"color":"#FFBD081C","point":0},{"color":"#FFD12F30","point":0.1},{"color":"#FFE34943","point":0.2},{"color":"#FFF26057","point":0.3},{"color":"#FFFF766B","point":0.4},{"color":"#FFFF8B7F","point":0.5},{"color":"#FFFF9F94","point":0.6},{"color":"#FFFFB3A8","point":0.7},{"color":"#FFFFC7BD","point":0.8},{"color":"#FFFFDAD2","point":0.9},{"color":"#FFFFEEE7","point":1}],"backgroundColor":"#FFBD081C"},"highlightSpectrum":{"colorPoints":[{"color":"#FFFFDED6","point":0},{"color":"#FFFFD8CF","point":0.1},{"color":"#FFFFD2C8","point":0.2},{"color":"#FFFFCDC1","point":0.3},{"color":"#FFFFC7BB","point":0.4},{"color":"#FFFFC1B4","point":0.5},{"color":"#FFFFBBAD","point":0.6},{"color":"#FFFFB4A7","point":0.7},{"color":"#FFFFAEA0","point":0.8},{"color":"#FFFFA89A","point":0.9},{"color":"#FFFFA193","point":1}],"backgroundColor":"#FFFFFFFF"},"darkBackgroundSpectrum":{"colorPoints":[{"color":"#FFFF4C48","point":0},{"color":"#FFFF5D56","point":0.1},{"color":"#FFFF6D63","point":0.2},{"color":"#FFFF7C71","point":0.3},{"color":"#FFFF8B7F","point":0.4},{"color":"#FFFF998D","point":0.5},{"color":"#FFFFA79C","point":0.6},{"color":"#FFFFB5AA","point":0.7},{"color":"#FFFFC3B9","point":0.8},{"color":"#FFFFD0C8","point":0.9},{"color":"#FFFFDDD6","point":1}],"backgroundColor":"#FF000000"}},"navItems":[{"type":4,"title":"en Español","url":"https://medium.com/pinterest-engineering/medium-com-pinterest-engineering-espanol/home","topicId":"51c7bf95dfcd","source":"topicId"},{"type":4,"title":"Eng Culture","url":"https://medium.com/pinterest-engineering/eng-culture/home","topicId":"74e33ff4ec2a","source":"topicId"},{"type":4,"title":"Pinner UX","url":"https://medium.com/pinterest-engineering/pinner-experience/home","topicId":"3f90c39488c9","source":"topicId"},{"type":4,"title":"Creator UX","url":"https://medium.com/pinterest-engineering/creator-experience/home","topicId":"c1b04eabcc02","source":"topicId"},{"type":4,"title":"Infras","url":"https://medium.com/pinterest-engineering/infra/home","topicId":"a29dfb3782e2","source":"topicId"},{"type":4,"title":"Monetization","url":"https://medium.com/pinterest-engineering/monetization/home","topicId":"c5792f90322f","source":"topicId"},{"type":4,"title":"Trust & Safety","url":"https://medium.com/pinterest-engineering/trust-and-safety/home","topicId":"1ca95a5189fb","source":"topicId"},{"type":3,"title":"Pinterest Careers","url":"https://www.pinterestcareers.com?utm_source=medium&utm_medium=navigation-link&utm_campaign=medium-traffic"}],"colorBehavior":1,"collectionFeatures":[25],"ampLogo":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"header":{"title":"Pinterest Engineering","description":"Inventive engineers building the first visual discovery engine, 300 billion ideas and counting.","backgroundImage":{"id":"1*kDAiebKM-qkprLo3uk5eHg.jpeg","originalWidth":5928,"originalHeight":3952,"focusPercentX":52.142857142857146,"focusPercentY":98.93048128342247},"logoImage":{"id":"1*dXsrUlUXbwyfZ9tiV9viUQ@2x.png","originalWidth":200,"originalHeight":200,"alt":"Pinterest Engineering Blog"},"alignment":2,"layout":6},"subscriberCount":15051,"tagline":"Inventive engineers building the first visual discovery engine, 300 billion ideas and counting.","instagramUsername":"lifeatpinterest","isOptedIntoAurora":false,"isCurationAllowedByDefault":false,"polarisCoverImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"ptsQualifiedAt":1616092781685,"type":"Collection"},"header":{"title":"Pinterest Engineering","description":"Inventive engineers building the first visual discovery engine, 300 billion ideas and counting.","backgroundImage":{"id":"1*kDAiebKM-qkprLo3uk5eHg.jpeg","originalWidth":5928,"originalHeight":3952,"focusPercentX":52.142857142857146,"focusPercentY":98.93048128342247},"logoImage":{"id":"1*dXsrUlUXbwyfZ9tiV9viUQ@2x.png","originalWidth":200,"originalHeight":200,"alt":"Pinterest Engineering Blog"},"alignment":2,"layout":6},"streamItems":[{"createdAt":1732730020437,"randomId":"8432fceaa566","section":{"items":[{"post":{"postId":"7e4c357ac527"},"itemType":"post"},{"post":{"postId":"0dba3afb4609"},"itemType":"post"},{"post":{"postId":"4faeb652e385"},"itemType":"post"},{"post":{"postId":"e628f8081971"},"itemType":"post"}],"layout":4},"itemType":"section","type":"StreamItem"},{"createdAt":1732730020437,"randomId":"5c2874fe3185","section":{"items":[{"post":{"postId":"0248efe4fd52"},"itemType":"post"},{"post":{"postId":"3253d2432a0c"},"itemType":"post"}],"layout":4},"itemType":"section","type":"StreamItem"},{"createdAt":1732730020437,"randomId":"aad93b500d11","section":{"items":[{"post":{"postId":"9e0b9d35a11f"},"itemType":"post"}],"layout":4},"itemType":"section","type":"StreamItem"},{"createdAt":1732730020437,"randomId":"acafe80e0433","section":{"items":[{"post":{"postId":"8a99e6c8e6b7"},"itemType":"post"},{"post":{"postId":"86dcc6d5fce9"},"itemType":"post"}],"layout":4},"itemType":"section","type":"StreamItem"},{"createdAt":1732730020437,"randomId":"bfd947166065","section":{"items":[{"post":{"postId":"30bad30dabff"},"itemType":"post"},{"post":{"postId":"a4dd9089a176"},"itemType":"post"}],"layout":4},"itemType":"section","type":"StreamItem"}]}) // ]]></script><script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'8e93fa9f387a5e3d',t:'MTczMjczMDAyMS4wMDAwMDA='};var a=document.createElement('script');a.nonce='';a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body></html>

Pages: 1 2 3 4 5 6 7 8 9 10