CINXE.COM
Better Programming
<!DOCTYPE html><html xmlns:cc="http://creativecommons.org/ns#"><head prefix="og: http://ogp.me/ns# fb: http://ogp.me/ns/fb# medium-com: http://ogp.me/ns/fb/medium-com#"><meta http-equiv="Content-Type" content="text/html; charset=utf-8"><meta name="viewport" content="width=device-width, initial-scale=1.0, viewport-fit=contain"><title>Better Programming</title><link rel="canonical" href="https://betterprogramming.pub"><link id="feedLink" rel="alternate" type="application/rss+xml" title="RSS" href="https://betterprogramming.pub/feed"><meta name="robots" content="index,follow"><meta name="title" content="Better Programming"><meta name="referrer" content="unsafe-url"><meta name="description" content="Advice for programmers."><meta name="keywords" content="PROGRAMMING, ENGINEERING, SOFTWARE DEVELOPMENT, STARTUP, SOFTWARE ENGINEERING"><meta name="theme-color" content="#000000"><meta property="og:title" content="Better Programming"><meta property="twitter:title" content="Better Programming"><meta property="og:url" content="https://betterprogramming.pub/"><meta property="og:image" content="https://cdn-images-1.medium.com/max/1200/1*QNoA3XlXLHz22zQazc0syg.png"><meta property="fb:app_id" content="542599432471018"><meta property="og:description" content="Advice for programmers."><meta name="twitter:description" content="Advice for programmers."><meta name="twitter:image:src" content="https://cdn-images-1.medium.com/max/1200/1*QNoA3XlXLHz22zQazc0syg.png"><meta property="og:type" content="medium-com:collection"><meta name="twitter:card" content="summary_large_image"><meta property="medium-com:creator" content="https://betterprogramming.pub/@coachtony"><meta name="twitter:site" content="@BttrProgramming"><meta property="og:site_name" content="Better Programming"><meta name="twitter:app:name:iphone" content="Medium"><meta name="twitter:app:id:iphone" content="828256236"><meta name="twitter:app:url:iphone" content="medium://better-programming"><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://better-programming"><meta property="al:android:url" content="medium://better-programming"><meta property="al:web:url" content="https://betterprogramming.pub/"><link rel="search" type="application/opensearchdescription+xml" title="Medium" href="/osd.xml" /><link rel="alternate" href="android-app://com.medium.reader/https/medium.com/better-programming" /><script type="application/ld+json">{"@context": "http://schema.org", "@graph": [{"@type": "WebSite", "url": "https:\/\/betterprogramming.pub", "name": "Better Programming", "alternateName": "Advice for programmers."},{"@type": "Organization", "url": "https:\/\/betterprogramming.pub", "name": "Better Programming"}]}</script><link rel="stylesheet" href="https://cdn-static-1.medium.com/_/fp/css/main-branding-base.tWIMt8r3Nl52PPi9OfgcVw.12.css"><script>!function(n,e){var t,o,i,c=[],f={passive:!0,capture:!0},r=new Date,a="pointerup",u="pointercancel";function p(n,c){t||(t=c,o=n,i=new Date,w(e),s())}function s(){o>=0&&o<i-r&&(c.forEach(function(n){n(o,t)}),c=[])}function l(t){if(t.cancelable){var o=(t.timeStamp>1e12?new Date:performance.now())-t.timeStamp;"pointerdown"==t.type?function(t,o){function i(){p(t,o),r()}function c(){r()}function r(){e(a,i,f),e(u,c,f)}n(a,i,f),n(u,c,f)}(o,t):p(o,t)}}function w(n){["click","mousedown","keydown","touchstart","pointerdown"].forEach(function(e){n(e,l,f)})}w(n),self.perfMetrics=self.perfMetrics||{},self.perfMetrics.onFirstInputDelay=function(n){c.push(n),s()}}(addEventListener,removeEventListener);</script><script>document.domain = document.domain;</script><script>if (window.top !== window.self) window.location = 'about:blank';var OB_startTime = new Date().getTime(); var OB_loadErrors = []; function _onerror(e) { OB_loadErrors.push(e) }; if (document.addEventListener) document.addEventListener("error", _onerror, true); else if (document.attachEvent) document.attachEvent("onerror", _onerror); function _asyncScript(u) {var d = document, f = d.getElementsByTagName("script")[0], s = d.createElement("script"); s.type = "text/javascript"; s.async = true; s.src = u; f.parentNode.insertBefore(s, f);}function _asyncStyles(u) {var d = document, f = d.getElementsByTagName("script")[0], s = d.createElement("link"); s.rel = "stylesheet"; s.href = u; f.parentNode.insertBefore(s, f); return s}(new Image()).src = "/_/stat?event=pixel.load&origin=" + encodeURIComponent(location.origin);</script><script>window.ga=window.ga||function(){(ga.q=ga.q||[]).push(arguments)};ga.l=+new Date; ga("create", "G-7JY7T788PK", "auto", {"allowLinker": true, "legacyCookieDomain": window.location.hostname});ga("send", "pageview");</script><script async src="https://www.google-analytics.com/analytics.js"></script><script>(function () {var height = window.innerHeight || document.documentElement.clientHeight || document.body.clientHeight; var width = window.innerWidth || document.documentElement.clientWidth || document.body.clientWidth; document.write("<style>section.section-image--fullBleed.is-backgrounded {padding-top: " + Math.round(1.1 * height) + "px;}section.section-image--fullScreen.is-backgrounded, section.section-image--coverFade.is-backgrounded {min-height: " + height + "px; padding-top: " + Math.round(0.5 * height) + "px;}.u-height100vh {height: " + height + "px !important;}.u-height110vh {height: " + Math.round(1.1 * height) + "px !important;}.u-minHeight100vh {min-height: " + height + "px !important;}.u-maxHeight100vh {max-height: " + height + "px !important;}section.section-image--coverFade {height: " + height + "px;}.section-aspectRatioViewportPlaceholder, .section-aspectRatioViewportCropPlaceholder {max-height: " + height + "px;}.section-aspectRatioViewportBottomSpacer, .section-aspectRatioViewportBottomPlaceholder {max-height: " + Math.round(0.5 * height) + "px;}.zoomable:before {top: " + (-1 * height) + "px; left: " + (-1 * width) + "px; padding: " + height + "px " + width + "px;}</style>");})()</script><!--[if lt IE 9]><script charset="UTF-8" src="https://cdn-static-1.medium.com/_/fp/js/shiv.RI2ePTZ5gFmMgLzG5bEVAA.12.js"></script><![endif]--><link rel="icon" href="https://miro.medium.com/v2/5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19" class="js-favicon"><link rel="apple-touch-icon" sizes="152x152" href="https://cdn-images-1.medium.com/fit/c/304/304/1*QNoA3XlXLHz22zQazc0syg.png"><link rel="apple-touch-icon" sizes="120x120" href="https://cdn-images-1.medium.com/fit/c/240/240/1*QNoA3XlXLHz22zQazc0syg.png"><link rel="apple-touch-icon" sizes="76x76" href="https://cdn-images-1.medium.com/fit/c/152/152/1*QNoA3XlXLHz22zQazc0syg.png"><link rel="apple-touch-icon" sizes="60x60" href="https://cdn-images-1.medium.com/fit/c/120/120/1*QNoA3XlXLHz22zQazc0syg.png"><link rel="mask-icon" href="https://cdn-static-1.medium.com/_/fp/icons/monogram-mask.KPLCSFEZviQN0jQ7veN2RQ.12.svg" color="#171717"></head><body itemscope class=" browser-ie os-windows v-unbound v-glyph v-glyph--m2-unbound-source-serif-pro is-noJs"><script>document.body.className = document.body.className.replace(/(^|\s)is-noJs(\s|$)/, "$1is-js$2")</script><div class="site-main" id="container"><div class="butterBar butterBar--error"></div><div class="surface"><div id="prerendered" class="screenContent"><div class="metabar u-clearfix js-metabar"><div class="branch-journeys-top"></div><div class="js-metabarMiddle metabar-inner u-marginAuto u-maxWidth1032 u-flexCenter u-justifyContentSpaceBetween u-height65 u-xs-height56 u-paddingHorizontal20"><div class="metabar-block u-flex1 u-flexCenter"><div class="js-metabarLogoLeft"><a href="https://medium.com/" data-log-event="home" class="siteNav-logo u-fillBlack u-flex0 u-flexCenter u-paddingTop0"><span class="svgIcon svgIcon--wordmarkMedium svgIcon--120x26px u-flex"><svg class="svgIcon-use" width="120" height="26" ><path d="M29.57 1.404l.036-.008V1.12h-7.27l-6.75 15.979-6.75-15.98H1.003v.278l.035.008c1.327.302 2 .752 2 2.374v18.993c0 1.623-.676 2.073-2.003 2.374L1 25.153v.279h5.315v-.278l-.035-.008c-1.327-.302-2-.751-2-2.374V4.88l8.67 20.552h.492l8.924-21.125V23.24c-.114 1.282-.782 1.677-1.983 1.95l-.036.009v.275h9.259V25.2l-.036-.008c-1.203-.274-1.886-.67-2-1.95l-.006-19.464h.006c0-1.622.674-2.072 2-2.374zm4.23 12.582c.15-3.412 1.367-5.875 3.41-5.918.629.01 1.157.219 1.568.62.872.852 1.282 2.634 1.219 5.298h-6.198zm-.092.962h10.85v-.046c-.03-2.61-.78-4.64-2.228-6.033-1.25-1.204-3.103-1.867-5.048-1.867h-.043c-1.01 0-2.248.246-3.13.693a7.316 7.316 0 00-2.623 2.086c-1.185 1.479-1.903 3.477-2.078 5.724a13.717 13.717 0 00-.04.755c-.004.195-.005.39-.001.587.117 5.087 2.846 9.153 7.692 9.153 4.254 0 6.73-3.132 7.348-7.336l-.312-.11c-1.085 2.259-3.034 3.628-5.252 3.461-3.028-.228-5.347-3.32-5.137-7.066m23.122 6.893c-.356.85-1.099 1.319-2.094 1.319-.995 0-1.905-.689-2.552-1.939-.694-1.342-1.06-3.24-1.06-5.487 0-4.678 1.445-7.704 3.68-7.704.937 0 1.674.468 2.026 1.284v12.527zm7.198 3.335c-1.327-.316-2-.787-2-2.492V0l-8.062 2.392v.293l.05-.004c1.111-.09 1.866.064 2.304.472.343.32.51.809.51 1.498v3.11C56.033 7.25 55.088 7 53.94 7c-2.326 0-4.453.987-5.986 2.779-1.599 1.867-2.444 4.42-2.444 7.38 0 5.287 2.584 8.84 6.43 8.84 2.25 0 4.06-1.242 4.888-3.336v2.811h7.233v-.29l-.035-.008zM70.94 3.085c0-1.65-1.236-2.896-2.875-2.896-1.632 0-2.908 1.272-2.908 2.896 0 1.624 1.278 2.896 2.908 2.896 1.64 0 2.875-1.245 2.875-2.896zm1.903 22.092c-1.327-.316-2-.787-2-2.492h-.006V7.055l-7.234 2.092v.284l.043.004c1.566.14 1.994.683 1.994 2.525v13.515h7.24v-.29l-.037-.008zm18.536 0c-1.327-.316-2-.787-2-2.492V7.055L82.49 9.078v.285l.04.004c1.28.136 1.65.71 1.65 2.56v9.88c-.426.85-1.227 1.356-2.196 1.39-1.573 0-2.439-1.07-2.439-3.012V7.055l-7.234 2.092v.284l.044.004c1.565.14 1.994.683 1.994 2.525v8.362a9.443 9.443 0 00.15 1.741l.13.57C75.243 24.845 76.848 26 79.362 26c2.129 0 3.996-1.328 4.818-3.405v2.885h7.233v-.291l-.034-.012zm28.102.298v-.291l-.035-.009c-1.44-.334-2.001-.964-2.001-2.248V12.295C117.445 8.98 115.597 7 112.5 7c-2.257 0-4.16 1.314-4.893 3.36-.582-2.168-2.257-3.36-4.734-3.36-2.175 0-3.88 1.156-4.612 3.11V7.056l-7.233 2.006v.286l.043.004c1.547.138 1.994.697 1.994 2.492v13.631h6.75v-.29l-.037-.01c-1.148-.271-1.519-.767-1.519-2.04V10.95c.304-.715.917-1.562 2.127-1.562 1.504 0 2.266 1.05 2.266 3.116v12.972h6.751v-.29l-.035-.01c-1.149-.271-1.52-.767-1.52-2.04V12.294a7.107 7.107 0 00-.095-1.21c.322-.777.97-1.696 2.23-1.696 1.524 0 2.265 1.02 2.265 3.116v12.972h7.233z"/></svg></span><span class="u-textScreenReader">Homepage</span></a></div><div class="u-paddingLeft10 u-sm-show r-paddingRight10"><a href="https://rsci.app.link/?%24canonical_url=https%3A%2F%2Fmedium.com/better-programming%3F~feature=LoMobileNavBar&~channel=ShowCollectionHome&~stage=m2">Open in app</a></div></div><div class="metabar-block u-flex0 u-flexCenter"><div class="u-flexCenter u-height65 u-xs-height56"><div class="buttonSet buttonSet--wide u-lineHeightInherit"><a class="button button--primary button--chromeless u-accentColor--buttonNormal is-inSiteNavBar u-xs-hide js-signInButton" href="https://medium.com/m/signin?redirect=https%3A%2F%2Fbetterprogramming.pub%2F%3Fsource%3Duser_profile_page---------3-------------b892e7626234---------------&source=--------------------------nav_reg&operation=login" data-action="sign-in-prompt" data-redirect="https://betterprogramming.pub/?source=user_profile_page---------3-------------b892e7626234---------------" data-action-source="--------------------------nav_reg">Sign in</a><a class="button button--primary button--withChrome u-accentColor--buttonNormal is-inSiteNavBar js-signUpButton" href="https://medium.com/m/signin?redirect=https%3A%2F%2Fbetterprogramming.pub%2F%3Fsource%3Duser_profile_page---------3-------------b892e7626234---------------&source=--------------------------nav_reg&operation=register" data-action="sign-up-prompt" data-redirect="https://betterprogramming.pub/?source=user_profile_page---------3-------------b892e7626234---------------" data-action-source="--------------------------nav_reg">Get started</a></div></div></div></div></div><div class="metabar metabar--spacer js-metabarSpacer u-height65 u-xs-height56"></div><div class="collectionHeader js-collectionHeaderContainer u-relative collectionHeader--layoutSmall collectionHeader--alignmentLeft collectionHeader--withLogo collectionHeader--withoutBackground collectionHeader--colorBehaviorSubtle collectionHeader--withNavigation collectionHeader--editorLayoutLogo is-modeView is-whiteLabel"><div class="collectionHeader-aspectRatioTable"><div class="collectionHeader-aspectRatioContent u-backgroundSizeCover js-collectionHeaderBackground"><div class="collectionHeader-overlayBackground u-height100vh"></div><header class="collectionHeader-heroAndInlineNav u-borderBox u-maxWidth1072 u-paddingLeft20 u-paddingRight20 u-marginAuto u-foreground js-collectionHeader"><div class="collectionHeader-hero js-collectionHeaderHero u-clearfix"><div class="collectionHeader-heroInner"><div class="collectionHeader-logo js-collectionHeaderLogo" style="width: 240px; float: left;"><a class="link u-baseColor--link" href="https://betterprogramming.pub" title="Go to Better Programming" aria-label="Go to Better Programming" data-collection-slug="better-programming"><div class="u-relative u-marginAuto"><div style="padding-bottom: 13.636363636363637%"></div><img class="collectionHeader-logoImage js-collectionHeaderLogoImage" src="https://cdn-images-1.medium.com/max/480/1*7A4lpkuHgEyGrIYzfAj4dA@2x.png" data-image-id="1*7A4lpkuHgEyGrIYzfAj4dA@2x.png" data-width="528" data-height="72" /></div></a></div><div class="collectionHeader-nameAndDescription u-hide"><a class="link u-baseColor--link" href="https://betterprogramming.pub" title="Go to Better Programming" aria-label="Go to Better Programming" data-collection-slug="better-programming"><h1 class="collectionHeader-name js-collectionName">Better Programming</h1></a><h2 class="collectionHeader-description js-collectionDescription">Advice for programmers.</h2></div></div></div><nav class="collectionHeader-nav u-clearfix js-collectionHeaderNav u-lineHeight40 u-overflowHiddenY u-flex1"><div class="buttonSet u-flex1 u-noWrap u-overflowX u-paddingBottom100 u-xs-marginRight15"><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://betterprogramming.pub/about">About</a></li><li class="collectionHeader-navItem js-collectionNavItem u-inlineBlock u-fontSize13 u-textUppercase u-letterSpacing1px u-textColorNormal u-xs-paddingRight12 u-xs-marginRight0"><a class="link link--darken u-accentColor--textDarken link--noUnderline u-baseColor--link js-navItemLink" href="https://betterprogramming.pub/archive">Archive</a></li></div><div class="buttonSet u-textAlignRight u-marginLeft18 u-flex0 u-noWrap"><label class="button button--small button--chromeless button--withIcon button--withSvgIcon inputGroup u-sm-hide metabar-predictiveSearch u-baseColor--buttonNormal u-baseColor--placeholderNormal" title="Search"><span class="svgIcon svgIcon--search svgIcon--25px u-baseColor--iconLight"><svg class="svgIcon-use" width="25" height="25" ><path d="M20.067 18.933l-4.157-4.157a6 6 0 10-.884.884l4.157 4.157a.624.624 0 10.884-.884zM6.5 11c0-2.62 2.13-4.75 4.75-4.75S16 8.38 16 11s-2.13 4.75-4.75 4.75S6.5 13.62 6.5 11z"/></svg></span><input class="js-predictiveSearchInput textInput textInput--rounded textInput--darkText u-baseColor--textNormal textInput--transparent" type="search" placeholder="Search" required="true" data-collection-id="d0b105d10f0a" /></label><a class="button button--chromeless is-touchIconBlackPulse u-baseColor--buttonNormal button--withIcon button--withSvgIcon button--chromeless u-verticalAlignMiddle" href="https://twitter.com/BttrProgramming" title="Visit “Better Programming” on X" aria-label="Visit “Better Programming” on X" rel="me" target="_blank"><span class="button-defaultState"><span class="svgIcon svgIcon--twitter svgIcon--25px"><svg class="svgIcon-use" width="25" height="25" fill="none" ><path d="M14.215 11.3l5.764-6.7h-1.366l-5.005 5.818L9.611 4.6H5l6.045 8.798L5 20.424h1.366l5.286-6.144 4.221 6.144h4.61L14.216 11.3zm-1.871 2.175l-.612-.876-4.874-6.97h2.098l3.933 5.625.613.876 5.112 7.312h-2.098l-4.172-5.966z" fill="#242424"/></svg></span></span></a><button class="button button--primary button--smallest u-noUserSelect button--withChrome u-accentColor--buttonNormal button--followCollection js-followCollectionButton" data-action="sign-up-prompt" data-sign-in-action="toggle-subscribe-collection" data-requires-token="true" data-redirect="https://medium.com/_/subscribe/collection/better-programming" data-action-source="header----d0b105d10f0a----------------------follow_pub"><span class="button-label button-defaultState js-buttonLabel">Follow</span><span class="button-label button-activeState">Following</span></button></div></nav></header></div><div class="collectionHeader-aspectRatioCell"><div class="collectionHeader-aspectRatioFullWidth"></div></div></div></div><div class="u-marginBottom40 js-collectionStream"><div class="streamItem streamItem--section js-streamItem"><section class="u-marginTop30 u-xs-margin0 u-marginBottom15 u-maxWidth1032 u-sm-paddingLeft20 u-sm-paddingRight20 u-borderBox u-marginAuto"><header class="heading heading--borderedBottom u-fontSize18 u-contentSansThin" ><div class="u-clearfix"><div class="heading-content u-floatLeft"><span class="heading-title heading-title--dark heading-title--lineHeightTight u-fontSize18 u-contentSansThin">Latest</span></div></div></header><div class="row u-marginTop30 u-marginLeftNegative12 u-marginRightNegative12"><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight15 u-size8of12" data-source="collection_home---4------0-----------------------" data-post-id="bf37baef8f27" data-index="0"><div class="u-lineHeightBase postItem u-marginRight3"><a href="https://medium.com/better-programming/let-a-thousand-programming-publications-bloom-bf37baef8f27?source=collection_home---4------0-----------------------" data-action="open-post" data-action-value="https://medium.com/better-programming/let-a-thousand-programming-publications-bloom-bf37baef8f27?source=collection_home---4------0-----------------------" class="u-block u-xs-height170 u-height350 u-width100pct u-floatLeft u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/2000/1*tKikPWjE4MZ5WgdfZuyvEg.png"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Let a thousand programming publications bloom.</span></a></div></div><div class="col u-xs-marginBottom10 u-paddingLeft9 u-paddingRight12 u-paddingTop0 u-sm-paddingTop20 u-paddingBottom25 u-size4of12 u-xs-size12of12 u-marginBottom30"><a class="" href="https://medium.com/better-programming/let-a-thousand-programming-publications-bloom-bf37baef8f27?source=collection_home---4------0-----------------------" data-action-source="collection_home---4------0-----------------------" data-post-id="bf37baef8f27"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp4 u-fontSize30 u-size12of12 u-xs-size12of12 u-xs-fontSize24">Let a thousand programming publications bloom.</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">I’m putting Better Programming on hiatus to make room for other programming publications.</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://betterprogramming.pub/@coachtony" data-action="show-user-card" data-action-value="adeddd83f452" data-action-type="hover" data-user-id="adeddd83f452" data-collection-slug="better-programming" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*IU9RZXimpYZ5bjbsQHGsMg.png" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Tony Stubblebine"></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://betterprogramming.pub/@coachtony" data-action="show-user-card" data-action-value="adeddd83f452" data-action-type="hover" data-user-id="adeddd83f452" data-collection-slug="better-programming" dir="auto">Tony Stubblebine</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2023-11-10T18:18:10.890Z">Nov 10, 2023</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="6 min read"></span></div></div></div></div></div></div><div class="row u-marginTop15 u-marginLeftNegative12 u-marginRightNegative12"><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------1-----------------------" data-post-id="e1f66a3b0530" data-index="1"><div class="u-lineHeightBase postItem"><a href="https://medium.com/better-programming/automating-your-devops-writing-scripts-that-save-time-and-headaches-e1f66a3b0530?source=collection_home---4------1-----------------------" data-action="open-post" data-action-value="https://medium.com/better-programming/automating-your-devops-writing-scripts-that-save-time-and-headaches-e1f66a3b0530?source=collection_home---4------1-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/0*rYKCg6zXR4ibpKfI"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Automating Your DevOps: Writing Scripts that Save Time and Headaches</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/better-programming/automating-your-devops-writing-scripts-that-save-time-and-headaches-e1f66a3b0530?source=collection_home---4------1-----------------------" data-action-source="collection_home---4------1-----------------------" data-post-id="e1f66a3b0530"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Automating Your DevOps: Writing Scripts that Save Time and Headaches</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Or, how scripting revolutionized my workflow</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://betterprogramming.pub/@ulsc" data-action="show-user-card" data-action-value="f63e0edafeae" data-action-type="hover" data-user-id="f63e0edafeae" data-collection-slug="better-programming" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*5uVw7T-nTL4h22mLO9uWlQ.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Ulas Can Cengiz"></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://betterprogramming.pub/@ulsc" data-action="show-user-card" data-action-value="f63e0edafeae" data-action-type="hover" data-user-id="f63e0edafeae" data-collection-slug="better-programming" dir="auto">Ulas Can Cengiz</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2023-11-10T17:34:20.767Z">Nov 10, 2023</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="9 min read"></span><span class="u-paddingLeft4"><span class="svgIcon svgIcon--star svgIcon--15px"><svg class="svgIcon-use" width="15" height="15" ><path d="M7.438 2.324c.034-.099.09-.099.123 0l1.2 3.53a.29.29 0 00.26.19h3.884c.11 0 .127.049.038.111L9.8 8.327a.271.271 0 00-.099.291l1.2 3.53c.034.1-.011.131-.098.069l-3.142-2.18a.303.303 0 00-.32 0l-3.145 2.182c-.087.06-.132.03-.099-.068l1.2-3.53a.271.271 0 00-.098-.292L2.056 6.146c-.087-.06-.071-.112.038-.112h3.884a.29.29 0 00.26-.19l1.2-3.52z"/></svg></span></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------2-----------------------" data-post-id="c5f79fc8019e" data-index="2"><div class="u-lineHeightBase postItem"><a href="https://medium.com/better-programming/integrating-psychology-into-software-development-c5f79fc8019e?source=collection_home---4------2-----------------------" data-action="open-post" data-action-value="https://medium.com/better-programming/integrating-psychology-into-software-development-c5f79fc8019e?source=collection_home---4------2-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/0*YZT1r-TMIRks5bXk"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Integrating Psychology into Software Development</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/better-programming/integrating-psychology-into-software-development-c5f79fc8019e?source=collection_home---4------2-----------------------" data-action-source="collection_home---4------2-----------------------" data-post-id="c5f79fc8019e"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Integrating Psychology into Software Development</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Emotional Architecture in Software Design</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://betterprogramming.pub/@ulsc" data-action="show-user-card" data-action-value="f63e0edafeae" data-action-type="hover" data-user-id="f63e0edafeae" data-collection-slug="better-programming" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*5uVw7T-nTL4h22mLO9uWlQ.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Ulas Can Cengiz"></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://betterprogramming.pub/@ulsc" data-action="show-user-card" data-action-value="f63e0edafeae" data-action-type="hover" data-user-id="f63e0edafeae" data-collection-slug="better-programming" dir="auto">Ulas Can Cengiz</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2023-11-10T17:34:07.833Z">Nov 10, 2023</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="14 min read"></span><span class="u-paddingLeft4"><span class="svgIcon svgIcon--star svgIcon--15px"><svg class="svgIcon-use" width="15" height="15" ><path d="M7.438 2.324c.034-.099.09-.099.123 0l1.2 3.53a.29.29 0 00.26.19h3.884c.11 0 .127.049.038.111L9.8 8.327a.271.271 0 00-.099.291l1.2 3.53c.034.1-.011.131-.098.069l-3.142-2.18a.303.303 0 00-.32 0l-3.145 2.182c-.087.06-.132.03-.099-.068l1.2-3.53a.271.271 0 00-.098-.292L2.056 6.146c-.087-.06-.071-.112.038-.112h3.884a.29.29 0 00.26-.19l1.2-3.52z"/></svg></span></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------3-----------------------" data-post-id="8d81fccd8250" data-index="3"><div class="u-lineHeightBase postItem"><a href="https://medium.com/better-programming/webassembly-with-go-taking-web-apps-to-the-next-level-8d81fccd8250?source=collection_home---4------3-----------------------" data-action="open-post" data-action-value="https://medium.com/better-programming/webassembly-with-go-taking-web-apps-to-the-next-level-8d81fccd8250?source=collection_home---4------3-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/1*b4sFFT3X6e0dVCvKAAtMIg.png"); background-position: 50% 50% !important;"><span class="u-textScreenReader">WebAssembly with Go: Taking Web Apps to the Next Level</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/better-programming/webassembly-with-go-taking-web-apps-to-the-next-level-8d81fccd8250?source=collection_home---4------3-----------------------" data-action-source="collection_home---4------3-----------------------" data-post-id="8d81fccd8250"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">WebAssembly with Go: Taking Web Apps to the Next Level</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">You might’ve noticed the increasing chatter around WebAssembly (WASM) in the dev community. Its potential is vast, and we’ve found it…</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://betterprogramming.pub/@ege.aytin" data-action="show-user-card" data-action-value="640ffc0eea3d" data-action-type="hover" data-user-id="640ffc0eea3d" data-collection-slug="better-programming" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*RdNP0tCkDIFylUpov6P7iA.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Ege Aytin"></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://betterprogramming.pub/@ege.aytin" data-action="show-user-card" data-action-value="640ffc0eea3d" data-action-type="hover" data-user-id="640ffc0eea3d" data-collection-slug="better-programming" dir="auto">Ege Aytin</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2023-11-10T17:31:06.352Z">Nov 10, 2023</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="12 min read"></span></div></div></div></div></div></div></div><div class="row u-marginTop15 u-marginLeftNegative12 u-marginRightNegative12"><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------4-----------------------" data-post-id="b06825c299b8" data-index="4"><div class="u-lineHeightBase postItem"><a href="https://medium.com/better-programming/how-to-crush-api-dev-work-when-youre-100-remote-with-postman-b06825c299b8?source=collection_home---4------4-----------------------" data-action="open-post" data-action-value="https://medium.com/better-programming/how-to-crush-api-dev-work-when-youre-100-remote-with-postman-b06825c299b8?source=collection_home---4------4-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/1*7fQ4PVN_p9RSTKHHXE4q9A.jpeg"); background-position: 50% 50% !important;"><span class="u-textScreenReader">How to Crush API Dev Work when You’re 100% Remote with Postman</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/better-programming/how-to-crush-api-dev-work-when-youre-100-remote-with-postman-b06825c299b8?source=collection_home---4------4-----------------------" data-action-source="collection_home---4------4-----------------------" data-post-id="b06825c299b8"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">How to Crush API Dev Work when You’re 100% Remote with Postman</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">In a bit of a personal retrospective, I wanted to talk about how Postman has helped me to build thriving APIs and to succeed.</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://betterprogramming.pub/@johnjvester" data-action="show-user-card" data-action-value="643304666902" data-action-type="hover" data-user-id="643304666902" data-collection-slug="better-programming" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*m7SrFwN_X3zmBMOU" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of John Vester"></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://betterprogramming.pub/@johnjvester" data-action="show-user-card" data-action-value="643304666902" data-action-type="hover" data-user-id="643304666902" data-collection-slug="better-programming" dir="auto">John Vester</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2023-11-10T17:28:18.322Z">Nov 10, 2023</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="7 min read"></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------5-----------------------" data-post-id="696a0fbcfbd7" data-index="5"><div class="u-lineHeightBase postItem"><a href="https://medium.com/better-programming/resilience-in-the-face-of-rejection-lessons-from-losing-my-dream-job-696a0fbcfbd7?source=collection_home---4------5-----------------------" data-action="open-post" data-action-value="https://medium.com/better-programming/resilience-in-the-face-of-rejection-lessons-from-losing-my-dream-job-696a0fbcfbd7?source=collection_home---4------5-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/0*iX6mpcbAx8nGAFsR"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Resilience in the Face of Rejection: Lessons from Losing My Dream Job</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/better-programming/resilience-in-the-face-of-rejection-lessons-from-losing-my-dream-job-696a0fbcfbd7?source=collection_home---4------5-----------------------" data-action-source="collection_home---4------5-----------------------" data-post-id="696a0fbcfbd7"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Resilience in the Face of Rejection: Lessons from Losing My Dream Job</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">How to lose graciously and find the silver lining from the failure of a job interview</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://betterprogramming.pub/@laurabrewis95" data-action="show-user-card" data-action-value="47fe5f0f42db" data-action-type="hover" data-user-id="47fe5f0f42db" data-collection-slug="better-programming" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*YgSqkXsVQ96Dh8h3mDd05A.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Laura Brewis"></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://betterprogramming.pub/@laurabrewis95" data-action="show-user-card" data-action-value="47fe5f0f42db" data-action-type="hover" data-user-id="47fe5f0f42db" data-collection-slug="better-programming" dir="auto">Laura Brewis</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2023-11-10T17:28:01.295Z">Nov 10, 2023</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="5 min read"></span><span class="u-paddingLeft4"><span class="svgIcon svgIcon--star svgIcon--15px"><svg class="svgIcon-use" width="15" height="15" ><path d="M7.438 2.324c.034-.099.09-.099.123 0l1.2 3.53a.29.29 0 00.26.19h3.884c.11 0 .127.049.038.111L9.8 8.327a.271.271 0 00-.099.291l1.2 3.53c.034.1-.011.131-.098.069l-3.142-2.18a.303.303 0 00-.32 0l-3.145 2.182c-.087.06-.132.03-.099-.068l1.2-3.53a.271.271 0 00-.098-.292L2.056 6.146c-.087-.06-.071-.112.038-.112h3.884a.29.29 0 00.26-.19l1.2-3.52z"/></svg></span></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------6-----------------------" data-post-id="d36df47f051d" data-index="6"><div class="u-lineHeightBase postItem"><a href="https://medium.com/better-programming/what-isomorphic-types-are-and-why-you-might-need-them-developing-with-swift-d36df47f051d?source=collection_home---4------6-----------------------" data-action="open-post" data-action-value="https://medium.com/better-programming/what-isomorphic-types-are-and-why-you-might-need-them-developing-with-swift-d36df47f051d?source=collection_home---4------6-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/1*YJcmoAVcBtUeuKAQm3BQhA.png"); background-position: 50% 50% !important;"><span class="u-textScreenReader">What Isomorphic types are and why you might need them developing with Swift.</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/better-programming/what-isomorphic-types-are-and-why-you-might-need-them-developing-with-swift-d36df47f051d?source=collection_home---4------6-----------------------" data-action-source="collection_home---4------6-----------------------" data-post-id="d36df47f051d"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">What Isomorphic types are and why you might need them developing with Swift.</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">How can general math be useful in your daily development.</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://betterprogramming.pub/@aspteslia" data-action="show-user-card" data-action-value="48685a011a2f" data-action-type="hover" data-user-id="48685a011a2f" data-collection-slug="better-programming" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*_kmWJXfT0png1yTY" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Maksym Teslia"></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://betterprogramming.pub/@aspteslia" data-action="show-user-card" data-action-value="48685a011a2f" data-action-type="hover" data-user-id="48685a011a2f" data-collection-slug="better-programming" dir="auto">Maksym Teslia</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2023-11-10T17:27:51.075Z">Nov 10, 2023</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="7 min read"></span></div></div></div></div></div></div></div><div class="row u-marginTop15 u-marginLeftNegative12 u-marginRightNegative12"><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------7-----------------------" data-post-id="3049cf50a992" data-index="7"><div class="u-lineHeightBase postItem"><a href="https://medium.com/better-programming/exploring-rusts-option-type-a-guide-to-optional-value-handling-3049cf50a992?source=collection_home---4------7-----------------------" data-action="open-post" data-action-value="https://medium.com/better-programming/exploring-rusts-option-type-a-guide-to-optional-value-handling-3049cf50a992?source=collection_home---4------7-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/1*To_Msn7r7Qgt3ra2Sth7rQ.png"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Exploring Rust’s Option Type: A Guide to Optional Value Handling</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/better-programming/exploring-rusts-option-type-a-guide-to-optional-value-handling-3049cf50a992?source=collection_home---4------7-----------------------" data-action-source="collection_home---4------7-----------------------" data-post-id="3049cf50a992"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Exploring Rust’s Option Type: A Guide to Optional Value Handling</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">Understanding the Role of Option Type in Rust Programming</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://betterprogramming.pub/@amjohnphilip" data-action="show-user-card" data-action-value="c2cdb19c0977" data-action-type="hover" data-user-id="c2cdb19c0977" data-collection-slug="better-programming" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*9k_Wtvan_NRipcRnJR96Ww.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of John Philip"></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://betterprogramming.pub/@amjohnphilip" data-action="show-user-card" data-action-value="c2cdb19c0977" data-action-type="hover" data-user-id="c2cdb19c0977" data-collection-slug="better-programming" dir="auto">John Philip</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2023-11-10T17:25:05.789Z">Nov 10, 2023</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="4 min read"></span><span class="u-paddingLeft4"><span class="svgIcon svgIcon--star svgIcon--15px"><svg class="svgIcon-use" width="15" height="15" ><path d="M7.438 2.324c.034-.099.09-.099.123 0l1.2 3.53a.29.29 0 00.26.19h3.884c.11 0 .127.049.038.111L9.8 8.327a.271.271 0 00-.099.291l1.2 3.53c.034.1-.011.131-.098.069l-3.142-2.18a.303.303 0 00-.32 0l-3.145 2.182c-.087.06-.132.03-.099-.068l1.2-3.53a.271.271 0 00-.098-.292L2.056 6.146c-.087-.06-.071-.112.038-.112h3.884a.29.29 0 00.26-.19l1.2-3.52z"/></svg></span></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------8-----------------------" data-post-id="88a7c3b4f04d" data-index="8"><div class="u-lineHeightBase postItem"><a href="https://medium.com/better-programming/modern-data-is-a-painting-88a7c3b4f04d?source=collection_home---4------8-----------------------" data-action="open-post" data-action-value="https://medium.com/better-programming/modern-data-is-a-painting-88a7c3b4f04d?source=collection_home---4------8-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/1*R9bmoPZbBTr4JcpFdiYtxw.png"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Modern Data is a painting</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/better-programming/modern-data-is-a-painting-88a7c3b4f04d?source=collection_home---4------8-----------------------" data-action-source="collection_home---4------8-----------------------" data-post-id="88a7c3b4f04d"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Modern Data is a painting</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">An ultimate guide on modern visualization technologies</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://betterprogramming.pub/@ievgeniispitsyn" data-action="show-user-card" data-action-value="f19af9e1e50a" data-action-type="hover" data-user-id="f19af9e1e50a" data-collection-slug="better-programming" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/1*B6o2W607vHPs-8gmd87nCg.jpeg" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of Ievgenii Spitsyn"></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://betterprogramming.pub/@ievgeniispitsyn" data-action="show-user-card" data-action-value="f19af9e1e50a" data-action-type="hover" data-user-id="f19af9e1e50a" data-collection-slug="better-programming" dir="auto">Ievgenii Spitsyn</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2023-11-10T17:24:53.269Z">Nov 10, 2023</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="21 min read"></span><span class="u-paddingLeft4"><span class="svgIcon svgIcon--star svgIcon--15px"><svg class="svgIcon-use" width="15" height="15" ><path d="M7.438 2.324c.034-.099.09-.099.123 0l1.2 3.53a.29.29 0 00.26.19h3.884c.11 0 .127.049.038.111L9.8 8.327a.271.271 0 00-.099.291l1.2 3.53c.034.1-.011.131-.098.069l-3.142-2.18a.303.303 0 00-.32 0l-3.145 2.182c-.087.06-.132.03-.099-.068l1.2-3.53a.271.271 0 00-.098-.292L2.056 6.146c-.087-.06-.071-.112.038-.112h3.884a.29.29 0 00.26-.19l1.2-3.52z"/></svg></span></span></div></div></div></div></div></div><div class="col u-xs-size12of12 js-trackPostPresentation u-paddingLeft12 u-marginBottom15 u-paddingRight12 u-size4of12" data-source="collection_home---4------9-----------------------" data-post-id="e2d9f22927a4" data-index="9"><div class="u-lineHeightBase postItem"><a href="https://medium.com/better-programming/slack-notifications-for-alerting-via-aws-lambda-e2d9f22927a4?source=collection_home---4------9-----------------------" data-action="open-post" data-action-value="https://medium.com/better-programming/slack-notifications-for-alerting-via-aws-lambda-e2d9f22927a4?source=collection_home---4------9-----------------------" class="u-block u-xs-height170 u-height172 u-backgroundSizeCover u-backgroundOriginBorderBox u-backgroundColorGrayLight u-borderLighter" style="background-image: url("https://cdn-images-1.medium.com/max/800/1*TfMZYUxqj6SX8zgASsd8ZQ.png"); background-position: 50% 50% !important;"><span class="u-textScreenReader">Slack Notifications for Alerting (via AWS Lambda)</span></a></div><div class="col u-xs-marginBottom10 u-paddingLeft0 u-paddingRight0 u-paddingTop15 u-marginBottom30"><a class="" href="https://medium.com/better-programming/slack-notifications-for-alerting-via-aws-lambda-e2d9f22927a4?source=collection_home---4------9-----------------------" data-action-source="collection_home---4------9-----------------------" data-post-id="e2d9f22927a4"><h3 class="u-contentSansBold u-lineHeightTightest u-xs-fontSize24 u-paddingBottom2 u-paddingTop5 u-fontSize32"><div class="u-letterSpacingTight u-lineHeightTighter u-breakWord u-textOverflowEllipsis u-lineClamp3 u-fontSize24">Slack Notifications for Alerting (via AWS Lambda)</div></h3><div class="u-contentSansThin u-lineHeightBaseSans u-fontSize24 u-xs-fontSize18 u-textColorNormal u-baseColor--textNormal"><div class="u-fontSize18 u-letterSpacingTight u-lineHeightTight u-marginTop7 u-textColorNormal u-baseColor--textNormal">You might have encountered situations where you wanted to send status alerts or notifications to a Slack channel. When working with AWS…</div></div></a><div class="u-clearfix u-marginTop20"><div class="u-flexCenter"><div class="postMetaInline-avatar u-flex0"><a class="link u-baseColor--link avatar" href="https://betterprogramming.pub/@dementorwriter" data-action="show-user-card" data-action-value="3874ed904df9" data-action-type="hover" data-user-id="3874ed904df9" data-collection-slug="better-programming" dir="auto"><img src="https://cdn-images-1.medium.com/fit/c/72/72/0*12nGvZq88yC6mAgy" class="avatar-image u-size36x36 u-xs-size32x32" alt="Go to the profile of nhammad"></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://betterprogramming.pub/@dementorwriter" data-action="show-user-card" data-action-value="3874ed904df9" data-action-type="hover" data-user-id="3874ed904df9" data-collection-slug="better-programming" dir="auto">nhammad</a><div class="ui-caption u-fontSize12 u-baseColor--textNormal u-textColorNormal js-postMetaInlineSupplemental"><time datetime="2023-11-10T17:24:36.184Z">Nov 10, 2023</time><span class="middotDivider u-fontSize12"></span><span class="readingTime" title="4 min read"></span><span class="u-paddingLeft4"><span class="svgIcon svgIcon--star svgIcon--15px"><svg class="svgIcon-use" width="15" height="15" ><path d="M7.438 2.324c.034-.099.09-.099.123 0l1.2 3.53a.29.29 0 00.26.19h3.884c.11 0 .127.049.038.111L9.8 8.327a.271.271 0 00-.099.291l1.2 3.53c.034.1-.011.131-.098.069l-3.142-2.18a.303.303 0 00-.32 0l-3.145 2.182c-.087.06-.132.03-.099-.068l1.2-3.53a.271.271 0 00-.098-.292L2.056 6.146c-.087-.06-.071-.112.038-.112h3.884a.29.29 0 00.26-.19l1.2-3.52z"/></svg></span></span></div></div></div></div></div></div></div></section></div></div><style class="js-collectionStyle"> .u-accentColor--borderLight {border-color: #1A8917 !important;} .u-accentColor--borderNormal {border-color: #1A8917 !important;} .u-accentColor--borderDark {border-color: #0F730C !important;} .u-accentColor--iconLight .svgIcon,.u-accentColor--iconLight.svgIcon {fill: #1A8917 !important;} .u-accentColor--iconNormal .svgIcon,.u-accentColor--iconNormal.svgIcon {fill: #1A8917 !important;} .u-accentColor--iconDark .svgIcon,.u-accentColor--iconDark.svgIcon {fill: #0F730C !important;} .u-accentColor--textNormal {color: #0F730C !important;} .u-accentColor--hoverTextNormal:hover {color: #0F730C !important;} .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: #0F730C !important;} .u-accentColor--textDark {color: #0F730C !important;} .u-accentColor--backgroundLight {background-color: #1A8917 !important;} .u-accentColor--backgroundNormal {background-color: #1A8917 !important;} .u-accentColor--backgroundDark {background-color: #0F730C !important;} .u-accentColor--buttonDark {border-color: #0F730C !important; color: #0F730C !important;} .u-accentColor--buttonDark:hover {border-color: #0F730C !important;} .u-accentColor--buttonDark .icon:before,.u-accentColor--buttonDark .svgIcon{color: #0F730C !important; fill: #0F730C !important;} .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: #1A8917 !important; color: #0F730C !important;} .u-accentColor--buttonNormal:hover {border-color: #0F730C !important;} .u-accentColor--buttonNormal .icon:before,.u-accentColor--buttonNormal .svgIcon{color: #1A8917 !important; fill: #1A8917 !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: #0F730C !important; border-color: #0F730C !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: #1A8917 !important; border-color: #1A8917 !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: #0F730C !important;} .u-accentColor--highlightFaint {background-color: rgba(232, 243, 232, 1) !important;} .u-accentColor--highlightStrong.is-active .svgIcon {fill: rgba(163, 208, 162, 1) !important;} .postArticle.is-withAccentColors .markup--quote.is-other {background-color: rgba(232, 243, 232, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-other {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(232, 243, 232, 1), rgba(232, 243, 232, 1));} .postArticle.is-withAccentColors .markup--quote.is-me {background-color: rgba(209, 231, 209, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-me {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(209, 231, 209, 1), rgba(209, 231, 209, 1));} .postArticle.is-withAccentColors .markup--quote.is-targeted {background-color: rgba(163, 208, 162, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-targeted {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(163, 208, 162, 1), rgba(163, 208, 162, 1));} .postArticle.is-withAccentColors .markup--quote.is-selected {background-color: rgba(163, 208, 162, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--quote.is-selected {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(163, 208, 162, 1), rgba(163, 208, 162, 1));} .postArticle.is-withAccentColors .markup--highlight {background-color: rgba(163, 208, 162, 1) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .markup--highlight {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(163, 208, 162, 1), rgba(163, 208, 162, 1));}</style><style class="js-collectionStyleConstant">.u-imageBgColor {background-color: rgba(0, 0, 0, 0.24705882352941178);} .u-imageSpectrum .u-baseColor--borderLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;} .u-imageSpectrum .u-baseColor--borderNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-baseColor--borderDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--iconLight .svgIcon,.u-imageSpectrum .u-baseColor--iconLight.svgIcon {fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-baseColor--iconNormal .svgIcon,.u-imageSpectrum .u-baseColor--iconNormal.svgIcon {fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--iconDark .svgIcon,.u-imageSpectrum .u-baseColor--iconDark.svgIcon {fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--textNormal {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--textNormal.u-baseColor--textDarken:hover {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--textDark {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--textDarker {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--backgroundLight {background-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-baseColor--backgroundNormal {background-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--backgroundDark {background-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important; color: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-baseColor--buttonLight:hover {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;} .u-imageSpectrum .u-baseColor--buttonLight .icon:before,.u-imageSpectrum .u-baseColor--buttonLight .svgIcon {color: rgba(255, 255, 255, 0.8) !important; fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-baseColor--buttonDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonDark:hover {border-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonDark .icon:before,.u-imageSpectrum .u-baseColor--buttonDark .svgIcon {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--buttonNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important; color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--buttonNormal:hover {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--buttonNormal .icon:before,.u-imageSpectrum .u-baseColor--buttonNormal .svgIcon {color: rgba(255, 255, 255, 0.9490196078431372) !important; fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--buttonDark.button--filled,.u-imageSpectrum .u-baseColor--buttonDark.button--withChrome.is-active {background-color: rgba(255, 255, 255, 1) !important; border-color: rgba(255, 255, 255, 1) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-baseColor--buttonNormal.button--filled,.u-imageSpectrum .u-baseColor--buttonNormal.button--withChrome.is-active {background-color: rgba(255, 255, 255, 0.9490196078431372) !important; border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-baseColor--link {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-baseColor--link.link--darkenOnHover:hover {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--darken:hover,.u-imageSpectrum .u-baseColor--link.link--darken:focus,.u-imageSpectrum .u-baseColor--link.link--darken:active {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--dark {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--dark.link--darken:hover,.u-imageSpectrum .u-baseColor--link.link--dark.link--darken:focus,.u-imageSpectrum .u-baseColor--link.link--dark.link--darken:active {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--link.link--darker {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-baseColor--placeholderNormal ::-webkit-input-placeholder {color: rgba(255, 255, 255, 0.8);} .u-imageSpectrum .u-baseColor--placeholderNormal ::-moz-placeholder {color: rgba(255, 255, 255, 0.8);} .u-imageSpectrum .u-baseColor--placeholderNormal :-ms-input-placeholder {color: rgba(255, 255, 255, 0.8);} .u-imageSpectrum .ui-h1,.u-imageSpectrum .ui-h2,.u-imageSpectrum .ui-h3,.u-imageSpectrum .ui-h4,.u-imageSpectrum .ui-brand1,.u-imageSpectrum .ui-brand2,.u-imageSpectrum .ui-captionStrong {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .ui-body,.u-imageSpectrum .ui-caps {color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .ui-summary,.u-imageSpectrum .ui-caption {color: rgba(255, 255, 255, 0.8) !important; fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-accentColor--borderLight {border-color: rgba(255, 255, 255, 0.6980392156862745) !important;} .u-imageSpectrum .u-accentColor--borderNormal {border-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-accentColor--borderDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--iconLight .svgIcon,.u-imageSpectrum .u-accentColor--iconLight.svgIcon {fill: rgba(255, 255, 255, 0.8) !important;} .u-imageSpectrum .u-accentColor--iconNormal .svgIcon,.u-imageSpectrum .u-accentColor--iconNormal.svgIcon {fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--iconDark .svgIcon,.u-imageSpectrum .u-accentColor--iconDark.svgIcon {fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--textNormal {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--hoverTextNormal:hover {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--textDark {color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--backgroundLight {background-color: rgba(255, 255, 255, 0.8980392156862745) !important;} .u-imageSpectrum .u-accentColor--backgroundNormal {background-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--backgroundDark {background-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonDark {border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonDark:hover {border-color: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonDark .icon:before,.u-imageSpectrum .u-accentColor--buttonDark .svgIcon{color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-imageSpectrum .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: rgba(255, 255, 255, 0.8980392156862745) !important; color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--buttonNormal:hover {border-color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--buttonNormal .icon:before,.u-imageSpectrum .u-accentColor--buttonNormal .svgIcon{color: rgba(255, 255, 255, 0.9490196078431372) !important; fill: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--buttonNormal.button--filled .icon:before,.u-imageSpectrum .u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-accentColor--buttonDark.button--filled,.u-imageSpectrum .u-accentColor--buttonDark.button--withChrome.is-active,.u-imageSpectrum .u-accentColor--fillWhenActive.is-active {background-color: rgba(255, 255, 255, 1) !important; border-color: rgba(255, 255, 255, 1) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-imageSpectrum .u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: rgba(255, 255, 255, 0.9490196078431372) !important; border-color: rgba(255, 255, 255, 0.9490196078431372) !important; color: rgba(0, 0, 0, 0.24705882352941178) !important; fill: rgba(0, 0, 0, 0.24705882352941178) !important;} .u-imageSpectrum .postArticle.is-withAccentColors .markup--user,.u-imageSpectrum .postArticle.is-withAccentColors .markup--query {color: rgba(255, 255, 255, 0.9490196078431372) !important;} .u-imageSpectrum .u-accentColor--highlightFaint {background-color: rgba(255, 255, 255, 0.2) !important;} .u-imageSpectrum .u-accentColor--highlightStrong.is-active .svgIcon {fill: rgba(255, 255, 255, 0.6) !important;} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-other {background-color: rgba(255, 255, 255, 0.2) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-other {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.2), rgba(255, 255, 255, 0.2));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-me {background-color: rgba(255, 255, 255, 0.4) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-me {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.4), rgba(255, 255, 255, 0.4));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-targeted {background-color: rgba(255, 255, 255, 0.6) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-targeted {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-selected {background-color: rgba(255, 255, 255, 0.6) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--quote.is-selected {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));} .postArticle.is-withAccentColors .u-imageSpectrum .markup--highlight {background-color: rgba(255, 255, 255, 0.6) !important;} body.is-withMagicUnderlines .postArticle.is-withAccentColors .u-imageSpectrum .markup--highlight {background-color: transparent !important; background-image: linear-gradient(to bottom, rgba(255, 255, 255, 0.6), rgba(255, 255, 255, 0.6));}.u-resetSpectrum .u-tintBgColor {background-color: rgba(255, 255, 255, 1) !important;}.u-resetSpectrum .u-tintBgColor .u-fadeLeft:before {background-image: linear-gradient(to right, rgba(255, 255, 255, 1) 0%, rgba(255, 255, 255, 0) 100%) !important;}.u-resetSpectrum .u-tintBgColor .u-fadeRight:after {background-image: linear-gradient(to right, rgba(255, 255, 255, 0) 0%, rgba(255, 255, 255, 1) 100%) !important;} .u-resetSpectrum .u-baseColor--borderLight {border-color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--borderNormal {border-color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--borderDark {border-color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--iconLight .svgIcon,.u-resetSpectrum .u-baseColor--iconLight.svgIcon {fill: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--iconNormal .svgIcon,.u-resetSpectrum .u-baseColor--iconNormal.svgIcon {fill: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--iconDark .svgIcon,.u-resetSpectrum .u-baseColor--iconDark.svgIcon {fill: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--textNormal {color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--textNormal.u-baseColor--textDarken:hover {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--textDark {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--textDarker {color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--backgroundLight {background-color: rgba(0, 0, 0, 0.09803921568627451) !important;} .u-resetSpectrum .u-baseColor--backgroundNormal {background-color: rgba(0, 0, 0, 0.2) !important;} .u-resetSpectrum .u-baseColor--backgroundDark {background-color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonLight {border-color: rgba(0, 0, 0, 0.2980392156862745) !important; color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonLight:hover {border-color: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonLight .icon:before,.u-resetSpectrum .u-baseColor--buttonLight .svgIcon {color: rgba(0, 0, 0, 0.2980392156862745) !important; fill: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonDark {border-color: rgba(0, 0, 0, 0.6) !important; color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--buttonDark:hover {border-color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--buttonDark .icon:before,.u-resetSpectrum .u-baseColor--buttonDark .svgIcon {color: rgba(0, 0, 0, 0.6) !important; fill: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--buttonNormal {border-color: rgba(0, 0, 0, 0.4980392156862745) !important; color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonNormal:hover {border-color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--buttonNormal .icon:before,.u-resetSpectrum .u-baseColor--buttonNormal .svgIcon {color: rgba(0, 0, 0, 0.4980392156862745) !important; fill: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--buttonDark.button--filled,.u-resetSpectrum .u-baseColor--buttonDark.button--withChrome.is-active {background-color: rgba(0, 0, 0, 0.2980392156862745) !important; border-color: rgba(0, 0, 0, 0.2980392156862745) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-baseColor--buttonNormal.button--filled,.u-resetSpectrum .u-baseColor--buttonNormal.button--withChrome.is-active {background-color: rgba(0, 0, 0, 0.2) !important; border-color: rgba(0, 0, 0, 0.2) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-baseColor--link {color: rgba(0, 0, 0, 0.4980392156862745) !important;} .u-resetSpectrum .u-baseColor--link.link--darkenOnHover:hover {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--link.link--darken:hover,.u-resetSpectrum .u-baseColor--link.link--darken:focus,.u-resetSpectrum .u-baseColor--link.link--darken:active {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--link.link--dark {color: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .u-baseColor--link.link--dark.link--darken:hover,.u-resetSpectrum .u-baseColor--link.link--dark.link--darken:focus,.u-resetSpectrum .u-baseColor--link.link--dark.link--darken:active {color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--link.link--darker {color: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .u-baseColor--placeholderNormal ::-webkit-input-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);} .u-resetSpectrum .u-baseColor--placeholderNormal ::-moz-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);} .u-resetSpectrum .u-baseColor--placeholderNormal :-ms-input-placeholder {color: rgba(0, 0, 0, 0.2980392156862745);} .u-resetSpectrum .ui-h1,.u-resetSpectrum .ui-h2,.u-resetSpectrum .ui-h3,.u-resetSpectrum .ui-h4,.u-resetSpectrum .ui-brand1,.u-resetSpectrum .ui-brand2,.u-resetSpectrum .ui-captionStrong {color: rgba(0, 0, 0, 0.8) !important; fill: rgba(0, 0, 0, 0.8) !important;} .u-resetSpectrum .ui-body,.u-resetSpectrum .ui-caps {color: rgba(0, 0, 0, 0.6) !important; fill: rgba(0, 0, 0, 0.6) !important;} .u-resetSpectrum .ui-summary,.u-resetSpectrum .ui-caption {color: rgba(0, 0, 0, 0.2980392156862745) !important; fill: rgba(0, 0, 0, 0.2980392156862745) !important;} .u-resetSpectrum .u-accentColor--borderLight {border-color: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--borderNormal {border-color: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--borderDark {border-color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--iconLight .svgIcon,.u-resetSpectrum .u-accentColor--iconLight.svgIcon {fill: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--iconNormal .svgIcon,.u-resetSpectrum .u-accentColor--iconNormal.svgIcon {fill: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--iconDark .svgIcon,.u-resetSpectrum .u-accentColor--iconDark.svgIcon {fill: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--textNormal {color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--hoverTextNormal:hover {color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--textNormal.u-accentColor--textDarken:hover {color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--textDark {color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--backgroundLight {background-color: rgba(26, 137, 23, 1) !important;} .u-resetSpectrum .u-accentColor--backgroundNormal {background-color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--backgroundDark {background-color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark {border-color: rgba(17, 128, 14, 1) !important; color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark:hover {border-color: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark .icon:before,.u-resetSpectrum .u-accentColor--buttonDark .svgIcon{color: rgba(15, 115, 12, 1) !important; fill: rgba(15, 115, 12, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal:not(.clapButton--largePill) {border-color: rgba(26, 137, 23, 1) !important; color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal:hover {border-color: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal .icon:before,.u-resetSpectrum .u-accentColor--buttonNormal .svgIcon{color: rgba(17, 128, 14, 1) !important; fill: rgba(17, 128, 14, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal.button--filled .icon:before,.u-resetSpectrum .u-accentColor--buttonNormal.button--filled .svgIcon{color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-accentColor--buttonDark.button--filled,.u-resetSpectrum .u-accentColor--buttonDark.button--withChrome.is-active,.u-resetSpectrum .u-accentColor--fillWhenActive.is-active {background-color: rgba(15, 115, 12, 1) !important; border-color: rgba(15, 115, 12, 1) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .u-accentColor--buttonNormal.button--filled:not(.clapButton--largePill),.u-resetSpectrum .u-accentColor--buttonNormal.button--withChrome.is-active:not(.clapButton--largePill) {background-color: rgba(17, 128, 14, 1) !important; border-color: rgba(17, 128, 14, 1) !important; color: rgba(255, 255, 255, 1) !important; fill: rgba(255, 255, 255, 1) !important;} .u-resetSpectrum .postArticle.is-withAccentColors .markup--user,.u-resetSpectrum .postArticle.is-withAccentColors .markup--query {color: rgba(17, 128, 14, 1) !important;}</style><div class="js-collectionFooter u-hide"><div class="container u-maxWidth1040"><div class="u-marginTop10 u-paddingTop10 u-paddingBottom30 u-borderTopLighter"><div class="linkSet u-clearfix"><div class="u-floatRight u-textColorNormal u-baseColor--textNormal u-xs-floatLeft"><a class="button button--chromeless u-baseColor--buttonNormal u-marginLeft15 u-lineHeight35 u-xs-block u-xs-marginLeft0" href="https://betterprogramming.pub/about" title="About Better Programming" aria-label="About Better Programming" data-collection-slug="better-programming">About Better Programming</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://betterprogramming.pub/latest" title="Latest Stories for Better Programming" aria-label="Latest Stories for Better Programming" data-collection-slug="better-programming">Latest Stories</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://betterprogramming.pub/archive" title="Archive for Better Programming" aria-label="Archive for Better Programming" data-collection-slug="better-programming">Archive</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://medium.com/about">About Medium</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://policy.medium.com/medium-terms-of-service-9db0094a1e0f">Terms</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://policy.medium.com/medium-privacy-policy-f03bf92035c9">Privacy</a><span class="middotDivider u-xs-hide"></span><a class="button button--chromeless u-baseColor--buttonNormal u-lineHeight35 u-xs-block" href="https://medium.com/business">Teams</a></div></div></div></div></div></div></div></div><div class="loadingBar"></div><script>// <![CDATA[ window["obvInit"] = function (opt_embedded) {window["obvInit"]["embedded"] = opt_embedded; window["obvInit"]["ready"] = true;} // ]]></script><script>// <![CDATA[ var GLOBALS = {"audioUrl":"https://d1fcbxp97j4nb2.cloudfront.net","baseUrl":"https://betterprogramming.pub","buildLabel":"20250214-1839-root","currentUser":{"userId":"lo_754bb910ba44","isVerified":false,"subscriberEmail":"","hasPastMemberships":false,"isEnrolledInHightower":false,"isEligibleForHightower":true,"hightowerLastLockedAt":0,"isWriterProgramEnrolled":true,"isWriterProgramInvited":false,"isWriterProgramOptedOut":false,"writerProgramVersion":0,"writerProgramEnrolledAt":0,"friendLinkOnboarding":0,"hasAdditionalUnlocks":false,"hasApiAccess":false,"writerProgramDistributionSettingOptedIn":false,"isSuspended":false,"collectionOnboardingSeen":0,"atsQualifiedAt":0},"currentUserHasUnverifiedEmail":false,"isAuthenticated":false,"isCurrentUserVerified":false,"miroUrl":"https://cdn-images-1.medium.com","moduleUrls":{"base":"https://cdn-static-1.medium.com/_/fp/gen-js/main-base.bundle.8Tcu27LFq3PCOR9WxTangw.12.js","common-async":"https://cdn-static-1.medium.com/_/fp/gen-js/main-common-async.bundle.OeYcXrNwP1RO6In97YcKLQ.12.js","hightower":"https://cdn-static-1.medium.com/_/fp/gen-js/main-hightower.bundle.wCbOa67hZjl5Sam6zzVFnA.12.js","home-screens":"https://cdn-static-1.medium.com/_/fp/gen-js/main-home-screens.bundle.tTmySBFexDB1lciGURkN8g.12.js","misc-screens":"https://cdn-static-1.medium.com/_/fp/gen-js/main-misc-screens.bundle.a_EBqZVM6AyX_Kp1jlxGyQ.12.js","notes":"https://cdn-static-1.medium.com/_/fp/gen-js/main-notes.bundle.-oShrzSeUmNJS3K6rx04MA.12.js","payments":"https://cdn-static-1.medium.com/_/fp/gen-js/main-payments.bundle.P8k9CfZ1LzppHTJYwJD_Ig.12.js","posters":"https://cdn-static-1.medium.com/_/fp/gen-js/main-posters.bundle.9h8MreH1W2quy7BlStgo8w.12.js","power-readers":"https://cdn-static-1.medium.com/_/fp/gen-js/main-power-readers.bundle.BeGFKpJATbmOvbKtPqdULA.12.js","pubs":"https://cdn-static-1.medium.com/_/fp/gen-js/main-pubs.bundle.7zPJu_iPvZQ7WmBm5quNMw.12.js","stats":"https://cdn-static-1.medium.com/_/fp/gen-js/main-stats.bundle.JdLpnwrzm9Rc1drxpYremQ.12.js"},"previewConfig":{"weightThreshold":1,"weightImageParagraph":0.51,"weightIframeParagraph":0.8,"weightTextParagraph":0.08,"weightEmptyParagraph":0,"weightP":0.003,"weightH":0.005,"weightBq":0.003,"minPTextLength":60,"truncateBoundaryChars":20,"detectTitle":true,"detectTitleLevThreshold":0.15},"productName":"Medium","supportsEdit":false,"termsUrl":"//policy.medium.com/medium-terms-of-service-9db0094a1e0f","textshotHost":"textshot.textshot-production.svc.cluster.local","transactionId":"1739786134457:e6499a6896b4","useragent":{"browser":"ie","family":"ie","os":"windows","version":7,"supportsDesktopEdit":false,"supportsInteract":false,"supportsView":true,"isMobile":false,"isTablet":false,"isNative":false,"supportsFileAPI":false,"isTier1":false,"clientVersion":"","clientChannel":"","supportsRealScrollEvents":false,"supportsVhUnits":false,"ruinsViewportSections":false,"supportsHtml5Video":false,"supportsMagicUnderlines":false,"isWebView":false,"isFacebookWebView":false,"supportsProgressiveMedia":false,"supportsPromotedPosts":true,"isBot":false,"isNativeIphone":false,"supportsCssVariables":false,"supportsVideoSections":true,"emojiSupportLevel":1,"isSearchBot":false,"isSyndicationBot":false,"isNativeAndroid":false,"isNativeIos":false,"isSeoAuditBot":false,"isInternalApp":false,"supportsApplePay":false,"supportsScrollableMetabar":false},"variants":{"allow_access":true,"allow_signup":true,"allow_test_auth":"disallow","android_enable_editor_new_publishing_flow":true,"android_enable_friend_links_creation":true,"android_enable_friend_links_postpage_banners":true,"android_enable_image_sharer":true,"android_enable_lists_v2":true,"android_enable_syntax_highlight":true,"android_enable_topic_portals":true,"android_rating_prompt_stories_read_threshold":2,"android_two_hour_refresh":true,"available_annual_plan":"2c754bcc2995","available_annual_premium_plan":"4a442ace1476","available_monthly_plan":"60e220181034","available_monthly_premium_plan":"12a660186432","browsable_stream_config_bucket":"curated-topics","can_receive_tips_v0":true,"can_send_tips_v0":true,"coronavirus_topic_recirc":true,"disable_partner_program_enrollment":true,"enable_abandoned_cart_promotion_email":true,"enable_abandoned_paywall_email_experiment":"experiment","enable_abandoned_paywall_promotion_email":true,"enable_android_dynamic_aspirational_paywall":true,"enable_android_dynamic_programming_paywall":true,"enable_android_miro_v2":true,"enable_android_offline_reading":true,"enable_android_verified_author":true,"enable_app_flirty_thirty":true,"enable_apple_sign_in":true,"enable_apple_webhook":true,"enable_aurora_pub_follower_page":true,"enable_author_cards":true,"enable_author_cards_byline":true,"enable_auto_follow_on_subscribe":true,"enable_automod":true,"enable_bg_post_post":true,"enable_boost_experiment":"control","enable_boost_nia_v01":true,"enable_braintree_apple_pay":true,"enable_braintree_client":true,"enable_braintree_google_pay":true,"enable_braintree_integration":true,"enable_braintree_paypal":true,"enable_braintree_trial_membership":true,"enable_braintree_webhook":true,"enable_branch_io":true,"enable_cache_less_following_feed":true,"enable_cancellation_discount_v1_1":true,"enable_cancellation_discount_v1_email":true,"enable_configure_pronouns":true,"enable_conversion_model_v2":"group_2","enable_conversion_ranker_v2":"control","enable_creator_welcome_email":true,"enable_deprecate_legacy_providers_v3":true,"enable_deviant_get_variant_flag_from_medium2":true,"enable_diversification_rex":true,"enable_engagement_service_publish_response":true,"enable_entities_to_follow_v2":true,"enable_eventstats_event_processing":true,"enable_footer_app_buttons":true,"enable_google_one_tap":true,"enable_google_webhook":true,"enable_group_gifting":true,"enable_hybrid_ranking_model":"experiment","enable_iceland_forced_android":true,"enable_import":true,"enable_intrinsic_automatic_actions":true,"enable_ios_autorefresh":true,"enable_ios_dynamic_paywall_aspiriational":true,"enable_ios_dynamic_paywall_programming":true,"enable_ios_easy_resubscribe":true,"enable_ios_offline_reading":true,"enable_legacy_feed_in_iceland":true,"enable_lite_archive_page":true,"enable_lite_continue_this_thread":true,"enable_lite_homepage":true,"enable_lite_response_markup":true,"enable_lite_server_upstream_deadlines":true,"enable_lo_homepage":"control","enable_maim_the_meter":true,"enable_marketing_emails":true,"enable_mastodon_avatar_upload":true,"enable_mastodon_for_members":true,"enable_mastodon_for_members_username_selection":true,"enable_medium2_kbfd":true,"enable_medium_com_canonical_urls":true,"enable_members_only_audio":true,"enable_ml_rank_rex_anno":true,"enable_moc_load_processor_all_recs_surfaces":true,"enable_moc_load_processor_c":true,"enable_moc_load_processor_first_story":true,"enable_new_manage_membership_flow":true,"enable_new_stripe_customers":true,"enable_newsletter_lo_flow_custom_domains":true,"enable_pill_based_home_feed":true,"enable_plans_page_branding":"control","enable_plans_page_branding_v2":"control","enable_plans_page_payment_form":"group_1","enable_post_bottom_responses":true,"enable_post_bottom_responses_input":true,"enable_post_bottom_responses_native":true,"enable_post_publish_permission_check":true,"enable_pp_country_expansion":true,"enable_pp_v4":true,"enable_pre_pp_v4":true,"enable_premium_tier":true,"enable_premium_tier_badge":true,"enable_pub_featuring":true,"enable_pub_featuring_post_page_label":true,"enable_pub_featuring_stats":true,"enable_ranker_v10":"control","enable_recaptcha_enterprise":true,"enable_recirc_model":true,"enable_recommended_publishers_query":true,"enable_rex_aggregator_v2":true,"enable_rex_new_push_notification_endpoint":true,"enable_rex_reading_history":true,"enable_rito_upstream_deadlines":true,"enable_seamless_social_sharing":true,"enable_see_pronouns":true,"enable_sharer_create_post_share_key":true,"enable_sharer_validate_post_share_key":true,"enable_simplified_digest_v2_b":true,"enable_speechify_ios":true,"enable_speechify_widget":true,"enable_sprig":true,"enable_starspace":true,"enable_susi_redesign_android":true,"enable_susi_redesign_ios":true,"enable_switch_plan_premium_tier":true,"enable_tag_recs":true,"enable_tick_landing_page":true,"enable_tipping_v0_android":true,"enable_tipping_v0_ios":true,"enable_tribute_landing_page":true,"enable_trust_service_recaptcha":true,"enable_update_explore_wtf":true,"enable_update_topic_portals_wtf":true,"enable_updated_pub_recs_ui":true,"enable_verifications_service":true,"enable_winback_promotion_email":true,"get_highlights_from_engagement":true,"glyph_font_set":"m2-unbound-source-serif-pro","goliath_externalsearch_enable_comment_deindexation":true,"ios_display_paywall_after_onboarding":true,"ios_enable_friend_links_creation":true,"ios_enable_friend_links_postpage_banners":true,"ios_enable_home_post_menu":true,"ios_enable_lock_responses":true,"ios_enable_verified_book_author":true,"ios_iceland_nux":true,"ios_in_app_free_trial":true,"ios_remove_twitter_onboarding_step":true,"ios_social_share_sheet":true,"limit_post_referrers":true,"limit_user_follows":true,"mobile_custom_app_icon":true,"num_post_bottom_responses_to_show":3,"onboarding_tags_from_top_views":true,"reader_fair_distribution_non_qp":true,"redefined_top_posts":true,"reengagement_notification_duration":3,"rex_generator_max_candidates":1000,"signin_services":"twitter,facebook,google,email,google-fastidv,google-one-tap,apple","signup_services":"twitter,facebook,google,email,google-fastidv,google-one-tap,apple","skip_fs_cache_user_vals":true},"xsrfToken":"","iosAppId":"828256236","supportEmail":"yourfriends@medium.com","fp":{"/icons/monogram-mask.svg":"https://cdn-static-1.medium.com/_/fp/icons/monogram-mask.KPLCSFEZviQN0jQ7veN2RQ.12.svg","/icons/favicon-medium-editor.ico":"https://cdn-static-1.medium.com/_/fp/icons/favicon-medium-editor.PiakrZWB7Yb80quUVQWM6g.12.ico"},"authBaseUrl":"https://medium.com","imageUploadSizeMb":25,"isAuthDomainRequest":false,"domainCollectionSlug":"better-programming","algoliaApiEndpoint":"https://MQ57UUUQZ2-dsn.algolia.net","algoliaAppId":"MQ57UUUQZ2","algoliaSearchOnlyApiKey":"394474ced050e3911ae2249ecc774921","iosAppStoreUrl":"https://itunes.apple.com/app/medium-everyones-stories/id828256236?pt=698524&mt=8","iosAppLinkBaseUrl":"medium:","algoliaIndexPrefix":"medium_","androidPlayStoreUrl":"https://play.google.com/store/apps/details?id=com.medium.reader","googleClientId":"216296035834-k1k6qe060s2tp2a2jam4ljdcms00sttg.apps.googleusercontent.com","androidPackage":"com.medium.reader","androidPlayStoreMarketScheme":"market://details?id=com.medium.reader","googleAuthUri":"https://accounts.google.com/o/oauth2/auth","androidScheme":"medium","layoutData":{"useDynamicScripts":false,"googleAnalyticsTrackingCode":"G-7JY7T788PK","jsShivUrl":"https://cdn-static-1.medium.com/_/fp/js/shiv.RI2ePTZ5gFmMgLzG5bEVAA.12.js","useDynamicCss":false,"faviconUrl":"https://miro.medium.com/v2/5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19","faviconImageId":"5d8de952517e8160e40ef9841c781cdc14a5db313057fa3c3de41c6f5b494b19","fontSets":[{"id":8,"url":"https://glyph.medium.com/css/e/sr/latin/e/ssr/latin/e/ssb/latin/m2-unbound-source-serif-pro.css"},{"id":11,"url":"https://glyph.medium.com/css/m2-unbound-source-serif-pro.css"},{"id":9,"url":"https://glyph.medium.com/css/mkt.css"}],"glyphUrl":"https://glyph.medium.com"},"authBaseUrlRev":"moc.muidem//:sptth","stripePublishableKey":"pk_live_7FReX44VnNIInZwrIIx6ghjl","archiveUploadSizeMb":100,"previewConfig2":{"weightThreshold":1,"weightImageParagraph":0.05,"raiseImage":true,"enforceHeaderHierarchy":true,"isImageInsetRight":true},"isAmp":false,"iosScheme":"medium","facebook":{"key":"542599432471018","namespace":"medium-com","scope":{"default":["public_profile","email"],"connect":["public_profile","email"],"login":["public_profile","email"],"share":["public_profile","email"]}},"memberContentTopicId":"13d7efd82fb2","audioContentTopicId":"3792abbd134","isDoNotAuth":false,"buggle":{"videoUrl":"https://cdn-videos-1.medium.com","audioUrl":"https://cdn-audio-1.medium.com"},"referrerType":5,"partnerProgramEmail":"partnerprogram@medium.com","recaptchaKey":"6Lfc37IUAAAAAKGGtC6rLS13R1Hrw_BqADfS1LRk","countryCode":"SG","bypassMeter":false,"branchKey":"key_live_ofxXr2qTrrU9NqURK8ZwEhknBxiI6KBm","paypal":{"clientMode":"production","oneYearGift":{"name":"Medium Membership (1 Year, Digital Gift Code)","description":"Unlimited access to the best and brightest stories on Medium. Gift codes can be redeemed at medium.com/redeem.","price":"50.00","currency":"USD","sku":"membership-gift-1-yr"}},"collectionConfig":{"mediumOwnedAndOperatedCollectionIds":["8a9336e5bb4","b7e45b22fec3","193b68bd4fba","8d6b8a439e32","54c98c43354d","3f6ecf56618","d944778ce714","92d2092dc598","ae2a65f35510","1285ba81cada","544c7006046e","fc8964313712","40187e704f1c","88d9857e584e","7b6769f2748b","bcc38c8f6edf","cef6983b292","cb8577c9149e","444d13b52878","713d7dbc99b0","ef8e90590e66","191186aaafa0","55760f21cdc5","9dc80918cc93","bdc4052bbdba","8ccfed20cbb2"]},"bypassMeterWithShareKey":false,"recaptcha3Key":"6Lf8R9wUAAAAABMI_85Wb8melS7Zj6ziuf99Yot5","braintreeClientKey":"production_zjkj96jm_m56f8fqpf7ngnrd4","cdcMessaging":[{"text":"For more information on the novel coronavirus and Covid-19, visit ","href":"","type":"text","start":0,"end":0},{"text":"cdc.gov","href":"https://www.cdc.gov/coronavirus/2019-nCoV","type":"link","start":66,"end":73},{"text":".","href":"","type":"text","start":0,"end":0}],"braintree":{"merchantId":"m56f8fqpf7ngnrd4"},"diagnostics":{},"domain":"medium.com"} // ]]></script><script charset="UTF-8" src="https://cdn-static-1.medium.com/_/fp/gen-js/main-base.bundle.8Tcu27LFq3PCOR9WxTangw.12.js" async></script><script>// <![CDATA[ window["obvInit"]({"references":{"Collection":{"d0b105d10f0a":{"id":"d0b105d10f0a","name":"Better Programming","slug":"better-programming","tags":["PROGRAMMING","ENGINEERING","SOFTWARE DEVELOPMENT","STARTUP","SOFTWARE ENGINEERING"],"creatorId":"adeddd83f452","description":"Advice for programmers.","shortDescription":"Advice for programmers.","image":{"imageId":"1*QNoA3XlXLHz22zQazc0syg.png","filter":"","backgroundSize":"","originalWidth":1024,"originalHeight":1024,"strategy":"resample","height":0,"width":0},"metadata":{"followerCount":220772,"activeAt":1699640290990},"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":"1*S6X0W_XVeBUPe2Mz0hrufA.png","filter":"","backgroundSize":"","originalWidth":3807,"originalHeight":519,"strategy":"resample","height":0,"width":0},"twitterUsername":"BttrProgramming","collectionMastheadId":"15cd9b0a62b8","domain":"betterprogramming.pub","sections":[{"type":2,"collectionHeaderMetadata":{"backgroundImage":{},"logoImage":{"id":"1*7A4lpkuHgEyGrIYzfAj4dA@2x.png","originalWidth":528,"originalHeight":72,"alt":"Better Programming"},"alignment":2,"layout":4}},{"type":1,"postListMetadata":{"source":1,"layout":4,"number":10,"postIds":[],"sectionHeader":"Latest"}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":8,"postIds":["44590705efb4","7f90bfedd775","98ac5b405605","f64a89e9c718","cbe22ff3cd47","6feb2a9e0422","d9e02fec39d0","b9b98b37d57a"],"sectionHeader":"From the Archives"}},{"type":1,"postListMetadata":{"source":1,"layout":4,"number":25,"postIds":[],"sectionHeader":"Recent Articles"}},{"type":1,"postListMetadata":{"source":1,"layout":4,"number":25,"postIds":[],"sectionHeader":"Latest"}},{"type":1,"postListMetadata":{"source":1,"layout":4,"number":25,"postIds":[],"sectionHeader":"Recent"}},{"type":1,"postListMetadata":{"source":1,"layout":4,"number":25,"postIds":[],"sectionHeader":"Latest"}},{"type":1,"postListMetadata":{"source":1,"layout":4,"number":25,"postIds":[],"sectionHeader":"Latest"}},{"type":1,"postListMetadata":{"source":1,"layout":4,"number":25,"postIds":[],"sectionHeader":"Latest"}}],"favicon":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"colorPalette":{"defaultBackgroundSpectrum":{"colorPoints":[{"color":"#FF1A8917","point":0},{"color":"#FF11800E","point":0.1},{"color":"#FF0F730C","point":0.2},{"color":"#FF095407","point":1}],"backgroundColor":"#FFFFFFFF"},"highlightSpectrum":{"colorPoints":[{"color":"#FFFFFFFF","point":0},{"color":"#FFE8F3E8","point":0.1},{"color":"#FFE8F3E8","point":0.2},{"color":"#FFD1E7D1","point":0.6},{"color":"#FFA3D0A2","point":1}],"backgroundColor":"#FFFFFFFF"},"darkBackgroundSpectrum":{"colorPoints":[{"color":"#FF095407","point":0},{"color":"#FF0F730C","point":0.1},{"color":"#FF11800E","point":0.2},{"color":"#FF1A8917","point":1}],"backgroundColor":"#FF000000"}},"navItems":[{"type":6,"title":"About","url":"https://betterprogramming.pub/about"},{"type":5,"title":"Archive","url":"https://betterprogramming.pub/archive"}],"colorBehavior":1,"collectionFeatures":[28,30,27,25],"ampLogo":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"header":{"backgroundImage":{},"logoImage":{"id":"1*7A4lpkuHgEyGrIYzfAj4dA@2x.png","originalWidth":528,"originalHeight":72,"alt":"Better Programming"},"alignment":2,"layout":4},"subscriberCount":220772,"tagline":"Advice for programmers.","isOptedIntoAurora":false,"newsletterV3":{"newsletterV3Id":"5fe4e85f0c0b","type":1,"name":"Coffee Bytes","description":"A newsletter covering the best programming articles published across Medium","collectionId":"d0b105d10f0a","newsletterSlug":"coffee-bytes","isSubscribed":false,"showPromo":true,"avatarImageId":"1*TyRLQdZO7NdPATwSeut8gg.png","creatorId":"a8530ab7d43e","showNewsletterPostsInCollectionHome":true,"exportableSubscribersCount":16657,"subscribersCount":46360,"promoHeadline":"","promoBody":"","replyToEmail":""},"isCurationAllowedByDefault":false,"polarisCoverImage":{"imageId":"1*jFcoo2n6-1h-HS-BIIJJDg.png","filter":"","backgroundSize":"","originalWidth":3000,"originalHeight":3000,"strategy":"resample","height":0,"width":0},"ptsQualifiedAt":1616092954678,"type":"Collection"}},"User":{"adeddd83f452":{"userId":"adeddd83f452","name":"Tony Stubblebine","username":"coachtony","createdAt":1343587425234,"imageId":"1*IU9RZXimpYZ5bjbsQHGsMg.png","backgroundImageId":"","bio":"CEO at @medium. “Coach Tony” to some.","allowNotes":1,"mediumMemberAt":1711214103000,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"optInToIceland":true,"userFlags":[1],"subdomainCreatedAt":1602777842000,"hasCompletedProfile":true,"isCreatorPartnerProgramEnrolled":true,"userDismissableFlags":[32,29,21,53,52,19,18,16,47,46,45,12,44,11,9,8,6,5,4,36,3,2,1,33],"hasSeenIcelandOnboarding":true,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"f63e0edafeae":{"userId":"f63e0edafeae","name":"Ulas Can Cengiz","username":"ulsc","createdAt":1396953477027,"imageId":"1*5uVw7T-nTL4h22mLO9uWlQ.jpeg","backgroundImageId":"1*DO0_B5QjVSdSGUXZ7sOBxQ.jpeg","bio":"Tech Lead, Entrepreneur, Consultant, @ulsc — Support me: https://ulsc.medium.com/membership","twitterScreenName":"ulsc","allowNotes":1,"mediumMemberAt":1636389252000,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":false,"facebookDisplayName":"Ulaş Can Cengiz","optInToIceland":true,"userFlags":[3],"subdomainCreatedAt":1636487488444,"hasCompletedProfile":false,"isCreatorPartnerProgramEnrolled":true,"userDismissableFlags":[32,29,21,19,18,47,12,8,3,20,2,1,33],"hasSeenIcelandOnboarding":true,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"640ffc0eea3d":{"userId":"640ffc0eea3d","name":"Ege Aytin","username":"ege.aytin","createdAt":1573507657625,"imageId":"1*RdNP0tCkDIFylUpov6P7iA.jpeg","backgroundImageId":"","bio":"Product person, passionate about Golang and open source software. Building Permify, an open-source authorization service: https://github.com/Permify/permify","twitterScreenName":"eaytin","allowNotes":1,"mediumMemberAt":1738918216942,"isWriterProgramEnrolled":true,"isSuspended":false,"firstOpenedIosApp":1581409557672,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":false,"userDismissableFlags":[32,29,12,8,21,2,33],"hasSeenIcelandOnboarding":true,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"643304666902":{"userId":"643304666902","name":"John Vester","username":"johnjvester","createdAt":1594665944641,"imageId":"0*m7SrFwN_X3zmBMOU","backgroundImageId":"","bio":"Information Technology professional with 25+ years expertise in application architecture, design and development. Agile project and team management.","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"subdomainCreatedAt":1608610991401,"hasCompletedProfile":false,"userDismissableFlags":[32,12,41,8,21,3,2,18,1,33],"hasSeenIcelandOnboarding":false,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"47fe5f0f42db":{"userId":"47fe5f0f42db","name":"Laura Brewis","username":"laurabrewis95","createdAt":1611140848409,"imageId":"1*YgSqkXsVQ96Dh8h3mDd05A.jpeg","backgroundImageId":"","bio":"Software Engineering Manager living in Scotland. Writing about lifestyle, wellbeing, tech and management tips","twitterScreenName":"","allowNotes":1,"mediumMemberAt":1708938254000,"isWriterProgramEnrolled":true,"isSuspended":false,"firstOpenedIosApp":1674294626697,"isMembershipTrialEligible":false,"facebookDisplayName":"","optInToIceland":true,"userFlags":[3],"hasCompletedProfile":false,"isCreatorPartnerProgramEnrolled":true,"userDismissableFlags":[22,29,19,2,1,33],"hasSeenIcelandOnboarding":true,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-gb","type":"User"},"48685a011a2f":{"userId":"48685a011a2f","name":"Maksym Teslia","username":"aspteslia","createdAt":1605270958049,"imageId":"0*_kmWJXfT0png1yTY","backgroundImageId":"","bio":"iOS Developer from Kharkiv, Ukraine","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"firstOpenedIosApp":1649936895641,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"hasCompletedProfile":true,"userDismissableFlags":[32,29,21,19,18,12,41,8,7,5,30,2,1,33],"hasSeenIcelandOnboarding":true,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-gb","type":"User"},"c2cdb19c0977":{"userId":"c2cdb19c0977","name":"John Philip","username":"amjohnphilip","createdAt":1577105600468,"imageId":"1*9k_Wtvan_NRipcRnJR96Ww.jpeg","backgroundImageId":"","bio":"Dev | Life Café | Twitter at @amjohnphilip | Email: dxphilo@gmail.com","twitterScreenName":"amjohnphilip","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"firstOpenedIosApp":1690629722845,"firstOpenedAndroidApp":1590700896165,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"subdomainCreatedAt":1606238368958,"hasCompletedProfile":false,"isCreatorPartnerProgramEnrolled":true,"userDismissableFlags":[32,29,22,21,19,18,47,12,11,9,41,8,39,6,5,37,30,36,3,2,1,33],"hasSeenIcelandOnboarding":true,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-gb","type":"User"},"f19af9e1e50a":{"userId":"f19af9e1e50a","name":"Ievgenii Spitsyn","username":"ievgeniispitsyn","createdAt":1503476195573,"imageId":"1*B6o2W607vHPs-8gmd87nCg.jpeg","backgroundImageId":"","bio":"IT engineer, explorer, and socially active person. I'm an enthusiastic traveler, who visited 54 countries and plans to explore way more.","twitterScreenName":"IevgeniiSp","allowNotes":1,"mediumMemberAt":1681654337000,"isWriterProgramEnrolled":true,"isSuspended":false,"firstOpenedIosApp":1681654479195,"isMembershipTrialEligible":true,"facebookDisplayName":"Ievgenii Spitsyn","optInToIceland":true,"userFlags":[3],"subdomainCreatedAt":1620487030089,"hasCompletedProfile":true,"isCreatorPartnerProgramEnrolled":true,"userDismissableFlags":[32,29,12,2,1,33],"hasSeenIcelandOnboarding":true,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"en-us","type":"User"},"3874ed904df9":{"userId":"3874ed904df9","name":"nhammad","username":"dementorwriter","createdAt":1590678225488,"imageId":"0*12nGvZq88yC6mAgy","backgroundImageId":"","bio":"Quite excited to start my Medium journey.","twitterScreenName":"","allowNotes":1,"mediumMemberAt":0,"isWriterProgramEnrolled":true,"isSuspended":false,"firstOpenedIosApp":1654798602447,"isMembershipTrialEligible":true,"facebookDisplayName":"","optInToIceland":true,"userFlags":[3],"subdomainCreatedAt":1620068317506,"hasCompletedProfile":false,"isCreatorPartnerProgramEnrolled":true,"userDismissableFlags":[32,29,12,9,8,21,3,19,2,18,1,33],"hasSeenIcelandOnboarding":true,"postSubscribeMembershipUpsellShownAt":0,"languageCode":"de-de","type":"User"}},"Post":{"bf37baef8f27":{"id":"bf37baef8f27","versionId":"269e53f1c6f4","creatorId":"adeddd83f452","homeCollectionId":"d0b105d10f0a","title":"Let a thousand programming publications bloom.","detectedLanguage":"en","latestVersion":"269e53f1c6f4","latestPublishedVersion":"269e53f1c6f4","hasUnpublishedEdits":false,"latestRev":697,"createdAt":1699369643584,"updatedAt":1701107617557,"acceptedAt":0,"firstPublishedAt":1699640290890,"latestPublishedAt":1701107617557,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"I’m putting Better Programming on hiatus to make room for other programming publications.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*tKikPWjE4MZ5WgdfZuyvEg.png","filter":"","backgroundSize":"","originalWidth":2408,"originalHeight":1192,"strategy":"resample","height":0,"width":0},"wordCount":1282,"imageCount":1,"readingTime":5.037735849056604,"subtitle":"I’m putting Better Programming on hiatus to make room for other programming publications.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":164,"isBookmarked":false,"tags":[],"socialRecommendsCount":0,"responsesCreatedCount":47,"links":{"entries":[{"url":"https://betterprogramming.pub/write-for-us-5c4bcba59397","alts":[{"type":3,"url":"medium://p/5c4bcba59397"},{"type":2,"url":"medium://p/5c4bcba59397"}],"httpStatus":200},{"url":"https://medium.com/new-publication","alts":[],"httpStatus":200},{"url":"https://blog.medium.com/a-nosy-faq-about-nominating-stories-for-our-boost-44bbf79549c","alts":[{"type":3,"url":"medium://p/44bbf79549c"},{"type":2,"url":"medium://p/44bbf79549c"}],"httpStatus":200}],"version":"0.3","generatedAt":1701107618295},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":2856,"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":"let-a-thousand-programming-publications-bloom","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"let-a-thousand-programming-publications-bloom-bf37baef8f27","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*tKikPWjE4MZ5WgdfZuyvEg.png","originalWidth":2408,"originalHeight":1192,"isFeatured":true}},{"name":"ecb7","type":3,"text":"Let a thousand programming publications bloom.","markups":[],"alignment":1},{"name":"e2b3","type":13,"text":"I’m putting Better Programming on hiatus to make room…","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"I’m putting Better Programming on hiatus to make room for other programming publications."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"d0b105d10f0a","isNewsletter":false,"newsletterId":"5726fd41cb32","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":4,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"ecb7","type":3,"text":"Let a thousand programming publications bloom.","markups":[]},{"name":"e2b3","type":13,"text":"I’m putting Better Programming on hiatus to make room for other programming publications.","markups":[]},{"name":"8e1e","type":1,"text":"I get that this is a big pivot given that we switched to a new editor recently. But things are changing at Medium and I think this will ultimately be a boon for everyone, authors, readers and publications.","markups":[{"type":2,"start":1,"end":205}]},{"name":"aebf","type":1,"text":"I would like to inspire some (but not all) of you to…","markups":[]}],"sections":[{"name":"fc1e","startIndex":0}]},"isFullContent":false,"subtitle":"I’m putting Better Programming on hiatus to make room for other programming publications."},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"e1f66a3b0530":{"id":"e1f66a3b0530","versionId":"462299d7f43f","creatorId":"f63e0edafeae","homeCollectionId":"d0b105d10f0a","title":"Automating Your DevOps: Writing Scripts that Save Time and Headaches","detectedLanguage":"en","latestVersion":"462299d7f43f","latestPublishedVersion":"462299d7f43f","hasUnpublishedEdits":false,"latestRev":120,"createdAt":1699287728571,"updatedAt":1699680443061,"acceptedAt":0,"firstPublishedAt":1699637660767,"latestPublishedAt":1699637660767,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Or, how scripting revolutionized my workflow","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*rYKCg6zXR4ibpKfI","filter":"","backgroundSize":"","originalWidth":2947,"originalHeight":2121,"strategy":"resample","height":0,"width":0},"wordCount":2230,"imageCount":1,"readingTime":8.61509433962264,"subtitle":"Or, how scripting revolutionized my workflow","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":40,"isBookmarked":false,"tags":[{"slug":"devops","name":"DevOps","postCount":107653,"metadata":{"postCount":107653,"coverImage":{"id":"1*g-4vjwQDUVUMKf-xa03xJw.png","originalWidth":1279,"originalHeight":720,"isFeatured":true}},"type":"Tag"},{"slug":"automation","name":"Automation","postCount":67307,"metadata":{"postCount":67307,"coverImage":{"id":"1*pReWsSuNAanhbEa6rOivxg.jpeg","originalWidth":1280,"originalHeight":1208}},"type":"Tag"},{"slug":"development","name":"Development","postCount":117913,"metadata":{"postCount":117913,"coverImage":{"id":"1*oK0Tx2j8bNaVx0GRwbPCNw.jpeg","originalWidth":3008,"originalHeight":1960,"isFeatured":true}},"type":"Tag"},{"slug":"software-development","name":"Software Development","postCount":346558,"metadata":{"postCount":346558,"coverImage":{"id":"1*3XS-8r8adjnRoNH4YjKXpw.png","originalWidth":2212,"originalHeight":1337,"isFeatured":true}},"type":"Tag"},{"slug":"engineering","name":"Engineering","postCount":58707,"metadata":{"postCount":58707,"coverImage":{"id":"1*2hE-C_hBjlXF-HA1sULvww.jpeg","originalWidth":1600,"originalHeight":1000,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":16,"links":{"entries":[{"url":"https://unsplash.com?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200},{"url":"https://unsplash.com/@dawson2406?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1699637660947},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":252,"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":"automating-your-devops-writing-scripts-that-save-time-and-headaches","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":2,"uniqueSlug":"automating-your-devops-writing-scripts-that-save-time-and-headaches-e1f66a3b0530","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*rYKCg6zXR4ibpKfI","originalWidth":2947,"originalHeight":2121,"isFeatured":true,"unsplashPhotoId":"qwtCeJ5cLYs"}},{"name":"078b","type":3,"text":"Automating Your DevOps: Writing Scripts that Save Time and Headaches","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Or, how scripting revolutionized my workflow"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"d0b105d10f0a","isNewsletter":false,"newsletterId":"3f8887bdc132","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":true,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":true,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":1,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":1699287930948,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"078b","type":3,"text":"Automating Your DevOps: Writing Scripts that Save Time and Headaches","markups":[]},{"name":"9277","type":1,"text":"Or, how scripting revolutionized my workflow","markups":[]},{"name":"948a","type":4,"text":"Photo by Stephen Dawson on Unsplash","markups":[{"type":3,"start":9,"end":23,"href":"https://unsplash.com/@dawson2406?utm_source=medium&utm_medium=referral","title":"","rel":"photo-creator","anchorType":0},{"type":3,"start":27,"end":35,"href":"https://unsplash.com?utm_source=medium&utm_medium=referral","title":"","rel":"photo-source","anchorType":0}],"layout":1,"metadata":{"id":"0*rYKCg6zXR4ibpKfI","originalWidth":2947,"originalHeight":2121,"isFeatured":true,"unsplashPhotoId":"qwtCeJ5cLYs"}},{"name":"b5fe","type":1,"text":"Imagine a time when factories were full of life, with gears turning and machines working together. It was a big change, like what’s happening today with computers. In the world of creating and managing software, we’re moving from doing things by hand to letting…","markups":[]}],"sections":[{"name":"4475","startIndex":0}]},"isFullContent":false,"subtitle":"Or, how scripting revolutionized my workflow"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"c5f79fc8019e":{"id":"c5f79fc8019e","versionId":"60a03070a6d2","creatorId":"f63e0edafeae","homeCollectionId":"d0b105d10f0a","title":"Integrating Psychology into Software Development","detectedLanguage":"en","latestVersion":"60a03070a6d2","latestPublishedVersion":"60a03070a6d2","hasUnpublishedEdits":false,"latestRev":132,"createdAt":1699297517798,"updatedAt":1699680443247,"acceptedAt":0,"firstPublishedAt":1699637647833,"latestPublishedAt":1699637647833,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Emotional Architecture in Software Design","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*YZT1r-TMIRks5bXk","filter":"","backgroundSize":"","originalWidth":5184,"originalHeight":3456,"strategy":"resample","height":0,"width":0},"wordCount":3572,"imageCount":1,"readingTime":13.679245283018867,"subtitle":"Emotional Architecture in Software Design","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":40,"isBookmarked":false,"tags":[{"slug":"software-development","name":"Software Development","postCount":346558,"metadata":{"postCount":346558,"coverImage":{"id":"1*3XS-8r8adjnRoNH4YjKXpw.png","originalWidth":2212,"originalHeight":1337,"isFeatured":true}},"type":"Tag"},{"slug":"engineering","name":"Engineering","postCount":58707,"metadata":{"postCount":58707,"coverImage":{"id":"1*2hE-C_hBjlXF-HA1sULvww.jpeg","originalWidth":1600,"originalHeight":1000,"isFeatured":true}},"type":"Tag"},{"slug":"psychology","name":"Psychology","postCount":410912,"metadata":{"postCount":410912,"coverImage":{"id":"1*CqU-xLsTOVSFHrWASqT83Q.jpeg"}},"type":"Tag"},{"slug":"architecture","name":"Architecture","postCount":60903,"metadata":{"postCount":60903,"coverImage":{"id":"1*TOrayG0uN6GkYLNqmlCXxw.jpeg"}},"type":"Tag"},{"slug":"software-design","name":"Software Design","postCount":3817,"metadata":{"postCount":3817,"coverImage":{"id":"1*2WAoAZvUea0K1gwefjrnUw.png","originalWidth":791,"originalHeight":789}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":12,"links":{"entries":[{"url":"https://unsplash.com?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200},{"url":"https://unsplash.com/@bretkavanaugh?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1699637648920},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":391,"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":"integrating-psychology-into-software-development","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":2,"uniqueSlug":"integrating-psychology-into-software-development-c5f79fc8019e","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*YZT1r-TMIRks5bXk","originalWidth":5184,"originalHeight":3456,"isFeatured":true,"unsplashPhotoId":"_af0_qAh4K4"}},{"name":"e878","type":3,"text":"Integrating Psychology into Software Development","markups":[],"alignment":1},{"name":"1491","type":13,"text":"Emotional Architecture in Software Design","markups":[{"type":2,"start":0,"end":41}],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Emotional Architecture in Software Design"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"d0b105d10f0a","isNewsletter":false,"newsletterId":"70f79ba1b7ab","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":true,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":true,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":1,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":1699297694258,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"e878","type":3,"text":"Integrating Psychology into Software Development","markups":[]},{"name":"1491","type":13,"text":"Emotional Architecture in Software Design","markups":[{"type":2,"start":0,"end":41}]},{"name":"b6a6","type":4,"text":"Photo by Bret Kavanaugh on Unsplash","markups":[{"type":3,"start":9,"end":23,"href":"https://unsplash.com/@bretkavanaugh?utm_source=medium&utm_medium=referral","title":"","rel":"photo-creator","anchorType":0},{"type":3,"start":27,"end":35,"href":"https://unsplash.com?utm_source=medium&utm_medium=referral","title":"","rel":"photo-source","anchorType":0}],"layout":1,"metadata":{"id":"0*YZT1r-TMIRks5bXk","originalWidth":5184,"originalHeight":3456,"isFeatured":true,"unsplashPhotoId":"_af0_qAh4K4"}},{"name":"d2eb","type":3,"text":"The Psychological Underpinnings of Software Development","markups":[]},{"name":"9d9b","type":1,"text":"Imagine sitting down at your desk to untangle a particularly complex piece of software code. Your eyes scan lines packed with logical operations and function calls. Somewhere in this intricate weave, a bug lurks, derailing the application’s performance. This scenario, familiar to many developers, isn’t just a test of technical…","markups":[]}],"sections":[{"name":"bf89","startIndex":0}]},"isFullContent":false,"subtitle":"Emotional Architecture in Software Design"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"8d81fccd8250":{"id":"8d81fccd8250","versionId":"6666b591b0c4","creatorId":"640ffc0eea3d","homeCollectionId":"d0b105d10f0a","title":"WebAssembly with Go: Taking Web Apps to the Next Level","detectedLanguage":"en","latestVersion":"6666b591b0c4","latestPublishedVersion":"6666b591b0c4","hasUnpublishedEdits":false,"latestRev":933,"createdAt":1699354602756,"updatedAt":1707909065437,"acceptedAt":0,"firstPublishedAt":1699637466352,"latestPublishedAt":1700569123843,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"You might’ve noticed the increasing chatter around WebAssembly (WASM) in the dev community. Its potential is vast, and we’ve found it…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*b4sFFT3X6e0dVCvKAAtMIg.png","filter":"","backgroundSize":"","originalWidth":1000,"originalHeight":420,"strategy":"resample","height":0,"width":0},"wordCount":3038,"imageCount":1,"readingTime":11.664150943396226,"subtitle":"You might’ve noticed the increasing chatter around WebAssembly (WASM) in the dev community. Its potential is vast, and we’ve found it…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":35,"isBookmarked":false,"tags":[{"slug":"golang","name":"Golang","postCount":26939,"metadata":{"postCount":26939,"coverImage":{"id":"1*3Rt3z8YELFFuTQ1XN6SLPQ.jpeg","originalWidth":1024,"originalHeight":1024,"isFeatured":true}},"type":"Tag"},{"slug":"tutorial","name":"Tutorial","postCount":108390,"metadata":{"postCount":108390,"coverImage":{"id":"0*Z4q_cKwhWkKoLzWK.png","originalWidth":1024,"originalHeight":1024,"isFeatured":true}},"type":"Tag"},{"slug":"javascript","name":"JavaScript","postCount":293541,"metadata":{"postCount":293541,"coverImage":{"id":"1*Iwg2qgFrQUwMlXYDsHD1HA.jpeg","originalWidth":736,"originalHeight":736}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":1,"links":{"entries":[{"url":"https://play.permify.co/","alts":[],"httpStatus":200},{"url":"https://webassembly.org/","alts":[],"httpStatus":200},{"url":"https://github.com/Permify/permify/tree/master/playground/src/loadWasm","alts":[],"httpStatus":404},{"url":"https://github.com/Permify/permify/tree/master/pkg/development","alts":[],"httpStatus":200},{"url":"https://github.com/Permify/permify","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1700569124373},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":151,"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":"webassembly-with-go-taking-web-apps-to-the-next-level","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"webassembly-with-go-taking-web-apps-to-the-next-level-8d81fccd8250","previewContent":{"bodyModel":{"paragraphs":[{"name":"6018","type":3,"text":"WebAssembly with Go: Taking Web Apps to the Next Level","markups":[],"alignment":1},{"name":"e0c3","type":4,"text":"","markups":[],"layout":9,"metadata":{"id":"1*b4sFFT3X6e0dVCvKAAtMIg.png","originalWidth":1000,"originalHeight":420}}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"You might’ve noticed the increasing chatter around WebAssembly (WASM) in the dev community. Its potential is vast, and we’ve found it…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"d0b105d10f0a","isNewsletter":false,"newsletterId":"40657a7bd486","webCanonicalUrl":"https://permify.co/post/wasm-go/","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":6,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"6018","type":3,"text":"WebAssembly with Go: Taking Web Apps to the Next Level","markups":[]},{"name":"e0c3","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"1*b4sFFT3X6e0dVCvKAAtMIg.png","originalWidth":1000,"originalHeight":420}},{"name":"57c2","type":1,"text":"You might’ve noticed the increasing chatter around WebAssembly (WASM) in the dev community. Its potential is vast, and we’ve found it invaluable in enhancing our open source project!","markups":[{"type":3,"start":51,"end":69,"href":"https://webassembly.org/","title":"","rel":"","anchorType":0}]},{"name":"9201","type":1,"text":"Hi everyone, I’m part of the team behind Permify, an open-source infra that helps developers to create and manage granular permissions throughout…","markups":[{"type":3,"start":41,"end":48,"href":"https://github.com/Permify/permify","title":"","rel":"","anchorType":0}]}],"sections":[{"name":"96fb","startIndex":0}]},"isFullContent":false,"subtitle":"You might’ve noticed the increasing chatter around WebAssembly (WASM) in the dev community. Its potential is vast, and we’ve found it…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"b06825c299b8":{"id":"b06825c299b8","versionId":"b6cf138670f8","creatorId":"643304666902","homeCollectionId":"d0b105d10f0a","title":"How to Crush API Dev Work when You’re 100% Remote with Postman","detectedLanguage":"en","latestVersion":"b6cf138670f8","latestPublishedVersion":"b6cf138670f8","hasUnpublishedEdits":false,"latestRev":187,"createdAt":1699363286384,"updatedAt":1699830533068,"acceptedAt":0,"firstPublishedAt":1699637298322,"latestPublishedAt":1699637298322,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"In a bit of a personal retrospective, I wanted to talk about how Postman has helped me to build thriving APIs and to succeed.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*7fQ4PVN_p9RSTKHHXE4q9A.jpeg","filter":"","backgroundSize":"","originalWidth":1920,"originalHeight":1280,"strategy":"resample","height":0,"width":0},"wordCount":1607,"imageCount":3,"readingTime":6.6141509433962264,"subtitle":"In a bit of a personal retrospective, I wanted to talk about how Postman has helped me to build thriving APIs and to succeed.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":17,"isBookmarked":false,"tags":[{"slug":"postman","name":"Postman","postCount":4001,"metadata":{"postCount":4001,"coverImage":{"id":"0*0Dr0sLfxi79AOotm.png","originalWidth":700,"originalHeight":350,"isFeatured":true}},"type":"Tag"},{"slug":"api","name":"API","postCount":59256,"metadata":{"postCount":59256,"coverImage":{"id":"0*cPM8RhTgl9Lcv1r2","originalWidth":6720,"originalHeight":4480,"isFeatured":true,"unsplashPhotoId":"oXlXu2qukGE"}},"type":"Tag"},{"slug":"enterprise","name":"Enterprise","postCount":6017,"metadata":{"postCount":6017,"coverImage":{"id":"0*W893OQpwY2sEJUfe","originalWidth":1600,"originalHeight":900,"isFeatured":true}},"type":"Tag"},{"slug":"api-first","name":"Api First","postCount":196,"metadata":{"postCount":196,"coverImage":{"id":"1*ms3P8v_BsSDSeqkMbqd6dQ.png","originalWidth":1290,"originalHeight":573,"isFeatured":true,"alt":"API product development Lifecycle"}},"type":"Tag"},{"slug":"web-development","name":"Web Development","postCount":323090,"metadata":{"postCount":323090,"coverImage":{"id":"1*yx8CWRwB_h9T9yn-LHI3xg.jpeg","originalWidth":1056,"originalHeight":492}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":1,"links":{"entries":[{"url":"https://www.postman.com/solutions/enterprise-essentials/","alts":[],"httpStatus":200},{"url":"https://www.postman.com/salesforce-developers/workspace/salesforce-developers/collection/12721794-67cb9baa-e0da-4986-957e-88d8734647e2","alts":[],"httpStatus":200},{"url":"https://en.wikipedia.org/wiki/Postman_(software)","alts":[],"httpStatus":200},{"url":"https://en.wikipedia.org/wiki/IntelliJ_IDEA","alts":[],"httpStatus":200},{"url":"https://blog.postman.com/new-postman-api-platform-redefining-api-management-for-api-first-world/","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1699637298614},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":80,"sectionCount":1,"readingList":0,"topics":[{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"how-to-crush-api-dev-work-when-youre-100-remote-with-postman","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"how-to-crush-api-dev-work-when-youre-100-remote-with-postman-b06825c299b8","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*7fQ4PVN_p9RSTKHHXE4q9A.jpeg","originalWidth":1920,"originalHeight":1280,"isFeatured":true}},{"name":"dc74","type":3,"text":"How to Crush API Dev Work when You’re 100% Remote with Postman","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"In a bit of a personal retrospective, I wanted to talk about how Postman has helped me to build thriving APIs and to succeed."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"d0b105d10f0a","isNewsletter":false,"newsletterId":"17669747865f","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":false,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":false,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":0,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":6,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":0,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"dc74","type":3,"text":"How to Crush API Dev Work when You’re 100% Remote with Postman","markups":[]},{"name":"72ff","type":4,"text":"","markups":[],"layout":1,"metadata":{"id":"1*7fQ4PVN_p9RSTKHHXE4q9A.jpeg","originalWidth":1920,"originalHeight":1280,"isFeatured":true}},{"name":"e1eb","type":1,"text":"When summer of 2017 arrived, I transitioned to a project which allowed me to contribute remotely. After 25 years of working in technology across eight different employers, I was finally able to determine if working 100% remotely would lead to productivity gains … or losses.","markups":[]},{"name":"0802","type":1,"text":"Just under 3 years before…","markups":[]}],"sections":[{"name":"2031","startIndex":0}]},"isFullContent":false,"subtitle":"In a bit of a personal retrospective, I wanted to talk about how Postman has helped me to build thriving APIs and to succeed."},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"696a0fbcfbd7":{"id":"696a0fbcfbd7","versionId":"81e8ef1d3056","creatorId":"47fe5f0f42db","homeCollectionId":"d0b105d10f0a","title":"Resilience in the Face of Rejection: Lessons from Losing My Dream Job","detectedLanguage":"en","latestVersion":"81e8ef1d3056","latestPublishedVersion":"81e8ef1d3056","hasUnpublishedEdits":false,"latestRev":605,"createdAt":1699455422715,"updatedAt":1699680442638,"acceptedAt":0,"firstPublishedAt":1699637281295,"latestPublishedAt":1699637281295,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"How to lose graciously and find the silver lining from the failure of a job interview","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"0*iX6mpcbAx8nGAFsR","filter":"","backgroundSize":"","originalWidth":4480,"originalHeight":6720,"strategy":"resample","height":0,"width":0},"wordCount":1237,"imageCount":1,"readingTime":4.867924528301887,"subtitle":"How to lose graciously and find the silver lining from the failure of a job interview","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":18,"isBookmarked":false,"tags":[{"slug":"rejection","name":"Rejection","postCount":6065,"metadata":{"postCount":6065,"coverImage":{"id":"1*iKfLGUCddoNkV2-shLaX3g.jpeg","originalWidth":1024,"originalHeight":1024,"isFeatured":true,"alt":"Woman with flowers in her hair."}},"type":"Tag"},{"slug":"failure","name":"Failure","postCount":24948,"metadata":{"postCount":24948,"coverImage":{"id":"1*NPNCB7_hFr6wJIT15QK85A.jpeg","originalWidth":500,"originalHeight":543,"isFeatured":true}},"type":"Tag"},{"slug":"job-interview","name":"Job Interview","postCount":9747,"metadata":{"postCount":9747,"coverImage":{"id":"1*fNk5xf5sWlK6DKqvT0Spqg.jpeg","originalWidth":6634,"originalHeight":4423,"isFeatured":true}},"type":"Tag"},{"slug":"resilience","name":"Resilience","postCount":33470,"metadata":{"postCount":33470,"coverImage":{"id":"0*knXrRbLHipEripcm","originalWidth":4752,"originalHeight":3168,"isFeatured":true,"alt":"a high resolution image of beautiful waterdrops on green leaves on a dark background","unsplashPhotoId":"nPOZzG3Gfyg"}},"type":"Tag"},{"slug":"life-lessons","name":"Life Lessons","postCount":770635,"metadata":{"postCount":770635,"coverImage":{"id":"1*xJV8uYsDYrnDwulfbMByRQ.jpeg"}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":2,"links":{"entries":[{"url":"https://unsplash.com?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200},{"url":"https://unsplash.com/@rocinante_11?utm_source=medium&utm_medium=referral","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1699637281742},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":130,"sectionCount":1,"readingList":0,"topics":[{"topicId":"af49579e220a","slug":"work","createdAt":1487918186996,"deletedAt":0,"image":{"id":"1*knbAt5qCQCelKx0BDkzZpQ@2x.jpeg","originalWidth":5018,"originalHeight":3049},"name":"Work","description":"The meaning behind the meetings.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Work Life: Articles and News — Medium","type":"Topic"}]},"coverless":true,"slug":"resilience-in-the-face-of-rejection-lessons-from-losing-my-dream-job","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":2,"uniqueSlug":"resilience-in-the-face-of-rejection-lessons-from-losing-my-dream-job-696a0fbcfbd7","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"0*iX6mpcbAx8nGAFsR","originalWidth":4480,"originalHeight":6720,"isFeatured":true,"unsplashPhotoId":"RFVCEQICQUA"}},{"name":"6549","type":3,"text":"Resilience in the Face of Rejection: Lessons from Losing My Dream Job","markups":[],"alignment":1},{"name":"87b3","type":13,"text":"How to lose graciously and find…","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"How to lose graciously and find the silver lining from the failure of a job interview"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"d0b105d10f0a","isNewsletter":false,"newsletterId":"173f340a9dc2","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":true,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":true,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":1,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":1699526364882,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"6549","type":3,"text":"Resilience in the Face of Rejection: Lessons from Losing My Dream Job","markups":[]},{"name":"87b3","type":13,"text":"How to lose graciously and find the silver lining from the failure of a job interview","markups":[]},{"name":"2bdc","type":4,"text":"Photo by Mick Haupt on Unsplash","markups":[{"type":3,"start":9,"end":19,"href":"https://unsplash.com/@rocinante_11?utm_source=medium&utm_medium=referral","title":"","rel":"photo-creator","anchorType":0},{"type":3,"start":23,"end":31,"href":"https://unsplash.com?utm_source=medium&utm_medium=referral","title":"","rel":"photo-source","anchorType":0}],"layout":1,"metadata":{"id":"0*iX6mpcbAx8nGAFsR","originalWidth":4480,"originalHeight":6720,"isFeatured":true,"unsplashPhotoId":"RFVCEQICQUA"}},{"name":"b7c4","type":1,"text":"My company had a new internal job opening. It was a year-long role building up a tech academy to train new graduates so they could function well as junior software engineers.","markups":[]},{"name":"7212","type":1,"text":"A seed of interest was planted the first time I heard about it, and I started thinking more and…","markups":[]}],"sections":[{"name":"1e9f","startIndex":0}]},"isFullContent":false,"subtitle":"How to lose graciously and find the silver lining from the failure of a job interview"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"d36df47f051d":{"id":"d36df47f051d","versionId":"ec5ee41d3aa1","creatorId":"48685a011a2f","homeCollectionId":"d0b105d10f0a","title":"What Isomorphic types are and why you might need them developing with Swift.","detectedLanguage":"en","latestVersion":"ec5ee41d3aa1","latestPublishedVersion":"ec5ee41d3aa1","hasUnpublishedEdits":false,"latestRev":2037,"createdAt":1697716119375,"updatedAt":1699680442625,"acceptedAt":0,"firstPublishedAt":1699637271075,"latestPublishedAt":1699637271075,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"How can general math be useful in your daily development.","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*YJcmoAVcBtUeuKAQm3BQhA.png","filter":"","backgroundSize":"","originalWidth":1940,"originalHeight":1220,"strategy":"resample","height":0,"width":0},"wordCount":1588,"imageCount":1,"readingTime":6.192452830188679,"subtitle":"How can general math be useful in your daily development.","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":9,"isBookmarked":false,"tags":[{"slug":"swift","name":"Swift","postCount":51931,"metadata":{"postCount":51931,"coverImage":{"id":"1*Zh76dmC11DW3hSIGW-ZcJw.png","originalWidth":1172,"originalHeight":776,"isFeatured":true}},"type":"Tag"},{"slug":"ios","name":"iOS","postCount":91165,"metadata":{"postCount":91165,"coverImage":{"id":"0*YkCyceimp7uZhgPV","originalWidth":5456,"originalHeight":3637,"isFeatured":true,"unsplashPhotoId":"I4ywJmImdPM"}},"type":"Tag"},{"slug":"programming","name":"Programming","postCount":476787,"metadata":{"postCount":476787,"coverImage":{"id":"1*uFbaWri2lJTX70PSGZGQeQ.png","originalWidth":1280,"originalHeight":720,"isFeatured":true}},"type":"Tag"},{"slug":"debugging","name":"Debugging","postCount":7646,"metadata":{"postCount":7646,"coverImage":{"id":"1*7DsQClQ1Ya7M5Svsl6aSKw.png","originalWidth":1920,"originalHeight":1078,"isFeatured":true}},"type":"Tag"},{"slug":"math","name":"Math","postCount":23294,"metadata":{"postCount":23294,"coverImage":{"id":"0*_Su5U_-H2AEQoONH","originalWidth":1024,"originalHeight":1024,"isFeatured":true}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":2,"links":{"entries":[{"url":"https://encyclopediaofmath.org/wiki/Isomorphism","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1699637271572},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":93,"sectionCount":2,"readingList":0,"topics":[{"topicId":"ab3d8f7f8eb1","slug":"ios-development","createdAt":1521651850182,"deletedAt":0,"image":{"id":"1*g_B4JNulmfXSj0AyEjImyA@2x.jpeg","originalWidth":5184,"originalHeight":3456},"name":"iOS Dev","description":"Appy talk.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"iOS App Development: Articles and News — Medium","type":"Topic"},{"topicId":"decb52b64abf","slug":"programming","createdAt":1493934116328,"deletedAt":0,"image":{"id":"1*iPa136b1cGEO7lvoXg6uHQ@2x.jpeg","originalWidth":6016,"originalHeight":4016},"name":"Programming","description":"The good, the bad, the buggy.","relatedTopics":[],"visibility":1,"relatedTags":[],"relatedTopicIds":[],"seoTitle":"Programming News and Articles — Medium","type":"Topic"}]},"coverless":true,"slug":"what-isomorphic-types-are-and-why-you-might-need-them-developing-with-swift","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":false,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":0,"uniqueSlug":"what-isomorphic-types-are-and-why-you-might-need-them-developing-with-swift-d36df47f051d","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*YJcmoAVcBtUeuKAQm3BQhA.png","originalWidth":1940,"originalHeight":1220,"isFeatured":true}},{"name":"previewTitle","type":3,"text":"What Isomorphic types are and why you might need them developing with Swift.","alignment":1},{"name":"previewSubtitle","type":13,"text":"How can general math be…","alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"How can general math be useful in your daily development."},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"d0b105d10f0a","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":"14ce","type":3,"text":"What Isomorphic types are and why you might need them developing with Swift.","markups":[]},{"name":"ecba","type":4,"text":"Image by author.","markups":[],"layout":1,"metadata":{"id":"1*YJcmoAVcBtUeuKAQm3BQhA.png","originalWidth":1940,"originalHeight":1220,"isFeatured":true}},{"name":"9565","type":3,"text":"A bit of general math","markups":[],"hasDropCap":true},{"name":"9761","type":1,"text":"* Note: we are not going to dive deep into theoretical definitions, instead will just discuss the conception using common terms.","markups":[{"type":2,"start":0,"end":128}]},{"name":"7dd3","type":6,"text":"An isomorphism is a correspondence (relation) between objects or systems of objects expressing the equality of their structures in some sense. — Encyclopedia of Mathematics.","markups":[{"type":3,"start":145,"end":172,"href":"https://encyclopediaofmath.org/wiki/Isomorphism","title":"","rel":"","anchorType":0}]},{"name":"acf3","type":1,"text":"Isomorphism is a core…","markups":[]}],"sections":[{"name":"5a34","startIndex":0}]},"isFullContent":false,"subtitle":"How can general math be useful in your daily development."},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":false,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"3049cf50a992":{"id":"3049cf50a992","versionId":"53dc2328e434","creatorId":"c2cdb19c0977","homeCollectionId":"d0b105d10f0a","title":"Exploring Rust’s Option Type: A Guide to Optional Value Handling","detectedLanguage":"en","latestVersion":"53dc2328e434","latestPublishedVersion":"53dc2328e434","hasUnpublishedEdits":false,"latestRev":589,"createdAt":1697534555035,"updatedAt":1699750796213,"acceptedAt":0,"firstPublishedAt":1699637105789,"latestPublishedAt":1699637105789,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"Understanding the Role of Option Type in Rust Programming","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*To_Msn7r7Qgt3ra2Sth7rQ.png","filter":"","backgroundSize":"","originalWidth":1200,"originalHeight":627,"strategy":"resample","height":0,"width":0},"wordCount":829,"imageCount":1,"readingTime":3.328301886792453,"subtitle":"Understanding the Role of Option Type in Rust Programming","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":18,"isBookmarked":false,"tags":[{"slug":"rust","name":"Rust","postCount":12288,"metadata":{"postCount":12288,"coverImage":{"id":"1*E04qP_LPcfYcGxRYrnDnyw.jpeg","originalWidth":1024,"originalHeight":768,"isFeatured":true}},"type":"Tag"},{"slug":"rustlang","name":"Rustlang","postCount":1948,"metadata":{"postCount":1948,"coverImage":{"id":"1*0PfxUQzvOoJNDcLmOtqK0Q@2x.jpeg","originalWidth":4200,"originalHeight":1596,"isFeatured":true}},"type":"Tag"},{"slug":"rust-programming-language","name":"Rust Programming Language","postCount":2742,"metadata":{"postCount":2742,"coverImage":{"id":"1*o5upUCLJwRU68ZUXUrn3Rg.png","originalWidth":1210,"originalHeight":242,"isFeatured":true}},"type":"Tag"},{"slug":"programming","name":"Programming","postCount":476787,"metadata":{"postCount":476787,"coverImage":{"id":"1*uFbaWri2lJTX70PSGZGQeQ.png","originalWidth":1280,"originalHeight":720,"isFeatured":true}},"type":"Tag"},{"slug":"technology","name":"Technology","postCount":2329500,"metadata":{"postCount":2329500,"coverImage":{"id":"1*yH2cmH1uhoFpR7HIseOAsw.jpeg"}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":2,"links":{"entries":[{"url":"https://doc.rust-lang.org/rust-by-example/std/option.html","alts":[],"httpStatus":200},{"url":"https://doc.rust-lang.org/std/option/enum.Option.html","alts":[],"httpStatus":200},{"url":"https://play.rust-lang.org/?version=stable&mode=debug&edition=2021&gist=0338709c6f29a45d6b5a1d0c70487e4e","alts":[],"httpStatus":200},{"url":"http://twitter.com/amjohnphilip","alts":[],"httpStatus":200}],"version":"0.3","generatedAt":1699637106128},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":114,"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":"exploring-rusts-option-type-a-guide-to-optional-value-handling","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":2,"uniqueSlug":"exploring-rusts-option-type-a-guide-to-optional-value-handling-3049cf50a992","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*To_Msn7r7Qgt3ra2Sth7rQ.png","originalWidth":1200,"originalHeight":627,"isFeatured":true}},{"name":"bca3","type":3,"text":"Exploring Rust’s Option Type: A Guide to Optional Value Handling","markups":[],"alignment":1},{"name":"8180","type":13,"text":"Understanding the Role of Option…","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"Understanding the Role of Option Type in Rust Programming"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"d0b105d10f0a","isNewsletter":false,"newsletterId":"75ca2c70a3ab","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":true,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":true,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":1,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":6,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":1699536268794,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"bca3","type":3,"text":"Exploring Rust’s Option Type: A Guide to Optional Value Handling","markups":[]},{"name":"8180","type":13,"text":"Understanding the Role of Option Type in Rust Programming","markups":[]},{"name":"f784","type":4,"text":"Image by tweedegolf.nl","markups":[],"layout":5,"metadata":{"id":"1*To_Msn7r7Qgt3ra2Sth7rQ.png","originalWidth":1200,"originalHeight":627,"isFeatured":true}},{"name":"20b5","type":1,"text":"Rust has attracted a vibrant programming base and is making a mark as a language of choice when it comes to building low level, performant software applications. In this article, we’ll delve into Rust’s Option type, understanding what it is, how to define it, and checking for its existence.","markups":[]},{"name":"688e","type":13,"text":"Rust Pun","markups":[]},{"name":"118b","type":7,"text":"Rust…","markups":[]}],"sections":[{"name":"f015","startIndex":0}]},"isFullContent":false,"subtitle":"Understanding the Role of Option Type in Rust Programming"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"88a7c3b4f04d":{"id":"88a7c3b4f04d","versionId":"dcdf83ab008e","creatorId":"f19af9e1e50a","homeCollectionId":"d0b105d10f0a","title":"Modern Data is a painting","detectedLanguage":"en","latestVersion":"dcdf83ab008e","latestPublishedVersion":"dcdf83ab008e","hasUnpublishedEdits":false,"latestRev":1853,"createdAt":1508688611265,"updatedAt":1699637094289,"acceptedAt":0,"firstPublishedAt":1699637093269,"latestPublishedAt":1699637093269,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"An ultimate guide on modern visualization technologies","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*R9bmoPZbBTr4JcpFdiYtxw.png","filter":"","backgroundSize":"","originalWidth":3264,"originalHeight":2448,"strategy":"resample","height":0,"width":0},"wordCount":4991,"imageCount":11,"readingTime":20.133962264150945,"subtitle":"An ultimate guide on modern visualization technologies","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":18,"isBookmarked":false,"tags":[{"slug":"programming","name":"Programming","postCount":476787,"metadata":{"postCount":476787,"coverImage":{"id":"1*uFbaWri2lJTX70PSGZGQeQ.png","originalWidth":1280,"originalHeight":720,"isFeatured":true}},"type":"Tag"},{"slug":"virtual-reality","name":"Virtual Reality","postCount":58098,"metadata":{"postCount":58098,"coverImage":{"id":"1*pIRpoB6B-V0UxfZEhrw_xA.jpeg"}},"type":"Tag"},{"slug":"augmented-reality","name":"Augmented Reality","postCount":31025,"metadata":{"postCount":31025,"coverImage":{"id":"1*Dpn-DDBOsdobSSBhoirOiA.jpeg","originalWidth":900,"originalHeight":450}},"type":"Tag"},{"slug":"data-visualization","name":"Data Visualization","postCount":69830,"metadata":{"postCount":69830,"coverImage":{"id":"1*RqQZFF7kZSoFLjbLPQDSpw.jpeg","originalWidth":736,"originalHeight":370}},"type":"Tag"},{"slug":"web-development","name":"Web Development","postCount":323090,"metadata":{"postCount":323090,"coverImage":{"id":"1*yx8CWRwB_h9T9yn-LHI3xg.jpeg","originalWidth":1056,"originalHeight":492}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":9,"links":{"entries":[{"url":"https://unsplash.com/@nate_dumlao","alts":[],"httpStatus":200},{"url":"https://ko-fi.com/ievgenii2261","alts":[],"httpStatus":403},{"url":"https://unsplash.com/photos/6VhPY27jdps","alts":[],"httpStatus":200},{"url":"https://unsplash.com/photos/four-orange-green-blue-and-red-paint-rollers-46juD4zY1XA?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash","alts":[],"httpStatus":200},{"url":"https://unsplash.com/photos/graphs-of-performance-analytics-on-a-laptop-screen-JKUTrJ4vK00?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash","alts":[],"httpStatus":200},{"url":"https://assets.rbl.ms/19831363/origin.jpg","alts":[],"httpStatus":200},{"url":"https://twitter.com/IevgeniiSp","alts":[],"httpStatus":200},{"url":"https://experiments.withgoogle.com/arms-globe","alts":[],"httpStatus":200},{"url":"https://unsplash.com/photos/graphical-user-interface--WXQm_NTK0U?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash","alts":[],"httpStatus":200},{"url":"https://unsplash.com/photos/person-holding-black-ipad-87oz2SoV9Ug?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash","alts":[],"httpStatus":200},{"url":"https://unsplash.com/photos/aerial-photography-of-white-car-epuqS5rgGUo?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash","alts":[],"httpStatus":200},{"url":"https://unsplash.com/photos/boy-wearing-black-and-white-vr-headset-DeyfdybVQhA?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash","alts":[],"httpStatus":200},{"url":"https://metriker.com/#/r2d2","alts":[],"httpStatus":200},{"url":"https://unsplash.com/@davidpisnoy?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash","alts":[],"httpStatus":200},{"url":"https://cgl.metriker.com/","alts":[],"httpStatus":200},{"url":"https://www.instagram.com/ievgenys/","alts":[],"httpStatus":200},{"url":"https://www.facebook.com/profile.php?id=678418472","alts":[],"httpStatus":200},{"url":"https://unsplash.com/@patrick_schneider?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash","alts":[],"httpStatus":200},{"url":"https://unsplash.com/@jessicalewiscreative?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash","alts":[],"httpStatus":200},{"url":"https://unsplash.com/@lukechesser?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash","alts":[],"httpStatus":200},{"url":"https://unsplash.com/@dengxiangs?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash","alts":[],"httpStatus":200},{"url":"https://betterprogramming.pub/exciting-vue-3-features-in-2023-a-look-into-the-future-of-web-development-part-2-148e644d7df3","alts":[{"type":3,"url":"medium://p/148e644d7df3"},{"type":2,"url":"medium://p/148e644d7df3"}],"httpStatus":200},{"url":"https://unsplash.com/@raddfilms?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash","alts":[],"httpStatus":200},{"url":"https://betterprogramming.pub/exciting-react-features-in-2023-a-look-into-the-future-of-web-development-440107a3129d","alts":[{"type":3,"url":"medium://p/440107a3129d"},{"type":2,"url":"medium://p/440107a3129d"}],"httpStatus":200},{"url":"https://medium.com/nerd-for-tech/iohook-electron-webpack-integration-53c9fe010bca","alts":[{"type":3,"url":"medium://p/53c9fe010bca"},{"type":2,"url":"medium://p/53c9fe010bca"}],"httpStatus":200},{"url":"https://betterprogramming.pub/entertaining-web-geometry-building-an-interactive-3d-css-hexagon-a9b5f535d06e","alts":[{"type":3,"url":"medium://p/a9b5f535d06e"},{"type":2,"url":"medium://p/a9b5f535d06e"}],"httpStatus":200},{"url":"https://medium.com/nerd-for-tech/threejs-shaders-practicing-building-a-performant-interactive-cube-97bcbd62abc9","alts":[{"type":3,"url":"medium://p/97bcbd62abc9"},{"type":2,"url":"medium://p/97bcbd62abc9"}],"httpStatus":200}],"version":"0.3","generatedAt":1699637094500},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":307,"sectionCount":1,"readingList":0,"topics":[]},"coverless":true,"slug":"modern-data-is-a-painting","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":2,"uniqueSlug":"modern-data-is-a-painting-88a7c3b4f04d","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*R9bmoPZbBTr4JcpFdiYtxw.png","originalWidth":3264,"originalHeight":2448,"isFeatured":true}},{"name":"16a8","type":3,"text":"Modern Data is a painting","markups":[],"alignment":1},{"name":"617c","type":13,"text":"An ultimate guide on modern visualization technologies","markups":[],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"An ultimate guide on modern visualization technologies"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"d0b105d10f0a","isNewsletter":false,"newsletterId":"6ed5845ac766","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":true,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":true,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":1,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":0,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":1699537826768,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"16a8","type":3,"text":"Modern Data is a painting","markups":[]},{"name":"617c","type":13,"text":"An ultimate guide on modern visualization technologies","markups":[]},{"name":"010a","type":4,"text":"Photo by David Pisnoy on Unsplash","markups":[{"type":3,"start":9,"end":21,"href":"https://unsplash.com/@davidpisnoy?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash","title":"","rel":"","anchorType":0},{"type":3,"start":25,"end":33,"href":"https://unsplash.com/photos/four-orange-green-blue-and-red-paint-rollers-46juD4zY1XA?utm_content=creditCopyText&utm_medium=referral&utm_source=unsplash","title":"","rel":"","anchorType":0}],"layout":1,"metadata":{"id":"1*R9bmoPZbBTr4JcpFdiYtxw.png","originalWidth":3264,"originalHeight":2448,"isFeatured":true}},{"name":"44ab","type":1,"text":"Humans are traditionally strong in abstract thinking and visual interpretation of information. In other words — we are visual beings. Try, for example, to identify the best results of your favorite football team for a particular year from a table that consists of hundreds of cells — this is not…","markups":[],"hasDropCap":true}],"sections":[{"name":"9a9d","startIndex":0}]},"isFullContent":false,"subtitle":"An ultimate guide on modern visualization technologies"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"},"e2d9f22927a4":{"id":"e2d9f22927a4","versionId":"5d82dc7de50d","creatorId":"3874ed904df9","homeCollectionId":"d0b105d10f0a","title":"Slack Notifications for Alerting (via AWS Lambda)","detectedLanguage":"en","latestVersion":"5d82dc7de50d","latestPublishedVersion":"5d82dc7de50d","hasUnpublishedEdits":false,"latestRev":411,"createdAt":1698506552157,"updatedAt":1703011842686,"acceptedAt":0,"firstPublishedAt":1699637076184,"latestPublishedAt":1699637076184,"vote":false,"experimentalCss":"","displayAuthor":"","content":{"subtitle":"You might have encountered situations where you wanted to send status alerts or notifications to a Slack channel. When working with AWS…","postDisplay":{"coverless":true}},"virtuals":{"statusForCollection":"APPROVED","allowNotes":true,"previewImage":{"imageId":"1*TfMZYUxqj6SX8zgASsd8ZQ.png","filter":"","backgroundSize":"","originalWidth":2948,"originalHeight":1827,"strategy":"resample","height":0,"width":0},"wordCount":638,"imageCount":4,"readingTime":3.107547169811321,"subtitle":"You might have encountered situations where you wanted to send status alerts or notifications to a Slack channel. When working with AWS…","publishedInCount":1,"usersBySocialRecommends":[],"noIndex":false,"recommends":16,"isBookmarked":false,"tags":[{"slug":"slack","name":"Slack","postCount":10797,"metadata":{"postCount":10797,"coverImage":{"id":"0*2_41rcHS7yz0YmK6","originalWidth":1750,"originalHeight":985,"isFeatured":true}},"type":"Tag"},{"slug":"aws","name":"AWS","postCount":123635,"metadata":{"postCount":123635,"coverImage":{"id":"1*MC1pLEWZanU9mZVUFpIV8g.png","originalWidth":779,"originalHeight":414}},"type":"Tag"},{"slug":"aws-lambda","name":"AWS Lambda","postCount":11881,"metadata":{"postCount":11881,"coverImage":{"id":"1*i_sXnafp-COR53e9tgJfdQ.png","originalWidth":1200,"originalHeight":627,"isFeatured":true}},"type":"Tag"},{"slug":"terraform","name":"Terraform","postCount":18276,"metadata":{"postCount":18276,"coverImage":{"id":"1*1-Xh9sarmv77rNfw536aqA.png","originalWidth":1500,"originalHeight":700,"isFeatured":true}},"type":"Tag"},{"slug":"python","name":"Python","postCount":272538,"metadata":{"postCount":272538,"coverImage":{"id":"1*CX-BDIgw8kk42l5m4pU11g.png","originalWidth":1024,"originalHeight":1024}},"type":"Tag"}],"socialRecommendsCount":0,"responsesCreatedCount":2,"links":{"entries":[{"url":"https://slack.com/apps/A0F7XDUAZ-incoming-webhooks?tab=more_info","alts":[],"httpStatus":200},{"url":"https://api.slack.com/reference/messaging/attachments","alts":[],"httpStatus":200},{"url":"https://docs.aws.amazon.com/AmazonS3/latest/userguide/EventNotifications.html","alts":[],"httpStatus":200},{"url":"https://www.pentagram.com/work/slack/story","alts":[],"httpStatus":200},{"url":"https://slack.com/apps","alts":[],"httpStatus":200},{"url":"https://medium.com/better-programming/terraform-setup-for-using-aws-lambda-with-s3-2b8ba286b6d7","alts":[{"type":2,"url":"medium://p/2b8ba286b6d7"},{"type":3,"url":"medium://p/2b8ba286b6d7"}],"httpStatus":200}],"version":"0.3","generatedAt":1699706530504},"isLockedPreviewOnly":false,"metaDescription":"","totalClapCount":58,"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":"slack-notifications-for-alerting-via-aws-lambda","translationSourcePostId":"","translationSourceCreatorId":"","isApprovedTranslation":false,"inResponseToPostId":"","inResponseToRemovedAt":0,"isTitleSynthesized":true,"allowResponses":true,"importedUrl":"","importedPublishedAt":0,"visibility":2,"uniqueSlug":"slack-notifications-for-alerting-via-aws-lambda-e2d9f22927a4","previewContent":{"bodyModel":{"paragraphs":[{"name":"previewImage","type":4,"text":"","layout":10,"metadata":{"id":"1*TfMZYUxqj6SX8zgASsd8ZQ.png","originalWidth":2948,"originalHeight":1827,"isFeatured":true}},{"name":"3e23","type":3,"text":"Slack Notifications for Alerting (via AWS Lambda)","markups":[{"type":1,"start":0,"end":49}],"alignment":1}],"sections":[{"startIndex":0}]},"isFullContent":false,"subtitle":"You might have encountered situations where you wanted to send status alerts or notifications to a Slack channel. When working with AWS…"},"license":0,"inResponseToMediaResourceId":"","canonicalUrl":"","approvedHomeCollectionId":"d0b105d10f0a","isNewsletter":false,"newsletterId":"938a7828a06c","webCanonicalUrl":"","mediumUrl":"","migrationId":"","notifyFollowers":true,"notifyTwitter":false,"notifyFacebook":false,"responseHiddenOnParentPostAt":0,"isSeries":false,"isSubscriptionLocked":true,"seriesLastAppendedAt":0,"audioVersionDurationSec":0,"sequenceId":"","isEligibleForRevenue":true,"isBlockedFromHightower":false,"deletedAt":0,"lockedPostSource":1,"hightowerMinimumGuaranteeStartsAt":0,"hightowerMinimumGuaranteeEndsAt":0,"featureLockRequestAcceptedAt":0,"mongerRequestType":1,"layerCake":6,"socialTitle":"","socialDek":"","editorialPreviewTitle":"","editorialPreviewDek":"","curationEligibleAt":1699560034003,"isProxyPost":false,"proxyPostFaviconUrl":"","proxyPostProviderName":"","proxyPostType":0,"isSuspended":false,"isLimitedState":false,"seoTitle":"","previewContent2":{"bodyModel":{"paragraphs":[{"name":"3e23","type":3,"text":"Slack Notifications for Alerting (via AWS Lambda)","markups":[{"type":1,"start":0,"end":49}]},{"name":"ca42","type":4,"text":"Slack Logo","markups":[{"type":3,"start":0,"end":10,"href":"https://www.pentagram.com/work/slack/story","title":"","rel":"","anchorType":0}],"layout":1,"metadata":{"id":"1*TfMZYUxqj6SX8zgASsd8ZQ.png","originalWidth":2948,"originalHeight":1827,"isFeatured":true}},{"name":"d7f5","type":1,"text":"You might have encountered situations where you wanted to send status alerts or notifications to a Slack channel. When working with AWS Alarms, there’s already an app (AWS Chatbot) that can send notifications directly to your Slack channels. However, if you are working with external tools, for example databases or…","markups":[]}],"sections":[{"name":"984d","startIndex":0}]},"isFullContent":false,"subtitle":"You might have encountered situations where you wanted to send status alerts or notifications to a Slack channel. When working with AWS…"},"cardType":0,"isDistributionAlertDismissed":false,"isShortform":false,"shortformType":0,"responsesLocked":false,"isLockedResponse":false,"isPublishToEmail":true,"responseDistribution":0,"isMarkedPaywallOnly":false,"type":"Post"}}},"paging":{"path":"/_/api/collections/d0b105d10f0a/stream","next":{"to":"1699637076184","ignoredIds":[],"page":2}},"collection":{"id":"d0b105d10f0a","name":"Better Programming","slug":"better-programming","tags":["PROGRAMMING","ENGINEERING","SOFTWARE DEVELOPMENT","STARTUP","SOFTWARE ENGINEERING"],"creatorId":"adeddd83f452","description":"Advice for programmers.","shortDescription":"Advice for programmers.","image":{"imageId":"1*QNoA3XlXLHz22zQazc0syg.png","filter":"","backgroundSize":"","originalWidth":1024,"originalHeight":1024,"strategy":"resample","height":0,"width":0},"metadata":{"followerCount":220772,"activeAt":1699640290990},"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":"1*S6X0W_XVeBUPe2Mz0hrufA.png","filter":"","backgroundSize":"","originalWidth":3807,"originalHeight":519,"strategy":"resample","height":0,"width":0},"twitterUsername":"BttrProgramming","collectionMastheadId":"15cd9b0a62b8","domain":"betterprogramming.pub","sections":[{"type":2,"collectionHeaderMetadata":{"backgroundImage":{},"logoImage":{"id":"1*7A4lpkuHgEyGrIYzfAj4dA@2x.png","originalWidth":528,"originalHeight":72,"alt":"Better Programming"},"alignment":2,"layout":4}},{"type":1,"postListMetadata":{"source":1,"layout":4,"number":10,"postIds":["bf37baef8f27","e1f66a3b0530","c5f79fc8019e","8d81fccd8250","b06825c299b8","696a0fbcfbd7","d36df47f051d","3049cf50a992","88a7c3b4f04d","e2d9f22927a4"],"sectionHeader":"Latest"}},{"type":1,"postListMetadata":{"source":3,"layout":4,"number":8,"postIds":["44590705efb4","7f90bfedd775","98ac5b405605","f64a89e9c718","cbe22ff3cd47","6feb2a9e0422","d9e02fec39d0","b9b98b37d57a"],"sectionHeader":"From the Archives"}},{"type":1,"postListMetadata":{"source":1,"layout":4,"number":25,"postIds":[],"sectionHeader":"Recent Articles"}},{"type":1,"postListMetadata":{"source":1,"layout":4,"number":25,"postIds":[],"sectionHeader":"Latest"}},{"type":1,"postListMetadata":{"source":1,"layout":4,"number":25,"postIds":[],"sectionHeader":"Recent"}},{"type":1,"postListMetadata":{"source":1,"layout":4,"number":25,"postIds":[],"sectionHeader":"Latest"}},{"type":1,"postListMetadata":{"source":1,"layout":4,"number":25,"postIds":[],"sectionHeader":"Latest"}},{"type":1,"postListMetadata":{"source":1,"layout":4,"number":25,"postIds":[],"sectionHeader":"Latest"}}],"favicon":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"colorPalette":{"defaultBackgroundSpectrum":{"colorPoints":[{"color":"#FF1A8917","point":0},{"color":"#FF11800E","point":0.1},{"color":"#FF0F730C","point":0.2},{"color":"#FF095407","point":1}],"backgroundColor":"#FFFFFFFF"},"highlightSpectrum":{"colorPoints":[{"color":"#FFFFFFFF","point":0},{"color":"#FFE8F3E8","point":0.1},{"color":"#FFE8F3E8","point":0.2},{"color":"#FFD1E7D1","point":0.6},{"color":"#FFA3D0A2","point":1}],"backgroundColor":"#FFFFFFFF"},"darkBackgroundSpectrum":{"colorPoints":[{"color":"#FF095407","point":0},{"color":"#FF0F730C","point":0.1},{"color":"#FF11800E","point":0.2},{"color":"#FF1A8917","point":1}],"backgroundColor":"#FF000000"}},"navItems":[{"type":6,"title":"About","url":"https://betterprogramming.pub/about"},{"type":5,"title":"Archive","url":"https://betterprogramming.pub/archive"}],"colorBehavior":1,"collectionFeatures":[28,30,27,25],"ampLogo":{"imageId":"","filter":"","backgroundSize":"","originalWidth":0,"originalHeight":0,"strategy":"resample","height":0,"width":0},"header":{"backgroundImage":{},"logoImage":{"id":"1*7A4lpkuHgEyGrIYzfAj4dA@2x.png","originalWidth":528,"originalHeight":72,"alt":"Better Programming"},"alignment":2,"layout":4},"subscriberCount":220772,"tagline":"Advice for programmers.","isOptedIntoAurora":false,"newsletterV3":{"newsletterV3Id":"5fe4e85f0c0b","type":1,"name":"Coffee Bytes","description":"A newsletter covering the best programming articles published across Medium","collectionId":"d0b105d10f0a","newsletterSlug":"coffee-bytes","isSubscribed":false,"showPromo":true,"avatarImageId":"1*TyRLQdZO7NdPATwSeut8gg.png","creatorId":"a8530ab7d43e","showNewsletterPostsInCollectionHome":true,"exportableSubscribersCount":16657,"subscribersCount":46360,"promoHeadline":"","promoBody":"","replyToEmail":""},"isCurationAllowedByDefault":false,"polarisCoverImage":{"imageId":"1*jFcoo2n6-1h-HS-BIIJJDg.png","filter":"","backgroundSize":"","originalWidth":3000,"originalHeight":3000,"strategy":"resample","height":0,"width":0},"ptsQualifiedAt":1616092954678,"type":"Collection"},"header":{"backgroundImage":{},"logoImage":{"id":"1*7A4lpkuHgEyGrIYzfAj4dA@2x.png","originalWidth":528,"originalHeight":72,"alt":"Better Programming"},"alignment":2,"layout":4},"streamItems":[{"createdAt":1739786134533,"randomId":"4b460cedf5b6","section":{"items":[{"post":{"postId":"bf37baef8f27"},"itemType":"post"},{"post":{"postId":"e1f66a3b0530"},"itemType":"post"},{"post":{"postId":"c5f79fc8019e"},"itemType":"post"},{"post":{"postId":"8d81fccd8250"},"itemType":"post"},{"post":{"postId":"b06825c299b8"},"itemType":"post"},{"post":{"postId":"696a0fbcfbd7"},"itemType":"post"},{"post":{"postId":"d36df47f051d"},"itemType":"post"},{"post":{"postId":"3049cf50a992"},"itemType":"post"},{"post":{"postId":"88a7c3b4f04d"},"itemType":"post"},{"post":{"postId":"e2d9f22927a4"},"itemType":"post"}],"layout":4,"heading":{"fallbackTitle":"Latest","headingBasic":{"title":"Latest"},"headingType":"headingBasic"}},"itemType":"section","type":"StreamItem"}]}) // ]]></script><script>(function(){function c(){var b=a.contentDocument||a.contentWindow.document;if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'9134e70b5c63ce83',t:'MTczOTc4NjEzNC4wMDAwMDA='};var a=document.createElement('script');a.nonce='';a.src='/cdn-cgi/challenge-platform/scripts/jsd/main.js';document.getElementsByTagName('head')[0].appendChild(a);";b.getElementsByTagName('head')[0].appendChild(d)}}if(document.body){var a=document.createElement('iframe');a.height=1;a.width=1;a.style.position='absolute';a.style.top=0;a.style.left=0;a.style.border='none';a.style.visibility='hidden';document.body.appendChild(a);if('loading'!==document.readyState)c();else if(window.addEventListener)document.addEventListener('DOMContentLoaded',c);else{var e=document.onreadystatechange||function(){};document.onreadystatechange=function(b){e(b);'loading'!==document.readyState&&(document.onreadystatechange=e,c())}}}})();</script></body></html>