CINXE.COM

Archive of stories published by Vimeo 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#"><script type="text/javascript" src="https://web-static.archive.org/_static/js/bundle-playback.js?v=7YQSqjSh" charset="utf-8"></script> <script type="text/javascript" src="https://web-static.archive.org/_static/js/wombat.js?v=txqj7nKC" charset="utf-8"></script> <script>window.RufflePlayer=window.RufflePlayer||{};window.RufflePlayer.config={"autoplay":"on","unmuteOverlay":"hidden"};</script> <script type="text/javascript" src="https://web-static.archive.org/_static/js/ruffle/ruffle.js"></script> <script type="text/javascript"> __wm.init("https://web.archive.org/web"); __wm.wombat("https://medium.com/vimeo-engineering-blog/archive","20211201164814","https://web.archive.org/","web","https://web-static.archive.org/_static/", "1638377294"); </script> <link rel="stylesheet" type="text/css" href="https://web-static.archive.org/_static/css/banner-styles.css?v=p7PEIJWi" /> <link rel="stylesheet" type="text/css" href="https://web-static.archive.org/_static/css/iconochive.css?v=3PDvdIFv" /> <!-- End Wayback Rewrite JS Include --> <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>Archive of stories published by Vimeo Engineering Blog – Medium</title><link rel="canonical" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/archive"><meta name="robots" content="index,follow"><meta name="title" content="Archive of stories published by Vimeo Engineering Blog – Medium"><meta name="referrer" content="unsafe-url"><meta name="description" content="Read top stories published by Vimeo Engineering Blog. We tinker, we build, and we dream up all-new things to help support the world's best community of creators. Lift up the hood and see how it all works."><meta name="theme-color" content="#000000"><meta property="og:title" content="Archive of stories published by Vimeo Engineering Blog – Medium"><meta property="twitter:title" content="Archive of stories published by Vimeo Engineering Blog – Medium"><meta property="og:url" content="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/archive"><meta property="fb:app_id" content="542599432471018"><meta property="og:description" content="Read top stories published by Vimeo Engineering Blog. We tinker, we build, and we dream up all-new things to help support the world's best community of creators. Lift up the hood and see how it all works."><meta name="twitter:description" content="Read top stories published by Vimeo Engineering Blog. We tinker, we build, and we dream up all-new things to help support the world's best community of creators. Lift up the hood and see how it all works."><meta name="twitter:image:src" content=""><meta property="og:type" content="medium-com:collection"><meta name="twitter:card" content="summary_large_image"><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://vimeo-engineering-blog/archive"><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://vimeo-engineering-blog/archive"><meta property="al:android:url" content="medium://vimeo-engineering-blog/archive"><meta property="al:web:url" content="https://medium.com/vimeo-engineering-blog/archive"><link rel="search" type="application/opensearchdescription+xml" title="Medium" href="/web/20211201164814/https://medium.com/osd.xml"/><link rel="alternate" href="https://web.archive.org/web/20211201164814/android-app://com.medium.reader/https/medium.com/vimeo-engineering-blog/archive"/><link rel="stylesheet" href="https://web.archive.org/web/20211201164814cs_/https://cdn-static-1.medium.com/_/fp/css/main-branding-base.LfhAKclHYfd2poCL3maAvg.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", "UA-24232453-2", "auto", {"allowLinker": true, "legacyCookieDomain": window.location.hostname});ga("send", "pageview");</script><script async src="https://web.archive.org/web/20211201164814js_/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.js"></script><![endif]--><link rel="icon" href="https://web.archive.org/web/20211201164814im_/https://miro.medium.com/1*m-R_BkNf1Qjr1YbyOIJY2w.png" class="js-favicon"><link rel="apple-touch-icon" sizes="152x152" href="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/304/304/1*aTJtrirnEDuzqgTrUEcd7g.png"><link rel="apple-touch-icon" sizes="120x120" href="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/240/240/1*aTJtrirnEDuzqgTrUEcd7g.png"><link rel="apple-touch-icon" sizes="76x76" href="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/152/152/1*aTJtrirnEDuzqgTrUEcd7g.png"><link rel="apple-touch-icon" sizes="60x60" href="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/120/120/1*aTJtrirnEDuzqgTrUEcd7g.png"><link rel="mask-icon" href="https://web.archive.org/web/20211201164814im_/https://cdn-static-1.medium.com/_/fp/icons/monogram-mask.KPLCSFEZviQN0jQ7veN2RQ.svg" color="#171717"></head><body itemscope class=" v-unbound v-glyph v-glyph--m2-unbound 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 u-boxShadow4px12pxBlackLighter u-textColorTransparentWhiteDarker u-tintBgColor u-tintSpectrum 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://web.archive.org/web/20211201164814/https://medium.com/" data-log-event="home" class="siteNav-logo u-fillBlack u-flex0 u-flexCenter u-paddingTop0"><span class="svgIcon svgIcon--logoMonogramUnbound svgIcon--25px"><svg class="svgIcon-use" height="25" viewbox="0 0 1043.63 592.71"><g data-name="Layer 2"><g data-name="Layer 1"><path d="M588.67 296.36c0 163.67-131.78 296.35-294.33 296.35S0 460 0 296.36 131.78 0 294.34 0s294.33 132.69 294.33 296.36"/><path d="M911.56 296.36c0 154.06-65.89 279-147.17 279s-147.17-124.94-147.17-279 65.88-279 147.16-279 147.17 124.9 147.17 279"/><path d="M1043.63 296.36c0 138-23.17 249.94-51.76 249.94s-51.75-111.91-51.75-249.94 23.17-249.94 51.75-249.94 51.76 111.9 51.76 249.94"/></g></g></svg></span><span class="u-textScreenReader">Homepage</span></a></div><div class="u-paddingLeft10 u-sm-show r-paddingRight10"><a href="https://web.archive.org/web/20211201164814/https://rsci.app.link/?%24canonical_url=https%3A%2F%2Fmedium.com/vimeo-engineering-blog%3F~feature=LoMobileNavBar&amp;~channel=ShowCollectionHome&amp;~stage=m2">Open in app</a></div><div class="u-flexCenter u-height65 u-xs-height56"><span class="u-inlineBlock u-height28 u-xs-height24 u-verticalAlignTop u-marginRight20 u-marginLeft15 u-borderRightTransparentWhiteLighter"></span></div><div class="u-flexCenter u-height65 u-xs-height56 u-marginRight18"><div class="u-xs-show"><a class="link u-baseColor--link avatar avatar--roundedRectangle" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog?source=avatar-lo_a544f1a3b1d7-92df1b631aeb" title="Go to Vimeo Engineering Blog" aria-label="Go to Vimeo Engineering Blog" data-action-source="avatar-lo_a544f1a3b1d7-92df1b631aeb"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/64/64/1*aTJtrirnEDuzqgTrUEcd7g.png" class="avatar-image avatar-image--icon" alt="Vimeo Engineering Blog"></a></div><div class="u-xs-hide"><a href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog?source=logo-lo_a544f1a3b1d7---92df1b631aeb" class="u-flexCenter js-collectionLogoOrName"><span class="u-noWrapWithEllipsis u-maxWidth1032 u-uiTextBold u-fontSize26">Vimeo Engineering Blog</span></a></div></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--light button--chromeless u-accentColor--buttonNormal is-inSiteNavBar u-xs-hide js-signInButton" href="https://web.archive.org/web/20211201164814/https://medium.com/m/signin?redirect=https%3A%2F%2Fmedium.com%2Fvimeo-engineering-blog%2Farchive&amp;source=--------------------------nav_reg&amp;operation=login" data-action="sign-in-prompt" data-redirect="https://medium.com/vimeo-engineering-blog/archive" data-action-source="--------------------------nav_reg">Sign in</a><a class="button button--primary button--light button--withChrome u-accentColor--buttonNormal is-inSiteNavBar js-signUpButton" href="https://web.archive.org/web/20211201164814/https://medium.com/m/signin?redirect=https%3A%2F%2Fmedium.com%2Fvimeo-engineering-blog%2Farchive&amp;source=--------------------------nav_reg&amp;operation=register" data-action="sign-up-prompt" data-redirect="https://medium.com/vimeo-engineering-blog/archive" data-action-source="--------------------------nav_reg">Get started</a></div></div></div></div></div><div class="metabar metabar--spacer js-metabarSpacer u-tintBgColor u-height65 u-xs-height56"></div><div class="container u-maxWidth1040 u-marginTop30"><div class="col u-xs-size12of12 u-size8of12 u-padding0"><header class="heading heading--borderedBottom"><div class="u-clearfix"><div class="heading-content u-floatLeft"><span class="heading-title">Archive of stories published by Vimeo Engineering Blog</span></div></div></header><div class="u-marginTop20 container u-fontSize14 u-textColorDark"><div class="row"><div class="col u-inlineBlock u-paddingLeft0 u-verticalAlignTop u-paddingRight0"><a class="button button--withChrome u-baseColor--buttonNormal button--withIcon button--withSvgIcon button--withIconRight button--withIconAndLabel button--withSvgIcon button--chromeless" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/archive"><span class="button-label"><strong>All</strong></span><span class="button-defaultState"><span class="svgIcon svgIcon--arrowRight svgIcon--21px is-flushRight"><svg class="svgIcon-use" width="21" height="21"><path d="M8.3 4.2l6.4 6.3-6.4 6.3-.8-.8 5.5-5.5L7.5 5" fill-rule="evenodd"/></svg></span></span></a></div><div class="col u-inlineBlock u-maxWidth300 u-verticalAlignTop u-lineHeight35"><div class="timebucket u-inlineBlock u-width50"><a href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/archive/2016">2016</a></div><div class="timebucket u-inlineBlock u-width50"><a href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/archive/2017">2017</a></div><div class="timebucket u-inlineBlock u-width50"><a href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/archive/2018">2018</a></div><div class="timebucket u-inlineBlock u-width50"><a href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/archive/2019">2019</a></div><div class="timebucket u-inlineBlock u-width50"><a href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/archive/2020">2020</a></div><div class="timebucket u-inlineBlock u-width50"><a href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/archive/2021">2021</a></div></div><div class="col u-inlineBlock u-maxWidth300 u-verticalAlignTop u-lineHeight35"></div><div class="col u-inlineBlock u-floatRight u-verticalAlignTop u-paddingRight0 u-paddingLeft0 js-sortToggle"><button class="button button--withChrome u-baseColor--buttonNormal button--withIcon button--withSvgIcon button--withIconRight button--withIconAndLabel button--chromeless" data-action="open-sort-popover" data-action-value="toggle"><span class="button-label js-buttonLabel">Sort by most read</span><span class="svgIcon svgIcon--arrowDown svgIcon--21px is-flushRight"><svg class="svgIcon-use" width="21" height="21"><path d="M4 7.331l6.032 6.67.495.547.495-.547 5.973-6.603-.989-.895-5.974 6.603h.99l-6.033-6.67z" fill-rule="evenodd"/></svg></span></button></div></div></div><div class="u-marginTop25 js-postStream"><div class="streamItem streamItem--postPreview js-streamItem"><div class="cardChromeless u-marginTop20 u-paddingTop10 u-paddingBottom15 u-paddingLeft20 u-paddingRight20"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation js-trackPostScrolls" data-post-id="9f1bd75709ed" data-source="collection_archive---------0-----------------------"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@arodland" data-action="show-user-card" data-action-value="ac6b5a21987a" data-action-type="hover" data-user-id="ac6b5a21987a" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/72/72/0*QPa0KdPmtxbQN8q6.jpg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of arodland"></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://web.archive.org/web/20211201164814/https://medium.com/@arodland?source=collection_archive---------0-----------------------" data-action="show-user-card" data-action-source="collection_archive---------0-----------------------" data-action-value="ac6b5a21987a" data-action-type="hover" data-user-id="ac6b5a21987a" dir="auto">arodland</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog?source=collection_archive---------0-----------------------" data-action="show-collection-card" data-action-source="collection_archive---------0-----------------------" data-action-value="vimeo-engineering-blog" data-action-type="hover">Vimeo Engineering Blog</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/improving-load-balancing-with-a-new-consistent-hashing-algorithm-9f1bd75709ed?source=collection_archive---------0-----------------------" data-action="open-post" data-action-value="https://medium.com/vimeo-engineering-blog/improving-load-balancing-with-a-new-consistent-hashing-algorithm-9f1bd75709ed?source=collection_archive---------0-----------------------" data-action-source="preview-listing"><time datetime="2016-12-19T20:14:52.598Z">Dec 19, 2016</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="9 min read"></span></div></div></div></div></div><div><a class="" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/improving-load-balancing-with-a-new-consistent-hashing-algorithm-9f1bd75709ed?source=collection_archive---------0-----------------------" data-action-source="collection_archive---------0-----------------------"><div class="postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="1*sF0Y2_lm2KGQeLKVuDVznA.png" data-width="1887" data-height="515" src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/t/1600/480/1*sF0Y2_lm2KGQeLKVuDVznA.png"></div></figure><h3 name="previewTitle" id="previewTitle" class="graf graf--h3 graf-after--figure graf--title">Improving load balancing with a new consistent-hashing algorithm</h3><h4 name="previewSubtitle" id="previewSubtitle" class="graf graf--h4 graf-after--h3 graf--trailing graf--subtitle">Improving HAProxy load balancing for…</h4></div></div></section></div></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/improving-load-balancing-with-a-new-consistent-hashing-algorithm-9f1bd75709ed?source=collection_archive---------0-----------------------" data-action="open-post" data-action-source="collection_archive---------0-----------------------" data-action-value="https://medium.com/vimeo-engineering-blog/improving-load-balancing-with-a-new-consistent-hashing-algorithm-9f1bd75709ed?source=collection_archive---------0-----------------------" data-post-id="9f1bd75709ed">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="9f1bd75709ed" data-is-flush-left="true" data-source="listing-----9f1bd75709ed---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/9f1bd75709ed" data-action-source="listing-----9f1bd75709ed---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25"><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25"><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="9f1bd75709ed">1.5K</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/improving-load-balancing-with-a-new-consistent-hashing-algorithm-9f1bd75709ed?source=collection_archive---------0-----------------------#--responses" data-action-source="collection_archive---------0-----------------------">14 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="9f1bd75709ed"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25"><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none"><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div></div><div class="streamItem streamItem--postPreview js-streamItem"><div class="cardChromeless u-marginTop20 u-paddingTop10 u-paddingBottom15 u-paddingLeft20 u-paddingRight20"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation js-trackPostScrolls" data-post-id="1f0ee0462580" data-source="collection_archive---------1-----------------------"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@muglug" data-action="show-user-card" data-action-value="696fc211da2" data-action-type="hover" data-user-id="696fc211da2" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/72/72/0*1QXZBdTTCzQYfBF6.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Matt Brown"></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://web.archive.org/web/20211201164814/https://medium.com/@muglug?source=collection_archive---------1-----------------------" data-action="show-user-card" data-action-source="collection_archive---------1-----------------------" data-action-value="696fc211da2" data-action-type="hover" data-user-id="696fc211da2" dir="auto">Matt Brown</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog?source=collection_archive---------1-----------------------" data-action="show-collection-card" data-action-source="collection_archive---------1-----------------------" data-action-value="vimeo-engineering-blog" data-action-type="hover">Vimeo Engineering Blog</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/its-not-legacy-code-it-s-php-1f0ee0462580?source=collection_archive---------1-----------------------" data-action="open-post" data-action-value="https://medium.com/vimeo-engineering-blog/its-not-legacy-code-it-s-php-1f0ee0462580?source=collection_archive---------1-----------------------" data-action-source="preview-listing"><time datetime="2020-12-15T17:15:35.317Z">Dec 15, 2020</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="5 min read"></span></div></div></div></div></div><div><a class="" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/its-not-legacy-code-it-s-php-1f0ee0462580?source=collection_archive---------1-----------------------" data-action-source="collection_archive---------1-----------------------"><div class="postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="1*WHkOcjsiZKJjTmunVjehPQ.png" data-width="1916" data-height="1198" data-is-featured="true" alt="Small people cleaning up the PHP logo" src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/t/1600/480/1*WHkOcjsiZKJjTmunVjehPQ.png"></div></figure><h3 name="previewTitle" id="previewTitle" class="graf graf--h3 graf-after--figure graf--title">It’s not legacy code — it’s PHP</h3><h4 name="previewSubtitle" id="previewSubtitle" class="graf graf--h4 graf-after--h3 graf--trailing graf--subtitle">Vimeo has been using PHP in production for over 15 years. Find out how…</h4></div></div></section></div></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/its-not-legacy-code-it-s-php-1f0ee0462580?source=collection_archive---------1-----------------------" data-action="open-post" data-action-source="collection_archive---------1-----------------------" data-action-value="https://medium.com/vimeo-engineering-blog/its-not-legacy-code-it-s-php-1f0ee0462580?source=collection_archive---------1-----------------------" data-post-id="1f0ee0462580">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="1f0ee0462580" data-is-flush-left="true" data-source="listing-----1f0ee0462580---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/1f0ee0462580" data-action-source="listing-----1f0ee0462580---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25"><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25"><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="1f0ee0462580">3.7K</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/its-not-legacy-code-it-s-php-1f0ee0462580?source=collection_archive---------1-----------------------#--responses" data-action-source="collection_archive---------1-----------------------">21 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="1f0ee0462580"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25"><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none"><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div></div><div class="streamItem streamItem--postPreview js-streamItem"><div class="cardChromeless u-marginTop20 u-paddingTop10 u-paddingBottom15 u-paddingLeft20 u-paddingRight20"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation js-trackPostScrolls" data-post-id="2f8b1e94760c" data-source="collection_archive---------2-----------------------"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@kvenn" data-action="show-user-card" data-action-value="9a9de6b26f1f" data-action-type="hover" data-user-id="9a9de6b26f1f" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/72/72/1*hK4iNuM_7Zbo6VIbpS6X8Q.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Kyle Venn"></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://web.archive.org/web/20211201164814/https://medium.com/@kvenn?source=collection_archive---------2-----------------------" data-action="show-user-card" data-action-source="collection_archive---------2-----------------------" data-action-value="9a9de6b26f1f" data-action-type="hover" data-user-id="9a9de6b26f1f" dir="auto">Kyle Venn</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog?source=collection_archive---------2-----------------------" data-action="show-collection-card" data-action-source="collection_archive---------2-----------------------" data-action-value="vimeo-engineering-blog" data-action-type="hover">Vimeo Engineering Blog</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/vimeo-android-instant-apps-2f8b1e94760c?source=collection_archive---------2-----------------------" data-action="open-post" data-action-value="https://medium.com/vimeo-engineering-blog/vimeo-android-instant-apps-2f8b1e94760c?source=collection_archive---------2-----------------------" data-action-source="preview-listing"><time datetime="2017-06-14T18:34:21.211Z">Jun 14, 2017</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="9 min read"></span></div></div></div></div></div><div><a class="" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/vimeo-android-instant-apps-2f8b1e94760c?source=collection_archive---------2-----------------------" data-action-source="collection_archive---------2-----------------------"><div class="postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="1*vVuYIF-D1qmNtQo52uxTnQ.jpeg" data-width="1400" data-height="700" data-is-featured="true" src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/t/1600/480/1*vVuYIF-D1qmNtQo52uxTnQ.jpeg"></div></figure><h3 name="previewTitle" id="previewTitle" class="graf graf--h3 graf-after--figure graf--title">Android Instant Apps, step-by-step: how Vimeo went about it</h3><h4 name="previewSubtitle" id="previewSubtitle" class="graf graf--h4 graf-after--h3 graf--trailing graf--subtitle">Vimeo’s journey to a 4MB video player…</h4></div></div></section></div></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/vimeo-android-instant-apps-2f8b1e94760c?source=collection_archive---------2-----------------------" data-action="open-post" data-action-source="collection_archive---------2-----------------------" data-action-value="https://medium.com/vimeo-engineering-blog/vimeo-android-instant-apps-2f8b1e94760c?source=collection_archive---------2-----------------------" data-post-id="2f8b1e94760c">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="2f8b1e94760c" data-is-flush-left="true" data-source="listing-----2f8b1e94760c---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/2f8b1e94760c" data-action-source="listing-----2f8b1e94760c---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25"><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25"><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="2f8b1e94760c">556</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/vimeo-android-instant-apps-2f8b1e94760c?source=collection_archive---------2-----------------------#--responses" data-action-source="collection_archive---------2-----------------------">19 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="2f8b1e94760c"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25"><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none"><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div></div><div class="streamItem streamItem--postPreview js-streamItem"><div class="cardChromeless u-marginTop20 u-paddingTop10 u-paddingBottom15 u-paddingLeft20 u-paddingRight20"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation js-trackPostScrolls" data-post-id="d825a33793cd" data-source="collection_archive---------3-----------------------"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@louis_90192" data-action="show-user-card" data-action-value="6f71707a0d62" data-action-type="hover" data-user-id="6f71707a0d62" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/72/72/0*1PaW45CydBgygeM6." class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Louis DeLosSantos"></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://web.archive.org/web/20211201164814/https://medium.com/@louis_90192?source=collection_archive---------3-----------------------" data-action="show-user-card" data-action-source="collection_archive---------3-----------------------" data-action-value="6f71707a0d62" data-action-type="hover" data-user-id="6f71707a0d62" dir="auto">Louis DeLosSantos</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog?source=collection_archive---------3-----------------------" data-action="show-collection-card" data-action-source="collection_archive---------3-----------------------" data-action-value="vimeo-engineering-blog" data-action-type="hover">Vimeo Engineering Blog</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/orchestrating-gce-instances-with-ansible-d825a33793cd?source=collection_archive---------3-----------------------" data-action="open-post" data-action-value="https://medium.com/vimeo-engineering-blog/orchestrating-gce-instances-with-ansible-d825a33793cd?source=collection_archive---------3-----------------------" data-action-source="preview-listing"><time datetime="2017-01-17T15:57:17.021Z">Jan 17, 2017</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="7 min read"></span></div></div></div></div></div><div><a class="" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/orchestrating-gce-instances-with-ansible-d825a33793cd?source=collection_archive---------3-----------------------" data-action-source="collection_archive---------3-----------------------"><div class="postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 name="c3d4" id="c3d4" class="graf graf--h3 graf--leading graf--title">Orchestrating GCE Instances with Ansible</h3><p name="9ce0" id="9ce0" class="graf graf--p graf-after--h3 graf--trailing">Here at Vimeo, I’ve been trying to find the sweet spot between designing immutable infrastructure and retaining the ability to identify single resources within a homogenous group. I’ve recently adopted Ansible into my toolkit for just that. This post is going…</p></div></div></section></div></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/orchestrating-gce-instances-with-ansible-d825a33793cd?source=collection_archive---------3-----------------------" data-action="open-post" data-action-source="collection_archive---------3-----------------------" data-action-value="https://medium.com/vimeo-engineering-blog/orchestrating-gce-instances-with-ansible-d825a33793cd?source=collection_archive---------3-----------------------" data-post-id="d825a33793cd">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="d825a33793cd" data-is-flush-left="true" data-source="listing-----d825a33793cd---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/d825a33793cd" data-action-source="listing-----d825a33793cd---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25"><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25"><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="d825a33793cd">92</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/orchestrating-gce-instances-with-ansible-d825a33793cd?source=collection_archive---------3-----------------------#--responses" data-action-source="collection_archive---------3-----------------------">10 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="d825a33793cd"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25"><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none"><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div></div><div class="streamItem streamItem--postPreview js-streamItem"><div class="cardChromeless u-marginTop20 u-paddingTop10 u-paddingBottom15 u-paddingLeft20 u-paddingRight20"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation js-trackPostScrolls" data-post-id="29ba9ec6bc98" data-source="collection_archive---------4-----------------------"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@louis_90192" data-action="show-user-card" data-action-value="6f71707a0d62" data-action-type="hover" data-user-id="6f71707a0d62" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/72/72/0*1PaW45CydBgygeM6." class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Louis DeLosSantos"></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://web.archive.org/web/20211201164814/https://medium.com/@louis_90192?source=collection_archive---------4-----------------------" data-action="show-user-card" data-action-source="collection_archive---------4-----------------------" data-action-value="6f71707a0d62" data-action-type="hover" data-user-id="6f71707a0d62" dir="auto">Louis DeLosSantos</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog?source=collection_archive---------4-----------------------" data-action="show-collection-card" data-action-source="collection_archive---------4-----------------------" data-action-value="vimeo-engineering-blog" data-action-type="hover">Vimeo Engineering Blog</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/graphing-systems-metrics-with-netdata-prometheus-and-grafana-29ba9ec6bc98?source=collection_archive---------4-----------------------" data-action="open-post" data-action-value="https://medium.com/vimeo-engineering-blog/graphing-systems-metrics-with-netdata-prometheus-and-grafana-29ba9ec6bc98?source=collection_archive---------4-----------------------" data-action-source="preview-listing"><time datetime="2017-09-13T17:55:46.520Z">Sep 13, 2017</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="9 min read"></span></div></div></div></div></div><div><a class="" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/graphing-systems-metrics-with-netdata-prometheus-and-grafana-29ba9ec6bc98?source=collection_archive---------4-----------------------" data-action-source="collection_archive---------4-----------------------"><div class="postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="0*iDTWKM2pEpBEzX-B." data-width="1400" data-height="434" data-is-featured="true" src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/t/1600/480/0*iDTWKM2pEpBEzX-B."></div></figure><h3 name="c883" id="c883" class="graf graf--h3 graf-after--figure graf--trailing graf--title">Graphing systems metrics with netdata, Prometheus, and Grafana</h3></div></div></section></div></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/graphing-systems-metrics-with-netdata-prometheus-and-grafana-29ba9ec6bc98?source=collection_archive---------4-----------------------" data-action="open-post" data-action-source="collection_archive---------4-----------------------" data-action-value="https://medium.com/vimeo-engineering-blog/graphing-systems-metrics-with-netdata-prometheus-and-grafana-29ba9ec6bc98?source=collection_archive---------4-----------------------" data-post-id="29ba9ec6bc98">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="29ba9ec6bc98" data-is-flush-left="true" data-source="listing-----29ba9ec6bc98---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/29ba9ec6bc98" data-action-source="listing-----29ba9ec6bc98---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25"><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25"><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="29ba9ec6bc98">289</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/graphing-systems-metrics-with-netdata-prometheus-and-grafana-29ba9ec6bc98?source=collection_archive---------4-----------------------#--responses" data-action-source="collection_archive---------4-----------------------">1 response</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="29ba9ec6bc98"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25"><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none"><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div></div><div class="streamItem streamItem--postPreview js-streamItem"><div class="cardChromeless u-marginTop20 u-paddingTop10 u-paddingBottom15 u-paddingLeft20 u-paddingRight20"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation js-trackPostScrolls" data-post-id="26250f13d251" data-source="collection_archive---------5-----------------------"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@muglug" data-action="show-user-card" data-action-value="696fc211da2" data-action-type="hover" data-user-id="696fc211da2" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/72/72/0*1QXZBdTTCzQYfBF6.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Matt Brown"></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://web.archive.org/web/20211201164814/https://medium.com/@muglug?source=collection_archive---------5-----------------------" data-action="show-user-card" data-action-source="collection_archive---------5-----------------------" data-action-value="696fc211da2" data-action-type="hover" data-user-id="696fc211da2" dir="auto">Matt Brown</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog?source=collection_archive---------5-----------------------" data-action="show-collection-card" data-action-source="collection_archive---------5-----------------------" data-action-value="vimeo-engineering-blog" data-action-type="hover">Vimeo Engineering Blog</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/the-great-pretender-faster-application-tests-with-mysql-simulation-26250f13d251?source=collection_archive---------5-----------------------" data-action="open-post" data-action-value="https://medium.com/vimeo-engineering-blog/the-great-pretender-faster-application-tests-with-mysql-simulation-26250f13d251?source=collection_archive---------5-----------------------" data-action-source="preview-listing"><time datetime="2021-02-01T16:04:11.047Z">Feb 1</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="6 min read"></span></div></div></div></div></div><div><a class="" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/the-great-pretender-faster-application-tests-with-mysql-simulation-26250f13d251?source=collection_archive---------5-----------------------" data-action-source="collection_archive---------5-----------------------"><div class="postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="1*5a7mjMdtwdsTFV6ly8Ss2g.jpeg" data-width="3525" data-height="2177" data-is-featured="true" alt="The unholy mix of an elephant and a dolphin leaps out the water" src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/t/1600/480/1*5a7mjMdtwdsTFV6ly8Ss2g.jpeg"></div></figure><h3 name="7c64" id="7c64" class="graf graf--h3 graf-after--figure graf--trailing graf--title">The great pretender: faster application tests with MySQL simulation</h3></div></div></section></div></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/the-great-pretender-faster-application-tests-with-mysql-simulation-26250f13d251?source=collection_archive---------5-----------------------" data-action="open-post" data-action-source="collection_archive---------5-----------------------" data-action-value="https://medium.com/vimeo-engineering-blog/the-great-pretender-faster-application-tests-with-mysql-simulation-26250f13d251?source=collection_archive---------5-----------------------" data-post-id="26250f13d251">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="26250f13d251" data-is-flush-left="true" data-source="listing-----26250f13d251---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/26250f13d251" data-action-source="listing-----26250f13d251---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25"><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25"><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="26250f13d251">281</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/the-great-pretender-faster-application-tests-with-mysql-simulation-26250f13d251?source=collection_archive---------5-----------------------#--responses" data-action-source="collection_archive---------5-----------------------">5 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="26250f13d251"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25"><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none"><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div></div><div class="streamItem streamItem--postPreview js-streamItem"><div class="cardChromeless u-marginTop20 u-paddingTop10 u-paddingBottom15 u-paddingLeft20 u-paddingRight20"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation js-trackPostScrolls" data-post-id="a4ca46eb9aeb" data-source="collection_archive---------6-----------------------"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@muglug" data-action="show-user-card" data-action-value="696fc211da2" data-action-type="hover" data-user-id="696fc211da2" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/72/72/0*1QXZBdTTCzQYfBF6.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Matt Brown"></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://web.archive.org/web/20211201164814/https://medium.com/@muglug?source=collection_archive---------6-----------------------" data-action="show-user-card" data-action-source="collection_archive---------6-----------------------" data-action-value="696fc211da2" data-action-type="hover" data-user-id="696fc211da2" dir="auto">Matt Brown</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog?source=collection_archive---------6-----------------------" data-action="show-collection-card" data-action-source="collection_archive---------6-----------------------" data-action-value="vimeo-engineering-blog" data-action-type="hover">Vimeo Engineering Blog</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/uncovering-php-bugs-with-template-a4ca46eb9aeb?source=collection_archive---------6-----------------------" data-action="open-post" data-action-value="https://medium.com/vimeo-engineering-blog/uncovering-php-bugs-with-template-a4ca46eb9aeb?source=collection_archive---------6-----------------------" data-action-source="preview-listing"><time datetime="2019-01-30T16:05:53.925Z">Jan 30, 2019</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="6 min read"></span></div></div></div></div></div><div><a class="" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/uncovering-php-bugs-with-template-a4ca46eb9aeb?source=collection_archive---------6-----------------------" data-action-source="collection_archive---------6-----------------------"><div class="postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><figure name="previewImage" id="previewImage" class="graf graf--figure graf--layoutCroppedHeightPreview graf--leading"><div class="aspectRatioPlaceholder is-locked"><div class="aspectRatioPlaceholder-fill" style="padding-bottom: 30%;"></div><img class="graf-image" data-image-id="1*uMGNQT7jeDfrnXnnF190kg.png" data-width="2306" data-height="1616" data-is-featured="true" src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/t/1600/480/1*uMGNQT7jeDfrnXnnF190kg.png"></div></figure><h3 name="previewTitle" id="previewTitle" class="graf graf--h3 graf-after--figure graf--title">Uncovering PHP bugs with @template</h3><h4 name="previewSubtitle" id="previewSubtitle" class="graf graf--h4 graf-after--h3 graf--trailing graf--subtitle">At a former job I wrote a load of C# code, and I really enjoyed…</h4></div></div></section></div></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/uncovering-php-bugs-with-template-a4ca46eb9aeb?source=collection_archive---------6-----------------------" data-action="open-post" data-action-source="collection_archive---------6-----------------------" data-action-value="https://medium.com/vimeo-engineering-blog/uncovering-php-bugs-with-template-a4ca46eb9aeb?source=collection_archive---------6-----------------------" data-post-id="a4ca46eb9aeb">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="a4ca46eb9aeb" data-is-flush-left="true" data-source="listing-----a4ca46eb9aeb---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/a4ca46eb9aeb" data-action-source="listing-----a4ca46eb9aeb---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25"><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25"><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="a4ca46eb9aeb">253</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/uncovering-php-bugs-with-template-a4ca46eb9aeb?source=collection_archive---------6-----------------------#--responses" data-action-source="collection_archive---------6-----------------------">2 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="a4ca46eb9aeb"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25"><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none"><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div></div><div class="streamItem streamItem--postPreview js-streamItem"><div class="cardChromeless u-marginTop20 u-paddingTop10 u-paddingBottom15 u-paddingLeft20 u-paddingRight20"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation js-trackPostScrolls" data-post-id="a99e05998c24" data-source="collection_archive---------7-----------------------"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@muglug" data-action="show-user-card" data-action-value="696fc211da2" data-action-type="hover" data-user-id="696fc211da2" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/72/72/0*1QXZBdTTCzQYfBF6.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Matt Brown"></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://web.archive.org/web/20211201164814/https://medium.com/@muglug?source=collection_archive---------7-----------------------" data-action="show-user-card" data-action-source="collection_archive---------7-----------------------" data-action-value="696fc211da2" data-action-type="hover" data-user-id="696fc211da2" dir="auto">Matt Brown</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog?source=collection_archive---------7-----------------------" data-action="show-collection-card" data-action-source="collection_archive---------7-----------------------" data-action-value="vimeo-engineering-blog" data-action-type="hover">Vimeo Engineering Blog</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/fixing-code-that-aint-broken-a99e05998c24?source=collection_archive---------7-----------------------" data-action="open-post" data-action-value="https://medium.com/vimeo-engineering-blog/fixing-code-that-aint-broken-a99e05998c24?source=collection_archive---------7-----------------------" data-action-source="preview-listing"><time datetime="2018-03-16T18:42:23.869Z">Mar 16, 2018</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="5 min read"></span></div></div></div></div></div><div><a class="" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/fixing-code-that-aint-broken-a99e05998c24?source=collection_archive---------7-----------------------" data-action-source="collection_archive---------7-----------------------"><div class="postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 name="262b" id="262b" class="graf graf--h3 graf--leading graf--title">Fixing code that ain’t broken</h3><p name="872a" id="872a" class="graf graf--p graf-after--h3">In June of 2015, the Vimeo Codebase was large, sprawling, and full of magic. It processed many millions of requests every hour. The users were happy, and the company grew.</p><p name="15a2" id="15a2" class="graf graf--p graf-after--p graf--trailing">The Codebase <em class="markup--em markup--p-em">worked</em>.</p></div></div></section></div></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/fixing-code-that-aint-broken-a99e05998c24?source=collection_archive---------7-----------------------" data-action="open-post" data-action-source="collection_archive---------7-----------------------" data-action-value="https://medium.com/vimeo-engineering-blog/fixing-code-that-aint-broken-a99e05998c24?source=collection_archive---------7-----------------------" data-post-id="a99e05998c24">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="a99e05998c24" data-is-flush-left="true" data-source="listing-----a99e05998c24---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/a99e05998c24" data-action-source="listing-----a99e05998c24---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25"><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25"><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="a99e05998c24">497</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/fixing-code-that-aint-broken-a99e05998c24?source=collection_archive---------7-----------------------#--responses" data-action-source="collection_archive---------7-----------------------">3 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="a99e05998c24"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25"><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none"><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div></div><div class="streamItem streamItem--postPreview js-streamItem"><div class="cardChromeless u-marginTop20 u-paddingTop10 u-paddingBottom15 u-paddingLeft20 u-paddingRight20"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation js-trackPostScrolls" data-post-id="3e208a2da760" data-source="collection_archive---------8-----------------------"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@mrccmpbll" data-action="show-user-card" data-action-value="f4943d90d808" data-action-type="hover" data-user-id="f4943d90d808" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/72/72/1*ddje2ZQ4bxfdgoEHBAb_gQ.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Marc Campbell"></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://web.archive.org/web/20211201164814/https://medium.com/@mrccmpbll?source=collection_archive---------8-----------------------" data-action="show-user-card" data-action-source="collection_archive---------8-----------------------" data-action-value="f4943d90d808" data-action-type="hover" data-user-id="f4943d90d808" dir="auto">Marc Campbell</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog?source=collection_archive---------8-----------------------" data-action="show-collection-card" data-action-source="collection_archive---------8-----------------------" data-action-value="vimeo-engineering-blog" data-action-type="hover">Vimeo Engineering Blog</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/introducing-the-new-vimeo-upload-api-3e208a2da760?source=collection_archive---------8-----------------------" data-action="open-post" data-action-value="https://medium.com/vimeo-engineering-blog/introducing-the-new-vimeo-upload-api-3e208a2da760?source=collection_archive---------8-----------------------" data-action-source="preview-listing"><time datetime="2018-02-07T15:52:24.707Z">Feb 7, 2018</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="3 min read"></span></div></div></div></div></div><div><a class="" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/introducing-the-new-vimeo-upload-api-3e208a2da760?source=collection_archive---------8-----------------------" data-action-source="collection_archive---------8-----------------------"><div class="postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 name="aae1" id="aae1" class="graf graf--h3 graf--leading graf--title">Introducing the new Vimeo upload API</h3><p name="7f80" id="7f80" class="graf graf--p graf-after--h3 graf--trailing">Vimeo’s got some pretty big news to share today. We’ve just rolled out an all-new, all-awesome version of our API — and we want you to be the first to use it. (Well, among the first. We did send out an email blast or two to some of you.)</p></div></div></section></div></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/introducing-the-new-vimeo-upload-api-3e208a2da760?source=collection_archive---------8-----------------------" data-action="open-post" data-action-source="collection_archive---------8-----------------------" data-action-value="https://medium.com/vimeo-engineering-blog/introducing-the-new-vimeo-upload-api-3e208a2da760?source=collection_archive---------8-----------------------" data-post-id="3e208a2da760">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="3e208a2da760" data-is-flush-left="true" data-source="listing-----3e208a2da760---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/3e208a2da760" data-action-source="listing-----3e208a2da760---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25"><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25"><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="3e208a2da760">134</button></span></div></div><div class="buttonSet u-floatRight"><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="3e208a2da760"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25"><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none"><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div></div><div class="streamItem streamItem--postPreview js-streamItem"><div class="cardChromeless u-marginTop20 u-paddingTop10 u-paddingBottom15 u-paddingLeft20 u-paddingRight20"><div class="postArticle postArticle--short js-postArticle js-trackPostPresentation js-trackPostScrolls" data-post-id="486179edeb29" data-source="collection_archive---------9-----------------------"><div class="u-clearfix u-marginBottom15 u-paddingTop5"><div class="postMetaInline u-floatLeft u-sm-maxWidthFullWidth"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@kvenn" data-action="show-user-card" data-action-value="9a9de6b26f1f" data-action-type="hover" data-user-id="9a9de6b26f1f" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/72/72/1*hK4iNuM_7Zbo6VIbpS6X8Q.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Kyle Venn"></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://web.archive.org/web/20211201164814/https://medium.com/@kvenn?source=collection_archive---------9-----------------------" data-action="show-user-card" data-action-source="collection_archive---------9-----------------------" data-action-value="9a9de6b26f1f" data-action-type="hover" data-user-id="9a9de6b26f1f" dir="auto">Kyle Venn</a> in <a class="ds-link ds-link--styleSubtle link--darken link--accent u-accentColor--textNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog?source=collection_archive---------9-----------------------" data-action="show-collection-card" data-action-source="collection_archive---------9-----------------------" data-action-value="vimeo-engineering-blog" data-action-type="hover">Vimeo Engineering Blog</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><a class="link link--darken" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/boosting-app-performance-with-reflectionless-de-serialization-486179edeb29?source=collection_archive---------9-----------------------" data-action="open-post" data-action-value="https://medium.com/vimeo-engineering-blog/boosting-app-performance-with-reflectionless-de-serialization-486179edeb29?source=collection_archive---------9-----------------------" data-action-source="preview-listing"><time datetime="2016-11-29T18:50:43.470Z">Nov 29, 2016</time></a><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="3 min read"></span></div></div></div></div></div><div><a class="" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/boosting-app-performance-with-reflectionless-de-serialization-486179edeb29?source=collection_archive---------9-----------------------" data-action-source="collection_archive---------9-----------------------"><div class="postArticle-content js-postField"><section class="section section--body section--first section--last"><div class="section-divider"><hr class="section-divider"></div><div class="section-content"><div class="section-inner sectionLayout--insetColumn"><h3 name="d54c" id="d54c" class="graf graf--h3 graf--leading graf--title">Boosting app performance with reflectionless (de)serialization</h3><p name="2905" id="2905" class="graf graf--p graf-after--h3">By <span class="markup--user markup--p-user" data-action="show-user-card" data-action-type="hover" data-user-id="726498ee26e5" data-action-value="726498ee26e5">Kevin Zetterstrom</span> and <span class="markup--user markup--p-user" data-action="show-user-card" data-action-type="hover" data-user-id="1c9b1c38c628" data-action-value="1c9b1c38c628">Anthony Restaino</span></p><p name="20b8" id="20b8" class="graf graf--p graf-after--p graf--trailing">As any native app developer will tell you, API responsiveness and application performance are directly correlated with a positive user experience —…</p></div></div></section></div></a></div><div class="postArticle-readMore"><a class="button button--smaller button--chromeless u-baseColor--buttonNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/boosting-app-performance-with-reflectionless-de-serialization-486179edeb29?source=collection_archive---------9-----------------------" data-action="open-post" data-action-source="collection_archive---------9-----------------------" data-action-value="https://medium.com/vimeo-engineering-blog/boosting-app-performance-with-reflectionless-de-serialization-486179edeb29?source=collection_archive---------9-----------------------" data-post-id="486179edeb29">Read more…</a></div><div class="u-clearfix u-paddingTop10"><div class="u-floatLeft"><div class="multirecommend js-actionMultirecommend u-flexCenter" data-post-id="486179edeb29" data-is-flush-left="true" data-source="listing-----486179edeb29---------------------clap_preview"><div class="u-relative u-foreground"><button class="button button--primary button--chromeless u-accentColor--buttonNormal button--withIcon button--withSvgIcon clapButton js-actionMultirecommendButton clapButton--darker" data-action="sign-up-prompt" data-sign-in-action="multivote" data-requires-token="true" data-redirect="https://medium.com/_/vote/p/486179edeb29" data-action-source="listing-----486179edeb29---------------------clap_preview" aria-label="Clap"><span class="button-defaultState"><span class="svgIcon svgIcon--clap svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25"><g fill-rule="evenodd"><path d="M11.739 0l.761 2.966L13.261 0z"/><path d="M14.815 3.776l1.84-2.551-1.43-.471z"/><path d="M8.378 1.224l1.84 2.551L9.81.753z"/><path d="M20.382 21.622c-1.04 1.04-2.115 1.507-3.166 1.608.168-.14.332-.29.492-.45 2.885-2.886 3.456-5.982 1.69-9.211l-1.101-1.937-.955-2.02c-.315-.676-.235-1.185.245-1.556a.836.836 0 01.66-.16c.342.056.66.28.879.605l2.856 5.023c1.179 1.962 1.379 5.119-1.6 8.098m-13.29-.528l-5.02-5.02a1 1 0 01.707-1.701c.255 0 .512.098.707.292l2.607 2.607a.442.442 0 00.624-.624L4.11 14.04l-1.75-1.75a.998.998 0 111.41-1.413l4.154 4.156a.44.44 0 00.624 0 .44.44 0 000-.624l-4.152-4.153-1.172-1.171a.998.998 0 010-1.41 1.018 1.018 0 011.41 0l1.172 1.17 4.153 4.152a.437.437 0 00.624 0 .442.442 0 000-.624L6.43 8.222a.988.988 0 01-.291-.705.99.99 0 01.29-.706 1 1 0 011.412 0l6.992 6.993a.443.443 0 00.71-.501l-1.35-2.856c-.315-.676-.235-1.185.246-1.557a.85.85 0 01.66-.16c.342.056.659.28.879.606L18.628 14c1.573 2.876 1.067 5.545-1.544 8.156-1.396 1.397-3.144 1.966-5.063 1.652-1.713-.286-3.463-1.248-4.928-2.714zM10.99 5.976l2.562 2.562c-.497.607-.563 1.414-.155 2.284l.265.562-4.257-4.257a.98.98 0 01-.117-.445c0-.267.104-.517.292-.706a1.023 1.023 0 011.41 0zm8.887 2.06c-.375-.557-.902-.916-1.486-1.011a1.738 1.738 0 00-1.342.332c-.376.29-.61.656-.712 1.065a2.1 2.1 0 00-1.095-.562 1.776 1.776 0 00-.992.128l-2.636-2.636a1.883 1.883 0 00-2.658 0 1.862 1.862 0 00-.478.847 1.886 1.886 0 00-2.671-.012 1.867 1.867 0 00-.503.909c-.754-.754-1.992-.754-2.703-.044a1.881 1.881 0 000 2.658c-.288.12-.605.288-.864.547a1.884 1.884 0 000 2.659l.624.622a1.879 1.879 0 00-.91 3.16l5.019 5.02c1.595 1.594 3.515 2.645 5.408 2.959a7.16 7.16 0 001.173.098c1.026 0 1.997-.24 2.892-.7.279.04.555.065.828.065 1.53 0 2.969-.628 4.236-1.894 3.338-3.338 3.083-6.928 1.738-9.166l-2.868-5.043z"/></g></svg></span></span><span class="button-activeState"><span class="svgIcon svgIcon--clapFilled svgIcon--25px is-flushLeft"><svg class="svgIcon-use" width="25" height="25"><g fill-rule="evenodd"><path d="M11.738 0l.762 2.966L13.262 0z"/><path d="M16.634 1.224l-1.432-.47-.408 3.022z"/><path d="M9.79.754l-1.431.47 1.84 2.552z"/><path d="M22.472 13.307l-3.023-5.32c-.287-.426-.689-.705-1.123-.776a1.16 1.16 0 00-.911.221c-.297.231-.474.515-.535.84.017.022.036.04.053.063l2.843 5.001c1.95 3.564 1.328 6.973-1.843 10.144a8.46 8.46 0 01-.549.501c1.205-.156 2.328-.737 3.351-1.76 3.268-3.268 3.041-6.749 1.737-8.914"/><path d="M12.58 9.887c-.156-.83.096-1.569.692-2.142L10.78 5.252c-.5-.504-1.378-.504-1.879 0-.178.18-.273.4-.329.63l4.008 4.005z"/><path d="M15.812 9.04c-.218-.323-.539-.55-.88-.606a.814.814 0 00-.644.153c-.176.137-.713.553-.24 1.566l1.43 3.025a.539.539 0 11-.868.612L7.2 6.378a.986.986 0 10-1.395 1.395l4.401 4.403a.538.538 0 11-.762.762L5.046 8.54 3.802 7.295a.99.99 0 00-1.396 0 .981.981 0 000 1.394L3.647 9.93l4.402 4.403a.537.537 0 010 .761.535.535 0 01-.762 0L2.89 10.696a.992.992 0 00-1.399-.003.983.983 0 000 1.395l1.855 1.854 2.763 2.765a.538.538 0 01-.76.761l-2.765-2.764a.982.982 0 00-1.395 0 .989.989 0 000 1.395l5.32 5.32c3.371 3.372 6.64 4.977 10.49 1.126C19.74 19.8 20.271 17 18.62 13.982L15.812 9.04z"/></g></svg></span></span></button></div><span class="u-relative u-background js-actionMultirecommendCount u-marginLeft5"><button class="button button--chromeless u-baseColor--buttonNormal js-multirecommendCountButton u-disablePointerEvents" data-action="show-recommends" data-action-value="486179edeb29">105</button></span></div></div><div class="buttonSet u-floatRight"><a class="button button--chromeless u-baseColor--buttonNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/boosting-app-performance-with-reflectionless-de-serialization-486179edeb29?source=collection_archive---------9-----------------------#--responses" data-action-source="collection_archive---------9-----------------------">2 responses</a><button class="button button--dark button--chromeless is-touchIconFadeInPulse u-baseColor--buttonDark button--withIcon button--withSvgIcon button--bookmark js-bookmarkButton" data-action="add-to-bookmarks" data-action-value="486179edeb29"><span class="js-remove-from-bookmarks u-hide"><span class="svgIcon svgIcon--bookmarkFilled svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25"><path d="M19 6c0-1.1-.9-2-2-2H8c-1.1 0-2 .9-2 2v14.66h.012c.01.103.045.204.12.285a.5.5 0 00.706.03L12.5 16.85l5.662 4.126c.205.183.52.17.708-.03a.5.5 0 00.118-.285H19V6z"/></svg></span></span><span class="js-add-to-bookmarks"><span class="svgIcon svgIcon--bookmarkAdd svgIcon--25px is-flushRight"><svg class="svgIcon-use" width="25" height="25" fill="none"><path d="M18 2.5a.5.5 0 011 0V5h2.5a.5.5 0 010 1H19v2.5a.5.5 0 11-1 0V6h-2.5a.5.5 0 010-1H18V2.5z" fill="#292929"/><path d="M7 7a1 1 0 011-1h3.5a.5.5 0 000-1H8a2 2 0 00-2 2v14a.5.5 0 00.805.396L12.5 17l5.695 4.396A.5.5 0 0019 21v-8.5a.5.5 0 00-1 0v7.485l-5.195-4.012a.5.5 0 00-.61 0L7 19.985V7z" fill="#292929"/></svg></span></span></button></div></div></div></div></div></div><div class="u-marginTop30 u-marginBottom40 u-clearfix"></div><p class="u-marginBottom40 u-clearfix u-fontSize14 u-textColorDark">These were the top 10 stories published by Vimeo Engineering Blog; you can also dive into yearly archives: <a href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/archive/2016">2016</a>, <a href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/archive/2017">2017</a>, <a href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/archive/2018">2018</a>, <a href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/archive/2019">2019</a>, <a href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/archive/2020">2020</a>, and <a href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/archive/2021">2021</a>.</p></div><div class="col u-xs-size12of12 u-size3of12 u-paddingRight0 u-paddingLeft50"><header class="heading heading--borderedBottom"><div class="u-clearfix"><div class="heading-content u-floatLeft"><span class="heading-title">About</span></div></div></header><div class="u-paddingTop18 u-paddingBottom35"><div class="u-fontSize18 u-lineHeightTight">Vimeo Engineering Blog</div><div class="u-fontSize14 u-lineHeightBaseSans u-paddingTop15"><div class="u-textColorDark u-marginBottom15">We tinker, we build, and we dream up all-new things to help support the world&#39;s best community of creators. Lift up the hood and see how it all works.</div><a class=" link--darken u-accentColor--textDarken link--accent u-accentColor--textNormal" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/about">More information</a></div></div><header class="heading heading--borderedBottom"><div class="u-clearfix"><div class="heading-content u-floatLeft"><span class="heading-title">Tags</span></div></div></header><div class="u-sizeFull u-paddingTop10 u-paddingBottom10 u-borderBox"><a class="link u-baseColor--link u-fontSize14 u-verticalAlignTop js-tag" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/tagged/songs">Gson</a></div><div class="u-sizeFull u-paddingTop10 u-paddingBottom10 u-borderBox"><a class="link u-baseColor--link u-fontSize14 u-verticalAlignTop js-tag" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/tagged/open-source">Open Source</a></div><div class="u-sizeFull u-paddingTop10 u-paddingBottom10 u-borderBox"><a class="link u-baseColor--link u-fontSize14 u-verticalAlignTop js-tag" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/tagged/stag">Stag</a></div><div class="u-sizeFull u-paddingTop10 u-paddingBottom10 u-borderBox"><a class="link u-baseColor--link u-fontSize14 u-verticalAlignTop js-tag" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/tagged/performance">Performance</a></div><div class="u-sizeFull u-paddingTop10 u-paddingBottom10 u-borderBox"><a class="link u-baseColor--link u-fontSize14 u-verticalAlignTop js-tag" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/tagged/android">Android</a></div><div class="u-sizeFull u-paddingTop10 u-paddingBottom10 u-borderBox"><a class="link u-baseColor--link u-fontSize14 u-verticalAlignTop js-tag" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/tagged/tu">Tus</a></div><div class="u-sizeFull u-paddingTop10 u-paddingBottom10 u-borderBox"><a class="link u-baseColor--link u-fontSize14 u-verticalAlignTop js-tag" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/tagged/api">API</a></div><div class="u-sizeFull u-paddingTop10 u-paddingBottom10 u-borderBox"><a class="link u-baseColor--link u-fontSize14 u-verticalAlignTop js-tag" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/tagged/static-analysis">Static Analysis</a></div><div class="u-sizeFull u-paddingTop10 u-paddingBottom10 u-borderBox"><a class="link u-baseColor--link u-fontSize14 u-verticalAlignTop js-tag" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/tagged/php">PHP</a></div><div class="u-sizeFull u-paddingTop10 u-paddingBottom10 u-borderBox"><a class="link u-baseColor--link u-fontSize14 u-verticalAlignTop js-tag" href="https://web.archive.org/web/20211201164814/https://medium.com/vimeo-engineering-blog/tagged/static-analysis">Static Analysis</a></div><div class="u-marginTop30"><header class="heading heading--borderedBottom"><div class="u-clearfix"><div class="heading-content u-floatLeft"><span class="heading-title">Editors</span></div></div></header></div><div class="js-staff"><div class="u-flexCenter u-paddingBottom10 u-paddingTop10"><div class="u-marginRight10"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@Vimeo?source=collection-archive" data-action="show-user-card" data-action-source="collection-archive" data-action-value="9a4d2ea550cb" data-action-type="hover" data-user-id="9a4d2ea550cb" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/80/80/0*t8_8z3VfaypnOzHF.png" class="avatar-image avatar-image--smaller" alt="Go to the profile of Vimeo"></a></div><a class="link link--darker link--darken u-accentColor--textDarken u-baseColor--link u-fontSize14 u-flex1" href="https://web.archive.org/web/20211201164814/https://medium.com/@Vimeo" data-action="show-user-card" data-action-value="9a4d2ea550cb" data-action-type="hover" data-user-id="9a4d2ea550cb" dir="auto">Vimeo</a></div></div><div class="js-staff"><div class="u-flexCenter u-paddingBottom10 u-paddingTop10"><div class="u-marginRight10"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@kvenn?source=collection-archive" data-action="show-user-card" data-action-source="collection-archive" data-action-value="9a9de6b26f1f" data-action-type="hover" data-user-id="9a9de6b26f1f" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/80/80/1*hK4iNuM_7Zbo6VIbpS6X8Q.jpeg" class="avatar-image avatar-image--smaller" alt="Go to the profile of Kyle Venn"></a></div><a class="link link--darker link--darken u-accentColor--textDarken u-baseColor--link u-fontSize14 u-flex1" href="https://web.archive.org/web/20211201164814/https://medium.com/@kvenn" data-action="show-user-card" data-action-value="9a9de6b26f1f" data-action-type="hover" data-user-id="9a9de6b26f1f" dir="auto">Kyle Venn</a></div></div><div class="js-staff"><div class="u-flexCenter u-paddingBottom10 u-paddingTop10"><div class="u-marginRight10"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@mrccmpbll?source=collection-archive" data-action="show-user-card" data-action-source="collection-archive" data-action-value="f4943d90d808" data-action-type="hover" data-user-id="f4943d90d808" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/80/80/1*ddje2ZQ4bxfdgoEHBAb_gQ.png" class="avatar-image avatar-image--smaller" alt="Go to the profile of Marc Campbell"></a></div><a class="link link--darker link--darken u-accentColor--textDarken u-baseColor--link u-fontSize14 u-flex1" href="https://web.archive.org/web/20211201164814/https://medium.com/@mrccmpbll" data-action="show-user-card" data-action-value="f4943d90d808" data-action-type="hover" data-user-id="f4943d90d808" dir="auto">Marc Campbell</a></div></div><div class="u-marginTop30"><header class="heading heading--borderedBottom"><div class="u-clearfix"><div class="heading-content u-floatLeft"><span class="heading-title">Writers</span></div></div></header><div class="js-staff"><div class="u-flexCenter u-paddingBottom10 u-paddingTop10"><div class="u-marginRight10"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@kvenn?source=collection-archive" data-action="show-user-card" data-action-source="collection-archive" data-action-value="9a9de6b26f1f" data-action-type="hover" data-user-id="9a9de6b26f1f" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/80/80/1*hK4iNuM_7Zbo6VIbpS6X8Q.jpeg" class="avatar-image avatar-image--smaller" alt="Go to the profile of Kyle Venn"></a></div><a class="link link--darker link--darken u-accentColor--textDarken u-baseColor--link u-fontSize14 u-flex1" href="https://web.archive.org/web/20211201164814/https://medium.com/@kvenn" data-action="show-user-card" data-action-value="9a9de6b26f1f" data-action-type="hover" data-user-id="9a9de6b26f1f" dir="auto">Kyle Venn</a></div></div><div class="js-staff"><div class="u-flexCenter u-paddingBottom10 u-paddingTop10"><div class="u-marginRight10"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@arodland?source=collection-archive" data-action="show-user-card" data-action-source="collection-archive" data-action-value="ac6b5a21987a" data-action-type="hover" data-user-id="ac6b5a21987a" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/80/80/0*QPa0KdPmtxbQN8q6.jpg" class="avatar-image avatar-image--smaller" alt="Go to the profile of arodland"></a></div><a class="link link--darker link--darken u-accentColor--textDarken u-baseColor--link u-fontSize14 u-flex1" href="https://web.archive.org/web/20211201164814/https://medium.com/@arodland" data-action="show-user-card" data-action-value="ac6b5a21987a" data-action-type="hover" data-user-id="ac6b5a21987a" dir="auto">arodland</a></div></div><div class="js-staff"><div class="u-flexCenter u-paddingBottom10 u-paddingTop10"><div class="u-marginRight10"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@fisher.matt?source=collection-archive" data-action="show-user-card" data-action-source="collection-archive" data-action-value="dfbaf4fcaa38" data-action-type="hover" data-user-id="dfbaf4fcaa38" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/80/80/2*2qoIjyhCSZh55GNfLDN19g.jpeg" class="avatar-image avatar-image--smaller" alt="Go to the profile of Matt Fisher"></a></div><a class="link link--darker link--darken u-accentColor--textDarken u-baseColor--link u-fontSize14 u-flex1" href="https://web.archive.org/web/20211201164814/https://medium.com/@fisher.matt" data-action="show-user-card" data-action-value="dfbaf4fcaa38" data-action-type="hover" data-user-id="dfbaf4fcaa38" dir="auto">Matt Fisher</a></div></div><div class="js-staff"><div class="u-flexCenter u-paddingBottom10 u-paddingTop10"><div class="u-marginRight10"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@louis_90192?source=collection-archive" data-action="show-user-card" data-action-source="collection-archive" data-action-value="6f71707a0d62" data-action-type="hover" data-user-id="6f71707a0d62" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/80/80/0*1PaW45CydBgygeM6." class="avatar-image avatar-image--smaller" alt="Go to the profile of Louis DeLosSantos"></a></div><a class="link link--darker link--darken u-accentColor--textDarken u-baseColor--link u-fontSize14 u-flex1" href="https://web.archive.org/web/20211201164814/https://medium.com/@louis_90192" data-action="show-user-card" data-action-value="6f71707a0d62" data-action-type="hover" data-user-id="6f71707a0d62" dir="auto">Louis DeLosSantos</a></div></div><div class="js-staff"><div class="u-flexCenter u-paddingBottom10 u-paddingTop10"><div class="u-marginRight10"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@muglug?source=collection-archive" data-action="show-user-card" data-action-source="collection-archive" data-action-value="696fc211da2" data-action-type="hover" data-user-id="696fc211da2" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/80/80/0*1QXZBdTTCzQYfBF6.jpeg" class="avatar-image avatar-image--smaller" alt="Go to the profile of Matt Brown"></a></div><a class="link link--darker link--darken u-accentColor--textDarken u-baseColor--link u-fontSize14 u-flex1" href="https://web.archive.org/web/20211201164814/https://medium.com/@muglug" data-action="show-user-card" data-action-value="696fc211da2" data-action-type="hover" data-user-id="696fc211da2" dir="auto">Matt Brown</a></div></div><div class="js-staff"><div class="u-flexCenter u-paddingBottom10 u-paddingTop10"><div class="u-marginRight10"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@tokamak?source=collection-archive" data-action="show-user-card" data-action-source="collection-archive" data-action-value="cf358c3564b" data-action-type="hover" data-user-id="cf358c3564b" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/80/80/1*4Rru-SSFuXmrChGVPbpwzw.png" class="avatar-image avatar-image--smaller" alt="Go to the profile of Peixian Wang"></a></div><a class="link link--darker link--darken u-accentColor--textDarken u-baseColor--link u-fontSize14 u-flex1" href="https://web.archive.org/web/20211201164814/https://medium.com/@tokamak" data-action="show-user-card" data-action-value="cf358c3564b" data-action-type="hover" data-user-id="cf358c3564b" dir="auto">Peixian Wang</a></div></div><div class="js-staff"><div class="u-flexCenter u-paddingBottom10 u-paddingTop10"><div class="u-marginRight10"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@devonbalicki?source=collection-archive" data-action="show-user-card" data-action-source="collection-archive" data-action-value="3d445394104d" data-action-type="hover" data-user-id="3d445394104d" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/80/80/1*3oe1_1GO77GZZOmhLvJovg.jpeg" class="avatar-image avatar-image--smaller" alt="Go to the profile of Devon Balicki"></a></div><a class="link link--darker link--darken u-accentColor--textDarken u-baseColor--link u-fontSize14 u-flex1" href="https://web.archive.org/web/20211201164814/https://medium.com/@devonbalicki" data-action="show-user-card" data-action-value="3d445394104d" data-action-type="hover" data-user-id="3d445394104d" dir="auto">Devon Balicki</a></div></div><div class="js-staff"><div class="u-flexCenter u-paddingBottom10 u-paddingTop10"><div class="u-marginRight10"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@mrccmpbll?source=collection-archive" data-action="show-user-card" data-action-source="collection-archive" data-action-value="f4943d90d808" data-action-type="hover" data-user-id="f4943d90d808" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/80/80/1*ddje2ZQ4bxfdgoEHBAb_gQ.png" class="avatar-image avatar-image--smaller" alt="Go to the profile of Marc Campbell"></a></div><a class="link link--darker link--darken u-accentColor--textDarken u-baseColor--link u-fontSize14 u-flex1" href="https://web.archive.org/web/20211201164814/https://medium.com/@mrccmpbll" data-action="show-user-card" data-action-value="f4943d90d808" data-action-type="hover" data-user-id="f4943d90d808" dir="auto">Marc Campbell</a></div></div><div class="js-staff"><div class="u-flexCenter u-paddingBottom10 u-paddingTop10"><div class="u-marginRight10"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@reckoner165?source=collection-archive" data-action="show-user-card" data-action-source="collection-archive" data-action-value="5c508928d495" data-action-type="hover" data-user-id="5c508928d495" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/80/80/1*3y3irRJVKecEWw1No6qjPg.jpeg" class="avatar-image avatar-image--smaller" alt="Go to the profile of Sumanth Srinivasan"></a></div><a class="link link--darker link--darken u-accentColor--textDarken u-baseColor--link u-fontSize14 u-flex1" href="https://web.archive.org/web/20211201164814/https://medium.com/@reckoner165" data-action="show-user-card" data-action-value="5c508928d495" data-action-type="hover" data-user-id="5c508928d495" dir="auto">Sumanth Srinivasan</a></div></div><div class="js-staff"><div class="u-flexCenter u-paddingBottom10 u-paddingTop10"><div class="u-marginRight10"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@vittorio_7841?source=collection-archive" data-action="show-user-card" data-action-source="collection-archive" data-action-value="4d1e13b7760b" data-action-type="hover" data-user-id="4d1e13b7760b" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/80/80/2*wz5dkQUpKTt7u6MWH8APWw.png" class="avatar-image avatar-image--smaller" alt="Go to the profile of Vittorio Giovara"></a></div><a class="link link--darker link--darken u-accentColor--textDarken u-baseColor--link u-fontSize14 u-flex1" href="https://web.archive.org/web/20211201164814/https://medium.com/@vittorio_7841" data-action="show-user-card" data-action-value="4d1e13b7760b" data-action-type="hover" data-user-id="4d1e13b7760b" dir="auto">Vittorio Giovara</a></div></div><div class="js-staff"><div class="u-flexCenter u-paddingBottom10 u-paddingTop10"><div class="u-marginRight10"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@davidf_55754?source=collection-archive" data-action="show-user-card" data-action-source="collection-archive" data-action-value="af18b80aa4f7" data-action-type="hover" data-user-id="af18b80aa4f7" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/80/80/1*CNAv8IfssKEDCgtrlRf8Iw.jpeg" class="avatar-image avatar-image--smaller" alt="Go to the profile of David Finkel"></a></div><a class="link link--darker link--darken u-accentColor--textDarken u-baseColor--link u-fontSize14 u-flex1" href="https://web.archive.org/web/20211201164814/https://medium.com/@davidf_55754" data-action="show-user-card" data-action-value="af18b80aa4f7" data-action-type="hover" data-user-id="af18b80aa4f7" dir="auto">David Finkel</a></div></div><div class="js-staff"><div class="u-flexCenter u-paddingBottom10 u-paddingTop10"><div class="u-marginRight10"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@fengjiao.peng?source=collection-archive" data-action="show-user-card" data-action-source="collection-archive" data-action-value="6cc30bcf2885" data-action-type="hover" data-user-id="6cc30bcf2885" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/80/80/0*BDhdiQv-8yS8es7X.jpg" class="avatar-image avatar-image--smaller" alt="Go to the profile of Fengjiao Peng"></a></div><a class="link link--darker link--darken u-accentColor--textDarken u-baseColor--link u-fontSize14 u-flex1" href="https://web.archive.org/web/20211201164814/https://medium.com/@fengjiao.peng" data-action="show-user-card" data-action-value="6cc30bcf2885" data-action-type="hover" data-user-id="6cc30bcf2885" dir="auto">Fengjiao Peng</a></div></div><div class="js-staff"><div class="u-flexCenter u-paddingBottom10 u-paddingTop10"><div class="u-marginRight10"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@sergiosalvatore?source=collection-archive" data-action="show-user-card" data-action-source="collection-archive" data-action-value="84815ed4a94" data-action-type="hover" data-user-id="84815ed4a94" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/80/80/2*w4cS1hhT2f_vssqOGWh-tw.jpeg" class="avatar-image avatar-image--smaller" alt="Go to the profile of Sergio Salvatore"></a></div><a class="link link--darker link--darken u-accentColor--textDarken u-baseColor--link u-fontSize14 u-flex1" href="https://web.archive.org/web/20211201164814/https://medium.com/@sergiosalvatore" data-action="show-user-card" data-action-value="84815ed4a94" data-action-type="hover" data-user-id="84815ed4a94" dir="auto">Sergio Salvatore</a></div></div><div class="js-staff"><div class="u-flexCenter u-paddingBottom10 u-paddingTop10"><div class="u-marginRight10"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@sachinagada?source=collection-archive" data-action="show-user-card" data-action-source="collection-archive" data-action-value="bc69242cbad6" data-action-type="hover" data-user-id="bc69242cbad6" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/80/80/0*9MsF2X74qnZ79Kln" class="avatar-image avatar-image--smaller" alt="Go to the profile of Sachi Nagada"></a></div><a class="link link--darker link--darken u-accentColor--textDarken u-baseColor--link u-fontSize14 u-flex1" href="https://web.archive.org/web/20211201164814/https://medium.com/@sachinagada" data-action="show-user-card" data-action-value="bc69242cbad6" data-action-type="hover" data-user-id="bc69242cbad6" dir="auto">Sachi Nagada</a></div></div><div class="js-staff"><div class="u-flexCenter u-paddingBottom10 u-paddingTop10"><div class="u-marginRight10"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@rzumer?source=collection-archive" data-action="show-user-card" data-action-source="collection-archive" data-action-value="10bab874bf16" data-action-type="hover" data-user-id="10bab874bf16" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/80/80/0*l3mag4j0fcKv54Ej.jpg" class="avatar-image avatar-image--smaller" alt="Go to the profile of Raphaël Zumer"></a></div><a class="link link--darker link--darken u-accentColor--textDarken u-baseColor--link u-fontSize14 u-flex1" href="https://web.archive.org/web/20211201164814/https://medium.com/@rzumer" data-action="show-user-card" data-action-value="10bab874bf16" data-action-type="hover" data-user-id="10bab874bf16" dir="auto">Raphaël Zumer</a></div></div><div class="js-staff"><div class="u-flexCenter u-paddingBottom10 u-paddingTop10"><div class="u-marginRight10"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@ryan.kass?source=collection-archive" data-action="show-user-card" data-action-source="collection-archive" data-action-value="df060feda875" data-action-type="hover" data-user-id="df060feda875" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/80/80/1*t49rRsD8eCTnlsN_KQYWQg.jpeg" class="avatar-image avatar-image--smaller" alt="Go to the profile of Ryan Kass"></a></div><a class="link link--darker link--darken u-accentColor--textDarken u-baseColor--link u-fontSize14 u-flex1" href="https://web.archive.org/web/20211201164814/https://medium.com/@ryan.kass" data-action="show-user-card" data-action-value="df060feda875" data-action-type="hover" data-user-id="df060feda875" dir="auto">Ryan Kass</a></div></div><div class="js-staff"><div class="u-flexCenter u-paddingBottom10 u-paddingTop10"><div class="u-marginRight10"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@apackin?source=collection-archive" data-action="show-user-card" data-action-source="collection-archive" data-action-value="61437ba9f716" data-action-type="hover" data-user-id="61437ba9f716" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/80/80/1*S5R8PW-PZWw_EaLTxcWdgg.jpeg" class="avatar-image avatar-image--smaller" alt="Go to the profile of Assaf Packin"></a></div><a class="link link--darker link--darken u-accentColor--textDarken u-baseColor--link u-fontSize14 u-flex1" href="https://web.archive.org/web/20211201164814/https://medium.com/@apackin" data-action="show-user-card" data-action-value="61437ba9f716" data-action-type="hover" data-user-id="61437ba9f716" dir="auto">Assaf Packin</a></div></div><div class="js-staff"><div class="u-flexCenter u-paddingBottom10 u-paddingTop10"><div class="u-marginRight10"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@ZeevFeldbeine?source=collection-archive" data-action="show-user-card" data-action-source="collection-archive" data-action-value="c497c5a4b2de" data-action-type="hover" data-user-id="c497c5a4b2de" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/80/80/1*mQ3A7pmHN6XSd9yNma2KRQ@2x.jpeg" class="avatar-image avatar-image--smaller" alt="Go to the profile of zeev feldbeine"></a></div><a class="link link--darker link--darken u-accentColor--textDarken u-baseColor--link u-fontSize14 u-flex1" href="https://web.archive.org/web/20211201164814/https://medium.com/@ZeevFeldbeine" data-action="show-user-card" data-action-value="c497c5a4b2de" data-action-type="hover" data-user-id="c497c5a4b2de" dir="auto">zeev feldbeine</a></div></div><div class="js-staff"><div class="u-flexCenter u-paddingBottom10 u-paddingTop10"><div class="u-marginRight10"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@shelby.scalia?source=collection-archive" data-action="show-user-card" data-action-source="collection-archive" data-action-value="8f231cc0fef5" data-action-type="hover" data-user-id="8f231cc0fef5" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/80/80/1*iIoS54YvbHY57E-Nz9SQjA.jpeg" class="avatar-image avatar-image--smaller" alt="Go to the profile of Shelby Scalia"></a></div><a class="link link--darker link--darken u-accentColor--textDarken u-baseColor--link u-fontSize14 u-flex1" href="https://web.archive.org/web/20211201164814/https://medium.com/@shelby.scalia" data-action="show-user-card" data-action-value="8f231cc0fef5" data-action-type="hover" data-user-id="8f231cc0fef5" dir="auto">Shelby Scalia</a></div></div><div class="js-staff"><div class="u-flexCenter u-paddingBottom10 u-paddingTop10"><div class="u-marginRight10"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@obedespina?source=collection-archive" data-action="show-user-card" data-action-source="collection-archive" data-action-value="76f0c8379c68" data-action-type="hover" data-user-id="76f0c8379c68" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/80/80/1*AfeGqQsQWv3yOtnaAP10gQ.png" class="avatar-image avatar-image--smaller" alt="Go to the profile of Obed"></a></div><a class="link link--darker link--darken u-accentColor--textDarken u-baseColor--link u-fontSize14 u-flex1" href="https://web.archive.org/web/20211201164814/https://medium.com/@obedespina" data-action="show-user-card" data-action-value="76f0c8379c68" data-action-type="hover" data-user-id="76f0c8379c68" dir="auto">Obed</a></div></div><div class="js-staff"><div class="u-flexCenter u-paddingBottom10 u-paddingTop10"><div class="u-marginRight10"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@supperspidey?source=collection-archive" data-action="show-user-card" data-action-source="collection-archive" data-action-value="11e87bbb2e89" data-action-type="hover" data-user-id="11e87bbb2e89" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/80/80/1*3eEjcO2zZizFGmP5oVEPaQ.jpeg" class="avatar-image avatar-image--smaller" alt="Go to the profile of Van Nguyen"></a></div><a class="link link--darker link--darken u-accentColor--textDarken u-baseColor--link u-fontSize14 u-flex1" href="https://web.archive.org/web/20211201164814/https://medium.com/@supperspidey" data-action="show-user-card" data-action-value="11e87bbb2e89" data-action-type="hover" data-user-id="11e87bbb2e89" dir="auto">Van Nguyen</a></div></div><div class="js-staff"><div class="u-flexCenter u-paddingBottom10 u-paddingTop10"><div class="u-marginRight10"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@apkatsikas?source=collection-archive" data-action="show-user-card" data-action-source="collection-archive" data-action-value="53d6fde4a8ad" data-action-type="hover" data-user-id="53d6fde4a8ad" dir="auto"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/80/80/1*OP3Rvemg2RgTkvgROVoQVA.png" class="avatar-image avatar-image--smaller" alt="Go to the profile of Andrew Katsikas"></a></div><a class="link link--darker link--darken u-accentColor--textDarken u-baseColor--link u-fontSize14 u-flex1" href="https://web.archive.org/web/20211201164814/https://medium.com/@apkatsikas" data-action="show-user-card" data-action-value="53d6fde4a8ad" data-action-type="hover" data-user-id="53d6fde4a8ad" dir="auto">Andrew Katsikas</a></div></div><div class="js-staff"><div class="u-flexCenter u-paddingBottom10 u-paddingTop10"><div class="u-marginRight10"><a class="link u-baseColor--link avatar" href="https://web.archive.org/web/20211201164814/https://medium.com/@jaspreet-ranjit?source=collection-archive" data-action="show-user-card" data-action-source="collection-archive" data-action-value="fce00e13dbfb" data-action-type="hover" data-user-id="fce00e13dbfb" dir="auto"><div class="u-relative u-inlineBlock u-flex0"><img src="https://web.archive.org/web/20211201164814im_/https://cdn-images-1.medium.com/fit/c/80/80/1*PAJKTOe6hL0nwpJsSlce9w.png" class="avatar-image avatar-image--smaller" alt="Go to the profile of Jaspreet Ranjit"><div class="avatar-halo u-absolute u-textColorGreenNormal svgIcon" style=" display:flex; flex-direction:row; align-items: center; justify-content: center; height:calc(100% + 25px); width:calc(100% + 25px); pointer-events: none; top:50%; left:50%; transform:translateY(-50%) translateX(-50%); "><svg width="49" height="49" viewbox="0 0 49 49" xmlns="http://www.w3.org/2000/svg" style="width: calc(100% - 16px); height: calc(100% - 16px);"><path fill-rule="evenodd" clip-rule="evenodd" d="M24.5 1.09776C15.1109 1.09776 6.96562 6.64682 2.98844 14.7615L2 14.2793C6.14796 5.81615 14.66 0 24.5 0C34.34 0 42.852 5.81615 47 14.2793L46.0116 14.7615C42.0344 6.64682 33.8891 1.09776 24.5 1.09776ZM2.98844 34.2385C6.96562 42.3532 15.1109 47.9022 24.5 47.9022C33.8891 47.9022 42.0344 42.3532 46.0116 34.2385L47 34.7207C42.852 43.1838 34.34 49 24.5 49C14.66 49 6.14796 43.1838 2 34.7207L2.98844 34.2385Z"/></svg></div></div></a></div><a class="link link--darker link--darken u-accentColor--textDarken u-baseColor--link u-fontSize14 u-flex1" href="https://web.archive.org/web/20211201164814/https://medium.com/@jaspreet-ranjit" data-action="show-user-card" data-action-value="fce00e13dbfb" data-action-type="hover" data-user-id="fce00e13dbfb" dir="auto">Jaspreet Ranjit</a></div></div></div></div></div><style class="js-collectionStyle"> .u-accentColor--borderLight {border-color: #0094D5 !important;} .u-accentColor--borderNormal {border-color: #0094D5 !important;} .u-accentColor--borderDark {border-color: #007EB1 !important;} .u-accentColor--iconLight .svgIcon,.u-accentColor--iconLight.svgIcon {fill: #0094D5 !important;} .u-accentColor--iconNormal .svgIcon,.u-accentColor--iconNormal.svgIcon {fill: #0094D5 !important;} .u-accentColor--iconDark .svgIcon,.u-accentColor--iconDark.svgIcon {fill: #007EB1 !important;} .u-accentColor--textNormal {color: #007EB1 !important;} .u-accentColor--hoverTextNormal:hover {color: #007EB1 !important;} .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: #0673A0 !important;} .u-accentColor--textDark {color: #0673A0 !important;} .u-accentColor--backgroundLight {background-color: #0094D5 !important;} .u-accentColor--backgroundNormal {background-color: #0094D5 !important;} .u-accentColor--backgroundDark {background-color: #007EB1 !important;} .u-accentColor--buttonDark {border-color: #007EB1 !important; color: #0673A0 !important;} .u-accentColor--buttonDark:hover {border-color: #0673A0 !important;} .u-accentColor--buttonDark .icon:before,.u-accentColor--buttonDark .svgIcon{color: #007EB1 !important; fill: #007EB1 !important;} .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: #0094D5 !important; color: #007EB1 !important;} .u-accentColor--buttonNormal:hover {border-color: #007EB1 !important;} .u-accentColor--buttonNormal .icon:before,.u-accentColor--buttonNormal .svgIcon{color: #0094D5 !important; fill: #0094D5 !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: #007EB1 !important; border-color: #007EB1 !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: #0094D5 !important; border-color: #0094D5 !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: #007EB1 !important;}.u-tintBgColor {background-color: rgba(0, 173, 239, 1) !important;}.u-tintBgColor .u-fadeLeft:before {background-image: linear-gradient(to right, rgba(0, 173, 239, 1) 0%, rgba(0, 173, 239, 0) 100%) !important;}.u-tintBgColor .u-fadeRight:after {background-image: linear-gradient(to right, rgba(0, 173, 239, 0) 0%, rgba(0, 173, 239, 1) 100%) !important;} .u-tintSpectrum .u-baseColor--borderLight {border-color: #9EDAFF !important;} .u-tintSpectrum .u-baseColor--borderNormal {border-color: #C1EBFF !important;} .u-tintSpectrum .u-baseColor--borderDark {border-color: #E1FBFF !important;} .u-tintSpectrum .u-baseColor--iconLight .svgIcon,.u-tintSpectrum .u-baseColor--iconLight.svgIcon {fill: #9EDAFF !important;} .u-tintSpectrum .u-baseColor--iconNormal .svgIcon,.u-tintSpectrum .u-baseColor--iconNormal.svgIcon {fill: #C1EBFF !important;} .u-tintSpectrum .u-baseColor--iconDark .svgIcon,.u-tintSpectrum .u-baseColor--iconDark.svgIcon {fill: #E1FBFF !important;} .u-tintSpectrum .u-baseColor--textNormal {color: #C1EBFF !important;} .u-tintSpectrum .u-baseColor--textNormal.u-baseColor--textDarken:hover {color: #F1FFFF !important;} .u-tintSpectrum .u-baseColor--textDark {color: #F1FFFF !important;} .u-tintSpectrum .u-baseColor--textDarker {color: #F1FFFF !important;} .u-tintSpectrum .u-baseColor--backgroundLight {background-color: #9EDAFF !important;} .u-tintSpectrum .u-baseColor--backgroundNormal {background-color: #C1EBFF !important;} .u-tintSpectrum .u-baseColor--backgroundDark {background-color: #E1FBFF !important;} .u-tintSpectrum .u-baseColor--buttonLight {border-color: #9EDAFF !important; color: #9EDAFF !important;} .u-tintSpectrum .u-baseColor--buttonLight:hover {border-color: #9EDAFF !important;} .u-tintSpectrum .u-baseColor--buttonLight .icon:before,.u-tintSpectrum .u-baseColor--buttonLight .svgIcon {color: #9EDAFF !important; fill: #9EDAFF !important;} .u-tintSpectrum .u-baseColor--buttonDark {border-color: #E1FBFF !important; color: #F1FFFF !important;} .u-tintSpectrum .u-baseColor--buttonDark:hover {border-color: #F1FFFF !important;} .u-tintSpectrum .u-baseColor--buttonDark .icon:before,.u-tintSpectrum .u-baseColor--buttonDark .svgIcon {color: #E1FBFF !important; fill: #E1FBFF !important;} .u-tintSpectrum .u-baseColor--buttonNormal {border-color: #C1EBFF !important; color: #C1EBFF !important;} .u-tintSpectrum .u-baseColor--buttonNormal:hover {border-color: #E1FBFF !important;} .u-tintSpectrum .u-baseColor--buttonNormal .icon:before,.u-tintSpectrum .u-baseColor--buttonNormal .svgIcon {color: #C1EBFF !important; fill: #C1EBFF !important;} .u-tintSpectrum .u-baseColor--buttonDark.button--filled,.u-tintSpectrum .u-baseColor--buttonDark.button--withChrome.is-active {background-color: #E1FBFF !important; border-color: #E1FBFF !important; color: rgba(0, 173, 239, 1) !important; fill: rgba(0, 173, 239, 1) !important;} .u-tintSpectrum .u-baseColor--buttonNormal.button--filled,.u-tintSpectrum .u-baseColor--buttonNormal.button--withChrome.is-active {background-color: #C1EBFF !important; border-color: #C1EBFF !important; color: rgba(0, 173, 239, 1) !important; fill: rgba(0, 173, 239, 1) !important;} .u-tintSpectrum .u-baseColor--link {color: #C1EBFF !important;} .u-tintSpectrum .u-baseColor--link.link--darkenOnHover:hover {color: #F1FFFF !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: #F1FFFF !important;} .u-tintSpectrum .u-baseColor--link.link--dark {color: #F1FFFF !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: #F1FFFF !important;} .u-tintSpectrum .u-baseColor--link.link--darker {color: #F1FFFF !important;} .u-tintSpectrum .u-baseColor--placeholderNormal ::-webkit-input-placeholder {color: #9EDAFF;} .u-tintSpectrum .u-baseColor--placeholderNormal ::-moz-placeholder {color: #9EDAFF;} .u-tintSpectrum .u-baseColor--placeholderNormal :-ms-input-placeholder {color: #9EDAFF;} .u-tintSpectrum .svgIcon--logoWordmark {stroke: none !important; fill: #F1FFFF !important;} .u-tintSpectrum .svgIcon--logoMonogram {stroke: none !important; fill: #F1FFFF !important;} .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: #F1FFFF !important; fill: #F1FFFF !important;} .u-tintSpectrum .ui-body,.u-tintSpectrum .ui-caps {color: #F1FFFF !important; fill: #F1FFFF !important;} .u-tintSpectrum .ui-summary,.u-tintSpectrum .ui-caption {color: #9EDAFF !important; fill: #9EDAFF !important;} .u-tintSpectrum .u-accentColor--borderLight {border-color: #9EDAFF !important;} .u-tintSpectrum .u-accentColor--borderNormal {border-color: #C1EBFF !important;} .u-tintSpectrum .u-accentColor--borderDark {border-color: #E1FBFF !important;} .u-tintSpectrum .u-accentColor--iconLight .svgIcon,.u-tintSpectrum .u-accentColor--iconLight.svgIcon {fill: #9EDAFF !important;} .u-tintSpectrum .u-accentColor--iconNormal .svgIcon,.u-tintSpectrum .u-accentColor--iconNormal.svgIcon {fill: #C1EBFF !important;} .u-tintSpectrum .u-accentColor--iconDark .svgIcon,.u-tintSpectrum .u-accentColor--iconDark.svgIcon {fill: #E1FBFF !important;} .u-tintSpectrum .u-accentColor--textNormal {color: #C1EBFF !important;} .u-tintSpectrum .u-accentColor--hoverTextNormal:hover {color: #C1EBFF !important;} .u-tintSpectrum .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: #F1FFFF !important;} .u-tintSpectrum .u-accentColor--textDark {color: #F1FFFF !important;} .u-tintSpectrum .u-accentColor--backgroundLight {background-color: #9EDAFF !important;} .u-tintSpectrum .u-accentColor--backgroundNormal {background-color: #C1EBFF !important;} .u-tintSpectrum .u-accentColor--backgroundDark {background-color: #E1FBFF !important;} .u-tintSpectrum .u-accentColor--buttonDark {border-color: #E1FBFF !important; color: #F1FFFF !important;} .u-tintSpectrum .u-accentColor--buttonDark:hover {border-color: #F1FFFF !important;} .u-tintSpectrum .u-accentColor--buttonDark .icon:before,.u-tintSpectrum .u-accentColor--buttonDark .svgIcon{color: #E1FBFF !important; fill: #E1FBFF !important;} .u-tintSpectrum .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: #C1EBFF !important; color: #C1EBFF !important;} .u-tintSpectrum .u-accentColor--buttonNormal:hover {border-color: #E1FBFF !important;} .u-tintSpectrum .u-accentColor--buttonNormal .icon:before,.u-tintSpectrum .u-accentColor--buttonNormal .svgIcon{color: #C1EBFF !important; fill: #C1EBFF !important;} .u-tintSpectrum .u-accentColor--buttonNormal.button--filled .icon:before,.u-tintSpectrum .u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(0, 173, 239, 1) !important; fill: rgba(0, 173, 239, 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: #E1FBFF !important; border-color: #E1FBFF !important; color: rgba(0, 173, 239, 1) !important; fill: rgba(0, 173, 239, 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: #C1EBFF !important; border-color: #C1EBFF !important; color: rgba(0, 173, 239, 1) !important; fill: rgba(0, 173, 239, 1) !important;} .u-tintSpectrum .postArticle.is-withAccentColors .markup--user,.u-tintSpectrum .postArticle.is-withAccentColors .markup--query {color: #C1EBFF !important;} .u-accentColor--highlightFaint {background-color: rgba(218, 246, 255, 1) !important;} .u-accentColor--highlightStrong.is-active .svgIcon {fill: rgba(151, 238, 255, 1) !important;} .postArticle.is-withAccentColors .markup--quote.is-other {background-color: rgba(218, 246, 255, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-other {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(218, 246, 255, 1), rgba(218, 246, 255, 1));} .postArticle.is-withAccentColors .markup--quote.is-me {background-color: rgba(184, 242, 255, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-me {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(184, 242, 255, 1), rgba(184, 242, 255, 1));} .postArticle.is-withAccentColors .markup--quote.is-targeted {background-color: rgba(151, 238, 255, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-targeted {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(151, 238, 255, 1), rgba(151, 238, 255, 1));} .postArticle.is-withAccentColors .markup--quote.is-selected {background-color: rgba(151, 238, 255, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-selected {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(151, 238, 255, 1), rgba(151, 238, 255, 1));} .postArticle.is-withAccentColors .markup--highlight {background-color: rgba(151, 238, 255, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--highlight {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(151, 238, 255, 1), rgba(151, 238, 255, 1));}.u-baseColor--iconNormal.avatar-halo {fill: rgba(0, 0, 0, 0.4980392156862745) !important;}</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 .svgIcon--logoWordmark {stroke: none !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .svgIcon--logoMonogram {stroke: none !important; fill: rgba(255, 255, 255, 1) !important;} .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 .svgIcon--logoWordmark {stroke: none !important; fill: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .svgIcon--logoMonogram {stroke: none !important; fill: rgba(0, 0, 0, 0.6) !important;} .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></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://web.archive.org/web/20211201164814/https://d1fcbxp97j4nb2.cloudfront.net","baseUrl":"https://web.archive.org/web/20211201164814/https://medium.com","buildLabel":"20211201-1538-root","currentUser":{"userId":"lo_a544f1a3b1d7","isVerified":false,"subscriberEmail":"","hasPastMemberships":false,"isEnrolledInHightower":false,"isEligibleForHightower":false,"hightowerLastLockedAt":0,"isWriterProgramEnrolled":true,"isWriterProgramInvited":false,"isWriterProgramOptedOut":false,"writerProgramVersion":0,"writerProgramEnrolledAt":0,"friendLinkOnboarding":0,"hasAdditionalUnlocks":false,"hasApiAccess":false,"writerProgramDistributionSettingOptedIn":false,"isSuspended":false,"collectionOnboardingSeen":0,"isAllowEdsEnabled":false,"atsQualifiedAt":0},"currentUserHasUnverifiedEmail":false,"isAuthenticated":false,"isCurrentUserVerified":false,"language":"en-us","miroUrl":"https://web.archive.org/web/20211201164814/https://cdn-images-1.medium.com","moduleUrls":{"base":"https://web.archive.org/web/20211201164814/https://cdn-static-1.medium.com/_/fp/gen-js/main-base.bundle.hENrjprlW-LQqk-GO_VGxA.js","common-async":"https://web.archive.org/web/20211201164814/https://cdn-static-1.medium.com/_/fp/gen-js/main-common-async.bundle.mjRgoEDuRRXfni-LecP67g.js","hightower":"https://web.archive.org/web/20211201164814/https://cdn-static-1.medium.com/_/fp/gen-js/main-hightower.bundle.wRj9Fo91l2umhXsfCfI3iA.js","home-screens":"https://web.archive.org/web/20211201164814/https://cdn-static-1.medium.com/_/fp/gen-js/main-home-screens.bundle.bo8q9ki3udRNvcXgeTC2aw.js","misc-screens":"https://web.archive.org/web/20211201164814/https://cdn-static-1.medium.com/_/fp/gen-js/main-misc-screens.bundle.S0I0OhxJlG7MmZ3gYTjLgg.js","notes":"https://web.archive.org/web/20211201164814/https://cdn-static-1.medium.com/_/fp/gen-js/main-notes.bundle.C8KNqPYXMqXCFwwhZRAnkQ.js","payments":"https://web.archive.org/web/20211201164814/https://cdn-static-1.medium.com/_/fp/gen-js/main-payments.bundle.2o6ewJCa8Z1sb1LtMJV9dQ.js","posters":"https://web.archive.org/web/20211201164814/https://cdn-static-1.medium.com/_/fp/gen-js/main-posters.bundle.ISC-jjtwowRu6J7tQesSNQ.js","power-readers":"https://web.archive.org/web/20211201164814/https://cdn-static-1.medium.com/_/fp/gen-js/main-power-readers.bundle.PJZdTPmij-qcr4GQ4Iig4w.js","pubs":"https://web.archive.org/web/20211201164814/https://cdn-static-1.medium.com/_/fp/gen-js/main-pubs.bundle.jlM8tgnk1Oprhjtc1XBHCw.js","stats":"https://web.archive.org/web/20211201164814/https://cdn-static-1.medium.com/_/fp/gen-js/main-stats.bundle.xcs7UR8eTE7r3EbwJiN4SA.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":"//web.archive.org/web/20211201164814/https://policy.medium.com/medium-terms-of-service-9db0094a1e0f","textshotHost":"textshot.textshot-production.svc.cluster.local","transactionId":"1638377294340:cfca23126574","useragent":{"browser":"archive.org_bot","family":"","os":"","version":0,"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_lock_responses":true,"android_rating_prompt_stories_read_threshold":2,"assign_default_topic_to_posts":true,"author_under_quota_fair_distribution":true,"available_annual_plan":"2c754bcc2995","available_monthly_plan":"60e220181034","branch_seo_metadata":true,"browsable_stream_config_bucket":"curated-topics","coronavirus_topic_recirc":true,"covid_19_cdc_banner":true,"default_seo_post_titles":true,"disable_android_subscription_activity_carousel":true,"disable_ios_subscription_activity_carousel":true,"disable_mobile_featured_chunk":true,"disable_partner_program_enrollment":true,"disable_post_recommended_from_friends_provider":true,"enable_android_local_currency":true,"enable_annual_renewal_reminder_email":true,"enable_app_flirty_thirty":true,"enable_apple_sign_in":true,"enable_apple_webhook":true,"enable_apple_webhook_renewal_failure":true,"enable_aurora_about_page_routing":true,"enable_aurora_general_admission":true,"enable_aurora_nav":true,"enable_aurora_profile_page":true,"enable_aurora_pub_follower_page":true,"enable_aurora_recirc":true,"enable_aurora_sticky_nav":true,"enable_aurora_tag_page_routing":true,"enable_author_autotier":true,"enable_author_cards":true,"enable_author_cards_byline":true,"enable_auto_follow_on_subscribe":true,"enable_automated_mission_control_triggers":true,"enable_automod":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_branch_text_me_the_app":true,"enable_branding":true,"enable_branding_fonts":true,"enable_cleansweep_double_writes":true,"enable_confirm_sign_in":true,"enable_creator_checkout_header":true,"enable_creator_payscreen":true,"enable_creator_welcome_email":true,"enable_cta_meter":true,"enable_custom_domain_v2_settings":true,"enable_digest_feature_logging":true,"enable_digest_generation_pipeline":true,"enable_digest_tagline":true,"enable_drm_provider":true,"enable_drm_recirc":true,"enable_earn_redirect":true,"enable_edit_alt_text":true,"enable_email_sign_in_captcha":true,"enable_embedding_based_diversification":true,"enable_end_of_post_cleanup":true,"enable_evhead_com_to_ev_medium_com_redirect":true,"enable_expanded_feature_chunk_pool":true,"enable_filter_by_resend_rules":true,"enable_filter_expire_processor":true,"enable_fix_collection_follow_counts":true,"enable_fix_follow_counts":true,"enable_footer_app_buttons":true,"enable_global_susi_modal":true,"enable_google_one_tap":true,"enable_google_webhook":true,"enable_google_webhook_subscription_cancelled":true,"enable_google_webhook_subscription_expired":true,"enable_google_webhook_subscription_in_grace_period":true,"enable_google_webhook_subscription_on_hold":true,"enable_google_webhook_subscription_renewed":true,"enable_group_gifting":true,"enable_highlander_member_digest":true,"enable_hightower_user_bonus":true,"enable_hot_topics":true,"enable_hot_topics_v2":true,"enable_hybrid_fdh_non_popular_sources":true,"enable_iceland_forced_android":true,"enable_iceland_forced_ios":true,"enable_import":true,"enable_in_context_sharing":true,"enable_inline_expansion":true,"enable_ios_iceland_3":true,"enable_ios_responses_3":true,"enable_ios_seamless":true,"enable_json_logs_trained_ranker":true,"enable_kbfd_rex":true,"enable_kbfd_rex_app_highlights":true,"enable_li_homepage_write_cta":true,"enable_lite_continue_this_thread":true,"enable_lite_gift_redemption":true,"enable_lite_homepage":true,"enable_lite_homepage_feed":true,"enable_lite_notifications":true,"enable_lite_pub_homepage_for_selected_domains":true,"enable_lite_response_markup":true,"enable_lite_server_upstream_deadlines":true,"enable_lite_stories":true,"enable_lite_topics":true,"enable_lite_topics_edge_cache":true,"enable_lite_unread_notification_count_mutation":true,"enable_lock_responses":true,"enable_login_code_flow":true,"enable_marketing_emails":true,"enable_media_resource_try_catch":true,"enable_medium2_kbfd":true,"enable_membership_remove_section_a":true,"enable_miro_on_kubernetes":true,"enable_mission_control":true,"enable_ml_rank_modules":true,"enable_ml_rank_rex_anno":true,"enable_mobile_web_editor_redirect_route":true,"enable_mute":true,"enable_negative_signal":true,"enable_new_collaborative_filtering_data":true,"enable_new_member_welcome_email_enhancement":true,"enable_new_three_dot_menu":true,"enable_new_writer_editor_enhancement":true,"enable_newsletter_lo_flow_custom_domains":true,"enable_parsely":true,"enable_patronus_on_kubernetes":true,"enable_paywall_conversions_for_referred_members":true,"enable_persistent_recirc":true,"enable_popularity_feature":true,"enable_post_page_nav_stickiness_removal":true,"enable_post_page_write_cta":true,"enable_post_settings_screen":true,"enable_pp_dashboard_referred_earnings":true,"enable_primary_topic_for_mobile":true,"enable_profile_design_reminder":true,"enable_profile_page_seo_titles":true,"enable_publish_to_email_for_publication_posts":true,"enable_rank_v2_usage":true,"enable_reading_history_set":true,"enable_recirc_reboot_lo":true,"enable_referred_memberships":true,"enable_reply_to_email":true,"enable_responses_all":true,"enable_responses_edit_and_delete":true,"enable_responses_moderation":true,"enable_rex_follow_feed_cache":true,"enable_rito_upstream_deadlines":true,"enable_robometric_scanner":true,"enable_rtr_channel":true,"enable_save_to_medium":true,"enable_seamless_social_sharing":true,"enable_signup_friction":true,"enable_spam_title_filter":true,"enable_starspace":true,"enable_starspace_ranker_starspace":true,"enable_subscriber_stats_referred":true,"enable_susi_email_simplified_copy":true,"enable_tag_recs":true,"enable_tick_landing_page":true,"enable_tipalti_onboarding":true,"enable_trending_posts_diversification":true,"enable_tribute_landing_page":true,"enable_triton_predictions":true,"enable_trumpland_landing_page":true,"enable_twitter_auth_suggestions":true,"enable_updated_follower_email":true,"enable_updated_new_member_email":true,"enable_updated_new_user_onboarding":true,"enable_user_settings_subdomain":true,"glyph_font_set":"m2-unbound","google_sign_in_android":true,"ios_enable_generic_home_modules":true,"ios_enable_home_post_menu":true,"ios_enable_lock_responses":true,"ios_iceland_nux":true,"ios_in_app_free_trial":true,"ios_pub_follow_email_opt_in":true,"ios_social_share_sheet":true,"is_not_medium_subscriber":true,"kill_fastrak":true,"kill_stripe_express":true,"limit_post_referrers":true,"limit_user_follows":true,"make_nav_sticky":true,"max_premium_content_per_user_under_metering":3,"new_transition_page":true,"post_edge_cache_enabled":true,"post_edge_cache_enabled_moc":true,"posts_under_quota_fair_distribution":true,"provider_for_credit_card_form":"BRAINTREE","pub_sidebar":true,"reader_fair_distribution_non_qp":true,"redefine_average_post_reading_time":true,"reengagement_notification_duration":3,"remove_post_post_similarity":true,"retrained_ranker":true,"rex_provider_candidate_amounts":true,"rex_recirc_reboot":true,"show_pp_awareness_banner":true,"show_writing_101_cta":true,"sign_up_with_email_button":true,"signin_services":"twitter,facebook,google,email,google-fastidv,google-one-tap,apple","signup_services":"twitter,facebook,google,email,google-fastidv,google-one-tap,apple","single_partition_key":true,"skip_sign_in_recaptcha":true,"suppress_apple_missing_expires_date_alert":true,"unhide_mobile_ctas":true,"use_new_admin_topic_backend":true},"xsrfToken":"","iosAppId":"828256236","supportEmail":"yourfriends@medium.com","fp":{"/icons/monogram-mask.svg":"https://web.archive.org/web/20211201164814/https://cdn-static-1.medium.com/_/fp/icons/monogram-mask.KPLCSFEZviQN0jQ7veN2RQ.svg","/icons/favicon-dev-editor.ico":"https://web.archive.org/web/20211201164814/https://cdn-static-1.medium.com/_/fp/icons/favicon-dev-editor.YKKRxBO8EMvIqhyCwIiJeQ.ico","/icons/favicon-hatch-editor.ico":"https://web.archive.org/web/20211201164814/https://cdn-static-1.medium.com/_/fp/icons/favicon-hatch-editor.BuEyHIqlyh2s_XEk4Rl32Q.ico","/icons/favicon-medium-editor.ico":"https://web.archive.org/web/20211201164814/https://cdn-static-1.medium.com/_/fp/icons/favicon-medium-editor.PiakrZWB7Yb80quUVQWM6g.ico"},"authBaseUrl":"https://web.archive.org/web/20211201164814/https://medium.com","imageUploadSizeMb":25,"isAuthDomainRequest":true,"algoliaApiEndpoint":"https://web.archive.org/web/20211201164814/https://mq57uuuqz2-dsn.algolia.net","algoliaAppId":"MQ57UUUQZ2","algoliaSearchOnlyApiKey":"394474ced050e3911ae2249ecc774921","iosAppStoreUrl":"https://web.archive.org/web/20211201164814/https://itunes.apple.com/app/medium-everyones-stories/id828256236?pt=698524&mt=8","iosAppLinkBaseUrl":"medium:","algoliaIndexPrefix":"medium_","androidPlayStoreUrl":"https://web.archive.org/web/20211201164814/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://web.archive.org/web/20211201164814/https://accounts.google.com/o/oauth2/auth","androidScheme":"medium","layoutData":{"useDynamicScripts":false,"googleAnalyticsTrackingCode":"UA-24232453-2","jsShivUrl":"https://web.archive.org/web/20211201164814/https://cdn-static-1.medium.com/_/fp/js/shiv.RI2ePTZ5gFmMgLzG5bEVAA.js","useDynamicCss":false,"faviconUrl":"https://web.archive.org/web/20211201164814/https://miro.medium.com/1*m-R_BkNf1Qjr1YbyOIJY2w.png","faviconImageId":"1*m-R_BkNf1Qjr1YbyOIJY2w.png","fontSets":[{"id":8,"url":"https://web.archive.org/web/20211201164814/https://glyph.medium.com/css/e/sr/latin/e/ssr/latin/e/ssb/latin/m2-unbound.css"},{"id":11,"url":"https://web.archive.org/web/20211201164814/https://glyph.medium.com/css/m2-unbound.css"},{"id":9,"url":"https://web.archive.org/web/20211201164814/https://glyph.medium.com/css/mkt.css"}],"editorFaviconUrl":"https://web.archive.org/web/20211201164814/https://miro.medium.com/1*m-R_BkNf1Qjr1YbyOIJY2w.png","glyphUrl":"https://web.archive.org/web/20211201164814/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","lightstep":{"accessToken":"ce5be895bef60919541332990ac9fef2","carrier":"{\"ot-tracer-spanid\":\"47b61112214ce876\",\"ot-tracer-traceid\":\"62b93a8efcd4dcd7\",\"ot-tracer-sampled\":\"true\"}","host":"lightstep.medium.systems"},"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":{"url":"https://web.archive.org/web/20211201164814/https://buggle.medium.com","videoUrl":"https://web.archive.org/web/20211201164814/https://cdn-videos-1.medium.com","audioUrl":"https://web.archive.org/web/20211201164814/https://cdn-audio-1.medium.com"},"referrerType":1,"isMeteredOut":false,"meterConfig":{"maxUnlockCount":3,"windowLength":"MONTHLY"},"partnerProgramEmail":"partnerprogram@medium.com","recaptchaKey":"6Lfc37IUAAAAAKGGtC6rLS13R1Hrw_BqADfS1LRk","signinWallCustomDomainCollectionIds":["3a8144eabfe3","336d898217ee","61061eb0c96b","138adf9c44c","819cc2aaeee0"],"countryCode":"US","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://web.archive.org/web/20211201164814/https://www.cdc.gov/coronavirus/2019-nCoV","type":"link","start":66,"end":73},{"text":".","href":"","type":"text","start":0,"end":0}],"covidApplicableTagSlugs":[],"braintree":{"merchantId":"m56f8fqpf7ngnrd4"},"diagnostics":{},"domain":"medium.com"} // ]]></script><script charset="UTF-8" src="https://web.archive.org/web/20211201164814js_/https://cdn-static-1.medium.com/_/fp/gen-js/main-base.bundle.hENrjprlW-LQqk-GO_VGxA.js" async></script><script>// <![CDATA[ window["obvInit"]({"references":{"User":{"9a4d2ea550cb":{"userId":"9a4d2ea550cb","name":"Vimeo","username":"Vimeo","createdAt":1428687256411,"imageId":"0*t8_8z3VfaypnOzHF.png","backgroundImageId":"","bio":"Vimeo is the world’s leading professional video platform and community.","twitterScreenName":"Vimeo","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"optInToIceland":false,"hasCompletedProfile":false,"userDismissableFlags":[3,2,1],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"replyToEmailBannerShownCount":0,"type":"User"},"9a9de6b26f1f":{"userId":"9a9de6b26f1f","name":"Kyle Venn","username":"kvenn","createdAt":1462487664968,"imageId":"1*hK4iNuM_7Zbo6VIbpS6X8Q.jpeg","backgroundImageId":"","bio":"Android dev @Vimeo / Cat Facts (catfacts.co)","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"optInToIceland":false,"hasCompletedProfile":false,"userDismissableFlags":[2,1,5],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"replyToEmailBannerShownCount":0,"type":"User"},"f4943d90d808":{"userId":"f4943d90d808","name":"Marc Campbell","username":"mrccmpbll","createdAt":1517978631892,"imageId":"1*ddje2ZQ4bxfdgoEHBAb_gQ.png","backgroundImageId":"","bio":"I’m the senior technical writer at Vimeo. Any mistakes on this blog are probably my fault.","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"optInToIceland":false,"hasCompletedProfile":false,"userDismissableFlags":[2,1],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"replyToEmailBannerShownCount":0,"type":"User"},"ac6b5a21987a":{"userId":"ac6b5a21987a","name":"arodland","username":"arodland","createdAt":1480446784658,"imageId":"0*QPa0KdPmtxbQN8q6.jpg","backgroundImageId":"","bio":"Just zis guy, you know?","twitterScreenName":"hobbified","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"optInToIceland":false,"hasCompletedProfile":false,"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"replyToEmailBannerShownCount":0,"type":"User"},"dfbaf4fcaa38":{"userId":"dfbaf4fcaa38","name":"Matt Fisher","username":"fisher.matt","createdAt":1481049640579,"imageId":"2*2qoIjyhCSZh55GNfLDN19g.jpeg","backgroundImageId":"","bio":"Director of Engineering @ Vimeo","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"optInToIceland":false,"hasCompletedProfile":false,"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"replyToEmailBannerShownCount":0,"type":"User"},"6f71707a0d62":{"userId":"6f71707a0d62","name":"Louis DeLosSantos","username":"louis_90192","createdAt":1482204177916,"imageId":"0*1PaW45CydBgygeM6.","backgroundImageId":"","bio":"","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"optInToIceland":false,"hasCompletedProfile":false,"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"replyToEmailBannerShownCount":0,"type":"User"},"696fc211da2":{"userId":"696fc211da2","name":"Matt Brown","username":"muglug","createdAt":1379525089143,"imageId":"0*1QXZBdTTCzQYfBF6.jpeg","backgroundImageId":"","bio":"I work at Slack. I am cool.","twitterScreenName":"mattbrowndev","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"optInToIceland":false,"subdomainCreatedAt":1624991378445,"hasCompletedProfile":false,"userDismissableFlags":[3,2,1],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"replyToEmailBannerShownCount":0,"type":"User"},"cf358c3564b":{"userId":"cf358c3564b","name":"Peixian Wang","username":"tokamak","createdAt":1395519687467,"imageId":"1*4Rru-SSFuXmrChGVPbpwzw.png","backgroundImageId":"","bio":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"optInToIceland":false,"hasCompletedProfile":false,"userDismissableFlags":[2],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"replyToEmailBannerShownCount":0,"type":"User"},"3d445394104d":{"userId":"3d445394104d","name":"Devon Balicki","username":"devonbalicki","createdAt":1482170966258,"imageId":"1*3oe1_1GO77GZZOmhLvJovg.jpeg","backgroundImageId":"","bio":"Upload Engineering @ Vimeo","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"optInToIceland":false,"hasCompletedProfile":false,"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"replyToEmailBannerShownCount":0,"type":"User"},"5c508928d495":{"userId":"5c508928d495","name":"Sumanth Srinivasan","username":"reckoner165","createdAt":1397334793676,"imageId":"1*3y3irRJVKecEWw1No6qjPg.jpeg","backgroundImageId":"","bio":"Don’t worry about it. www.acrosspolyethylene.com","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"optInToIceland":false,"subdomainCreatedAt":1604162037152,"hasCompletedProfile":false,"userDismissableFlags":[8,5,3,2,1],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"replyToEmailBannerShownCount":0,"type":"User"},"4d1e13b7760b":{"userId":"4d1e13b7760b","name":"Vittorio Giovara","username":"vittorio_7841","createdAt":1526063159742,"imageId":"2*wz5dkQUpKTt7u6MWH8APWw.png","backgroundImageId":"","bio":"","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"optInToIceland":false,"hasCompletedProfile":false,"userDismissableFlags":[2],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"replyToEmailBannerShownCount":0,"type":"User"},"af18b80aa4f7":{"userId":"af18b80aa4f7","name":"David Finkel","username":"davidf_55754","createdAt":1550244217653,"imageId":"1*CNAv8IfssKEDCgtrlRf8Iw.jpeg","backgroundImageId":"","bio":"Software Engineer on the Core Services team at Vimeo","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"optInToIceland":false,"hasCompletedProfile":false,"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"replyToEmailBannerShownCount":0,"type":"User"},"6cc30bcf2885":{"userId":"6cc30bcf2885","name":"Fengjiao Peng","username":"fengjiao.peng","createdAt":1558549229831,"imageId":"0*BDhdiQv-8yS8es7X.jpg","backgroundImageId":"","bio":"The majestic flying penguin","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"optInToIceland":false,"hasCompletedProfile":false,"userDismissableFlags":[2,5],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"replyToEmailBannerShownCount":0,"type":"User"},"84815ed4a94":{"userId":"84815ed4a94","name":"Sergio Salvatore","username":"sergiosalvatore","createdAt":1559758763753,"imageId":"2*w4cS1hhT2f_vssqOGWh-tw.jpeg","backgroundImageId":"","bio":"Software Engineer, Musician, Improviser…","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"optInToIceland":false,"hasCompletedProfile":false,"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"replyToEmailBannerShownCount":0,"type":"User"},"bc69242cbad6":{"userId":"bc69242cbad6","name":"Sachi Nagada","username":"sachinagada","createdAt":1535500837151,"imageId":"0*9MsF2X74qnZ79Kln","backgroundImageId":"","bio":"","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"optInToIceland":false,"hasCompletedProfile":false,"hasSeenIcelandOnboarding":true,"postSubscribeMembershipUpsellShownAt":0,"replyToEmailBannerShownCount":0,"type":"User"},"10bab874bf16":{"userId":"10bab874bf16","name":"Raphaël Zumer","username":"rzumer","createdAt":1574195635138,"imageId":"0*l3mag4j0fcKv54Ej.jpg","backgroundImageId":"","bio":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"optInToIceland":false,"hasCompletedProfile":false,"userDismissableFlags":[3,2,1],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"replyToEmailBannerShownCount":0,"type":"User"},"df060feda875":{"userId":"df060feda875","name":"Ryan Kass","username":"ryan.kass","createdAt":1542814568043,"imageId":"1*t49rRsD8eCTnlsN_KQYWQg.jpeg","backgroundImageId":"","bio":"","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"optInToIceland":false,"hasCompletedProfile":false,"userDismissableFlags":[12,2],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"replyToEmailBannerShownCount":0,"type":"User"},"61437ba9f716":{"userId":"61437ba9f716","name":"Assaf Packin","username":"apackin","createdAt":1593712395143,"imageId":"1*S5R8PW-PZWw_EaLTxcWdgg.jpeg","backgroundImageId":"","bio":"Bring joy to people who use software online","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"optInToIceland":false,"hasCompletedProfile":false,"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"replyToEmailBannerShownCount":0,"type":"User"},"c497c5a4b2de":{"userId":"c497c5a4b2de","name":"zeev feldbeine","username":"ZeevFeldbeine","createdAt":1566526063628,"imageId":"1*mQ3A7pmHN6XSd9yNma2KRQ@2x.jpeg","backgroundImageId":"","bio":"Big data enthusiast who likes to build cool stuff. If you are reading this part, I’m doing something right😎","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"firstOpenedIosApp":1580683104339,"isMembershipTrialEligible":false,"optInToIceland":false,"hasCompletedProfile":false,"userDismissableFlags":[5,3,2,1],"hasSeenIcelandOnboarding":true,"postSubscribeMembershipUpsellShownAt":0,"replyToEmailBannerShownCount":0,"type":"User"},"8f231cc0fef5":{"userId":"8f231cc0fef5","name":"Shelby Scalia","username":"shelby.scalia","createdAt":1538276955751,"imageId":"1*iIoS54YvbHY57E-Nz9SQjA.jpeg","backgroundImageId":"","bio":"software engineer @ Vimeo","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"optInToIceland":false,"hasCompletedProfile":false,"userDismissableFlags":[2,1],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"replyToEmailBannerShownCount":0,"type":"User"},"76f0c8379c68":{"userId":"76f0c8379c68","name":"Obed","username":"obedespina","createdAt":1576619674775,"imageId":"1*AfeGqQsQWv3yOtnaAP10gQ.png","backgroundImageId":"","bio":"data engineering @vimeo","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"optInToIceland":false,"hasCompletedProfile":false,"userDismissableFlags":[8,21,2,1],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"replyToEmailBannerShownCount":0,"type":"User"},"11e87bbb2e89":{"userId":"11e87bbb2e89","name":"Van Nguyen","username":"supperspidey","createdAt":1599754489835,"imageId":"1*3eEjcO2zZizFGmP5oVEPaQ.jpeg","backgroundImageId":"","bio":"iOS Engineer @ Vimeo. Aspiring photographer. Currently a NYC resident.","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"firstOpenedIosApp":1600007387089,"isMembershipTrialEligible":true,"optInToIceland":false,"subdomainCreatedAt":1629324486885,"hasCompletedProfile":false,"userDismissableFlags":[8,2,1],"hasSeenIcelandOnboarding":true,"postSubscribeMembershipUpsellShownAt":0,"replyToEmailBannerShownCount":0,"type":"User"},"53d6fde4a8ad":{"userId":"53d6fde4a8ad","name":"Andrew Katsikas","username":"apkatsikas","createdAt":1629389872022,"imageId":"1*OP3Rvemg2RgTkvgROVoQVA.png","backgroundImageId":"","bio":"Technology for fun and (begrudgingly) for profit.","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"optInToIceland":false,"hasCompletedProfile":false,"userDismissableFlags":[8,2,1],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"replyToEmailBannerShownCount":0,"type":"User"},"fce00e13dbfb":{"userId":"fce00e13dbfb","name":"Jaspreet Ranjit","username":"jaspreet-ranjit","createdAt":1594163165877,"imageId":"1*PAJKTOe6hL0nwpJsSlce9w.png","backgroundImageId":"","bio":"","twitterScreenName":"","allowNotes":1,"mediumMemberAt":1602260873000,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"optInToIceland":false,"subdomainCreatedAt":1634829254270,"hasCompletedProfile":true,"userDismissableFlags":[8,12,2],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"replyToEmailBannerShownCount":0,"type":"User"}},"Collection":{"92df1b631aeb":{"id":"92df1b631aeb","name":"Vimeo Engineering Blog","slug":"vimeo-engineering-blog","tags":["VIMEO","VIDEO","ENGINEERING","TECH","CODING"],"creatorId":"9a4d2ea550cb","description":"We tinker, we build, and we dream up all-new things to help support the world's best community of creators. Lift up the hood and see how it all works.","shortDescription":"We tinker, we build, and we dream up all-new things to help…","image":{"imageId":"1*aTJtrirnEDuzqgTrUEcd7g.png","filter":"","backgroundSize":"","originalWidth":240,"originalHeight":240,"strategy":"resample","height":0,"width":0},"metadata":{"followerCount":2388,"activeAt":1637344959460},"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":"vimeo","facebookPageName":"vimeo","sections":[{"type":2,"collectionHeaderMetadata":{"title":"Vimeo Engineering Blog","description":"How we tinker, build, and dream up all-new things for Vimeo.","backgroundImage":{},"logoImage":{"id":"1*kRn0TQdR7OreKRJ1_5lxxQ@2x.png","originalWidth":992,"originalHeight":596,"alt":"Vimeo Engineering Blog"},"alignment":2,"layout":6}},{"type":1,"postListMetadata":{"source":1,"layout":6,"number":10,"postIds":[]}}],"tintColor":"#FF00ADEF","lightText":true,"favicon":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"colorPalette":{"defaultBackgroundSpectrum":{"colorPoints":[{"color":"#FF0094D5","point":0},{"color":"#FF0089C3","point":0.1},{"color":"#FF007EB1","point":0.2},{"color":"#FF0673A0","point":0.3},{"color":"#FF15688F","point":0.4},{"color":"#FF1A5D7D","point":0.5},{"color":"#FF1C516C","point":0.6},{"color":"#FF1B455B","point":0.7},{"color":"#FF193849","point":0.8},{"color":"#FF142B38","point":0.9},{"color":"#FF0D1C25","point":1}],"backgroundColor":"#FFFFFFFF"},"tintBackgroundSpectrum":{"colorPoints":[{"color":"#FF00ADEF","point":0},{"color":"#FF41B7F2","point":0.1},{"color":"#FF5EC0F6","point":0.2},{"color":"#FF76C9F9","point":0.3},{"color":"#FF8BD1FD","point":0.4},{"color":"#FF9EDAFF","point":0.5},{"color":"#FFB0E2FF","point":0.6},{"color":"#FFC1EBFF","point":0.7},{"color":"#FFD1F3FF","point":0.8},{"color":"#FFE1FBFF","point":0.9},{"color":"#FFF1FFFF","point":1}],"backgroundColor":"#FF00ADEF"},"highlightSpectrum":{"colorPoints":[{"color":"#FFE0F7FF","point":0},{"color":"#FFDAF6FF","point":0.1},{"color":"#FFD4F5FF","point":0.2},{"color":"#FFCDF4FF","point":0.3},{"color":"#FFC7F3FF","point":0.4},{"color":"#FFBFF2FF","point":0.5},{"color":"#FFB8F2FF","point":0.6},{"color":"#FFB0F1FF","point":0.7},{"color":"#FFA8F0FF","point":0.8},{"color":"#FFA0EFFF","point":0.9},{"color":"#FF97EEFF","point":1}],"backgroundColor":"#FFFFFFFF"},"darkBackgroundSpectrum":{"colorPoints":[{"color":"#FF00ADEF","point":0},{"color":"#FF3EB4F0","point":0.1},{"color":"#FF5ABCF2","point":0.2},{"color":"#FF70C3F3","point":0.3},{"color":"#FF83CAF5","point":0.4},{"color":"#FF95D1F6","point":0.5},{"color":"#FFA5D8F8","point":0.6},{"color":"#FFB5DEFA","point":0.7},{"color":"#FFC4E5FB","point":0.8},{"color":"#FFD2ECFD","point":0.9},{"color":"#FFE0F2FF","point":1}],"backgroundColor":"#FF000000"}},"navItems":[],"colorBehavior":2,"acceleratedMobilePagesState":0,"ampLogo":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"header":{"title":"Vimeo Engineering Blog","description":"How we tinker, build, and dream up all-new things for Vimeo.","backgroundImage":{},"logoImage":{"id":"1*kRn0TQdR7OreKRJ1_5lxxQ@2x.png","originalWidth":992,"originalHeight":596,"alt":"Vimeo Engineering Blog"},"alignment":2,"layout":6},"subscriberCount":2388,"tagline":"We tinker, we build, and we dream up all-new things to help…","isOptedIntoAurora":false,"isCurationAllowedByDefault":false,"polarisCoverImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"ptsQualifiedAt":1616092815346,"type":"Collection"}},"Post":{"9f1bd75709ed":{"id":"9f1bd75709ed","versionId":"7c48237589a6","creatorId":"ac6b5a21987a","homeCollectionId":"92df1b631aeb","title":"Improving load balancing with a new consistent-hashing algorithm","detectedLanguage":"en","latestVersion":"7c48237589a6","latestPublishedVersion":"7c48237589a6","hasUnpublishedEdits":false,"latestRev":751,"createdAt":1480456741063,"updatedAt":1529548328012,"acceptedAt":0,"firstPublishedAt":1482178492598,"latestPublishedAt":1482252304653,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Improving HAProxy load balancing for better cache locality in Vimeo’s dynamic video packager","postDisplay":{"coverless":true},"metaDescription":"A new algorithm, “Consistent Hashing with Bounded Loads”, can balance traffic better when latency and cache locality matter. How we implemented it at Vimeo and made our video delivery scale better."},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*sF0Y2_lm2KGQeLKVuDVznA.png","filter":"","backgroundSize":"","originalWidth":1887,"originalHeight":515,"strategy":"resample","height":0,"width":0},"wordCount":2046,"imageCount":2,"readingTime":8.104088050314465,"subtitle":"Improving HAProxy load balancing for better cache locality in Vimeo’s dynamic video packager","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":440,"isBookmarked":false,"tags":[{"slug":"web-development","name":"Web Development","postCount":166451,"metadata":{"postCount":166451,"coverImage":{"id":"1*Z5zbBRQz6SaX0LA5D7hAJQ.png","originalWidth":6912,"originalHeight":3456,"isFeatured":true}},"type":"Tag"},{"slug":"load-balancing","name":"Load Balancing","postCount":945,"metadata":{"postCount":945,"coverImage":{"id":"1*KIVa4hUVZxg-8Ncabo8pdg.png","originalWidth":1985,"originalHeight":1283,"isFeatured":true}},"type":"Tag"},{"slug":"skyfire","name":"Skyfire","postCount":24,"metadata":{"postCount":24,"coverImage":{"id":"1*sF0Y2_lm2KGQeLKVuDVznA.png","originalWidth":1887,"originalHeight":515}},"type":"Tag"},{"slug":"devops","name":"DevOps","postCount":43079,"metadata":{"postCount":43079,"coverImage":{"id":"1*T6fHT2e0XoE4ILzYDelwCA.png","originalWidth":2306,"originalHeight":1068}},"type":"Tag"},{"slug":"algorithms","name":"Algorithms","postCount":24896,"metadata":{"postCount":24896,"coverImage":{"id":"1*bTGFGa2U8O__lyMb5BklPg.jpeg","originalWidth":1600,"originalHeight":480,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":14,"links":{"entries":[],"version":"0.3","generatedAt":1482252307736},"isLockedPreviewOnly":false,"metaDescription":"A new algorithm, “Consistent Hashing with Bounded Loads”, can balance traffic better when latency and cache locality matter. How we implemented it at Vimeo and made our video delivery scale better.","totalClapCount":1582,"sectionCount":1,"readingList":0,"topics":[]},"coverless":true,"slug":"improving-load-balancing-with-a-new-consistent-hashing-algorithm","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"improving-load-balancing-with-a-new-consistent-hashing-algorithm-9f1bd75709ed","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*sF0Y2_lm2KGQeLKVuDVznA.png","originalWidth":1887,"originalHeight":515}},{"name":"previewTitle","type":3,"text":"Improving load balancing with a new consistent-hashing algorithm","alignment":1},{"name":"previewSubtitle","type":13,"text":"Improving HAProxy load balancing for…","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Improving HAProxy load balancing for better cache locality in Vimeo’s dynamic video packager"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"92df1b631aeb","isNewsletter":false,"newsletterId":"","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":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"0c87","type":3,"text":"Improving load balancing with a new consistent-hashing algorithm","markups":[]},{"name":"933c","type":1,"text":"We run Vimeo’s dynamic video packager, Skyfire, in the cloud, serving almost a billion DASH and HLS requests per day. That’s a lot! We’re very happy with the way that it performs, but scaling it up to today’s traffic and beyond has been an interesting challenge. Today I’d like to…","markups":[{"type":2,"start":323,"end":354}]}],"sections":[{"name":"e434","startIndex":0}]},"isFullContent":false,"subtitle":"Improving HAProxy load balancing for better cache locality in Vimeo’s dynamic video packager"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"1f0ee0462580":{"id":"1f0ee0462580","versionId":"33e62644ed76","creatorId":"696fc211da2","homeCollectionId":"92df1b631aeb","title":"It’s not legacy code — it’s PHP","detectedLanguage":"en","latestVersion":"33e62644ed76","latestPublishedVersion":"33e62644ed76","hasUnpublishedEdits":false,"latestRev":137,"createdAt":1607713746091,"updatedAt":1608234045644,"acceptedAt":0,"firstPublishedAt":1608052535317,"latestPublishedAt":1608052535317,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Vimeo has been using PHP in production for over 15 years. Find out how we keep a million lines of PHP in check!","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*WHkOcjsiZKJjTmunVjehPQ.png","filter":"","backgroundSize":"","originalWidth":1916,"originalHeight":1198,"strategy":"resample","height":0,"width":0},"wordCount":1143,"imageCount":1,"readingTime":4.513207547169811,"subtitle":"Vimeo has been using PHP in production for over 15 years. Find out how we keep a million lines of PHP in check!","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":648,"isBookmarked":false,"tags":[{"slug":"php","name":"PHP","postCount":20371,"metadata":{"postCount":20371,"coverImage":{"id":"1*-Zf9xYAfPcFhwzD8CprnLw.jpeg","originalWidth":2000,"originalHeight":1333,"isFeatured":true}},"type":"Tag"},{"slug":"static-analysis","name":"Static Analysis","postCount":208,"metadata":{"postCount":208,"coverImage":{"id":"1*XjrV3eEpfI53977BEyYX7A.png","originalWidth":1200,"originalHeight":630,"isFeatured":true}},"type":"Tag"},{"slug":"legacy-code","name":"Legacy Code","postCount":381,"metadata":{"postCount":381,"coverImage":{"id":"0*Vn6PAxgoTb3yVaxT","originalWidth":5760,"originalHeight":3840,"isFeatured":true,"unsplashPhotoId":"cK2UBBg4JI4"}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":21,"links":{"entries":[{"url":"https://web.archive.org/web/20211201164814/https://nikic.github.io/2011/12/12/How-big-are-PHP-arrays-really-Hint-BIG.html","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://psalm.dev/docs/running_psalm/dealing_with_code_issues/#using-a-baseline-file","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://psalm.dev","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://psalm.dev/articles/detect-security-vulnerabilities-with-psalm","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://grnh.se/353a1d2c1us","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://stitcher.io/blog/new-in-php-8","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1608052536226},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":3713,"sectionCount":2,"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":"its-not-legacy-code-it-s-php","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"its-not-legacy-code-it-s-php-1f0ee0462580","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*WHkOcjsiZKJjTmunVjehPQ.png","originalWidth":1916,"originalHeight":1198,"isFeatured":true,"alt":"Small people cleaning up the PHP logo"}},{"name":"previewTitle","type":3,"text":"It’s not legacy code — it’s PHP","alignment":1},{"name":"previewSubtitle","type":13,"text":"Vimeo has been using PHP in production for over 15 years. Find out how…","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Vimeo has been using PHP in production for over 15 years. Find out how we keep a million lines of PHP in check!"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"92df1b631aeb","isNewsletter":false,"newsletterId":"","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":3,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"primaryTopicId":"decb52b64abf","isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"bae8","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"1*WHkOcjsiZKJjTmunVjehPQ.png","originalWidth":1916,"originalHeight":1198,"isFeatured":true,"alt":"Small people cleaning up the PHP logo"}},{"name":"2e79","type":3,"text":"It’s not legacy code — it’s PHP","markups":[]},{"name":"1316","type":1,"text":"In the last year, Vimeo developers have written backend code in lots of languages — PHP, Go, Ruby, Python, NodeJS, Java, C, C++, and a bit of Rust.","markups":[]},{"name":"eb91","type":1,"text":"In 2004, we started with just one: PHP. It was an ideal language for brand-new startups like Vimeo. PHP’s interpreter enabled entrepreneurs…","markups":[]}],"sections":[{"name":"60d0","startIndex":0}]},"isFullContent":false,"subtitle":"Vimeo has been using PHP in production for over 15 years. Find out how we keep a million lines of PHP in check!"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"2f8b1e94760c":{"id":"2f8b1e94760c","versionId":"fdcaec9680d7","creatorId":"9a9de6b26f1f","homeCollectionId":"92df1b631aeb","title":"Android Instant Apps, step-by-step: how Vimeo went about it","detectedLanguage":"en","latestVersion":"fdcaec9680d7","latestPublishedVersion":"fdcaec9680d7","hasUnpublishedEdits":false,"latestRev":1816,"createdAt":1496256370722,"updatedAt":1550244104339,"acceptedAt":0,"firstPublishedAt":1497465261211,"latestPublishedAt":1550244104339,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Vimeo’s journey to a 4MB video player Instant App","postDisplay":{"coverless":true},"metaDescription":"Refactoring an Android application to support Instant App features can be difficult. This post covers Vimeo’s two-phase approach to making their 15MB production app AIA friendly."},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*vVuYIF-D1qmNtQo52uxTnQ.jpeg","filter":"","backgroundSize":"","originalWidth":1400,"originalHeight":700,"strategy":"resample","height":0,"width":0},"wordCount":2137,"imageCount":5,"readingTime":8.89748427672956,"subtitle":"Vimeo’s journey to a 4MB video player Instant App","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":206,"isBookmarked":false,"tags":[{"slug":"android","name":"Android","postCount":97490,"metadata":{"postCount":97490,"coverImage":{"id":"1*m3Fp0NIBSiWm_ea0P7Xq6A@2x.png","originalWidth":1604,"originalHeight":840,"isFeatured":true,"alt":"Preview of article content: Windows 11 right-click menu, toggle button, design, Windows 11 dialog, outline icons, toggle designs in iOS and Android, Segoe UI Variable optical sizes, and Material You wallpaper-based personalization."}},"type":"Tag"},{"slug":"android-instant-apps","name":"Android Instant Apps","postCount":58,"metadata":{"postCount":58,"coverImage":{"id":"1*ZZZQ11uvI1DUD_nqf-sA6g.png","originalWidth":1408,"originalHeight":670}},"type":"Tag"},{"slug":"programming","name":"Programming","postCount":217370,"metadata":{"postCount":217370,"coverImage":{"id":"0*dXNh8s2eYkYGq6SI","originalWidth":6240,"originalHeight":4160,"isFeatured":true,"unsplashPhotoId":"XtmQpZssCWw"}},"type":"Tag"},{"slug":"refactoring","name":"Refactoring","postCount":2167,"metadata":{"postCount":2167,"coverImage":{"id":"1*Ftf-Focjz60D_gju8Di9RA.jpeg","originalWidth":3778,"originalHeight":2444,"isFeatured":true}},"type":"Tag"},{"slug":"videos","name":"Videos","postCount":42357,"metadata":{"postCount":42357,"coverImage":{"id":"1*q6nxBSYYXG3cb8Sjcdeyzg.png","originalWidth":2000,"originalHeight":1331,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":19,"links":{"entries":[{"url":"https://web.archive.org/web/20211201164814/https://grnh.se/c590cd4f1","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/http://square.github.io/picasso/","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/http://frescolib.org/","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://jeroenmols.com/blog/2016/05/06/methodcount/","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://vimeo.com/190063150","alts":[{"type":2,"url":"vimeo://app.vimeo.com/videos/190063150"},{"type":3,"url":"vimeo://app.vimeo.com/videos/190063150"}],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/googlevr/gvr-android-sdk","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://willowtreeapps.com/ideas/an-introduction-to-android-instant-apps","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/google/guava","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://medium.com/jet-stories/make-your-app-instant-33855ab5d02b","alts":[{"type":3,"url":"medium://p/33855ab5d02b"},{"type":2,"url":"medium://p/33855ab5d02b"}],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://developer.android.com/studio/build/shrink-code.html#shrink-code","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/http://www.methodscount.com/","alts":[],"httpStatus":500},{"url":"https://web.archive.org/web/20211201164814/https://developer.android.com/studio/build/apk-analyzer.html","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/facebook/redex","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://developer.android.com/topic/instant-apps/ux-best-practices.html","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://developer.android.com/topic/instant-apps/overview.html","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://developer.android.com/topic/instant-apps/index.html","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://youtu.be/F42Rbi3WIlA?t=15m53s","alts":[{"type":2,"url":"vnd.youtube://www.youtube.com/watch?v=F42Rbi3WIlA&feature=applinks"},{"type":3,"url":"vnd.youtube://www.youtube.com/watch?v=F42Rbi3WIlA&feature=applinks"}],"httpStatus":200}],"version":"0.3","generatedAt":1550244105596},"isLockedPreviewOnly":false,"metaDescription":"Refactoring an Android application to support Instant App features can be difficult. This post covers Vimeo’s two-phase approach to making their 15MB production app AIA friendly.","totalClapCount":556,"sectionCount":2,"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":"android-instant-apps-step-by-step-how-vimeo-went-about-it","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"vimeo-android-instant-apps-2f8b1e94760c","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*vVuYIF-D1qmNtQo52uxTnQ.jpeg","originalWidth":1400,"originalHeight":700,"isFeatured":true}},{"name":"previewTitle","type":3,"text":"Android Instant Apps, step-by-step: how Vimeo went about it","alignment":1},{"name":"previewSubtitle","type":13,"text":"Vimeo’s journey to a 4MB video player…","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Vimeo’s journey to a 4MB video player Instant App"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"92df1b631aeb","isNewsletter":false,"newsletterId":"","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":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"3178","type":3,"text":"Android Instant Apps, step-by-step: how Vimeo went about it","markups":[]},{"name":"0a08","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"1*vVuYIF-D1qmNtQo52uxTnQ.jpeg","originalWidth":1400,"originalHeight":700,"isFeatured":true}},{"name":"43e3","type":3,"text":"What are Android Instant Apps?","markups":[]},{"name":"8473","type":1,"text":"As an Android user, I’m ecstatic to say that Google has finally made Android Instant Apps (AIA) public to developers. AIA is a new feature built into the Android operating system (available on everything back to Lollipop), allowing users to open individual features of your app without even having it…","markups":[{"type":3,"start":69,"end":89,"href":"https://web.archive.org/web/20211201164814/https://developer.android.com/topic/instant-apps/index.html","title":"","rel":"","anchorType":0},{"type":3,"start":425,"end":435,"href":"https://web.archive.org/web/20211201164814/https://vimeo.com/190063150","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"ab5b","startIndex":0}]},"isFullContent":false,"subtitle":"Vimeo’s journey to a 4MB video player Instant App"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"d825a33793cd":{"id":"d825a33793cd","versionId":"a49c150bbead","creatorId":"6f71707a0d62","homeCollectionId":"92df1b631aeb","title":"Orchestrating GCE Instances with Ansible","detectedLanguage":"en","latestVersion":"a49c150bbead","latestPublishedVersion":"a49c150bbead","hasUnpublishedEdits":false,"latestRev":502,"createdAt":1483555105301,"updatedAt":1529423128527,"acceptedAt":0,"firstPublishedAt":1484668637021,"latestPublishedAt":1484668637021,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Here at Vimeo, I’ve been trying to find the sweet spot between designing immutable infrastructure and retaining the ability to identify…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"wordCount":1824,"imageCount":0,"readingTime":6.8830188679245285,"subtitle":"Here at Vimeo, I’ve been trying to find the sweet spot between designing immutable infrastructure and retaining the ability to identify…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":23,"isBookmarked":false,"tags":[{"slug":"ansible","name":"Ansible","postCount":3486,"metadata":{"postCount":3486,"coverImage":{"id":"1*jF9sz03eWhT4OMTqv6PQZg.png","originalWidth":2240,"originalHeight":1260,"isFeatured":true}},"type":"Tag"},{"slug":"devops","name":"DevOps","postCount":43079,"metadata":{"postCount":43079,"coverImage":{"id":"1*T6fHT2e0XoE4ILzYDelwCA.png","originalWidth":2306,"originalHeight":1068}},"type":"Tag"},{"slug":"google-compute-engine","name":"Google Compute Engine","postCount":264,"metadata":{"postCount":264,"coverImage":{"id":"1*BjjtbfJyLkrW1xYoovYGsg.png","originalWidth":1483,"originalHeight":296,"isFeatured":true}},"type":"Tag"},{"slug":"infrastructure","name":"Infrastructure","postCount":8348,"metadata":{"postCount":8348,"coverImage":{"id":"1*mj48D7OQMYewYdw-Y4MhRQ.jpeg","originalWidth":6016,"originalHeight":4016,"isFeatured":true}},"type":"Tag"},{"slug":"python","name":"Python","postCount":100244,"metadata":{"postCount":100244,"coverImage":{"id":"1*9LnY7HZwipgF_d-wkMcWEg.jpeg","originalWidth":7360,"originalHeight":4912,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":10,"links":{"entries":[],"version":"0.3","generatedAt":1484668637982},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":92,"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":"orchestrating-gce-instances-with-ansible","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"orchestrating-gce-instances-with-ansible-d825a33793cd","previewContent":{"bodyModel":{"paragraphs":[{"name":"c3d4","type":3,"text":"Orchestrating GCE Instances with Ansible","markups":[],"alignment":1},{"name":"9ce0","type":1,"text":"Here at Vimeo, I’ve been trying to find the sweet spot between designing immutable infrastructure and retaining the ability to identify single resources within a homogenous group. I’ve recently adopted Ansible into my toolkit for just that. This post is going…","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Here at Vimeo, I’ve been trying to find the sweet spot between designing immutable infrastructure and retaining the ability to identify…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"92df1b631aeb","isNewsletter":false,"newsletterId":"","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":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"c3d4","type":3,"text":"Orchestrating GCE Instances with Ansible","markups":[]},{"name":"9ce0","type":1,"text":"Here at Vimeo, I’ve been trying to find the sweet spot between designing immutable infrastructure and retaining the ability to identify single resources within a homogenous group. I’ve recently adopted Ansible into my toolkit for just that. This post is going to focus on using Ansible as an orchestration tool…","markups":[]}],"sections":[{"name":"bb00","startIndex":0}]},"isFullContent":false,"subtitle":"Here at Vimeo, I’ve been trying to find the sweet spot between designing immutable infrastructure and retaining the ability to identify…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"29ba9ec6bc98":{"id":"29ba9ec6bc98","versionId":"d7842b04a76b","creatorId":"6f71707a0d62","homeCollectionId":"92df1b631aeb","title":"Graphing systems metrics with netdata, Prometheus, and Grafana","detectedLanguage":"en","latestVersion":"d7842b04a76b","latestPublishedVersion":"d7842b04a76b","hasUnpublishedEdits":false,"latestRev":155,"createdAt":1505324063703,"updatedAt":1527062081126,"acceptedAt":0,"firstPublishedAt":1505325346520,"latestPublishedAt":1505325346520,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"In this article I will walk you through the basics of getting Netdata, Prometheus and Grafana all working together and monitoring your…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*iDTWKM2pEpBEzX-B.","filter":"","backgroundSize":"","originalWidth":1400,"originalHeight":434,"strategy":"resample","height":0,"width":0},"wordCount":2121,"imageCount":6,"readingTime":8.95377358490566,"subtitle":"In this article I will walk you through the basics of getting Netdata, Prometheus and Grafana all working together and monitoring your…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":39,"isBookmarked":false,"tags":[{"slug":"docker","name":"Docker","postCount":35659,"metadata":{"postCount":35659,"coverImage":{"id":"1*XZ6bYvU77Jfv8K864bTdWQ.png","originalWidth":1086,"originalHeight":649,"isFeatured":true}},"type":"Tag"},{"slug":"programming","name":"Programming","postCount":217370,"metadata":{"postCount":217370,"coverImage":{"id":"0*dXNh8s2eYkYGq6SI","originalWidth":6240,"originalHeight":4160,"isFeatured":true,"unsplashPhotoId":"XtmQpZssCWw"}},"type":"Tag"},{"slug":"grafana","name":"Grafana","postCount":1400,"metadata":{"postCount":1400,"coverImage":{"id":"1*Mu_npv2NuL7Whkm1EP9wPg.png","originalWidth":1910,"originalHeight":888,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":1,"links":{"entries":[{"url":"https://web.archive.org/web/20211201164814/https://prometheus.io/docs/querying/functions/","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://prometheus.io/docs/concepts/data_model/","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/firehol/netdata/wiki/Installation","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://prometheus.io/download/","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://prometheus.io/","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://my-netdata.io/kickstart.sh)","alts":[],"httpStatus":400},{"url":"https://web.archive.org/web/20211201164814/https://prometheus.io/docs/operating/configuration/","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/firehol/netdata/wiki/Using-Netdata-with-Prometheus#netdata-support-for-prometheus","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/http://localhost:9090/targets","alts":[],"httpStatus":0},{"url":"https://web.archive.org/web/20211201164814/http://localhost:19999/api/v1/allmetrics?format=prometheus&help=yes&types=yes&source=as-collected","alts":[],"httpStatus":0},{"url":"https://web.archive.org/web/20211201164814/http://localhost:9090/","alts":[],"httpStatus":0},{"url":"https://web.archive.org/web/20211201164814/http://localhost:3000/","alts":[],"httpStatus":0},{"url":"https://web.archive.org/web/20211201164814/http://localhost:19999/","alts":[],"httpStatus":0},{"url":"https://web.archive.org/web/20211201164814/http://localhost:19999/api/v1/allmetrics?format=prometheus&help=yes","alts":[],"httpStatus":0}],"version":"0.3","generatedAt":1505325346951},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":289,"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":"graphing-systems-metrics-with-netdata-prometheus-and-grafana","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"graphing-systems-metrics-with-netdata-prometheus-and-grafana-29ba9ec6bc98","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*iDTWKM2pEpBEzX-B.","originalWidth":1400,"originalHeight":434,"isFeatured":true}},{"name":"c883","type":3,"text":"Graphing systems metrics with netdata, Prometheus, and Grafana","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"In this article I will walk you through the basics of getting Netdata, Prometheus and Grafana all working together and monitoring your…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"92df1b631aeb","isNewsletter":false,"newsletterId":"","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":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"c883","type":3,"text":"Graphing systems metrics with netdata, Prometheus, and Grafana","markups":[]},{"name":"70ba","type":1,"text":"In this article I will walk you through the basics of getting Netdata, Prometheus and Grafana all working together and monitoring your application servers. This article will be using Docker on your local workstation. We will be working with Docker in an ad-hoc way, launching containers that run ‘/bin/bash’ and…","markups":[]}],"sections":[{"name":"606b","startIndex":0}]},"isFullContent":false,"subtitle":"In this article I will walk you through the basics of getting Netdata, Prometheus and Grafana all working together and monitoring your…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"26250f13d251":{"id":"26250f13d251","versionId":"fc86846bafad","creatorId":"696fc211da2","homeCollectionId":"92df1b631aeb","title":"The great pretender: faster application tests with MySQL simulation","detectedLanguage":"en","latestVersion":"fc86846bafad","latestPublishedVersion":"fc86846bafad","hasUnpublishedEdits":false,"latestRev":1017,"createdAt":1611274256353,"updatedAt":1612256356000,"acceptedAt":0,"firstPublishedAt":1612195451047,"latestPublishedAt":1612224371196,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Vimeo built a replica MySQL engine in PHP (with help from Slack). Find out what we gained from going down that path!","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*5a7mjMdtwdsTFV6ly8Ss2g.jpeg","filter":"","backgroundSize":"","originalWidth":3525,"originalHeight":2177,"strategy":"resample","height":0,"width":0},"wordCount":1308,"imageCount":1,"readingTime":5.1358490566037736,"subtitle":"Vimeo built a replica MySQL engine in PHP (with help from Slack). Find out what we gained from going down that path!","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":57,"isBookmarked":false,"tags":[{"slug":"mysql","name":"MySQL","postCount":7218,"metadata":{"postCount":7218,"coverImage":{"id":"1*cxB26Ps0iNvU1WuixdBfew.png","originalWidth":2116,"originalHeight":808,"isFeatured":true}},"type":"Tag"},{"slug":"testing","name":"Testing","postCount":23516,"metadata":{"postCount":23516,"coverImage":{"id":"1*_kiDt3ih0XWXvBprgYityw.jpeg","originalWidth":3188,"originalHeight":1890,"isFeatured":true}},"type":"Tag"},{"slug":"php","name":"PHP","postCount":20371,"metadata":{"postCount":20371,"coverImage":{"id":"1*-Zf9xYAfPcFhwzD8CprnLw.jpeg","originalWidth":2000,"originalHeight":1333,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":5,"links":{"entries":[{"url":"https://web.archive.org/web/20211201164814/https://github.com/vimeo/php-mysql-engine","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/slackhq/hack-sql-fake","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/hacktophp/hacktophp","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://grnh.se/353a1d2c1us","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://phauer.com/2017/dont-use-in-memory-databases-tests-h2/","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1612224373054},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":281,"sectionCount":2,"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":"the-great-pretender-faster-application-tests-with-mysql-simulation","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"the-great-pretender-faster-application-tests-with-mysql-simulation-26250f13d251","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*5a7mjMdtwdsTFV6ly8Ss2g.jpeg","originalWidth":3525,"originalHeight":2177,"isFeatured":true,"alt":"The unholy mix of an elephant and a dolphin leaps out the water"}},{"name":"7c64","type":3,"text":"The great pretender: faster application tests with MySQL simulation","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Vimeo built a replica MySQL engine in PHP (with help from Slack). Find out what we gained from going down that path!"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"92df1b631aeb","isNewsletter":false,"newsletterId":"","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":3,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"primaryTopicId":"decb52b64abf","isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"7c64","type":3,"text":"The great pretender: faster application tests with MySQL simulation","markups":[]},{"name":"2c64","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"1*5a7mjMdtwdsTFV6ly8Ss2g.jpeg","originalWidth":3525,"originalHeight":2177,"isFeatured":true,"alt":"The unholy mix of an elephant and a dolphin leaps out the water"}},{"name":"207a","type":1,"text":"If you have a web-based application, chances are high that it uses some sort of database to store information. Chances are also high that you’ll want to test that application somehow. One of the questions you then have to answer is, “How do I test something that queries a database?”","markups":[]},{"name":"8daf","type":13,"text":"Option 1: Limit database interaction to a mockable API","markups":[]},{"name":"2fff","type":1,"text":"…","markups":[{"type":10,"start":73,"end":87}]}],"sections":[{"name":"2488","startIndex":0}]},"isFullContent":false,"subtitle":"Vimeo built a replica MySQL engine in PHP (with help from Slack). Find out what we gained from going down that path!"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"a4ca46eb9aeb":{"id":"a4ca46eb9aeb","versionId":"a5202ead51ef","creatorId":"696fc211da2","homeCollectionId":"92df1b631aeb","title":"Uncovering PHP bugs with @template","detectedLanguage":"en","latestVersion":"a5202ead51ef","latestPublishedVersion":"a5202ead51ef","hasUnpublishedEdits":false,"latestRev":3816,"createdAt":1547004878539,"updatedAt":1548864420865,"acceptedAt":0,"firstPublishedAt":1548864353925,"latestPublishedAt":1548864420865,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"At a former job I wrote a load of C# code, and I really enjoyed playing around with generic classes…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*uMGNQT7jeDfrnXnnF190kg.png","filter":"","backgroundSize":"","originalWidth":2306,"originalHeight":1616,"strategy":"resample","height":0,"width":0},"wordCount":1314,"imageCount":1,"readingTime":5.158490566037736,"subtitle":"At a former job I wrote a load of C# code, and I really enjoyed playing around with generic classes…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":37,"isBookmarked":false,"tags":[{"slug":"php","name":"PHP","postCount":20371,"metadata":{"postCount":20371,"coverImage":{"id":"1*-Zf9xYAfPcFhwzD8CprnLw.jpeg","originalWidth":2000,"originalHeight":1333,"isFeatured":true}},"type":"Tag"},{"slug":"type","name":"Type","postCount":703,"metadata":{"postCount":703,"coverImage":{"id":"0*Uk2rhKqIP10_c9zV","originalWidth":6000,"originalHeight":4000,"isFeatured":true,"unsplashPhotoId":"rpJUczIU5-U"}},"type":"Tag"},{"slug":"template","name":"Template","postCount":2749,"metadata":{"postCount":2749,"coverImage":{"id":"0*SwA_YQh0C68lmI0d","originalWidth":5184,"originalHeight":3888,"isFeatured":true,"unsplashPhotoId":"Q0ksjWR55Jc"}},"type":"Tag"},{"slug":"static-analysis","name":"Static Analysis","postCount":208,"metadata":{"postCount":208,"coverImage":{"id":"1*XjrV3eEpfI53977BEyYX7A.png","originalWidth":1200,"originalHeight":630,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":2,"links":{"entries":[{"url":"https://web.archive.org/web/20211201164814/https://github.com/vimeo/psalm/issues","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://en.cppreference.com/w/cpp/language/template_parameters","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://doc.rust-lang.org/rust-by-example/generics.html","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/phan/phan/issues/1666","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/vimeo/psalm","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://hacklang.org","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://getpsalm.org/r/6330e878f6","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/vimeo/psalm/blob/00e95cbd6b94f3562d54201a3b9ceb4131a44352/src/Psalm/Internal/Stubs/CoreGenericClasses.php#L694-L741","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://docs.phpdoc.org/glossary.html#term-docblock","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/vimeo/psalm/blob/00e95cbd6b94f3562d54201a3b9ceb4131a44352/src/Psalm/Internal/Stubs/CoreGenericClasses.php#L200-L205","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/vimeo/psalm/blob/1c17d2e2f299a3c680a25ff8055aa144b1047c4f/src/Psalm/Internal/Stubs/CoreGenericFunctions.php#L131","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/phpstan/phpstan/pull/1692","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/psalm/phpunit-psalm-plugin/blob/65b5b19c951fab0df9e7db3e3a509d7a82f433d3/stubs/TestCase.php#L10-L15","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://docs.oracle.com/javase/tutorial/java/generics/bounded.html","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://docs.hhvm.com/hack/generics/introduction","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://docs.swift.org/swift-book/LanguageGuide/Generics.html","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/http://php.net/manual/en/function.usort.php","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/phan/phan","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://www.typescriptlang.org/docs/handbook/generics.html","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/vimeo/psalm/blob/00e95cbd6b94f3562d54201a3b9ceb4131a44352/src/Psalm/Internal/Stubs/CoreGenericFunctions.php","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://docs.microsoft.com/en-us/dotnet/csharp/programming-guide/generics/generic-type-parameters","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://getpsalm.org/docs/dealing_with_code_issues/#using-a-baseline-file","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1548864421078},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":253,"sectionCount":3,"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":"uncovering-php-bugs-with-template","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"uncovering-php-bugs-with-template-a4ca46eb9aeb","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*uMGNQT7jeDfrnXnnF190kg.png","originalWidth":2306,"originalHeight":1616,"isFeatured":true}},{"name":"previewTitle","type":3,"text":"Uncovering PHP bugs with @template","alignment":1},{"name":"previewSubtitle","type":13,"text":"At a former job I wrote a load of C# code, and I really enjoyed…","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"At a former job I wrote a load of C# code, and I really enjoyed playing around with generic classes…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"92df1b631aeb","isNewsletter":false,"newsletterId":"","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":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"2c1c","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"1*uMGNQT7jeDfrnXnnF190kg.png","originalWidth":2306,"originalHeight":1616,"isFeatured":true}},{"name":"6aed","type":3,"text":"Uncovering PHP bugs with @template","markups":[]},{"name":"5a7f","type":1,"text":"This guide discusses functionality available in two PHP static analysis tools: Psalm (from Vimeo), and Phan. PHPStan has plans to support templated types in an upcoming version.","markups":[{"type":3,"start":79,"end":84,"href":"https://web.archive.org/web/20211201164814/https://github.com/vimeo/psalm","title":"","rel":"","anchorType":0},{"type":3,"start":103,"end":107,"href":"https://web.archive.org/web/20211201164814/https://github.com/phan/phan","title":"","rel":"","anchorType":0},{"type":3,"start":117,"end":137,"href":"https://web.archive.org/web/20211201164814/https://github.com/phpstan/phpstan/pull/1692","title":"","rel":"noopener","anchorType":0},{"type":2,"start":0,"end":177}]},{"name":"b18b","type":1,"text":"At a former job I wrote a load of C# code, and I really enjoyed playing around with generic classes. You could write…","markups":[]}],"sections":[{"name":"52f9","startIndex":0},{"name":"2465","startIndex":3}]},"isFullContent":false,"subtitle":"At a former job I wrote a load of C# code, and I really enjoyed playing around with generic classes…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"a99e05998c24":{"id":"a99e05998c24","versionId":"448672f5bb18","creatorId":"696fc211da2","homeCollectionId":"92df1b631aeb","title":"Fixing code that ain’t broken","detectedLanguage":"en","latestVersion":"448672f5bb18","latestPublishedVersion":"448672f5bb18","hasUnpublishedEdits":false,"latestRev":3377,"createdAt":1519671915525,"updatedAt":1527622100149,"acceptedAt":0,"firstPublishedAt":1521225743869,"latestPublishedAt":1521227384693,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"In June of 2015, the Vimeo Codebase was large, sprawling, and full of magic. It processed many millions of requests every hour. The users…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"wordCount":1071,"imageCount":0,"readingTime":4.041509433962264,"subtitle":"In June of 2015, the Vimeo Codebase was large, sprawling, and full of magic. It processed many millions of requests every hour. The users…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":46,"isBookmarked":false,"tags":[{"slug":"php","name":"PHP","postCount":20371,"metadata":{"postCount":20371,"coverImage":{"id":"1*-Zf9xYAfPcFhwzD8CprnLw.jpeg","originalWidth":2000,"originalHeight":1333,"isFeatured":true}},"type":"Tag"},{"slug":"static-analysis","name":"Static Analysis","postCount":208,"metadata":{"postCount":208,"coverImage":{"id":"1*XjrV3eEpfI53977BEyYX7A.png","originalWidth":1200,"originalHeight":630,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":3,"links":{"entries":[{"url":"https://web.archive.org/web/20211201164814/http://www.michaelnygard.com/blog/2015/07/the-fear-cycle/","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://hacklang.org","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/vimeo/psalm/blob/master/docs/fixing_code.md#missingreturntype","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/vimeo/psalm/tree/master/assets/config_levels","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://gist.github.com/muglug/6c6ac543a51d94c62967bd861783ed07","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/vimeo/psalm","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/vimeo/psalm/blob/master/docs/issues.md#typecoercion","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/vimeo/psalm/blob/master/docs/issues.md","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/vimeo/psalm/blob/master/docs/fixing_code.md#invalidreturntype","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/vimeo/psalm/blob/master/docs/issues.md#undefinedclass","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://packagist.org/packages/vimeo/psalm/dependents","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/phan/phan","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/vimeo/psalm/issues/435","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/vimeo/psalm/issues","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/vimeo/psalm/issues/207","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/vimeo/psalm/issues/204","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/vimeo/psalm/issues/521","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/phpstan/phpstan","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1521227385718},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":497,"sectionCount":5,"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":"fixing-code-that-aint-broken","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"fixing-code-that-aint-broken-a99e05998c24","previewContent":{"bodyModel":{"paragraphs":[{"name":"262b","type":3,"text":"Fixing code that ain’t broken","markups":[],"alignment":1},{"name":"872a","type":1,"text":"In June of 2015, the Vimeo Codebase was large, sprawling, and full of magic. It processed many millions of requests every hour. The users were happy, and the company grew.","markups":[],"alignment":1},{"name":"15a2","type":1,"text":"The Codebase worked.","markups":[{"type":2,"start":13,"end":19}],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"In June of 2015, the Vimeo Codebase was large, sprawling, and full of magic. It processed many millions of requests every hour. The users…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"92df1b631aeb","isNewsletter":false,"newsletterId":"","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":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"262b","type":3,"text":"Fixing code that ain’t broken","markups":[]},{"name":"872a","type":1,"text":"In June of 2015, the Vimeo Codebase was large, sprawling, and full of magic. It processed many millions of requests every hour. The users were happy, and the company grew.","markups":[]},{"name":"15a2","type":1,"text":"The Codebase worked.","markups":[{"type":2,"start":13,"end":19}]},{"name":"83fb","type":1,"text":"The Codebase didn’t have many tests or much documentation. The only practical way to figure out whether…","markups":[]}],"sections":[{"name":"4da2","startIndex":0},{"name":"4217","startIndex":3}]},"isFullContent":false,"subtitle":"In June of 2015, the Vimeo Codebase was large, sprawling, and full of magic. It processed many millions of requests every hour. The users…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"3e208a2da760":{"id":"3e208a2da760","versionId":"19f0ab1c3e74","creatorId":"f4943d90d808","homeCollectionId":"92df1b631aeb","title":"Introducing the new Vimeo upload API","detectedLanguage":"en","latestVersion":"19f0ab1c3e74","latestPublishedVersion":"19f0ab1c3e74","hasUnpublishedEdits":false,"latestRev":62,"createdAt":1517979620106,"updatedAt":1532098249300,"acceptedAt":0,"firstPublishedAt":1518018744707,"latestPublishedAt":1518019739955,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Vimeo’s got some pretty big news to share today. We’ve just rolled out an all-new, all-awesome version of our API — and we want you to be…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"wordCount":722,"imageCount":0,"readingTime":2.7245283018867923,"subtitle":"Vimeo’s got some pretty big news to share today. We’ve just rolled out an all-new, all-awesome version of our API — and we want you to be…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":25,"isBookmarked":false,"tags":[{"slug":"api","name":"API","postCount":29595,"metadata":{"postCount":29595,"coverImage":{"id":"1*STkFptPdE6pjYOKN0rYYIg.png","originalWidth":3480,"originalHeight":2616,"isFeatured":true}},"type":"Tag"},{"slug":"tu","name":"Tus","postCount":0,"metadata":{"postCount":0,"coverImage":{"id":"0*PZ-bJ9gKGnd1lLis.jpeg","originalWidth":2600,"originalHeight":1473,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":0,"links":{"entries":[{"url":"https://web.archive.org/web/20211201164814/https://tus.io","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://developer.vimeo.com/api/start","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://developer.vimeo.com/api/changelog","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1518019744021},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":134,"sectionCount":1,"readingList":0,"topics":[]},"coverless":true,"slug":"introducing-the-new-vimeo-upload-api","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":false,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"introducing-the-new-vimeo-upload-api-3e208a2da760","previewContent":{"bodyModel":{"paragraphs":[{"name":"aae1","type":3,"text":"Introducing the new Vimeo upload API","markups":[],"alignment":1},{"name":"7f80","type":1,"text":"Vimeo’s got some pretty big news to share today. We’ve just rolled out an all-new, all-awesome version of our API — and we want you to be the first to use it. (Well, among the first. We did send out an email blast or two to some of you.)","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Vimeo’s got some pretty big news to share today. We’ve just rolled out an all-new, all-awesome version of our API — and we want you to be…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"92df1b631aeb","isNewsletter":false,"newsletterId":"","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":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"aae1","type":3,"text":"Introducing the new Vimeo upload API","markups":[]},{"name":"7f80","type":1,"text":"Vimeo’s got some pretty big news to share today. We’ve just rolled out an all-new, all-awesome version of our API — and we want you to be the first to use it. (Well, among the first. We did send out an email blast or two to some of you.)","markups":[]},{"name":"907e","type":1,"text":"We’re…","markups":[{"type":2,"start":193,"end":202}]}],"sections":[{"name":"dad7","startIndex":0}]},"isFullContent":false,"subtitle":"Vimeo’s got some pretty big news to share today. We’ve just rolled out an all-new, all-awesome version of our API — and we want you to be…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"486179edeb29":{"id":"486179edeb29","versionId":"3a76c5d697a0","creatorId":"9a9de6b26f1f","homeCollectionId":"92df1b631aeb","title":"Boosting app performance with reflectionless (de)serialization","detectedLanguage":"en","latestVersion":"3a76c5d697a0","latestPublishedVersion":"3a76c5d697a0","hasUnpublishedEdits":false,"latestRev":92,"createdAt":1480442191471,"updatedAt":1550244019303,"acceptedAt":0,"firstPublishedAt":1480445443470,"latestPublishedAt":1550244019303,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"By Kevin Zetterstrom and Anthony Restaino","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*i9eUYBIfk1Aw5p7Mlbnk6A.png","filter":"","backgroundSize":"","originalWidth":1684,"originalHeight":848,"strategy":"resample","height":0,"width":0},"wordCount":681,"imageCount":1,"readingTime":2.7698113207547173,"subtitle":"By Kevin Zetterstrom and Anthony Restaino","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":16,"isBookmarked":false,"tags":[{"slug":"android","name":"Android","postCount":97490,"metadata":{"postCount":97490,"coverImage":{"id":"1*m3Fp0NIBSiWm_ea0P7Xq6A@2x.png","originalWidth":1604,"originalHeight":840,"isFeatured":true,"alt":"Preview of article content: Windows 11 right-click menu, toggle button, design, Windows 11 dialog, outline icons, toggle designs in iOS and Android, Segoe UI Variable optical sizes, and Material You wallpaper-based personalization."}},"type":"Tag"},{"slug":"performance","name":"Performance","postCount":15588,"metadata":{"postCount":15588,"coverImage":{"id":"1*yKuWBj_IZ8MnGZvx2HX37Q.jpeg","originalWidth":1158,"originalHeight":404,"isFeatured":true}},"type":"Tag"},{"slug":"stag","name":"Stag","postCount":18,"metadata":{"postCount":18,"coverImage":{"id":"1*iHI2TJtH3p-SXFmDIz-jLg.jpeg","originalWidth":1920,"originalHeight":1080,"isFeatured":true}},"type":"Tag"},{"slug":"open-source","name":"Open Source","postCount":32283,"metadata":{"postCount":32283,"coverImage":{"id":"1*1YDejJ1NzqSd5hRULskQpg.png","originalWidth":2508,"originalHeight":1046,"isFeatured":true}},"type":"Tag"},{"slug":"songs","name":"Gson","postCount":59,"metadata":{"postCount":59,"coverImage":{"id":"1*xA5GrVPbXMD3isTNx1u4eQ.png","originalWidth":800,"originalHeight":670,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":2,"links":{"entries":[{"url":"https://web.archive.org/web/20211201164814/https://open.blogs.nytimes.com/2016/02/11/improving-startup-time-in-the-nytimes-android-app/","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://developer.vimeo.com/api/guides/start","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://stackoverflow.com/","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://grnh.se/c590cd4f1","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://play.google.com/store/apps/details?id=com.vimeo.android.videoapp","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/vimeo/stag-java","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/anthonycr","alts":[],"httpStatus":200},{"url":"https://web.archive.org/web/20211201164814/https://github.com/vimeo","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1550244020377},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":105,"sectionCount":2,"readingList":0,"topics":[]},"coverless":true,"slug":"boosting-app-performance-with-reflectionless-de-serialization","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"boosting-app-performance-with-reflectionless-de-serialization-486179edeb29","previewContent":{"bodyModel":{"paragraphs":[{"name":"d54c","type":3,"text":"Boosting app performance with reflectionless (de)serialization","markups":[],"alignment":1},{"name":"2905","type":1,"text":"By Kevin Zetterstrom and Anthony Restaino","markups":[{"type":3,"start":3,"end":20,"anchorType":2,"userId":"726498ee26e5"},{"type":3,"start":25,"end":41,"anchorType":2,"userId":"1c9b1c38c628"}],"alignment":1},{"name":"20b8","type":1,"text":"As any native app developer will tell you, API responsiveness and application performance are directly correlated with a positive user experience —…","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"By Kevin Zetterstrom and Anthony Restaino"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"92df1b631aeb","isNewsletter":false,"newsletterId":"","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":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"d54c","type":3,"text":"Boosting app performance with reflectionless (de)serialization","markups":[]},{"name":"2905","type":1,"text":"By Kevin Zetterstrom and Anthony Restaino","markups":[{"type":3,"start":3,"end":20,"anchorType":2,"userId":"726498ee26e5"},{"type":3,"start":25,"end":41,"anchorType":2,"userId":"1c9b1c38c628"}]},{"name":"20b8","type":1,"text":"As any native app developer will tell you, API responsiveness and application performance are directly correlated with a positive user experience — meaning, when those things are running smoothly, your fans will be happy, and when they’re running less well, they notice. Because Vimeo’s…","markups":[]}],"sections":[{"name":"6969","startIndex":0}]},"isFullContent":false,"subtitle":"By Kevin Zetterstrom and Anthony Restaino"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"}}},"paging":{},"collection":{"id":"92df1b631aeb","name":"Vimeo Engineering Blog","slug":"vimeo-engineering-blog","tags":["VIMEO","VIDEO","ENGINEERING","TECH","CODING"],"creatorId":"9a4d2ea550cb","description":"We tinker, we build, and we dream up all-new things to help support the world's best community of creators. Lift up the hood and see how it all works.","shortDescription":"We tinker, we build, and we dream up all-new things to help…","image":{"imageId":"1*aTJtrirnEDuzqgTrUEcd7g.png","filter":"","backgroundSize":"","originalWidth":240,"originalHeight":240,"strategy":"resample","height":0,"width":0},"metadata":{"followerCount":2388,"activeAt":1637344959460},"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":"vimeo","facebookPageName":"vimeo","sections":[{"type":2,"collectionHeaderMetadata":{"title":"Vimeo Engineering Blog","description":"How we tinker, build, and dream up all-new things for Vimeo.","backgroundImage":{},"logoImage":{"id":"1*kRn0TQdR7OreKRJ1_5lxxQ@2x.png","originalWidth":992,"originalHeight":596,"alt":"Vimeo Engineering Blog"},"alignment":2,"layout":6}},{"type":1,"postListMetadata":{"source":1,"layout":6,"number":10,"postIds":[]}}],"tintColor":"#FF00ADEF","lightText":true,"favicon":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"colorPalette":{"defaultBackgroundSpectrum":{"colorPoints":[{"color":"#FF0094D5","point":0},{"color":"#FF0089C3","point":0.1},{"color":"#FF007EB1","point":0.2},{"color":"#FF0673A0","point":0.3},{"color":"#FF15688F","point":0.4},{"color":"#FF1A5D7D","point":0.5},{"color":"#FF1C516C","point":0.6},{"color":"#FF1B455B","point":0.7},{"color":"#FF193849","point":0.8},{"color":"#FF142B38","point":0.9},{"color":"#FF0D1C25","point":1}],"backgroundColor":"#FFFFFFFF"},"tintBackgroundSpectrum":{"colorPoints":[{"color":"#FF00ADEF","point":0},{"color":"#FF41B7F2","point":0.1},{"color":"#FF5EC0F6","point":0.2},{"color":"#FF76C9F9","point":0.3},{"color":"#FF8BD1FD","point":0.4},{"color":"#FF9EDAFF","point":0.5},{"color":"#FFB0E2FF","point":0.6},{"color":"#FFC1EBFF","point":0.7},{"color":"#FFD1F3FF","point":0.8},{"color":"#FFE1FBFF","point":0.9},{"color":"#FFF1FFFF","point":1}],"backgroundColor":"#FF00ADEF"},"highlightSpectrum":{"colorPoints":[{"color":"#FFE0F7FF","point":0},{"color":"#FFDAF6FF","point":0.1},{"color":"#FFD4F5FF","point":0.2},{"color":"#FFCDF4FF","point":0.3},{"color":"#FFC7F3FF","point":0.4},{"color":"#FFBFF2FF","point":0.5},{"color":"#FFB8F2FF","point":0.6},{"color":"#FFB0F1FF","point":0.7},{"color":"#FFA8F0FF","point":0.8},{"color":"#FFA0EFFF","point":0.9},{"color":"#FF97EEFF","point":1}],"backgroundColor":"#FFFFFFFF"},"darkBackgroundSpectrum":{"colorPoints":[{"color":"#FF00ADEF","point":0},{"color":"#FF3EB4F0","point":0.1},{"color":"#FF5ABCF2","point":0.2},{"color":"#FF70C3F3","point":0.3},{"color":"#FF83CAF5","point":0.4},{"color":"#FF95D1F6","point":0.5},{"color":"#FFA5D8F8","point":0.6},{"color":"#FFB5DEFA","point":0.7},{"color":"#FFC4E5FB","point":0.8},{"color":"#FFD2ECFD","point":0.9},{"color":"#FFE0F2FF","point":1}],"backgroundColor":"#FF000000"}},"navItems":[],"colorBehavior":2,"acceleratedMobilePagesState":0,"ampLogo":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"header":{"title":"Vimeo Engineering Blog","description":"How we tinker, build, and dream up all-new things for Vimeo.","backgroundImage":{},"logoImage":{"id":"1*kRn0TQdR7OreKRJ1_5lxxQ@2x.png","originalWidth":992,"originalHeight":596,"alt":"Vimeo Engineering Blog"},"alignment":2,"layout":6},"subscriberCount":2388,"tagline":"We tinker, we build, and we dream up all-new things to help…","isOptedIntoAurora":false,"isCurationAllowedByDefault":false,"polarisCoverImage":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"ptsQualifiedAt":1616092815346,"type":"Collection"},"masthead":{"collectionMastheadId":"","editorsNote":"","staff":[{"userId":"9a4d2ea550cb","excluded":false,"isEditor":true,"type":"CollectionMastheadUserItem"},{"userId":"9a9de6b26f1f","excluded":false,"isEditor":true,"type":"CollectionMastheadUserItem"},{"userId":"f4943d90d808","excluded":false,"isEditor":true,"type":"CollectionMastheadUserItem"},{"userId":"9a9de6b26f1f","excluded":false,"type":"CollectionMastheadUserItem"},{"userId":"ac6b5a21987a","excluded":false,"type":"CollectionMastheadUserItem"},{"userId":"dfbaf4fcaa38","excluded":false,"type":"CollectionMastheadUserItem"},{"userId":"6f71707a0d62","excluded":false,"type":"CollectionMastheadUserItem"},{"userId":"696fc211da2","excluded":false,"type":"CollectionMastheadUserItem"},{"userId":"cf358c3564b","excluded":false,"type":"CollectionMastheadUserItem"},{"userId":"3d445394104d","excluded":false,"type":"CollectionMastheadUserItem"},{"userId":"f4943d90d808","excluded":false,"type":"CollectionMastheadUserItem"},{"userId":"5c508928d495","excluded":false,"type":"CollectionMastheadUserItem"},{"userId":"4d1e13b7760b","excluded":false,"type":"CollectionMastheadUserItem"},{"userId":"af18b80aa4f7","excluded":false,"type":"CollectionMastheadUserItem"},{"userId":"6cc30bcf2885","excluded":false,"type":"CollectionMastheadUserItem"},{"userId":"84815ed4a94","excluded":false,"type":"CollectionMastheadUserItem"},{"userId":"bc69242cbad6","excluded":false,"type":"CollectionMastheadUserItem"},{"userId":"10bab874bf16","excluded":false,"type":"CollectionMastheadUserItem"},{"userId":"df060feda875","excluded":false,"type":"CollectionMastheadUserItem"},{"userId":"61437ba9f716","excluded":false,"type":"CollectionMastheadUserItem"},{"userId":"c497c5a4b2de","excluded":false,"type":"CollectionMastheadUserItem"},{"userId":"8f231cc0fef5","excluded":false,"type":"CollectionMastheadUserItem"},{"userId":"76f0c8379c68","excluded":false,"type":"CollectionMastheadUserItem"},{"userId":"11e87bbb2e89","excluded":false,"type":"CollectionMastheadUserItem"},{"userId":"53d6fde4a8ad","excluded":false,"type":"CollectionMastheadUserItem"},{"userId":"fce00e13dbfb","excluded":false,"type":"CollectionMastheadUserItem"}],"type":"CollectionMasthead"},"archiveIndex":{"timeBucket":{"year":"","month":"","day":"","hasStories":false},"yearlyBuckets":[{"year":"2016","month":"","day":"","hasStories":true},{"year":"2017","month":"","day":"","hasStories":true},{"year":"2018","month":"","day":"","hasStories":true},{"year":"2019","month":"","day":"","hasStories":true},{"year":"2020","month":"","day":"","hasStories":true},{"year":"2021","month":"","day":"","hasStories":true}],"monthlyBuckets":[],"dailyBuckets":[]},"tags":[{"slug":"songs","name":"Gson","postCount":59,"metadata":{"postCount":59,"coverImage":{"id":"1*xA5GrVPbXMD3isTNx1u4eQ.png","originalWidth":800,"originalHeight":670,"isFeatured":true}},"type":"Tag"},{"slug":"open-source","name":"Open Source","postCount":32283,"metadata":{"postCount":32283,"coverImage":{"id":"1*1YDejJ1NzqSd5hRULskQpg.png","originalWidth":2508,"originalHeight":1046,"isFeatured":true}},"type":"Tag"},{"slug":"stag","name":"Stag","postCount":18,"metadata":{"postCount":18,"coverImage":{"id":"1*iHI2TJtH3p-SXFmDIz-jLg.jpeg","originalWidth":1920,"originalHeight":1080,"isFeatured":true}},"type":"Tag"},{"slug":"performance","name":"Performance","postCount":15588,"metadata":{"postCount":15588,"coverImage":{"id":"1*yKuWBj_IZ8MnGZvx2HX37Q.jpeg","originalWidth":1158,"originalHeight":404,"isFeatured":true}},"type":"Tag"},{"slug":"android","name":"Android","postCount":97490,"metadata":{"postCount":97490,"coverImage":{"id":"1*m3Fp0NIBSiWm_ea0P7Xq6A@2x.png","originalWidth":1604,"originalHeight":840,"isFeatured":true,"alt":"Preview of article content: Windows 11 right-click menu, toggle button, design, Windows 11 dialog, outline icons, toggle designs in iOS and Android, Segoe UI Variable optical sizes, and Material You wallpaper-based personalization."}},"type":"Tag"},{"slug":"tu","name":"Tus","postCount":0,"metadata":{"postCount":0,"coverImage":{"id":"0*PZ-bJ9gKGnd1lLis.jpeg","originalWidth":2600,"originalHeight":1473,"isFeatured":true}},"type":"Tag"},{"slug":"api","name":"API","postCount":29595,"metadata":{"postCount":29595,"coverImage":{"id":"1*STkFptPdE6pjYOKN0rYYIg.png","originalWidth":3480,"originalHeight":2616,"isFeatured":true}},"type":"Tag"},{"slug":"static-analysis","name":"Static Analysis","postCount":208,"metadata":{"postCount":208,"coverImage":{"id":"1*XjrV3eEpfI53977BEyYX7A.png","originalWidth":1200,"originalHeight":630,"isFeatured":true}},"type":"Tag"},{"slug":"php","name":"PHP","postCount":20371,"metadata":{"postCount":20371,"coverImage":{"id":"1*-Zf9xYAfPcFhwzD8CprnLw.jpeg","originalWidth":2000,"originalHeight":1333,"isFeatured":true}},"type":"Tag"},{"slug":"static-analysis","name":"Static Analysis","postCount":208,"metadata":{"postCount":208,"coverImage":{"id":"1*XjrV3eEpfI53977BEyYX7A.png","originalWidth":1200,"originalHeight":630,"isFeatured":true}},"type":"Tag"}],"streamItems":[{"createdAt":1638377294776,"postPreview":{"postId":"9f1bd75709ed"},"randomId":"bd0f4add58f","itemType":"postPreview","type":"StreamItem"},{"createdAt":1638377294776,"postPreview":{"postId":"1f0ee0462580"},"randomId":"68eb8a8e4c87","itemType":"postPreview","type":"StreamItem"},{"createdAt":1638377294776,"postPreview":{"postId":"2f8b1e94760c"},"randomId":"8c0ddc8d85f","itemType":"postPreview","type":"StreamItem"},{"createdAt":1638377294776,"postPreview":{"postId":"d825a33793cd"},"randomId":"1c89dbe3f5ad","itemType":"postPreview","type":"StreamItem"},{"createdAt":1638377294776,"postPreview":{"postId":"29ba9ec6bc98"},"randomId":"e27686c8e255","itemType":"postPreview","type":"StreamItem"},{"createdAt":1638377294776,"postPreview":{"postId":"26250f13d251"},"randomId":"45cecd1f7f7","itemType":"postPreview","type":"StreamItem"},{"createdAt":1638377294776,"postPreview":{"postId":"a4ca46eb9aeb"},"randomId":"93cb4982d1ee","itemType":"postPreview","type":"StreamItem"},{"createdAt":1638377294776,"postPreview":{"postId":"a99e05998c24"},"randomId":"81a7137112ea","itemType":"postPreview","type":"StreamItem"},{"createdAt":1638377294776,"postPreview":{"postId":"3e208a2da760"},"randomId":"1b0a0c138523","itemType":"postPreview","type":"StreamItem"},{"createdAt":1638377294776,"postPreview":{"postId":"486179edeb29"},"randomId":"11fda7f25e99","itemType":"postPreview","type":"StreamItem"}]}) // ]]></script><script type="text/javascript">(function(b,r,a,n,c,h,_,s,d,k){if(!b[n]||!b[n]._q){for(;s<_.length;)c(h,_[s++]);d=r.createElement(a);d.async=1;d.src="https://web.archive.org/web/20211201164814/https://cdn.branch.io/branch-latest.min.js";k=r.getElementsByTagName(a)[0];k.parentNode.insertBefore(d,k);b[n]=h}})(window,document,"script","branch",function(b,r){b[r]=function(){b._q.push([r,arguments])}},{_q:[],_v:1},"addListener applyCode autoAppIndex banner closeBanner closeJourney creditHistory credits data deepview deepviewCta first getCode init link logout redeem referrals removeListener sendSMS setBranchViewData setIdentity track validateCode trackCommerceEvent logEvent".split(" "), 0); branch.init('key_live_ofxXr2qTrrU9NqURK8ZwEhknBxiI6KBm', {'no_journeys': true, 'disable_exit_animation': true, 'disable_entry_animation': true, 'tracking_disabled': false }, function(err, data) {});</script><script defer src="https://web.archive.org/web/20211201164814js_/https://static.cloudflareinsights.com/beacon.min.js/v64f9daad31f64f81be21cbef6184a5e31634941392597" integrity="" data-cf-beacon="{&quot;rayId&quot;:&quot;6b6dcd490c9e6453&quot;,&quot;token&quot;:&quot;0b5f665943484354a59c39c6833f7078&quot;,&quot;version&quot;:&quot;2021.11.0&quot;,&quot;si&quot;:100}" crossorigin="anonymous"></script> </body></html><!-- FILE ARCHIVED ON 16:48:14 Dec 01, 2021 AND RETRIEVED FROM THE INTERNET ARCHIVE ON 03:20:11 Feb 26, 2025. JAVASCRIPT APPENDED BY WAYBACK MACHINE, COPYRIGHT INTERNET ARCHIVE. ALL OTHER CONTENT MAY ALSO BE PROTECTED BY COPYRIGHT (17 U.S.C. SECTION 108(a)(3)). --> <!-- playback timings (ms): captures_list: 0.558 exclusion.robots: 0.028 exclusion.robots.policy: 0.017 esindex: 0.011 cdx.remote: 17.437 LoadShardBlock: 262.818 (3) PetaboxLoader3.datanode: 717.888 (4) PetaboxLoader3.resolve: 608.986 (3) load_resource: 1087.649 -->

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