PageSourceSearch

https://pivotnine.com/blog/

html pivotnine.com collected 2026-10-06 13:17:16 UTC 53,176 bytes, 991 lines download raw bytes

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&#x27;
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&#x27;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="{&quot;settings&quot;:{&quot;after_subscribe&quot;:{&quot;action&quot;:&quot;message&quot;,&quot;success_message&quot;:&quot;Success! Now check your email to confirm your subscription.&quot;,&quot;redirect_url&quot;:&quot;&quot;},&quot;analytics&quot;:{&quot;google&quot;:null,&quot;fathom&quot;:null,&quot;facebook&quot;:null,&quot;segment&quot;:null,&quot;pinterest&quot;:null,&quot;sparkloop&quot;:null,&quot;googletagmanager&quot;:null},&quot;modal&quot;:{&quot;trigger&quot;:&quot;timer&quot;,&quot;scroll_percentage&quot;:null,&quot;timer&quot;:5,&quot;devices&quot;:&quot;all&quot;,&quot;show_once_every&quot;:15},&quot;powered_by&quot;:{&quot;show&quot;:false,&quot;url&quot;:&quot;
911https://kit.com/features/forms?utm_campaign=poweredby&amp;utm_content=form&amp;utm_medium=referral&amp;utm_source=dynamic&quot;},&quot;recaptcha&quot;:{&quot;enabled&quot;:false},&quot;return_visitor&quot;:{&quot;action&quot;:&quot;show&quot;,&quot;custom_content&quot;:&quot;&quot;},&quot;slide_in&quot;:{&quot;display_in&quot;:&quot;bottom_right&quot;,&quot;trigger&quot;:&quot;timer&quot;,&quot;scroll_percentage&quot;:null,&quot;timer&quot;:5,&quot;devices&quot;:&quot;all&quot;,&quot;show_once_every&quot;:15},&quot;sticky_bar&quot;:{&quot;display_in&quot;:&quot;top&quot;,&quot;trigger&quot;:&quot;timer&quot;,&quot;scroll_percentage&quot;:null,&quot;timer&quot;:5,&quot;devices&quot;:&quot;all&quot;,&quot;show_once_every&quot;:15}},&quot;version&quot;:&quot;5&quot;}"
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.