1 2 3 4 5 6 7 8<!DOCTYPE html> 9<html lang="en"> 10 <head > 11 <meta charset="utf-8" /> 12 <title> 13 14 15 16 The PivotNine Blog 17 18 19 20 21 22 - PivotNine 23 24 </title> 25 <meta name="description" content="Public articles from PivotNine analysts and associates." /> 26 <meta name="viewport" content="width=device-width, initial-scale=1" /> 27 28 29 30 31 32 <link rel="stylesheet" 33 type="text/css" 34 href="/static/css/bootstrap/scss/bootstrap-utilities.1856e96c0759.css" /> 35 <link rel="stylesheet" 36 type="text/css" 37 href="/static/css/pivotnine/pn-theme.03b1f5fa63f9.css" /> 38 39 40 41 42 43 44 45 46 47
47<script type="text/javascript" 48 src="/static/js/jquery/jquery-3.7.1.min.2c872dbe60f4.js"></script>
48 49
49<script type="text/javascript" 50 src="/static/js/bootstrap/bootstrap.bundle.min.47c9a532f47b.js"></script>
50 51
51<script defer 52 type="text/javascript" 53 src="/static/js/convertkit/ck.5.aa2dc24c106f.js"></script>
53 54 55 <link rel="icon" 56 type="image/svg+xml" 57 href="/static/images/PivotNine-Brandmark-padded.ed1935783739.svg" /> 58 <!-- third-generation iPad with high-resolution Retina display: --> 59 <link rel="apple-touch-icon-precomposed" 60 sizes="144x144" 61 href="/static/images/favicons/favicon-144.bc5ae1368eaf.png" 62 type="image/png" /> 63 <!-- iPhone with high-resolution Retina display: --> 64 <link rel="apple-touch-icon-precomposed" 65 sizes="114x114" 66 href="/static/images/favicons/favicon-114.9c9f256310ba.png" 67 type="image/png" /> 68 <!-- first- and second-generation iPad: --> 69 <link rel="apple-touch-icon-precomposed" 70 sizes="72x72" 71 href="/static/images/favicons/favicon-72.4da23a40cc39.png" 72 type="image/png" /> 73 <!-- non-Retina iPhone, iPod Touch, and Android 2.1+ devices: --> 74 <link rel="apple-touch-icon-precomposed" 75 href="/static/images/favicons/favicon-64.3124978a0224.png" 76 type="image/png" /> 77 <link rel="icon" 78 sizes="128x128" 79 href="/static/images/favicons/favicon-128.7031beba025d.png" 80 type="image/png" /> 81 <link rel="icon" 82 sizes="64x64" 83 href="/static/images/favicons/favicon-64.3124978a0224.png" 84 type="image/png" /> 85 <link rel="icon" 86 sizes="32x32" 87 href="/static/images/favicons/favicon-32.ec1cd1d8cd09.png" 88 type="image/png" /> 89 <!-- basic favicon --> 90 <link rel="icon" 91 href="/static/images/favicons/favicon.4d9a68dd1182.ico" 92 type="image/vnd.microsoft.icon" /> 93 <link rel="shortcut icon" href="/static/images/favicons/favicon.4d9a68dd1182.ico" /> 94 95 96 97 98 99 100 <meta property="og:title" content="The PivotNine Blog" /> 101 102 103 104 105 <meta property="og:image" content="https://pivotnine.com/media/images/pivotnine-website-card-blog.b89745bf.fill-1200x630-c100.png" /> 106 <meta property="og:image:alt" content="The PivotNine Blog" /> 107 108 109 <meta property="og:type" content="website" /> 110 <meta property="og:url" content="https://pivotnine.com/blog/" /> 111 112 113 114 115 <link rel="alternate" 116 type="application/atom+xml" 117 title="The PivotNine Blog" 118 href="https://pivotnine.com/blog/atom/" /> 119 <link rel="alternate" 120 type="application/rss+xml" 121 title="The PivotNine Blog" 122 href="https://pivotnine.com/blog/rss/" /> 123 124 </head> 125 <body class=" 126 content-page 127"> 128 <div id="pagewrapper"> 129 130<svg xmlns="http://www.w3.org/2000/svg" style="display: none;"> 131 <symbol id="pn-brandmark" viewBox="0 0 184 184"> 132 <clipPath id="a"> 133 <path d="m0 0h184v184h-184z" id="path2" /> 134 </clipPath> 135 <g clip-path="url(#a)" id="g7"> 136 <path clip-rule="evenodd" d="m118 57c0 33.6894-27.3106 61-61 61-10.497 0-20.3747-2.651-29-7.321v73.321h-28v-10
1365.2282c-2.58432-6.762-4-14.1016-4-21.7718s1.41568-15.0098 4-21.7718v-7.2282-28h28 7.2282c6.762-2.58432 14.1016-4 21.7718-4s15.0098 1.41568 21.7718 4h105.2282v28h-73.321c4.67 8.6253 7.321 18.503 7.321 29zm-60 33c17.6731 0 32-14.3269 32-32s-14.3269-32-32-32-32 14.3269-32 32 14.3269 32 32 32z" fill="#a7152e" fill-rule="evenodd" id="path5" /> 137 </g> 138 </symbol> 139 <symbol id="pn-ribbon" ViewBox="0 0 120 230"> 140 <path d="M 0,0 H 120 V 430 H 0 Z" fill="#a7152e" id="path5" style="stroke-width:1.21378" /> 141 <path clip-rule="evenodd" d="m 69.0435,47.8261 c 0,11.718 -9.4994,21.2174 -21.2174,21.2174 -3.6511,0 -7.0869,-0.9222 -10.087,-2.5465 V 92 H 28 V 28 h 64 v 9.7391 H 66.497 c 1.6242,3.0001 2.5465,6.4359 2.5465,10.087 z M 48.1739,59.3044 c 6.1472,0 11.1304,-4.9833 11.1304,-11.1305 0,-6.1471 -4.9832,-11.1304 -11.1304,-11.1304 -6.1472,0 -11.1304,4.9833 -11.1304,11.1304 0,6.1472 4.9832,11.1305 11.1304,11.1305 z" fill="#ffffff" fill-rule="evenodd" id="path7" sodipodi:nodetypes="sscccccccssssss" /> 142 </symbol> 143 <symbol id="pn-logo" viewBox="0 0 1172 225.99999"> 144 <defs id="defs15" /> 145 <clipPath id="a"> 146 <path d="m 987.006,40.8625 h 184 v 184 h -184 z" id="path2" /> 147 </clipPath> 148 <g id="g20" transform="translate(0.497,0.56875)"> 149 <path clip-rule="evenodd" d="M 67.696,0 H 0 V 148.4 H 24.38 V 97.52 H 67.696 C 95.68,97.52 110.88,76.108 110.88,48.76 110.88,21.2 95.68,0 67.696,0 Z m -1,74.624 H 24.38 V 22.896 h 42.316 c 14.416,0 19.804,10.812 19.804,25.864 0,14.84 -5.388,25.864 -19.804,25.864 z m 74.377,-47.12 c 7.506,0 13.63,-6.3211 13.63,-13.63 0,-7.50636 -6.124,-13.629981 -13.63,-13.629981 -7.507,0 -13.63,6.123621 -13.63,13.629981 0,7.3089 6.123,13.63 13.63,13.63 z M 152.519,148.4 h -22.896 v -106 h 22.896 z m 42.364,-106 29.68,80.56 h 5.597 L 259.84,42.4 h 25.016 l -41.34,106 h -32.309 l -41.34,-106 z m 151.614,108.756 c 31.164,0 55.969,-24.38 55.969,-55.756 0,-31.588 -24.805,-55.756 -55.969,-55.756 -30.951,0 -55.967,24.168 -55.967,55.756 0,31.376 25.016,55.756 55.967,55.756 z m 0,-22.26 c -18.656,0 -33.071,-14.204 -33.071,-33.496 0,-19.292 14.415,-33.496 33.071,-33.496 18.657,0 33.072,14.204 33.072,33.496 0,19.292 -14.415,33.496 -33.072,33.496 z M 481.306,42.4 v 22.048 h -26.288 v 50.88 c 0,13.568 8.904,13.356 26.288,12.508 V 148.4 c -35.192,4.24 -49.184,-5.512 -49.184,-33.072 V 64.448 H 412.618 V 42.4 h 19.504 V 19.504 L 455.018,12.72 V 42.4 Z M 594.692,0 V 100.7 L 524.732,0 h -19.08 v 148.4 h 24.379 V 47.7 l 69.96,100.7 h 19.081 V 0 Z m 76.674,13.874 c 0,7.3089 -6.124,13.63 -13.63,13.63 -7.506,0 -13.63,-6.3211 -13.63,-13.63 0,-7.50636 6.124,-13.629981 13.63,-13.629981 7.506,0 13.63,6.123621 13.63,13.629981 z M 646.286,148.4 h 22.896 V 42.4 H 646.286 Z M 751.583,39.644 c -14.416,0 -25.864,5.3 -32.86,16.324 V 42.4 h -22.896 v 106 h 22.896 V 91.5841 c 0,-21.624 11.872,-30.5281 26.924,-30.5281 14.416,0 23.744,8.48 23.744,24.592 V 148.4 h 22.895 V 83.316 c 0,-27.5599 -16.959,-43.672 -40.703,-43.672 z m 168.813,65.508 H 836.02 c 3.604,16.536 16.96,25.016 33.92,25.016 12.72,0 22.26,-5.724 27.348,-13.144 l 18.868,11.024 c -9.752,14.416 -25.652,23.108 -46.428,23.108 -34.98,0 -57.664,-23.956 -57.664,-55.756 0,-31.376 22.684,-55.756 55.968,-55.756 31.588,0 53.212,25.44 53.212,55.968 0,3.18 -0.424,6.572 -0.848,9.54 z M 867.82,60.42 c -17.172,0 -28.832,10.176 -32.012,26.076 h 62.328 C 894.956,68.264 881.6,60.42 867.82,60.42 Z" fill="#1b2027" fill-rule="evenodd" id="path5" /> 150 <g clip-path="url(#a)" id="g9"> 151 <path clip-rule="evenodd" d="m 1105.01,97.8625 c 0,33.6895 -27.32,61.0005 -61,61.0005 -10.5,0 -20.38,-2.652 -29,-7.321 v 73.321 H 987.006 V 119.634 c -2.585,-6.762 -4,-14.101 -4,-21.7715 0,-7.6702 1.415,-15.0098 4,-21.7717 v -7.2283 -28 h 28.004 7.22 c 6.77,-2.5843 14.11,-4 21.78,-4 7.67,0 15.01,1.4157 21.77,4 h 105.23 v 28 h -73.33 c 4.67,8.6253 7.33,18.5031 7.33,29 z m -60,33.0005 c 17.67,0 32,-14.327 32,-32.0005 0,-17.6731 -14.33,-32 -32,-32 -17.68,0 -32,14.3269 -32,32 0,17.6735 14.32,32.0005 32,32.0005 z" fill="#a7152e" fill-rule="evenodd" id="path7" /> 152 </g> 153 </g> 154 </symbol> 155 <symbol id="pn-logotype" viewBox="0 0 922 152"> 156 <path clip-rule="evenodd" d="m67.696 0h-67.696v148.4h24.38v-50.88h43.316c27.984 0 43.184-21.412 43.184-48.76 0-27.56-15.2-48.76-43.184-48.76zm-1 74.624h-42.316v-51.728h42.316c14.416 0 19.804 10.812 19.804 25.864 0 14.84-5.388 25.864-19.804 25.864zm74.377-47.12c7.506 0 13.63-6.3211 13.63-13.63 0-7.50636-6.124-13.629981-13.63-13.629981-7.507 0-13.63 6.123621-13.63 13.629981 0 7.3089 6.123 13.63 13.63 13.63zm
15611.446 120.896h-22.896v-106h22.896zm42.364-106 29.68 80.56h5.597l29.68-80.56h25.016l-41.34 106h-32.309l-41.34-106zm151.614 108.756c31.164 0 55.969-24.38 55.969-55.756 0-31.588-24.805-55.756-55.969-55.756-30.951 0-55.967 24.168-55.967 55.756 0 31.376 25.016 55.756 55.967 55.756zm0-22.26c-18.656 0-33.071-14.204-33.071-33.496s14.415-33.496 33.071-33.496c18.657 0 33.072 14.204 33.072 33.496s-14.415 33.496-33.072 33.496zm134.809-86.496v22.048h-26.288v50.88c0 13.568 8.904 13.356 26.288 12.508v20.564c-35.192 4.24-49.184-5.512-49.184-33.072v-50.88h-19.504v-22.048h19.504v-22.896l22.896-6.784v29.68zm113.386-42.4v100.7l-69.96-100.7h-19.08v148.4h24.379v-100.7l69.96 100.7h19.081v-148.4zm76.674 13.874c0 7.3089-6.124 13.63-13.63 13.63s-13.63-6.3211-13.63-13.63c0-7.50636 6.124-13.629981 13.63-13.629981s13.63 6.123621 13.63 13.629981zm-25.08 134.526h22.896v-106h-22.896zm105.297-108.756c-14.416 0-25.864 5.3-32.86 16.324v-13.568h-22.896v106h22.896v-56.8159c0-21.624 11.872-30.5281 26.924-30.5281 14.416 0 23.744 8.48 23.744 24.592v62.752h22.895v-65.084c0-27.5599-16.959-43.672-40.703-43.672zm168.813 65.508h-84.376c3.604 16.536 16.96 25.016 33.92 25.016 12.72 0 22.26-5.724 27.348-13.144l18.868 11.024c-9.752 14.416-25.652 23.108-46.428 23.108-34.98 0-57.664-23.956-57.664-55.756 0-31.376 22.684-55.756 55.968-55.756 31.588 0 53.212 25.44 53.212 55.968 0 3.18-.424 6.572-.848 9.54zm-52.576-44.732c-17.172 0-28.832 10.176-32.012 26.076h62.328c-3.18-18.232-16.536-26.076-30.316-26.076z" fill="#fff" fill-rule="evenodd" /> 157 </symbol> 158 <symbol id="pn-logotype-white" viewBox="0 0 1172 226"> 159 <clipPath id="a"> 160 <path d="m987.006 41.7251h184v184h-184z" id="path2" /> 161 </clipPath> 162 <path clip-rule="evenodd" d="m67.696.862549h-67.696v148.400451h24.38v-50.8804h43.316c27.984 0 43.184-21.412 43.184-48.76 0-27.56-15.2-48.760051-43.184-48.760051zm-1 74.624051h-42.316v-51.728h42.316c14.416 0 19.804 10.812 19.804 25.864 0 14.84-5.388 25.864-19.804 25.864zm74.377-47.12c7.506 0 13.63-6.3212 13.63-13.63 0-7.50641-6.124-13.63003-13.63-13.63003-7.507 0-13.63 6.12362-13.63 13.63003 0 7.3088 6.123 13.63 13.63 13.63zm11.446 120.8964h-22.896v-106.0004h22.896zm42.364-106.0004 29.68 80.5604h5.597l29.68-80.5604h25.016l-41.34 106.0004h-32.309l-41.34-106.0004zm151.614 108.7564c31.164 0 55.969-24.38 55.969-55.7564 0-31.588-24.805-55.756-55.969-55.756-30.951 0-55.967 24.168-55.967 55.756 0 31.3764 25.016 55.7564 55.967 55.7564zm0-22.26c-18.656 0-33.071-14.204-33.071-33.4964 0-19.292 14.415-33.496 33.071-33.496 18.657 0 33.072 14.204 33.072 33.496 0 19.2924-14.415 33.4964-33.072 33.4964zm134.809-86.4965v22.048h-26.288v50.8805c0 13.568 8.904 13.356 26.288 12.508v20.564c-35.192 4.24-49.184-5.512-49.184-33.072v-50.8805h-19.504v-22.048h19.504v-22.896l22.896-6.784v29.68zm113.386-42.399951v100.700451l-69.96-100.700451h-19.08v148.400451h24.379v-100.7004l69.96 100.7004h19.081v-148.400451zm76.674 13.874051c0 7.3088-6.124 13.63-13.63 13.63s-13.63-6.3212-13.63-13.63c0-7.50641 6.124-13.63003 13.63-13.63003s13.63 6.12362 13.63 13.63003zm-25.08 134.5264h22.896v-106.0004h-22.896zm105.297-108.7564c-14.416 0-25.864 5.3-32.86 16.324v-13.568h-22.896v106.0004h22.896v-56.8164c0-21.624 11.872-30.528 26.924-30.528 14.416 0 23.744 8.48 23.744 24.592v62.7524h22.895v-65.0844c0-27.56-16.959-43.672-40.703-43.672zm168.813 65.5084h-84.376c3.604 16.536 16.96 25.016 33.92 25.016 12.72 0 22.26-5.724 27.348-13.144l18.868 11.024c-9.752 14.416-25.652 23.108-46.428 23.108-34.98 0-57.664-23.956-57.664-55.7564 0-31.376 22.684-55.756 55.968-55.756 31.588 0 53.212 25.44 53.212 55.968 0 3.18-.424 6.5724-.848 9.5404zm-52.576-44.7324c-17.172 0-28.832 10.176-32.012 26.076h62.328c-3.18-18.232-16.536-26.076-30.316-26.076z" fill="#fff" fill-rule="evenodd" id="path5" /> 163 <g clip-path="url(#a)" id="g9" style="fill:#ffffff"> 164 <path clip-rule="evenodd" d="m1105.01 98.7251c0 33.6889-27.32 60.9999-61 60.9999-10.5 0-20.38-2.651-29-7.321v73.321h-28.004v-105.228c-2.585-6.762-4-14.102-4-21.7719 0-7.6702 1.415-15.0098 4-21.7718v-7.2282-28h28.004 7.22c6.77-2.5843 14.11-4 21.78-4s15.01 1.4157 21.77 4h105.23v28h-73.33c4.67 8.6253 7.33 18.503 7.33 29zm-60 32.9999c17.67 0 32-14.327 32-31.9999 0-17.6731-14.33-32-32-32-17.68 0-32 14.3269-32 32 0 17.6729 14.32 31.9999 32 31.9999z" fill="#a7152e" fill-rule="evenodd" id="path7" style="fill:#ffffff" /> 165 </g> 166 </symbol> 167 <symbol id="check" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 16 16"> 168 <path d="M10.97 4.97a.75.75 0 0 1 1.07 1.05l-3.99 4.99a.75.75 0 0 1-1.08.02L4.324 8.384a.75.75 0 1 1 1.06-1.06l2.094 2.093 3.473-4.425a.267.267 0 0 1 .02-.022z" /> 169 </symbol> 170</svg> 171 172 173 174 <header id="base_siteheader"> 175 <div class="bg-dark"> 176 177 <div class="container"> 178 179 180<nav class="navbar navbar-expand-lg navbar-dark bg-dark" 181 aria-label="Navbar"> 182 <div class="container-fluid"> 183 <a href="/" class="navbar-brand"> 184 <svg class="bi me-2 mt-2" 185 width="40" 186 height="32" 187 role="img" 188 aria-label="PivotNine"> 189 <use xlink:href="#pn-brandmark"></use> 190 </svg>
191 <span id="site-title"> 192 <svg class="me-2 mb-2" 193 width="100" 194 height="32" 195 role="img" 196 aria-label="PivotNine"> 197 <use xlink:href="#pn-logotype"></use> 198 </svg> 199 </span> 200 </a> 201 <button class="navbar-toggler" 202 type="button" 203 data-bs-toggle="collapse" 204 data-bs-target="#navbarSite" 205 aria-controls="navbarSite" 206 aria-expanded="false" 207 aria-label="Toggle navigation"> 208 <span class="navbar-toggler-icon"></span> 209 </button> 210 <div id="navbarSite" class="collapse navbar-collapse"> 211 <ul class="navbar-nav me-auto mb-2 mb-sm-0"> 212 213 214 <li class="nav-item"> 215 <a class="nav-link " 216 href="/services/" 217 title="Services">Services</a> 218 </li> 219 220 221 222 <li class="nav-item"> 223 <a class="nav-link " 224 href="/research/" 225 title="Research">Research</a> 226 </li> 227 228 229 230 <li class="nav-item"> 231 <a class="nav-link " 232 href="/newsletter/" 233 title="Newsletter">Newsletter</a> 234 </li> 235 236 237 238 <li class="nav-item"> 239 <a class="nav-link active" 240 href="/blog/" 241 title="Blog">Blog</a> 242 </li> 243 244 245 246 <li class="nav-item"> 247 <a class="nav-link " 248 href="/company/" 249 title="Company">Company</a> 250 </li> 251 252 253 </ul> 254 255 <div id="searchnav" class="me-2"> 256 <a href="/search/"> 257 <button class="btn btn-gold-700">Search</button> 258 </a> 259 </div> 260 261 262 263 264 265 266 <div class="dropdown text-end"> 267 <a href="/accounts/login/"> 268 <button class="btn btn-outline-light me-2" type="button">Login</button> 269 </a> 270 </div> 271 272 273 274 275 </div> 276 </div> 277</nav> 278</div> 279 280 </div> 281 </header> 282 283 284 285 286 287 <main role="content_wrapper" 288 class="content-wrapper "> 289 290 291 292 <div class="text-bg-dark pn-page-header"> 293 <div class="pn-pattern-cover"> 294 <div class="container py-7 pn-title-blank"></div> 295 </div> 296 </div> 297 298 299 300 301 <div class="container py-3" id="hero-post"> 302 <div class="center"> 303 304 <div class="offset-hero"> 305 306<div class="container"> 307 <div class="row row-cols-1 row-cols-md-1 row-cols-lg-2 pn-featured"> 308 <div class="col-md"> 309 <a href="/blog/python-software-foundation-shows-everyone-what-integrity-looks-like/"> 310 <div class="container pt-4"> 311 312 <picture><source srcset="/media/images/towfiqu-barbhuiy.2e16d0ba.format-avif.fill-300x200-c100.avif 300w, /media/images/towfiqu-barbhuiy.2e16d0ba.format-avif.fill-600x400-c100.avif 600w, /media/images/towfiqu-barbhuiy.2e16d0ba.format-avif.fill-900x600-c100.avif 900w, /media/images/towfiqu-barbhui.2e16d0ba.format-avif.fill-1200x800-c100.avif 1200w" sizes="(max-width: 400px) 300px, (max-width: 700px) 600px, (max-width: 1000px) 900px, 1200px" type="image/avif"><source srcset="/media/images/towfiqu-barbhuiy.2e16d0ba.format-webp.fill-300x200-c100.webp 300w, /media/images/towfiqu-barbhuiy.2e16d0ba.format-webp.fill-600x400-c100.webp 600w, /media/images/towfiqu-barbhuiy.2e16d0ba.format-webp.fill-900x600-c100.webp 900w, /media/images/towfiqu-barbhui.2e16d0ba.format-webp.fill-1200x800-c100.webp 1200w" sizes="(max-width: 400px) 300px, (max-width: 700px) 600px, (max-width: 1000px) 900px, 1200px" type="image/webp"><source srcset="/media/images/towfiqu-barbhuiya.2e16d0ba.format-jpeg.fill-300x200-c100.jpg 300w, /media/images/towfiqu-barbhuiya.2e16d0ba.format-jpeg.fill-600x400-c100.jpg 600w, /media/images/towfiqu-barbhuiya.2e16d0ba.format-jpeg.fill-900x600-c100.jpg 900w, /media/images/towfiqu-barbhuiy.2e16d0ba.format-jpeg.fill-1200x800-c100.jpg 1200w" sizes="(max-width: 400px) 300px, (max-width: 700px) 600px, (max-width: 1000px) 900px, 1200px" type="image/jpeg"><img alt="A person'
312s raised fist against a black background." class="w-100 img-fluid" height="200" sizes="(max-width: 400px) 300px, (max-width: 700px) 600px, (max-width: 1000px) 900px, 1200px" src="/media/images/towfiqu-barbhuiya-.2e16d0ba.format-png.fill-300x200-c100.png" srcset="/media/images/towfiqu-barbhuiya-.2e16d0ba.format-png.fill-300x200-c100.png 300w, /media/images/towfiqu-barbhuiya-.2e16d0ba.format-png.fill-600x400-c100.png 600w, /media/images/towfiqu-barbhuiya-.2e16d0ba.format-png.fill-900x600-c100.png 900w, /media/images/towfiqu-barbhuiya.2e16d0ba.format-png.fill-1200x800-c100.png 1200w" width="300"></picture> 313 314 </div> 315 <span class="visually-hidden-focusable">Python Software Foundation Shows Everyone What Integrity Looks Like</span> 316 </a> 317 </div> 318 <div class="col-md pt-4"> 319 <h2 class="display-4"> 320 <a href="/blog/python-software-foundation-shows-everyone-what-integrity-looks-like/" title="Python Software Foundation Shows Everyone What Integrity Looks Like">Python Software Foundation Shows Everyone What Integrity Looks Like</a> 321 </h2> 322 <div>The Python Software Foundation turned down a $1.5m grant rather than betray its mission or its values.</div> 323 324 325 326<div class="d-flex flex-wrap metabox"> 327 328 <div class="itemdate specialfont me-4">28 October 2025</div> 329 330 <div class="author specialfont me-4">Justin Warren</div> 331 332 333 334 335 336 337 338 339 340 341 342 <div class="taglist d-flex flex-wrap align-items-center"> 343 344 <div class="metaterm specialfont px-2 m-1"> 345 <a href="/categories/blog">Blog</a> 346 </div> 347 348 349 <div class="metaterm specialfont px-2 m-1"> 350 <a href="/companies/facebook">Facebook</a> 351 </div> 352 353 <div class="metaterm specialfont px-2 m-1"> 354 <a href="/companies/google">Google</a> 355 </div> 356 357 <div class="metaterm specialfont px-2 m-1"> 358 <a href="/companies/ieee">IEEE</a> 359 </div> 360 361 <div class="metaterm specialfont px-2 m-1"> 362 <a href="/companies/psf">PSF</a> 363 </div> 364 365 <div class="metaterm specialfont px-2 m-1"> 366 <a href="/companies/redmonk">Redmonk</a> 367 </div> 368 369 <div class="metaterm specialfont px-2 m-1"> 370 <a href="/companies/stackoverflow">StackOverflow</a> 371 </div> 372 373 <div class="metaterm specialfont px-2 m-1"> 374 <a href="/companies/youtube">YouTube</a> 375 </div> 376 377 378 <div class="metaterm specialfont px-2 m-1"> 379 <a href="/tags/aiml">AI/ML</a> 380 </div> 381 382 <div class="metaterm specialfont px-2 m-1"> 383 <a href="/tags/cisa">CISA</a> 384 </div> 385 386 <div class="metaterm specialfont px-2 m-1"> 387 <a href="/tags/dei">DEI</a> 388 </div> 389 390 <div class="metaterm specialfont px-2 m-1"> 391 <a href="/tags/germany">Germany</a> 392 </div> 393 394 <div class="metaterm specialfont px-2 m-1"> 395 <a href="/tags/jupyter-notebooks">Jupyter notebooks</a> 396 </div> 397 398 <div class="metaterm specialfont px-2 m-1"> 399 <a href="/tags/pypi">PyPI</a> 400 </div> 401 402 <div class="metaterm specialfont px-2 m-1"> 403 <a href="/tags/pytorch">PyTorch</a> 404 </div> 405 406 <div class="metaterm specialfont px-2 m-1"> 407 <a href="/tags/python">Python</a> 408 </div> 409 410 <div class="metaterm specialfont px-2 m-1"> 411 <a href="/tags/tensorflow">TensorFlow</a> 412 </div> 413 414 <div class="metaterm specialfont px-2 m-1"> 415 <a href="/tags/cybersecurity">cybersecurity</a> 416 </div> 417 418 <div class="metaterm specialfont px-2 m-1"> 419 <a href="/tags/datacenter">datacenter</a> 420 </div> 421 422 <div class="metaterm specialfont px-2 m-1"> 423 <a href="/tags/funding">funding</a> 424 </div> 425 426 <div class="metaterm specialfont px-2 m-1"> 427 <a href="/tags/grant">grant</a> 428 </div> 429 430 <div class="metaterm specialfont px-2 m-1"> 431 <a href="/tags/open-source">open source</a> 432 </div> 433 434 <div class="metaterm specialfont px-2 m-1"> 435 <a href="/tags/pandas">pandas</a> 436 </div> 437 438 <div class="metaterm specialfont px-2 m-1"> 439 <a href="/tags/security">security</a> 440 </div> 441 442 <div class="metaterm specialfont px-2 m-1"> 443 <a href="/tags/sovereign-tech-fund">sovereign-tech-fund</a> 444 </div> 445 446 </div> 447 448 449 450 451 452</div> 453 454 </div> 455 </div> 456</div> 457</div> 458 459 </div> 460 </div> 461 <div class="container py-3" id="content-pages"> 462 463 <div class="row row-cols-1 row-cols-sm-1 row-cols-lg-3 g-4 px-3 px-lg-0"> 464 465 <div class="col-sm"> 466 467 468<div class="card h-100 border-0"> 469 <a href="/blog/platform-engineering-labs-launches-formae-to-modernize-infrastru
469cture-management/"> 470 471 472 <picture><source srcset="/media/images/pivotnine-websit.b89745bf.format-avif.fill-300x200-c100.avif 300w, /media/images/pivotnine-websit.b89745bf.format-avif.fill-600x400-c100.avif 600w, /media/images/pivotnine-websit.b89745bf.format-avif.fill-900x600-c100.avif 900w" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" type="image/avif"><source srcset="/media/images/pivotnine-websit.b89745bf.format-webp.fill-300x200-c100.webp 300w, /media/images/pivotnine-websit.b89745bf.format-webp.fill-600x400-c100.webp 600w, /media/images/pivotnine-websit.b89745bf.format-webp.fill-900x600-c100.webp 900w" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" type="image/webp"><source srcset="/media/images/pivotnine-website.b89745bf.format-jpeg.fill-300x200-c100.jpg 300w, /media/images/pivotnine-website.b89745bf.format-jpeg.fill-600x400-c100.jpg 600w, /media/images/pivotnine-website.b89745bf.format-jpeg.fill-900x600-c100.jpg 900w" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" type="image/jpeg"><img alt="pivotnine-website-card-blog" class="card-img-top ratio ratio-3x2 img-fluid" height="200" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" src="/media/images/pivotnine-website-.b89745bf.format-png.fill-300x200-c100.png" srcset="/media/images/pivotnine-website-.b89745bf.format-png.fill-300x200-c100.png 300w, /media/images/pivotnine-website-.b89745bf.format-png.fill-600x400-c100.png 600w, /media/images/pivotnine-website-.b89745bf.format-png.fill-900x600-c100.png 900w" width="300"></picture> 473 474 475 <span class="visually-hidden-focusable">Platform Engineering Labs Launches Formae to Modernize Infrastructure Management</span> 476 </a> 477 <div class="card-body p-0"> 478 <h3 class="card-title pt-3 pt-lg-1"> 479 <a href="/blog/platform-engineering-labs-launches-formae-to-modernize-infrastructure-management/">Platform Engineering Labs Launches Formae to Modernize Infrastructure Management</a> 480 </h3> 481 <div class="card-text text-muted d-flex flex-wrap metabox"> 482 483 484<div class="d-flex flex-wrap metabox"> 485 486 <div class="itemdate specialfont me-4">23 October 2025</div> 487 488 <div class="author specialfont me-4">Justin Warren</div> 489 490 491 492 493</div> 494</div> 495 <p class="card-text">
495Infrastructure-as-code company Platform Engineering Labs has announced the 496launch of formae, an infrastructure-as-code (IaC) tool for DevOps and platform teams 497managing cloud-based infrastructure.</p> 498 </div> 499</div> 500</div> 501 502 <div class="col-sm"> 503 504 505<div class="card h-100 border-0"> 506 <a href="/blog/microsoft-positions-sentinel-as-the-central-platform-for-agentic-security/"> 507 508 509 <picture><source srcset="/media/images/helen-majska-JwM.2e16d0ba.format-avif.fill-300x200-c100.avif 300w, /media/images/helen-majska-JwM.2e16d0ba.format-avif.fill-600x400-c100.avif 600w, /media/images/helen-majska-JwM.2e16d0ba.format-avif.fill-900x600-c100.avif 900w" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" type="image/avif"><source srcset="/media/images/helen-majska-JwM.2e16d0ba.format-webp.fill-300x200-c100.webp 300w, /media/images/helen-majska-JwM.2e16d0ba.format-webp.fill-600x400-c100.webp 600w, /media/images/helen-majska-JwM.2e16d0ba.format-webp.fill-900x600-c100.webp 900w" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" type="image/webp"><source srcset="/media/images/helen-majska-JwMw.2e16d0ba.format-jpeg.fill-300x200-c100.jpg 300w, /media/images/helen-majska-JwMw.2e16d0ba.format-jpeg.fill-600x400-c100.jpg 600w, /media/images/helen-majska-JwMw.2e16d0ba.format-jpeg.fill-900x600-c100.jpg 900w" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" type="image/jpeg"><img alt="A statue of an angel with its hands clasped in prayer." class="card-img-top ratio ratio-3x2 img-fluid" height="200" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" src="/media/images/helen-majska-JwMwk.2e16d0ba.format-png.fill-300x200-c100.png" srcset="/media/images/helen-majska-JwMwk.2e16d0ba.format-png.fill-300x200-c100.png 300w, /media/images/helen-majska-JwMwk.2e16d0ba.format-png.fill-600x400-c100.png 600w, /media/images/helen-majska-JwMwk.2e16d0ba.format-png.fill-900x600-c100.png 900w" width="300"></picture> 510 511 512 <span class="visually-hidden-focusable">Microsoft Positions Sentinel As The Central Platform for Agentic Security</span> 513 </a> 514 <div class="card-body p-0"> 515 <h3 class="card-title pt-3 pt-lg-1"> 516 <a href="/blog/microsoft-positions-sentinel-as-the-central-platform-for-agentic-security/">Microsoft Positions Sentinel As The Central Platform for Agentic Security</a> 517 </h3> 518 <div class="card-text text-muted d-flex flex-wrap metabox"> 519 520 521<div class="d-flex flex-wrap metabox"> 522 523 <div class="itemdate specialfont me-4">13 October 2025</div> 524 525 <div class="author specialfont me-4">Justin Warren</div> 526 527 528 529 530</div> 531</div> 532 <p class="card-text">Microsoft would like customers to choose Sentinel as the core of their security strategy, but what that choice entails remains unclear.</p> 533 </div> 534</div> 535</div> 536 537 <div class="col-sm"> 538 539 540<div class="card h-100 border-0"> 541 <a href="/blog/open-source-has-too-many-parasocial-relationships/"> 542 543 544 <picture><source srcset="/media/images/chris-ried-ieic5.2e16d0ba.format-avif.fill-300x200-c100.avif 300w, /media/images/chris-ried-ieic5.2e16d0ba.format-avif.fill-600x400-c100.avif 600w, /media/images/chris-ried-ieic5.2e16d0ba.format-avif.fill-900x600-c100.avif 900w" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" type="image/avif"><source srcset="/media/images/chris-ried-ieic5.2e16d0ba.format-webp.fill-300x200-c100.webp 300w, /media/images/chris-ried-ieic5.2e16d0ba.format-webp.fill-600x400-c100.webp 600w, /media/images/chris-ried-ieic5.2e16d0ba.format-webp.fill-900x600-c100.webp 900w" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" type="image/webp"><source srcset="/media/images/chris-ried-ieic5T.2e16d0ba.format-jpeg.fill-300x200-c100.jpg 300w, /media/images/chris-ried-ieic5T.2e16d0ba.format-jpeg.fill-600x400-c100.jpg 600w, /media/images/chris-ried-ieic5T.2e16d0ba.format-jpeg.fill-900x600-c100.jpg 900w" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" type="image/jpeg"><img alt="A laptop screen shows some Python code with coloured syntax highlighting." class="card-img-top ratio ratio-3x2 img-fluid" height="200" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" src="/media/images/chris-ried-ieic5Tq.2e16d0ba.format-png.fill-300x200-c100.png" srcset="/media/images/chris-ried-ieic5Tq.2e16d0ba.format-png.fill-300x200-c100.png 300w, /media/images/chris-ried-ieic5Tq.2e16d0ba.format-png.fill-600x400-c100.png 600w, /media/images/chris-ried-ieic5Tq.2e16d0ba.format-png.fill-900x600-c100.png 900w" width="300"></picture> 545 546 547 <span class="visually-hidden-focusable">Open Source Has Too Many Parasocial Relationships</span> 548 </a> 549 <div class="card-body p-0"> 550 <h3 class="card-title pt-3 pt-lg-1"> 551 <a href="/blog/open-source-has-too-many-parasocial-relationships/">Open Source Has Too Many Parasocial Relationships</a> 552 </h3> 553 <div class="card-text text-muted d-flex flex-wrap metabox"> 554 555 556<div class="d-flex flex-wrap metabox"> 557 558 <div class="itemdate specialfont me-4">19 September 2025</div> 559 560 <div class="author specialfont me-4">Justin Warren</div> 561 562 563 564 565</div> 566</div> 567 <p class="card-text">
567The people who wrote the software you found on the side of the Internet for free donât owe you anything.</p> 568 </div> 569</div> 570</div> 571 572 <div class="col-sm"> 573 574 575<div class="card h-100 border-0"> 576 <a href="/blog/system-initiative-adds-llm-connectivity-to-generate-automations/"> 577 578 579 <picture><source srcset="/media/images/si-ai-native-202.2e16d0ba.format-avif.fill-300x200-c100.avif 300w, /media/images/si-ai-native-202.2e16d0ba.format-avif.fill-600x400-c100.avif 600w, /media/images/si-ai-native-202.2e16d0ba.format-avif.fill-900x600-c100.avif 900w" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" type="image/avif"><source srcset="/media/images/si-ai-native-202.2e16d0ba.format-webp.fill-300x200-c100.webp 300w, /media/images/si-ai-native-202.2e16d0ba.format-webp.fill-600x400-c100.webp 600w, /media/images/si-ai-native-202.2e16d0ba.format-webp.fill-900x600-c100.webp 900w" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" type="image/webp"><source srcset="/media/images/si-ai-native-2025.2e16d0ba.format-jpeg.fill-300x200-c100.jpg 300w, /media/images/si-ai-native-2025.2e16d0ba.format-jpeg.fill-600x400-c100.jpg 600w, /media/images/si-ai-native-2025.2e16d0ba.format-jpeg.fill-900x600-c100.jpg 900w" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" type="image/jpeg"><img alt="A screenshot of the System Initiative interface showing the AI/LLM agent interface." class="card-img-top ratio ratio-3x2 img-fluid" height="200" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" src="/media/images/si-ai-native-2025-.2e16d0ba.format-png.fill-300x200-c100.png" srcset="/media/images/si-ai-native-2025-.2e16d0ba.format-png.fill-300x200-c100.png 300w, /media/images/si-ai-native-2025-.2e16d0ba.format-png.fill-600x400-c100.png 600w, /media/images/si-ai-native-2025-.2e16d0ba.format-png.fill-900x600-c100.png 900w" width="300"></picture> 580 581 582 <span class="visually-hidden-focusable">System Initiative Adds LLM Connectivity To Generate Automations</span> 583 </a> 584 <div class="card-body p-0"> 585 <h3 class="card-title pt-3 pt-lg-1"> 586 <a href="/blog/system-initiative-adds-llm-connectivity-to-generate-automations/">System Initiative Adds LLM Connectivity To Generate Automations</a> 587 </h3> 588 <div class="card-text text-muted d-flex flex-wrap metabox"> 589 590 591<div class="d-flex flex-wrap metabox"> 592 593 <div class="itemdate specialfont me-4">27 August 2025</div> 594 595 <div class="author specialfont me-4">Justin Warren</div> 596 597 598 599 600</div> 601</div> 602 <p class="card-text">System Initiative has announced support for so-called âAI Agentsâ for infrastru
602cture automation tasks.</p> 603 </div> 604</div> 605</div> 606 607 <div class="col-sm"> 608 609 610<div class="card h-100 border-0"> 611 <a href="/blog/musings-on-the-ai-con/"> 612 613 614 <picture><source srcset="/media/images/IMG_4477.2e16d0ba.format-avif.fill-300x200-c100.avif 300w, /media/images/IMG_4477.2e16d0ba.format-avif.fill-600x400-c100.avif 600w, /media/images/IMG_4477.2e16d0ba.format-avif.fill-900x600-c100.avif 900w" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" type="image/avif"><source srcset="/media/images/IMG_4477.2e16d0ba.format-webp.fill-300x200-c100.webp 300w, /media/images/IMG_4477.2e16d0ba.format-webp.fill-600x400-c100.webp 600w, /media/images/IMG_4477.2e16d0ba.format-webp.fill-900x600-c100.webp 900w" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" type="image/webp"><source srcset="/media/images/IMG_4477.2e16d0ba.format-jpeg.fill-300x200-c100.jpg 300w, /media/images/IMG_4477.2e16d0ba.format-jpeg.fill-600x400-c100.jpg 600w, /media/images/IMG_4477.2e16d0ba.format-jpeg.fill-900x600-c100.jpg 900w" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" type="image/jpeg"><img alt="Emily M Bender's signature stamp." class="card-img-top ratio ratio-3x2 img-fluid" height="200" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" src="/media/images/IMG_4477.2e16d0ba.format-png.fill-300x200-c100.png" srcset="/media/images/IMG_4477.2e16d0ba.format-png.fill-300x200-c100.png 300w, /media/images/IMG_4477.2e16d0ba.format-png.fill-600x400-c100.png 600w, /media/images/IMG_4477.2e16d0ba.format-png.fill-900x600-c100.png 900w" width="300"></picture> 615 616 617 <span class="visually-hidden-focusable">Musings on The AI Con</span> 618 </a> 619 <div class="card-body p-0"> 620 <h3 class="card-title pt-3 pt-lg-1"> 621 <a href="/blog/musings-on-the-ai-con/">Musings on The AI Con</a> 622 </h3> 623 <div class="card-text text-muted d-flex flex-wrap metabox"> 624 625 626<div class="d-flex flex-wrap metabox"> 627 628 <div class="itemdate specialfont me-4">08 July 2025</div> 629 630 <div class="author specialfont me-4">Justin Warren</div> 631 632 633 634 635</div> 636</div> 637 <p class="card-text">Reflections after hearing Prof Emily M. Bender and Dr Kobi Leins speak on The AI Con, on 1 July 2025.</p> 638 </div> 639</div> 640</div> 641 642 <div class="col-sm"> 643 644 645<div class="card h-100 border-0"> 646 <a href="/blog/using-ai-both-helps-and-hinders-cybersecurity/"> 647 648 649 <picture><source srcset="/media/images/thisisengineerin.ba31d3f0.format-avif.fill-300x200-c100.avif 300w, /media/images/thisisengineerin.ba31d3f0.format-avif.fill-600x400-c100.avif 600w, /media/images/thisisengineerin.ba31d3f0.format-avif.fill-900x600-c100.avif 900w" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" type="image/avif"><source srcset="/media/images/thisisengineerin.ba31d3f0.format-webp.fill-300x200-c100.webp 300w, /media/images/thisisengineerin.ba31d3f0.format-webp.fill-600x400-c100.webp 600w, /media/images/thisisengineerin.ba31d3f0.format-webp.fill-900x600-c100.webp 900w" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" type="image/webp"><source srcset="/media/images/thisisengineering.ba31d3f0.format-jpeg.fill-300x200-c100.jpg 300w, /media/images/thisisengineering.ba31d3f0.format-jpeg.fill-600x400-c100.jpg 600w, /media/images/thisisengineering.ba31d3f0.format-jpeg.fill-900x600-c100.jpg 900w" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" type="image/jpeg"><img alt="A red-haired woman writes code at a desk with 2 screens and a laptop." class="card-img-top ratio ratio-3x2 img-fluid" height="200" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" src="/media/images/thisisengineering-.ba31d3f0.format-png.fill-300x200-c100.png" srcset="/media/images/thisisengineering-.ba31d3f0.format-png.fill-300x200-c100.png 300w, /media/images/thisisengineering-.ba31d3f0.format-png.fill-600x400-c100.png 600w, /media/images/thisisengineering-.ba31d3f0.format-png.fill-900x600-c100.png 900w" width="300"></picture> 650 651 652 <span class="visually-hidden-focusable">Using AI Both Helps And Hinders Cybersecurity</span> 653 </a> 654 <div class="card-body p-0"> 655 <h3 class="card-title pt-3 pt-lg-1"> 656 <a href="/blog/using-ai-both-helps-and-hinders-cybersecurity/">Using AI Both Helps And Hinders Cybersecurity</a> 657 </h3> 658 <div class="card-text text-muted d-flex flex-wrap metabox"> 659 660 661<div class="d-flex flex-wrap metabox"> 662 663 <div class="itemdate specialfont me-4">28 May 2025</div> 664 665 <div class="author specialfont me-4">Justin Warren</div> 666 667 668 669 670</div> 671</div> 672 <p class="card-text">Generative AI works best when used to enable cybersecurity product outcomes, not as a selling point all on its own.</p> 673 </div> 674</div> 675</div> 676 677 <div class="col-sm"> 678 679 680<div class="card h-100 border-0"> 681 <a href="/blog/14-years-of-pivotnine/"> 682 683 684 <picture><source srcset="/media/images/braggsdiner-F8RK.2e16d0ba.format-avif.fill-300x200-c100.avif 300w, /media/images/braggsdiner-F8RK.2e16d0ba.format-avif.fill-600x400-c100.avif 600w, /media/images/braggsdiner-F8RK.2e16d0ba.format-avif.fill-900x600-c100.avif 900w" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" type="image/avif"><source srcset="/media/images/braggsdiner-F8RK.2e16d0ba.format-webp.fill-300x200-c100.webp 300w, /media/images/braggsdiner-F8RK.2e16d0ba.format-webp.fill-600x400-c100.webp 600w, /media/images/braggsdiner-F8RK.2e16d0ba.format-webp.fill-900x600-c100.webp 900w" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" type="image/webp">
684<source srcset="/media/images/braggsdiner-F8RKd.2e16d0ba.format-jpeg.fill-300x200-c100.jpg 300w, /media/images/braggsdiner-F8RKd.2e16d0ba.format-jpeg.fill-600x400-c100.jpg 600w, /media/images/braggsdiner-F8RKd.2e16d0ba.format-jpeg.fill-900x600-c100.jpg 900w" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" type="image/jpeg"><img alt="A dark chocolate cake with a slice cut out of it." class="card-img-top ratio ratio-3x2 img-fluid" height="200" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" src="/media/images/braggsdiner-F8RKds.2e16d0ba.format-png.fill-300x200-c100.png" srcset="/media/images/braggsdiner-F8RKds.2e16d0ba.format-png.fill-300x200-c100.png 300w, /media/images/braggsdiner-F8RKds.2e16d0ba.format-png.fill-600x400-c100.png 600w, /media/images/braggsdiner-F8RKds.2e16d0ba.format-png.fill-900x600-c100.png 900w" width="300"></picture> 685 686 687 <span class="visually-hidden-focusable">14 Years of PivotNine</span> 688 </a> 689 <div class="card-body p-0"> 690 <h3 class="card-title pt-3 pt-lg-1"> 691 <a href="/blog/14-years-of-pivotnine/">14 Years of PivotNine</a> 692 </h3> 693 <div class="card-text text-muted d-flex flex-wrap metabox"> 694 695 696<div class="d-flex flex-wrap metabox"> 697 698 <div class="itemdate specialfont me-4">24 April 2025</div> 699 700 <div class="author specialfont me-4">Justin Warren</div> 701 702 703 704 705</div> 706</div> 707 <p class="card-text">Personal reflections on 14 years of running PivotNine.</p> 708 </div> 709</div> 710</div> 711 712 <div class="col-sm"> 713 714 715<div class="card h-100 border-0"> 716 <a href="/blog/pure-storage-goes-meta-with-flashblade-exa/"> 717 718 719 <picture><source srcset="/media/images/FlashBladeEXA_Fr.2e16d0ba.format-avif.fill-300x200-c100.avif 300w, /media/images/FlashBladeEXA_Fr.2e16d0ba.format-avif.fill-600x400-c100.avif 600w, /media/images/FlashBladeEXA_Fr.2e16d0ba.format-avif.fill-900x600-c100.avif 900w" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" type="image/avif"><source srcset="/media/images/FlashBladeEXA_Fr.2e16d0ba.format-webp.fill-300x200-c100.webp 300w, /media/images/FlashBladeEXA_Fr.2e16d0ba.format-webp.fill-600x400-c100.webp 600w, /media/images/FlashBladeEXA_Fr.2e16d0ba.format-webp.fill-900x600-c100.webp 900w" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" type="image/webp"><source srcset="/media/images/FlashBladeEXA_Fro.2e16d0ba.format-jpeg.fill-300x200-c100.jpg 300w, /media/images/FlashBladeEXA_Fro.2e16d0ba.format-jpeg.fill-600x400-c100.jpg 600w, /media/images/FlashBladeEXA_Fro.2e16d0ba.format-jpeg.fill-900x600-c100.jpg 900w" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" type="image/jpeg"><img alt="The Pure Storage FlashBlade //EXA" class="card-img-top ratio ratio-3x2 img-fluid" height="200" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" src="/media/images/FlashBladeEXA_Fron.2e16d0ba.format-png.fill-300x200-c100.png" srcset="/media/images/FlashBladeEXA_Fron.2e16d0ba.format-png.fill-300x200-c100.png 300w, /media/images/FlashBladeEXA_Fron.2e16d0ba.format-png.fill-600x400-c100.png 600w, /media/images/FlashBladeEXA_Fron.2e16d0ba.format-png.fill-900x600-c100.png 900w" width="300"></picture> 720 721 722 <span class="visually-hidden-focusable">Pure Storage Goes Meta With FlashBlade //EXA</span> 723 </a> 724 <div class="card-body p-0"> 725 <h3 class="card-title pt-3 pt-lg-1"> 726 <a href="/blog/pure-storage-goes-meta-with-flashblade-exa/">Pure Storage Goes Meta With FlashBlade //EXA</a> 727 </h3> 728 <div class="card-text text-muted d-flex flex-wrap metabox"> 729 730 731<div class="d-flex flex-wrap metabox"> 732 733 <div class="itemdate specialfont me-4">17 March 2025</div> 734 735 <div class="author specialfont me-4">Justin Warren</div> 736 737 738 739 740</div> 741</div> 742 <p class="card-text">Pure Storage has announced a new product called the FlashBlade //EXA, aimed at a segment of the AI market the company is calling âAI Factoriesâ.</p> 743 </div> 744</div> 745</div> 746 747 <div class="col-sm"> 748 749 750<div class="card h-100 border-0"> 751 <a href="/blog/platform-engineering-is-the-new-devops/"> 752 753 754 <picture><source srcset="/media/images/muha-ajjan-sL2BR.2e16d0ba.format-avif.fill-300x200-c100.avif 300w, /media/images/muha-ajjan-sL2BR.2e16d0ba.format-avif.fill-600x400-c100.avif 600w, /media/images/muha-ajjan-sL2BR.2e16d0ba.format-avif.fill-900x600-c100.avif 900w" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" type="image/avif"><source srcset="/media/images/muha-ajjan-sL2BR.2e16d0ba.format-webp.fill-300x200-c100.webp 300w, /media/images/muha-ajjan-sL2BR.2e16d0ba.format-webp.fill-600x400-c100.webp 600w, /media/images/muha-ajjan-sL2BR.2e16d0ba.format-webp.fill-900x600-c100.webp 900w" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" type="image/webp"><source srcset="/media/images/muha-ajjan-sL2BRR.2e16d0ba.format-jpeg.f
754ill-300x200-c100.jpg 300w, /media/images/muha-ajjan-sL2BRR.2e16d0ba.format-jpeg.fill-600x400-c100.jpg 600w, /media/images/muha-ajjan-sL2BRR.2e16d0ba.format-jpeg.fill-900x600-c100.jpg 900w" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" type="image/jpeg"><img alt="computer-keys" class="card-img-top ratio ratio-3x2 img-fluid" height="200" sizes="(max-width: 400px) 200px, (max-width: 700px) 350px, 600px" src="/media/images/muha-ajjan-sL2BRR1.2e16d0ba.format-png.fill-300x200-c100.png" srcset="/media/images/muha-ajjan-sL2BRR1.2e16d0ba.format-png.fill-300x200-c100.png 300w, /media/images/muha-ajjan-sL2BRR1.2e16d0ba.format-png.fill-600x400-c100.png 600w, /media/images/muha-ajjan-sL2BRR1.2e16d0ba.format-png.fill-900x600-c100.png 900w" width="300"></picture> 755 756 757 <span class="visually-hidden-focusable">Platform engineering is the new DevOps</span> 758 </a> 759 <div class="card-body p-0"> 760 <h3 class="card-title pt-3 pt-lg-1"> 761 <a href="/blog/platform-engineering-is-the-new-devops/">Platform engineering is the new DevOps</a> 762 </h3> 763 <div class="card-text text-muted d-flex flex-wrap metabox"> 764 765 766<div class="d-flex flex-wrap metabox"> 767 768 <div class="itemdate specialfont me-4">20 November 2024</div> 769 770 <div class="author specialfont me-4">Justin Warren</div> 771 772 773 774 775</div> 776</div> 777 <p class="card-text">DevOps is falling out of fashion as operational concerns overtake developer productivity within DevOps teams.</p> 778 </div> 779</div> 780</div> 781 782 </div> 783 <div class="container py-3"> 784 <div class="d-flex justify-content-center flex-nowrap"> 785 786 787 <nav aria-label="page navigation"> 788 <ul class="pagination m-0"> 789 790 791 792 793 794 795 796 797 798 799 800 801 802 <li class="page-item active"> 803 <a href="?page=1" class="page-link">1</a> 804 </li> 805 806 807 <li class="page-item"> 808 <a href="?page=2" class="page-link">2</a> 809 </li> 810 811 812 813 <li class="page-item"> 814 <a href="?page=3" class="page-link">3</a> 815 </li> 816 817 818 819 820 <li class="page-item disabled"> 821 <a class="page-link">â¦</a> 822 </li> 823 824 825 826 827 <li class="page-item"> 828 <a href="?page=2" 829 rel="next" 830 class="page-link">âº</a> 831 </li> 832 833 834 835 <li class="page-item"> 836 <a href="?page=31" 837 rel="last" 838 class="page-link">»</a> 839 </li> 840 841 </ul> 842 </nav> 843 844 </div> 845</div> 846 847 848 </div> 849 850 851 </main> 852 853 854 855 856<footer class="bg-dark text-bg-dark"> 857 <div class="container py-5"> 858 <div class="d-flex flex-sm-row flex-wrap justify-content-between"> 859 <div> 860 <a href="https://pivotnine.com" class="footer-brand"> 861 <svg class="bi me-2" 862 width="166" 863 height="32" 864 role="img" 865 aria-label="PivotNine"> 866 <use xlink:href="#pn-logotype-white"></use> 867 </svg> 868 </a> 869 <div class="py-2"> 870 871 872<ul class="nav flex-row"> 873 874 <li class="nav-item mb-2"> 875 <a class="nav-link " 876 href="/services/" 877 title="Services">Services</a> 878 </li> 879 880 <li class="nav-item mb-2"> 881 <a class="nav-link " 882 href="/newsletter/" 883 title="Newsletter">Newsletter</a> 884 </li> 885 886 <li class="nav-item mb-2"> 887 <a class="nav-link " 888 href="/blog/" 889 title="Blog">Blog</a> 890 </li> 891 892 <li class="nav-item mb-2"> 893 <a class="nav-link " 894 href="/company/" 895 title="Company">Company</a> 896 </li> 897 898</ul> 899</div> 900 </div> 901 <div class="mb-3"> 902 <p class="h4">Subscribe to our newsletter</p> 903 904<form action="https://app.kit.com/forms/4791285/subscriptions" 905 class="seva-form formkit-form" 906 method="post" 907 data-sv-form="4791285" 908 data-uid="87557a5bb2" 909 data-format="inline" 910 data-version="5" 911 data-options="{"settings":{"after_subscribe":{"action":"message","success_message":"Success! Now check your email to confirm your subscription.","redirect_url":""},"analytics":{"google":null,"fathom":null,"facebook":null,"segment":null,"pinterest":null,"sparkloop":null,"googletagmanager":null},"modal":{"trigger":"timer","scroll_percentage":null,"timer":5,"devices":"all","show_once_every":15},"powered_by":{"show":false,"url":"
911https://kit.com/features/forms?utm_campaign=poweredby&utm_content=form&utm_medium=referral&utm_source=dynamic"},"recaptcha":{"enabled":false},"return_visitor":{"action":"show","custom_content":""},"slide_in":{"display_in":"bottom_right","trigger":"timer","scroll_percentage":null,"timer":5,"devices":"all","show_once_every":15},"sticky_bar":{"display_in":"top","trigger":"timer","scroll_percentage":null,"timer":5,"devices":"all","show_once_every":15}},"version":"5"}" 912 min-width="400 500 600 700 800"> 913 <div data-style="clean"> 914 <div class="row"> 915 916 <ul class="formkit-alert formkit-alert-error col p-2" 917 data-element="errors" 918 data-group="alert"></ul> 919 </div> 920 <div class="row"> 921 <input class="specialfont email-input col-sm-auto flex-fill gy-2" 922 name="email_address" 923 size="25" 924 type="email" 925 aria-label="Email Address" 926 placeholder="Email Address" 927 aria-required="true" 928 type="email" /> 929 <button data-element="submit" class="btn btn-primary specialfont col gy-2"> 930 <div class="formkit-spinner"> 931 <div></div> 932 <div></div> 933 <div></div> 934 </div> 935 Subscribe 936 </button> 937 </div> 938 </div> 939</form> 940 941 </div> 942 </div> 943 <div class="d-flex flex-column flex-sm-row justify-content-between py-4 mt-5 border-top copyright"> 944 <div> 945 <p> 946 © 2026 PivotNine Pty Ltd. All Rights Reserved. 947 <br /> 948 ABN: 66 150 502 015 949 </p> 950 </div> 951 952 953 954<ul class="list-unstyled d-flex"> 955 956 <li class="ms-3"> 957 <a class="link-light text-decoration-none " 958 href="/terms-and-conditions" 959 title="Terms">Terms</a> 960 </li> 961 962 <li class="ms-3"> 963 <a class="link-light text-decoration-none " 964 href="/privacy-policy" 965 title="Privacy">Privacy</a> 966 </li> 967 968</ul> 969 970 </div> 971 </div> 972</footer> 973 974 975 976 977 978 979 980 981 982
982<script> 983 $(function() { 984 985 }); 986</script>
986 987 988 </div> 989
989<script>(function(){function c(){var b=a.contentDocument||(a.contentWindow&&a.contentWindow.document);if(b){var d=b.createElement('script');d.innerHTML="window.__CF$cv$params={r:'a464f1fadc56c6c7',t:'MTc5MTI5MjYzNQ=='};var a=document.createElement('script');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>
989<script type="module" src="https://static.cloudflareinsights.com/beacon.min.js/v31edd6df95cf4e85bb4c19e7a9bdbcba1788362987495" integrity="sha512-iIg7k2xntmwu6/uSb5tpc/hySgZc4eoL31yB29W6tJFo2akwjPWcEqnCEdJvGexCL0KEQwVYv5BlowfhVz26hg==" data-cf-beacon='{"version":"2024.11.0","token":"ccd7cdd28fba4291847003eb6dd2c720","r":1,"spa":2}' crossorigin="anonymous"></script>
989 990</body> 991</html>
Line numbers count LF bytes from the start of the resource, as the search results do. Vendor segments are library code the classifier recognised; they are stored but not indexed. Bytes are shown as Latin1 characters, one per byte.