1316 lines
172 KiB
HTML
1316 lines
172 KiB
HTML
<!DOCTYPE html>
|
||
<html lang="en">
|
||
<head>
|
||
<meta charset="UTF-8">
|
||
<meta name="viewport" content="width=device-width, initial-scale=1">
|
||
<link rel="profile" href="http://gmpg.org/xfn/11">
|
||
|
||
<title>Ashby taught us we have to fight fire with fire – Surfing Complexity</title>
|
||
<meta name='robots' content='max-image-preview:large' />
|
||
|
||
<!-- Async WordPress.com Remote Login -->
|
||
<script id="wpcom_remote_login_js">
|
||
var wpcom_remote_login_extra_auth = '';
|
||
function wpcom_remote_login_remove_dom_node_id( element_id ) {
|
||
var dom_node = document.getElementById( element_id );
|
||
if ( dom_node ) { dom_node.parentNode.removeChild( dom_node ); }
|
||
}
|
||
function wpcom_remote_login_remove_dom_node_classes( class_name ) {
|
||
var dom_nodes = document.querySelectorAll( '.' + class_name );
|
||
for ( var i = 0; i < dom_nodes.length; i++ ) {
|
||
dom_nodes[ i ].parentNode.removeChild( dom_nodes[ i ] );
|
||
}
|
||
}
|
||
function wpcom_remote_login_final_cleanup() {
|
||
wpcom_remote_login_remove_dom_node_classes( "wpcom_remote_login_msg" );
|
||
wpcom_remote_login_remove_dom_node_id( "wpcom_remote_login_key" );
|
||
wpcom_remote_login_remove_dom_node_id( "wpcom_remote_login_validate" );
|
||
wpcom_remote_login_remove_dom_node_id( "wpcom_remote_login_js" );
|
||
wpcom_remote_login_remove_dom_node_id( "wpcom_request_access_iframe" );
|
||
wpcom_remote_login_remove_dom_node_id( "wpcom_request_access_styles" );
|
||
}
|
||
|
||
// Watch for messages back from the remote login
|
||
window.addEventListener( "message", function( e ) {
|
||
if ( e.origin === "https://r-login.wordpress.com" ) {
|
||
var data = {};
|
||
try {
|
||
data = JSON.parse( e.data );
|
||
} catch( e ) {
|
||
wpcom_remote_login_final_cleanup();
|
||
return;
|
||
}
|
||
|
||
if ( data.msg === 'LOGIN' ) {
|
||
// Clean up the login check iframe
|
||
wpcom_remote_login_remove_dom_node_id( "wpcom_remote_login_key" );
|
||
|
||
var id_regex = new RegExp( /^[0-9]+$/ );
|
||
var token_regex = new RegExp( /^.*|.*|.*$/ );
|
||
if (
|
||
token_regex.test( data.token )
|
||
&& id_regex.test( data.wpcomid )
|
||
) {
|
||
// We have everything we need to ask for a login
|
||
var script = document.createElement( "script" );
|
||
script.setAttribute( "id", "wpcom_remote_login_validate" );
|
||
script.src = '/remote-login.php?wpcom_remote_login=validate'
|
||
+ '&wpcomid=' + data.wpcomid
|
||
+ '&token=' + encodeURIComponent( data.token )
|
||
+ '&host=' + window.location.protocol
|
||
+ '//' + window.location.hostname
|
||
+ '&postid=7237'
|
||
+ '&is_singular=1';
|
||
document.body.appendChild( script );
|
||
}
|
||
|
||
return;
|
||
}
|
||
|
||
// Safari ITP, not logged in, so redirect
|
||
if ( data.msg === 'LOGIN-REDIRECT' ) {
|
||
window.location = 'https://wordpress.com/log-in?redirect_to=' + window.location.href;
|
||
return;
|
||
}
|
||
|
||
// Safari ITP, storage access failed, remove the request
|
||
if ( data.msg === 'LOGIN-REMOVE' ) {
|
||
var css_zap = 'html { -webkit-transition: margin-top 1s; transition: margin-top 1s; } /* 9001 */ html { margin-top: 0 !important; } * html body { margin-top: 0 !important; } @media screen and ( max-width: 782px ) { html { margin-top: 0 !important; } * html body { margin-top: 0 !important; } }';
|
||
var style_zap = document.createElement( 'style' );
|
||
style_zap.type = 'text/css';
|
||
style_zap.appendChild( document.createTextNode( css_zap ) );
|
||
document.body.appendChild( style_zap );
|
||
|
||
var e = document.getElementById( 'wpcom_request_access_iframe' );
|
||
e.parentNode.removeChild( e );
|
||
|
||
document.cookie = 'wordpress_com_login_access=denied; path=/; max-age=31536000';
|
||
|
||
return;
|
||
}
|
||
|
||
// Safari ITP
|
||
if ( data.msg === 'REQUEST_ACCESS' ) {
|
||
console.log( 'request access: safari' );
|
||
|
||
// Check ITP iframe enable/disable knob
|
||
if ( wpcom_remote_login_extra_auth !== 'safari_itp_iframe' ) {
|
||
return;
|
||
}
|
||
|
||
// If we are in a "private window" there is no ITP.
|
||
var private_window = false;
|
||
try {
|
||
var opendb = window.openDatabase( null, null, null, null );
|
||
} catch( e ) {
|
||
private_window = true;
|
||
}
|
||
|
||
if ( private_window ) {
|
||
console.log( 'private window' );
|
||
return;
|
||
}
|
||
|
||
var iframe = document.createElement( 'iframe' );
|
||
iframe.id = 'wpcom_request_access_iframe';
|
||
iframe.setAttribute( 'scrolling', 'no' );
|
||
iframe.setAttribute( 'sandbox', 'allow-storage-access-by-user-activation allow-scripts allow-same-origin allow-top-navigation-by-user-activation' );
|
||
iframe.src = 'https://r-login.wordpress.com/remote-login.php?wpcom_remote_login=request_access&origin=' + encodeURIComponent( data.origin ) + '&wpcomid=' + encodeURIComponent( data.wpcomid );
|
||
|
||
var css = 'html { -webkit-transition: margin-top 1s; transition: margin-top 1s; } /* 9001 */ html { margin-top: 46px !important; } * html body { margin-top: 46px !important; } @media screen and ( max-width: 660px ) { html { margin-top: 71px !important; } * html body { margin-top: 71px !important; } #wpcom_request_access_iframe { display: block; height: 71px !important; } } #wpcom_request_access_iframe { border: 0px; height: 46px; position: fixed; top: 0; left: 0; width: 100%; min-width: 100%; z-index: 99999; background: #23282d; } ';
|
||
|
||
var style = document.createElement( 'style' );
|
||
style.type = 'text/css';
|
||
style.id = 'wpcom_request_access_styles';
|
||
style.appendChild( document.createTextNode( css ) );
|
||
document.body.appendChild( style );
|
||
|
||
document.body.appendChild( iframe );
|
||
}
|
||
|
||
if ( data.msg === 'DONE' ) {
|
||
wpcom_remote_login_final_cleanup();
|
||
}
|
||
}
|
||
}, false );
|
||
|
||
// Inject the remote login iframe after the page has had a chance to load
|
||
// more critical resources
|
||
window.addEventListener( "DOMContentLoaded", function( e ) {
|
||
var iframe = document.createElement( "iframe" );
|
||
iframe.style.display = "none";
|
||
iframe.setAttribute( "scrolling", "no" );
|
||
iframe.setAttribute( "id", "wpcom_remote_login_key" );
|
||
iframe.src = "https://r-login.wordpress.com/remote-login.php"
|
||
+ "?wpcom_remote_login=key"
|
||
+ "&origin=aHR0cHM6Ly9zdXJmaW5nY29tcGxleGl0eS5ibG9n"
|
||
+ "&wpcomid=30291541"
|
||
+ "&time=" + Math.floor( Date.now() / 1000 );
|
||
document.body.appendChild( iframe );
|
||
}, false );
|
||
</script>
|
||
<link rel='dns-prefetch' href='//s2.wp.com' />
|
||
<link rel='dns-prefetch' href='//widgets.wp.com' />
|
||
<link rel='dns-prefetch' href='//s1.wp.com' />
|
||
<link rel='dns-prefetch' href='//s0.wp.com' />
|
||
<link rel="alternate" type="application/rss+xml" title="Surfing Complexity » Feed" href="https://surfingcomplexity.blog/feed/" />
|
||
<link rel="alternate" type="application/rss+xml" title="Surfing Complexity » Comments Feed" href="https://surfingcomplexity.blog/comments/feed/" />
|
||
<link rel="alternate" type="application/rss+xml" title="Surfing Complexity » Ashby taught us we have to fight fire with fire Comments Feed" href="https://surfingcomplexity.blog/2026/01/31/ashby-taught-us-we-have-to-fight-fire-with-fire/feed/" />
|
||
<script type="text/javascript">
|
||
/* <![CDATA[ */
|
||
function addLoadEvent(func) {
|
||
var oldonload = window.onload;
|
||
if (typeof window.onload != 'function') {
|
||
window.onload = func;
|
||
} else {
|
||
window.onload = function () {
|
||
oldonload();
|
||
func();
|
||
}
|
||
}
|
||
}
|
||
/* ]]> */
|
||
</script>
|
||
<style id="wp-img-auto-sizes-contain-inline-css">
|
||
img:is([sizes=auto i],[sizes^="auto," i]){contain-intrinsic-size:3000px 1500px}
|
||
/*# sourceURL=wp-img-auto-sizes-contain-inline-css */
|
||
</style>
|
||
<link crossorigin='anonymous' rel='stylesheet' id='all-css-2-1' href='/_static/??-eJxtjEsKgDAMBS9kjbqwuBDPUtog9o9J8fpaEQSRBw8GhoEjC50iY2QIRWRf1i0SWOSstHsYQkr1TPFIsKNXjEbkRPyhVhM18J/0m8M3fFPVlzD3UnbTtWG0J2CTNNk=&cssminify=yes' type='text/css' media='all' />
|
||
<style id="wp-emoji-styles-inline-css">
|
||
|
||
img.wp-smiley, img.emoji {
|
||
display: inline !important;
|
||
border: none !important;
|
||
box-shadow: none !important;
|
||
height: 1em !important;
|
||
width: 1em !important;
|
||
margin: 0 0.07em !important;
|
||
vertical-align: -0.1em !important;
|
||
background: none !important;
|
||
padding: 0 !important;
|
||
}
|
||
/*# sourceURL=wp-emoji-styles-inline-css */
|
||
</style>
|
||
<style id="wp-block-library-inline-css">
|
||
:root{--wp-block-synced-color:#7a00df;--wp-block-synced-color--rgb:122,0,223;--wp-bound-block-color:var(--wp-block-synced-color);--wp-editor-canvas-background:#ddd;--wp-admin-theme-color:#007cba;--wp-admin-theme-color--rgb:0,124,186;--wp-admin-theme-color-darker-10:#006ba1;--wp-admin-theme-color-darker-10--rgb:0,107,160.5;--wp-admin-theme-color-darker-20:#005a87;--wp-admin-theme-color-darker-20--rgb:0,90,135;--wp-admin-border-width-focus:2px}@media (min-resolution:192dpi){:root{--wp-admin-border-width-focus:1.5px}}.wp-element-button{cursor:pointer}:root .has-very-light-gray-background-color{background-color:#eee}:root .has-very-dark-gray-background-color{background-color:#313131}:root .has-very-light-gray-color{color:#eee}:root .has-very-dark-gray-color{color:#313131}:root .has-vivid-green-cyan-to-vivid-cyan-blue-gradient-background{background:linear-gradient(135deg,#00d084,#0693e3)}:root .has-purple-crush-gradient-background{background:linear-gradient(135deg,#34e2e4,#4721fb 50%,#ab1dfe)}:root .has-hazy-dawn-gradient-background{background:linear-gradient(135deg,#faaca8,#dad0ec)}:root .has-subdued-olive-gradient-background{background:linear-gradient(135deg,#fafae1,#67a671)}:root .has-atomic-cream-gradient-background{background:linear-gradient(135deg,#fdd79a,#004a59)}:root .has-nightshade-gradient-background{background:linear-gradient(135deg,#330968,#31cdcf)}:root .has-midnight-gradient-background{background:linear-gradient(135deg,#020381,#2874fc)}:root{--wp--preset--font-size--normal:16px;--wp--preset--font-size--huge:42px}.has-regular-font-size{font-size:1em}.has-larger-font-size{font-size:2.625em}.has-normal-font-size{font-size:var(--wp--preset--font-size--normal)}.has-huge-font-size{font-size:var(--wp--preset--font-size--huge)}:root .has-text-align-center{text-align:center}:root .has-text-align-left{text-align:left}:root .has-text-align-right{text-align:right}.has-fit-text{white-space:nowrap!important}#end-resizable-editor-section{display:none}.aligncenter{clear:both}.items-justified-left{justify-content:flex-start}.items-justified-center{justify-content:center}.items-justified-right{justify-content:flex-end}.items-justified-space-between{justify-content:space-between}.screen-reader-text{word-wrap:normal!important;border:0;clip-path:inset(50%);height:1px;margin:-1px;overflow:hidden;padding:0;position:absolute;width:1px;word-break:normal!important}.screen-reader-text:focus{background-color:#ddd;clip-path:none;color:#444;display:block;font-size:1em;height:auto;left:5px;line-height:normal;padding:15px 23px 14px;text-decoration:none;top:5px;width:auto;z-index:100000}html :where(.has-border-color){border-style:solid}html :where([style^=border-color],[style*=";border-color"],[style*="; border-color"]){border-style:solid}html :where([style^=border-top-color],[style*=";border-top-color"],[style*="; border-top-color"]){border-top-style:solid}html :where([style^=border-right-color],[style*=";border-right-color"],[style*="; border-right-color"]){border-right-style:solid}html :where([style^=border-bottom-color],[style*=";border-bottom-color"],[style*="; border-bottom-color"]){border-bottom-style:solid}html :where([style^=border-left-color],[style*=";border-left-color"],[style*="; border-left-color"]){border-left-style:solid}html :where([style^=border-width],[style*=";border-width"],[style*="; border-width"]){border-style:solid}html :where([style^=border-top-width],[style*=";border-top-width"],[style*="; border-top-width"]){border-top-style:solid}html :where([style^=border-right-width],[style*=";border-right-width"],[style*="; border-right-width"]){border-right-style:solid}html :where([style^=border-bottom-width],[style*=";border-bottom-width"],[style*="; border-bottom-width"]){border-bottom-style:solid}html :where([style^=border-left-width],[style*=";border-left-width"],[style*="; border-left-width"]){border-left-style:solid}html :where(img[class*=wp-image-]){height:auto;max-width:100%}:where(figure){margin:0 0 1em}html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:var(--wp-admin--admin-bar--height,0px)}@media screen and (max-width:600px){html :where(.is-position-sticky){--wp-admin--admin-bar--position-offset:0px}}
|
||
|
||
/*# sourceURL=/wp-content/plugins/gutenberg-core/v23.9.1/build/styles/block-library/common.min.css */
|
||
</style>
|
||
<link crossorigin='anonymous' rel='stylesheet' id='all-css-0-2' href='/wp-content/mu-plugins/jetpack-mu-wpcom-plugin/moon/jetpack_vendor/automattic/jetpack-mu-wpcom/src/build/wpcom-blocks-code-style/wpcom-blocks-code-style.css?m=1784324579i&cssminify=yes' type='text/css' media='all' />
|
||
<style id="wp-block-gallery-inline-css">
|
||
.blocks-gallery-grid:not(.has-nested-images),.wp-block-gallery:not(.has-nested-images){display:flex;flex-wrap:wrap;list-style-type:none;margin:0;padding:0}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item{display:flex;flex-direction:column;flex-grow:1;justify-content:center;margin:0 1em 1em 0;position:relative;width:calc(50% - 1em)}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:nth-of-type(2n){margin-right:0}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figure,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figure,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figure,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figure{align-items:flex-end;display:flex;height:100%;justify-content:flex-start;margin:0}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image img,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item img{display:block;height:auto;max-width:100%;width:auto}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption{background:linear-gradient(0deg,rgba(0,0,0,.7),rgba(0,0,0,.3) 70%,transparent);bottom:0;box-sizing:border-box;color:#fff;font-size:.8em;margin:0;max-height:100%;overflow:auto;padding:3em .77em .7em;position:absolute;text-align:center;width:100%;z-index:2}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image figcaption img,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item figcaption img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image figcaption img,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item figcaption img{display:inline}.blocks-gallery-grid:not(.has-nested-images) figcaption,.wp-block-gallery:not(.has-nested-images) figcaption{flex-grow:1}.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image a,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-image img,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item a,.blocks-gallery-grid:not(.has-nested-images).is-cropped .blocks-gallery-item img,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image a,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-image img,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item a,.wp-block-gallery:not(.has-nested-images).is-cropped .blocks-gallery-item img{flex:1;height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item{margin-right:0;width:100%}@media (min-width:600px){.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item{margin-right:1em;width:calc(33.33333% - .66667em)}.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item{margin-right:1em;width:calc(25% - .75em)}.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item{margin-right:1em;width:calc(20% - .8em)}.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item{margin-right:1em;width:calc(16.66667% - .83333em)}.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item{margin-right:1em;width:calc(14.28571% - .85714em)}.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image,.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item,.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image,.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item{margin-right:1em;width:calc(12.5% - .875em)}.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),.blocks-gallery-grid:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),.blocks-gallery-grid:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),.blocks-gallery-grid:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),.blocks-gallery-grid:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),.blocks-gallery-grid:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),.blocks-gallery-grid:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),.blocks-gallery-grid:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n),.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-image:nth-of-type(1n),.wp-block-gallery:not(.has-nested-images).columns-1 .blocks-gallery-item:nth-of-type(1n),.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-image:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images).columns-2 .blocks-gallery-item:nth-of-type(2n),.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-image:nth-of-type(3n),.wp-block-gallery:not(.has-nested-images).columns-3 .blocks-gallery-item:nth-of-type(3n),.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-image:nth-of-type(4n),.wp-block-gallery:not(.has-nested-images).columns-4 .blocks-gallery-item:nth-of-type(4n),.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-image:nth-of-type(5n),.wp-block-gallery:not(.has-nested-images).columns-5 .blocks-gallery-item:nth-of-type(5n),.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-image:nth-of-type(6n),.wp-block-gallery:not(.has-nested-images).columns-6 .blocks-gallery-item:nth-of-type(6n),.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-image:nth-of-type(7n),.wp-block-gallery:not(.has-nested-images).columns-7 .blocks-gallery-item:nth-of-type(7n),.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-image:nth-of-type(8n),.wp-block-gallery:not(.has-nested-images).columns-8 .blocks-gallery-item:nth-of-type(8n){margin-right:0}}.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-image:last-child,.blocks-gallery-grid:not(.has-nested-images) .blocks-gallery-item:last-child,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-image:last-child,.wp-block-gallery:not(.has-nested-images) .blocks-gallery-item:last-child{margin-right:0}.blocks-gallery-grid:not(.has-nested-images).alignleft,.blocks-gallery-grid:not(.has-nested-images).alignright,.wp-block-gallery:not(.has-nested-images).alignleft,.wp-block-gallery:not(.has-nested-images).alignright{max-width:420px;width:100%}.blocks-gallery-grid:not(.has-nested-images).aligncenter .blocks-gallery-item figure,.wp-block-gallery:not(.has-nested-images).aligncenter .blocks-gallery-item figure{justify-content:center}.wp-block-gallery:not(.is-cropped) .blocks-gallery-item{align-self:flex-start}figure.wp-block-gallery.has-nested-images{align-items:normal}.wp-block-gallery.has-nested-images figure.wp-block-image:not(#individual-image){margin:0;width:calc(50% - var(--wp--style--unstable-gallery-gap, 16px)/2)}.wp-block-gallery.has-nested-images figure.wp-block-image{box-sizing:border-box;display:flex;flex-direction:column;flex-grow:1;justify-content:center;max-width:100%;position:relative}.wp-block-gallery.has-nested-images figure.wp-block-image>a,.wp-block-gallery.has-nested-images figure.wp-block-image>div{flex-direction:column;flex-grow:1;margin:0}.wp-block-gallery.has-nested-images figure.wp-block-image img{display:block;height:auto;max-width:100%!important;width:auto}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption,.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption):before{bottom:0;left:0;max-height:100%;position:absolute;right:0}.wp-block-gallery.has-nested-images figure.wp-block-image:has(figcaption):before{backdrop-filter:blur(3px);content:"";height:100%;-webkit-mask-image:linear-gradient(0deg,#000 20%,transparent);mask-image:linear-gradient(0deg,#000 20%,transparent);max-height:3em;pointer-events:none}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{box-sizing:border-box;color:#fff;font-size:13px;margin:0;overflow:auto;padding:1em;text-align:center;text-shadow:0 0 1.5px #000}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar{height:12px;width:12px}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-track{background-color:transparent}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption::-webkit-scrollbar-thumb{background-clip:padding-box;background-color:transparent;border:3px solid transparent;border-radius:8px}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within::-webkit-scrollbar-thumb,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus::-webkit-scrollbar-thumb,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover::-webkit-scrollbar-thumb{background-color:hsla(0,0%,100%,.8)}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{scrollbar-color:transparent transparent;scrollbar-gutter:stable both-edges;scrollbar-width:thin}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:focus-within,.wp-block-gallery.has-nested-images figure.wp-block-image figcaption:hover{scrollbar-color:hsla(0,0%,100%,.8) transparent}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{will-change:transform}@media (hover:none){.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{scrollbar-color:hsla(0,0%,100%,.8) transparent}}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption{background:linear-gradient(0deg,rgba(0,0,0,.4),transparent)}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption img{display:inline}.wp-block-gallery.has-nested-images figure.wp-block-image figcaption a{color:inherit}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border img{box-sizing:border-box}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border>a,.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border>div,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded>a,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded>div{flex:1 1 auto}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border figcaption,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded figcaption{background:none;color:inherit;flex:initial;margin:0;padding:10px 10px 9px;position:relative;text-shadow:none}.wp-block-gallery.has-nested-images figure.wp-block-image.has-custom-border:before,.wp-block-gallery.has-nested-images figure.wp-block-image.is-style-rounded:before{content:none}.wp-block-gallery.has-nested-images figcaption{flex-basis:100%;flex-grow:1;text-align:center}.wp-block-gallery.has-nested-images:not(.is-cropped) figure.wp-block-image:not(#individual-image){margin-bottom:auto;margin-top:0}.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image){align-self:inherit}.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image)>a,.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image)>div:not(.components-drop-zone){display:flex}.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) a,.wp-block-gallery.has-nested-images.is-cropped figure.wp-block-image:not(#individual-image) img{flex:1 0 0%;height:100%;-o-object-fit:cover;object-fit:cover;width:100%}.wp-block-gallery.has-nested-images.columns-1 figure.wp-block-image:not(#individual-image){width:100%}@media (min-width:600px){.wp-block-gallery.has-nested-images.columns-3 figure.wp-block-image:not(#individual-image){width:calc(33.33333% - var(--wp--style--unstable-gallery-gap, 16px)*.66667)}.wp-block-gallery.has-nested-images.columns-4 figure.wp-block-image:not(#individual-image){width:calc(25% - var(--wp--style--unstable-gallery-gap, 16px)*.75)}.wp-block-gallery.has-nested-images.columns-5 figure.wp-block-image:not(#individual-image){width:calc(20% - var(--wp--style--unstable-gallery-gap, 16px)*.8)}.wp-block-gallery.has-nested-images.columns-6 figure.wp-block-image:not(#individual-image){width:calc(16.66667% - var(--wp--style--unstable-gallery-gap, 16px)*.83333)}.wp-block-gallery.has-nested-images.columns-7 figure.wp-block-image:not(#individual-image){width:calc(14.28571% - var(--wp--style--unstable-gallery-gap, 16px)*.85714)}.wp-block-gallery.has-nested-images.columns-8 figure.wp-block-image:not(#individual-image){width:calc(12.5% - var(--wp--style--unstable-gallery-gap, 16px)*.875)}.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image){width:calc(33.33% - var(--wp--style--unstable-gallery-gap, 16px)*.66667)}.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2),.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:nth-last-child(2)~figure.wp-block-image:not(#individual-image){width:calc(50% - var(--wp--style--unstable-gallery-gap, 16px)*.5)}.wp-block-gallery.has-nested-images.columns-default figure.wp-block-image:not(#individual-image):first-child:last-child{width:100%}}.wp-block-gallery.has-nested-images.alignleft,.wp-block-gallery.has-nested-images.alignright{max-width:420px;width:100%}.wp-block-gallery.has-nested-images.aligncenter{justify-content:center}
|
||
/*# sourceURL=/wp-content/plugins/gutenberg-core/v23.9.1/build/styles/block-library/gallery/style.min.css */
|
||
</style>
|
||
<style id="wp-block-gallery-theme-inline-css">
|
||
.blocks-gallery-caption{color:#555;font-size:13px;text-align:center}.is-dark-theme .blocks-gallery-caption{color:hsla(0,0%,100%,.65)}
|
||
/*# sourceURL=/wp-content/plugins/gutenberg-core/v23.9.1/build/styles/block-library/gallery/theme.min.css */
|
||
</style>
|
||
<style id="wp-block-heading-inline-css">
|
||
h1:where(.wp-block-heading).has-background,h2:where(.wp-block-heading).has-background,h3:where(.wp-block-heading).has-background,h4:where(.wp-block-heading).has-background,h5:where(.wp-block-heading).has-background,h6:where(.wp-block-heading).has-background{padding:1.25em 2.375em}h1.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h1.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h2.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h2.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h3.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h3.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h4.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h4.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h5.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h5.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]),h6.has-text-align-left[style*=writing-mode]:where([style*=vertical-lr]),h6.has-text-align-right[style*=writing-mode]:where([style*=vertical-rl]){rotate:180deg}
|
||
/*# sourceURL=/wp-content/plugins/gutenberg-core/v23.9.1/build/styles/block-library/heading/style.min.css */
|
||
</style>
|
||
<style id="wp-block-image-inline-css">
|
||
.wp-block-image>a,.wp-block-image>figure>a{display:inline-block}.wp-block-image img{box-sizing:border-box;height:auto;max-width:100%;vertical-align:bottom}@media not (prefers-reduced-motion){.wp-block-image img.hide{visibility:hidden}.wp-block-image img.show{animation:show-content-image .4s}}.wp-block-image[style*=border-radius] img,.wp-block-image[style*=border-radius]>a{border-radius:inherit}.wp-block-image.has-custom-border img{box-sizing:border-box}.wp-block-image.aligncenter{text-align:center}.wp-block-image.alignfull>a,.wp-block-image.alignwide>a{width:100%}.wp-block-image.alignfull img,.wp-block-image.alignwide img{height:auto;width:100%}.wp-block-image .aligncenter,.wp-block-image .alignleft,.wp-block-image .alignright,.wp-block-image.aligncenter,.wp-block-image.alignleft,.wp-block-image.alignright{display:table}.wp-block-image .aligncenter>figcaption,.wp-block-image .alignleft>figcaption,.wp-block-image .alignright>figcaption,.wp-block-image.aligncenter>figcaption,.wp-block-image.alignleft>figcaption,.wp-block-image.alignright>figcaption{caption-side:bottom;display:table-caption}.wp-block-image .alignleft{float:left;margin:.5em 1em .5em 0}.wp-block-image .alignright{float:right;margin:.5em 0 .5em 1em}.wp-block-image .aligncenter{margin-left:auto;margin-right:auto}.wp-block-image :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-image.is-style-circle-mask img{border-radius:9999px}@supports ((-webkit-mask-image:none) or (mask-image:none)) or (-webkit-mask-image:none){.wp-block-image.is-style-circle-mask img{border-radius:0;-webkit-mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');mask-image:url('data:image/svg+xml;utf8,<svg viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg"><circle cx="50" cy="50" r="50"/></svg>');mask-mode:alpha;-webkit-mask-position:center;mask-position:center;-webkit-mask-repeat:no-repeat;mask-repeat:no-repeat;-webkit-mask-size:contain;mask-size:contain}}:root :where(.wp-block-image.is-style-rounded img,.wp-block-image .is-style-rounded img){border-radius:9999px}.wp-block-image figure{margin:0}.wp-lightbox-container{display:flex;flex-direction:column;position:relative}.wp-lightbox-container img{cursor:zoom-in}.wp-lightbox-container img:hover+button{opacity:1}.wp-lightbox-container button{align-items:center;backdrop-filter:blur(16px) saturate(180%);background-color:rgba(90,90,90,.25);border:none;border-radius:4px;cursor:zoom-in;display:flex;height:20px;justify-content:center;opacity:0;padding:0;position:absolute;right:16px;text-align:center;top:16px;width:20px;z-index:100}@media not (prefers-reduced-motion){.wp-lightbox-container button{transition:opacity .2s ease}}.wp-lightbox-container button:focus-visible{outline:3px auto rgba(90,90,90,.25);outline:3px auto -webkit-focus-ring-color;outline-offset:3px}.wp-lightbox-container button:hover{cursor:pointer;opacity:1}.wp-lightbox-container button:focus{opacity:1}.wp-lightbox-container button:focus,.wp-lightbox-container button:hover,.wp-lightbox-container button:not(:hover):not(:active):not(.has-background){background-color:rgba(90,90,90,.25);border:none}.wp-lightbox-overlay{box-sizing:border-box;cursor:zoom-out;height:100vh;left:0;overflow:hidden;position:fixed;top:0;visibility:hidden;width:100%;z-index:100000}.wp-lightbox-overlay .wp-lightbox-close-button{align-items:center;cursor:pointer;display:flex;font-family:inherit;gap:8px;justify-content:center;line-height:1;min-height:40px;min-width:40px;padding:0 4px;position:absolute;right:calc(env(safe-area-inset-right) + 16px);top:calc(env(safe-area-inset-top) + 16px);z-index:5000000}.wp-lightbox-overlay .wp-lightbox-close-button:focus,.wp-lightbox-overlay .wp-lightbox-close-button:hover,.wp-lightbox-overlay .wp-lightbox-close-button:not(:hover):not(:active):not(.has-background){background:none;border:none}.wp-lightbox-overlay .wp-lightbox-close-button:has(.wp-lightbox-close-text:not([hidden])) .wp-lightbox-close-icon svg{height:1em;width:1em}.wp-lightbox-overlay .wp-lightbox-close-icon svg{display:block}.wp-lightbox-overlay .wp-lightbox-navigation-button-next,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev{align-items:center;bottom:16px;cursor:pointer;display:flex;font-family:inherit;gap:4px;justify-content:center;line-height:1;min-height:40px;min-width:40px;padding:0 8px;position:absolute;z-index:2000002}.wp-lightbox-overlay .wp-lightbox-navigation-button-next[hidden],.wp-lightbox-overlay .wp-lightbox-navigation-button-prev[hidden]{display:none}@media (min-width:960px){.wp-lightbox-overlay .wp-lightbox-navigation-button-next,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev{bottom:50%;transform:translateY(-50%)}}.wp-lightbox-overlay .wp-lightbox-navigation-button-next:focus,.wp-lightbox-overlay .wp-lightbox-navigation-button-next:hover,.wp-lightbox-overlay .wp-lightbox-navigation-button-next:not(:hover):not(:active):not(.has-background),.wp-lightbox-overlay .wp-lightbox-navigation-button-prev:focus,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev:hover,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev:not(:hover):not(:active):not(.has-background){background:none;border:none;padding:0 8px}.wp-lightbox-overlay .wp-lightbox-navigation-button-next:has(.wp-lightbox-navigation-text:not([hidden])) .wp-lightbox-navigation-icon svg,.wp-lightbox-overlay .wp-lightbox-navigation-button-prev:has(.wp-lightbox-navigation-text:not([hidden])) .wp-lightbox-navigation-icon svg{display:block;height:1.5em;width:1.5em}.wp-lightbox-overlay .wp-lightbox-navigation-button-prev{left:calc(env(safe-area-inset-left) + 16px)}.wp-lightbox-overlay .wp-lightbox-navigation-button-next{right:calc(env(safe-area-inset-right) + 16px)}.wp-lightbox-overlay .wp-lightbox-navigation-icon svg{vertical-align:middle}.wp-lightbox-overlay .lightbox-image-container{height:var(--wp--lightbox-container-height);left:50%;overflow:hidden;position:absolute;top:50%;transform:translate(-50%,-50%);transform-origin:top left;width:var(--wp--lightbox-container-width);z-index:2000001}.wp-lightbox-overlay .wp-block-image{align-items:center;box-sizing:border-box;display:flex;height:100%;justify-content:center;margin:0;position:relative;transform-origin:0 0;width:100%;z-index:3000000}.wp-lightbox-overlay .wp-block-image img{height:var(--wp--lightbox-image-height);min-height:var(--wp--lightbox-image-height);min-width:var(--wp--lightbox-image-width);width:var(--wp--lightbox-image-width)}.wp-lightbox-overlay .wp-block-image figcaption{display:none}.wp-lightbox-overlay button{background:none;border:none}.wp-lightbox-overlay .scrim{background-color:#fff;height:100%;opacity:.9;position:absolute;width:100%;z-index:2000000}.wp-lightbox-overlay.active{visibility:visible}@media not (prefers-reduced-motion){.wp-lightbox-overlay.active{animation:turn-on-visibility .25s both}.wp-lightbox-overlay.active img{animation:turn-on-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active){animation:turn-off-visibility .35s both}.wp-lightbox-overlay.show-closing-animation:not(.active) img{animation:turn-off-visibility .25s both}.wp-lightbox-overlay.zoom.active{animation:none;opacity:1;visibility:visible}.wp-lightbox-overlay.zoom.active .lightbox-image-container{animation:lightbox-zoom-in .4s}.wp-lightbox-overlay.zoom.active .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.active .scrim{animation:turn-on-visibility .4s forwards}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active){animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container{animation:lightbox-zoom-out .4s}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .lightbox-image-container img{animation:none}.wp-lightbox-overlay.zoom.show-closing-animation:not(.active) .scrim{animation:turn-off-visibility .4s forwards}}@keyframes show-content-image{0%{visibility:hidden}99%{visibility:hidden}to{visibility:visible}}@keyframes turn-on-visibility{0%{opacity:0}to{opacity:1}}@keyframes turn-off-visibility{0%{opacity:1;visibility:visible}99%{opacity:0;visibility:visible}to{opacity:0;visibility:hidden}}@keyframes lightbox-zoom-in{0%{transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale))}to{transform:translate(-50%,-50%) scale(1)}}@keyframes lightbox-zoom-out{0%{transform:translate(-50%,-50%) scale(1);visibility:visible}99%{visibility:visible}to{transform:translate(calc((-100vw + var(--wp--lightbox-scrollbar-width))/2 + var(--wp--lightbox-initial-left-position)),calc(-50vh + var(--wp--lightbox-initial-top-position))) scale(var(--wp--lightbox-scale));visibility:hidden}}
|
||
/*# sourceURL=/wp-content/plugins/gutenberg-core/v23.9.1/build/styles/block-library/image/style.min.css */
|
||
</style>
|
||
<style id="wp-block-image-theme-inline-css">
|
||
:root :where(.wp-block-image figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme :root :where(.wp-block-image figcaption){color:hsla(0,0%,100%,.65)}.wp-block-image{margin:0 0 1em}
|
||
/*# sourceURL=/wp-content/plugins/gutenberg-core/v23.9.1/build/styles/block-library/image/theme.min.css */
|
||
</style>
|
||
<style id="wp-block-latest-posts-inline-css">
|
||
.wp-block-latest-posts{box-sizing:border-box}.wp-block-latest-posts.alignleft{margin-right:2em}.wp-block-latest-posts.alignright{margin-left:2em}.wp-block-latest-posts.wp-block-latest-posts__list{list-style:none}.wp-block-latest-posts.wp-block-latest-posts__list li{clear:both;overflow-wrap:break-word}.wp-block-latest-posts.is-grid:not(.is-layout-grid){display:flex;flex-wrap:wrap}.wp-block-latest-posts.is-grid:not(.is-layout-grid) li{margin:0 1.25em 1.25em 0;width:100%}@media (min-width:600px){.wp-block-latest-posts.columns-2:not(.is-layout-grid) li{width:calc(50% - .625em)}.wp-block-latest-posts.columns-2:not(.is-layout-grid) li:nth-child(2n){margin-right:0}.wp-block-latest-posts.columns-3:not(.is-layout-grid) li{width:calc(33.33333% - .83333em)}.wp-block-latest-posts.columns-3:not(.is-layout-grid) li:nth-child(3n){margin-right:0}.wp-block-latest-posts.columns-4:not(.is-layout-grid) li{width:calc(25% - .9375em)}.wp-block-latest-posts.columns-4:not(.is-layout-grid) li:nth-child(4n){margin-right:0}.wp-block-latest-posts.columns-5:not(.is-layout-grid) li{width:calc(20% - 1em)}.wp-block-latest-posts.columns-5:not(.is-layout-grid) li:nth-child(5n){margin-right:0}.wp-block-latest-posts.columns-6:not(.is-layout-grid) li{width:calc(16.66667% - 1.04167em)}.wp-block-latest-posts.columns-6:not(.is-layout-grid) li:nth-child(6n){margin-right:0}}@media (max-width:600px){.wp-block-latest-posts-is-layout-grid[class*=columns-]:not(.has-native-responsive-grid){grid-template-columns:1fr}}:root :where(.wp-block-latest-posts.is-grid){padding:0}:root :where(.wp-block-latest-posts.wp-block-latest-posts__list){padding-left:0}.wp-block-latest-posts__post-author,.wp-block-latest-posts__post-date{display:block;font-size:.8125em}.wp-block-latest-posts__post-excerpt,.wp-block-latest-posts__post-full-content{margin-bottom:1em;margin-top:.5em}.wp-block-latest-posts__featured-image a{display:inline-block}.wp-block-latest-posts__featured-image img{height:auto;max-width:100%;width:auto}.wp-block-latest-posts__featured-image.alignleft{float:left;margin-right:1em}.wp-block-latest-posts__featured-image.alignright{float:right;margin-left:1em}.wp-block-latest-posts__featured-image.aligncenter{margin-bottom:1em;text-align:center}
|
||
/*# sourceURL=/wp-content/plugins/gutenberg-core/v23.9.1/build/styles/block-library/latest-posts/style.min.css */
|
||
</style>
|
||
<style id="wp-block-list-inline-css">
|
||
ol,ul{box-sizing:border-box}:root :where(.wp-block-list.has-background){padding:1.25em 2.375em}
|
||
/*# sourceURL=/wp-content/plugins/gutenberg-core/v23.9.1/build/styles/block-library/list/style.min.css */
|
||
</style>
|
||
<style id="wp-block-paragraph-inline-css">
|
||
.is-small-text{font-size:.875em}.is-regular-text{font-size:1em}.is-large-text{font-size:2.25em}.is-larger-text{font-size:3em}.has-drop-cap:not(:focus):first-letter{float:left;font-size:8.4em;font-style:normal;font-weight:100;line-height:.68;margin:.05em .1em 0 0;text-transform:uppercase}body.rtl .has-drop-cap:not(:focus):first-letter{float:none;margin-left:.1em}p.has-drop-cap.has-background{overflow:hidden}:root :where(p.has-background){padding:1.25em 2.375em}:where(p.has-text-color:not(.has-link-color)) a{color:inherit}p.has-text-align-left[style*="writing-mode:vertical-lr"],p.has-text-align-right[style*="writing-mode:vertical-rl"]{rotate:180deg}
|
||
/*# sourceURL=/wp-content/plugins/gutenberg-core/v23.9.1/build/styles/block-library/paragraph/style.min.css */
|
||
</style>
|
||
<style id="wp-block-search-inline-css">
|
||
.wp-block-search__button{margin-left:10px;word-break:normal}.wp-block-search__button.has-icon{line-height:0}.wp-block-search__button svg{fill:currentColor;height:1.25em;min-height:24px;min-width:24px;vertical-align:text-bottom;width:1.25em}:where(.wp-block-search__button){border:1px solid #ccc;padding:6px 10px}.wp-block-search__inside-wrapper{display:flex;flex:auto;flex-wrap:nowrap;max-width:100%}:where(.wp-block-search__label){width:100%}.wp-block-search.wp-block-search__button-only .wp-block-search__button{box-sizing:border-box;display:flex;flex-shrink:0;justify-content:center;margin-left:0;max-width:100%}.wp-block-search.wp-block-search__button-only .wp-block-search__inside-wrapper{min-width:0!important;transition-property:width}.wp-block-search.wp-block-search__button-only .wp-block-search__input{flex-basis:100%;transition-duration:.3s}.wp-block-search.wp-block-search__button-only.wp-block-search__searchfield-hidden,.wp-block-search.wp-block-search__button-only.wp-block-search__searchfield-hidden .wp-block-search__inside-wrapper{overflow:hidden}.wp-block-search.wp-block-search__button-only.wp-block-search__searchfield-hidden .wp-block-search__input{border-left-width:0!important;border-right-width:0!important;flex-basis:0;flex-grow:0;margin:0;min-width:0!important;padding-left:0!important;padding-right:0!important;width:0!important}:where(.wp-block-search__input){-webkit-appearance:initial;-moz-appearance:initial;appearance:none;border:1px solid #949494;flex-grow:1;font-family:inherit;font-size:inherit;font-style:inherit;font-weight:inherit;letter-spacing:inherit;line-height:inherit;margin-left:0;margin-right:0;min-width:3rem;padding:8px;text-decoration:unset!important;text-transform:inherit}:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper){background-color:#fff;border:1px solid #949494;box-sizing:border-box;padding:4px}:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper) .wp-block-search__input{border:none;border-radius:0;padding:0 4px}:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper) .wp-block-search__input:focus{outline:none}:where(.wp-block-search__button-inside .wp-block-search__inside-wrapper) :where(.wp-block-search__button){padding:4px 8px}.wp-block-search.aligncenter .wp-block-search__inside-wrapper{margin:auto}.wp-block[data-align=right] .wp-block-search.wp-block-search__button-only .wp-block-search__inside-wrapper{float:right}
|
||
/*# sourceURL=/wp-content/plugins/gutenberg-core/v23.9.1/build/styles/block-library/search/style.min.css */
|
||
</style>
|
||
<style id="wp-block-search-theme-inline-css">
|
||
:where(.wp-block-search .wp-block-search__label){font-weight:700}.wp-block-search__button{border:1px solid #ccc;padding:.375em .625em}
|
||
/*# sourceURL=/wp-content/plugins/gutenberg-core/v23.9.1/build/styles/block-library/search/theme.min.css */
|
||
</style>
|
||
<style id="wp-block-library-inline-css-extra">
|
||
.has-text-align-justify {
|
||
text-align:justify;
|
||
}
|
||
.has-text-align-justify{text-align:justify;}
|
||
/*# sourceURL=wp-block-library-inline-css */
|
||
</style>
|
||
|
||
<style id="classic-theme-styles-inline-css">
|
||
.wp-block-button__link{background-color:#32373c;border-radius:9999px;box-shadow:none;color:#fff;font-size:1.125em;padding:calc(.667em + 2px) calc(1.333em + 2px);text-decoration:none}.wp-block-file__button{background:#32373c;color:#fff}.wp-block-accordion-heading{margin:0}.wp-block-accordion-heading__toggle{background-color:inherit!important;color:inherit!important}.wp-block-accordion-heading__toggle:not(:focus-visible){outline:none}.wp-block-accordion-heading__toggle:focus,.wp-block-accordion-heading__toggle:hover{background-color:inherit!important;border:none;box-shadow:none;color:inherit;padding:var(--wp--preset--spacing--20,1em) 0;text-decoration:none}.wp-block-accordion-heading__toggle:focus-visible{outline:auto;outline-offset:0}.wp-block-tab:not(.has-text-color){color:inherit!important}.wp-block-tab:not(.has-background){background-color:inherit!important}.wp-block-tab:focus,.wp-block-tab:hover{text-decoration:none}.wp-block-tab:focus-visible{outline:auto;outline-offset:0}
|
||
/*# sourceURL=/wp-content/plugins/gutenberg-core/v23.9.1/build/styles/block-library/classic.min.css */
|
||
</style>
|
||
|
||
<style id="coblocks-inline-format-inline-css">
|
||
.uppercase{text-transform:uppercase}
|
||
/*# sourceURL=coblocks-inline-format-inline-css */
|
||
</style>
|
||
<link crossorigin='anonymous' rel='stylesheet' id='all-css-12-1' href='/_static/??-eJx9jEEOAiEQBD/kQECjeDC+ZWEnijIwYWA3/l72op689KFTVXplCCU3zE1z6reYRYfiUwlP0VYZpwxIJE4IFRd10HOU9iFA2iuhCiI7/ROiDt9WxfETT20jCOc4YUIa2D9t5eGA91xRBMZS7ATtPkTZvCtdzNEZt7f2fHq8Afl7R7w=&cssminify=yes' type='text/css' media='all' />
|
||
<style id="global-styles-inline-css">
|
||
:root{--wp--preset--aspect-ratio--square: 1;--wp--preset--aspect-ratio--4-3: 4/3;--wp--preset--aspect-ratio--3-4: 3/4;--wp--preset--aspect-ratio--3-2: 3/2;--wp--preset--aspect-ratio--2-3: 2/3;--wp--preset--aspect-ratio--16-9: 16/9;--wp--preset--aspect-ratio--9-16: 9/16;--wp--preset--color--black: #000000;--wp--preset--color--cyan-bluish-gray: #abb8c3;--wp--preset--color--white: #fff;--wp--preset--color--pale-pink: #f78da7;--wp--preset--color--vivid-red: #cf2e2e;--wp--preset--color--luminous-vivid-orange: #ff6900;--wp--preset--color--luminous-vivid-amber: #fcb900;--wp--preset--color--light-green-cyan: #7bdcb5;--wp--preset--color--vivid-green-cyan: #00d084;--wp--preset--color--pale-cyan-blue: #8ed1fc;--wp--preset--color--vivid-cyan-blue: #0693e3;--wp--preset--color--vivid-purple: #9b51e0;--wp--preset--color--medium-blue: #0087be;--wp--preset--color--bright-blue: #00aadc;--wp--preset--color--dark-gray: #4d4d4b;--wp--preset--color--light-gray: #b3b3b1;--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple: linear-gradient(135deg,rgb(6,147,227) 0%,rgb(155,81,224) 100%);--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan: linear-gradient(135deg,rgb(122,220,180) 0%,rgb(0,208,130) 100%);--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange: linear-gradient(135deg,rgb(252,185,0) 0%,rgb(255,105,0) 100%);--wp--preset--gradient--luminous-vivid-orange-to-vivid-red: linear-gradient(135deg,rgb(255,105,0) 0%,rgb(207,46,46) 100%);--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray: linear-gradient(135deg,rgb(238,238,238) 0%,rgb(169,184,195) 100%);--wp--preset--gradient--cool-to-warm-spectrum: linear-gradient(135deg,rgb(74,234,220) 0%,rgb(151,120,209) 20%,rgb(207,42,186) 40%,rgb(238,44,130) 60%,rgb(251,105,98) 80%,rgb(254,248,76) 100%);--wp--preset--gradient--blush-light-purple: linear-gradient(135deg,rgb(255,206,236) 0%,rgb(152,150,240) 100%);--wp--preset--gradient--blush-bordeaux: linear-gradient(135deg,rgb(254,205,165) 0%,rgb(254,45,45) 50%,rgb(107,0,62) 100%);--wp--preset--gradient--luminous-dusk: linear-gradient(135deg,rgb(255,203,112) 0%,rgb(199,81,192) 50%,rgb(65,88,208) 100%);--wp--preset--gradient--pale-ocean: linear-gradient(135deg,rgb(255,245,203) 0%,rgb(182,227,212) 50%,rgb(51,167,181) 100%);--wp--preset--gradient--electric-grass: linear-gradient(135deg,rgb(202,248,128) 0%,rgb(113,206,126) 100%);--wp--preset--gradient--midnight: linear-gradient(135deg,rgb(2,3,129) 0%,rgb(40,116,252) 100%);--wp--preset--font-size--small: 13px;--wp--preset--font-size--medium: 20px;--wp--preset--font-size--large: 36px;--wp--preset--font-size--x-large: 42px;--wp--preset--font-family--albert-sans: 'Albert Sans', sans-serif;--wp--preset--font-family--alegreya: Alegreya, serif;--wp--preset--font-family--arvo: Arvo, serif;--wp--preset--font-family--bodoni-moda: 'Bodoni Moda', serif;--wp--preset--font-family--bricolage-grotesque: 'Bricolage Grotesque', sans-serif;--wp--preset--font-family--cabin: Cabin, sans-serif;--wp--preset--font-family--chivo: Chivo, sans-serif;--wp--preset--font-family--commissioner: Commissioner, sans-serif;--wp--preset--font-family--cormorant: Cormorant, serif;--wp--preset--font-family--courier-prime: 'Courier Prime', monospace;--wp--preset--font-family--crimson-pro: 'Crimson Pro', serif;--wp--preset--font-family--dm-mono: 'DM Mono', monospace;--wp--preset--font-family--dm-sans: 'DM Sans', sans-serif;--wp--preset--font-family--dm-serif-display: 'DM Serif Display', serif;--wp--preset--font-family--domine: Domine, serif;--wp--preset--font-family--eb-garamond: 'EB Garamond', serif;--wp--preset--font-family--epilogue: Epilogue, sans-serif;--wp--preset--font-family--fahkwang: Fahkwang, sans-serif;--wp--preset--font-family--figtree: Figtree, sans-serif;--wp--preset--font-family--fira-sans: 'Fira Sans', sans-serif;--wp--preset--font-family--fjalla-one: 'Fjalla One', sans-serif;--wp--preset--font-family--fraunces: Fraunces, serif;--wp--preset--font-family--gabarito: Gabarito, system-ui;--wp--preset--font-family--ibm-plex-mono: 'IBM Plex Mono', monospace;--wp--preset--font-family--ibm-plex-sans: 'IBM Plex Sans', sans-serif;--wp--preset--font-family--ibarra-real-nova: 'Ibarra Real Nova', serif;--wp--preset--font-family--instrument-serif: 'Instrument Serif', serif;--wp--preset--font-family--inter: Inter, sans-serif;--wp--preset--font-family--josefin-sans: 'Josefin Sans', sans-serif;--wp--preset--font-family--jost: Jost, sans-serif;--wp--preset--font-family--libre-baskerville: 'Libre Baskerville', serif;--wp--preset--font-family--libre-franklin: 'Libre Franklin', sans-serif;--wp--preset--font-family--literata: Literata, serif;--wp--preset--font-family--lora: Lora, serif;--wp--preset--font-family--merriweather: Merriweather, serif;--wp--preset--font-family--montserrat: Montserrat, sans-serif;--wp--preset--font-family--newsreader: Newsreader, serif;--wp--preset--font-family--noto-sans-mono: 'Noto Sans Mono', sans-serif;--wp--preset--font-family--nunito: Nunito, sans-serif;--wp--preset--font-family--open-sans: 'Open Sans', sans-serif;--wp--preset--font-family--overpass: Overpass, sans-serif;--wp--preset--font-family--pt-serif: 'PT Serif', serif;--wp--preset--font-family--petrona: Petrona, serif;--wp--preset--font-family--piazzolla: Piazzolla, serif;--wp--preset--font-family--playfair-display: 'Playfair Display', serif;--wp--preset--font-family--plus-jakarta-sans: 'Plus Jakarta Sans', sans-serif;--wp--preset--font-family--poppins: Poppins, sans-serif;--wp--preset--font-family--raleway: Raleway, sans-serif;--wp--preset--font-family--roboto: Roboto, sans-serif;--wp--preset--font-family--roboto-slab: 'Roboto Slab', serif;--wp--preset--font-family--rubik: Rubik, sans-serif;--wp--preset--font-family--rufina: Rufina, serif;--wp--preset--font-family--sora: Sora, sans-serif;--wp--preset--font-family--source-sans-3: 'Source Sans 3', sans-serif;--wp--preset--font-family--source-serif-4: 'Source Serif 4', serif;--wp--preset--font-family--space-mono: 'Space Mono', monospace;--wp--preset--font-family--syne: Syne, sans-serif;--wp--preset--font-family--texturina: Texturina, serif;--wp--preset--font-family--urbanist: Urbanist, sans-serif;--wp--preset--font-family--work-sans: 'Work Sans', sans-serif;--wp--preset--spacing--20: 0.44rem;--wp--preset--spacing--30: 0.67rem;--wp--preset--spacing--40: 1rem;--wp--preset--spacing--50: 1.5rem;--wp--preset--spacing--60: 2.25rem;--wp--preset--spacing--70: 3.38rem;--wp--preset--spacing--80: 5.06rem;--wp--preset--shadow--natural: 6px 6px 9px rgba(0, 0, 0, 0.2);--wp--preset--shadow--deep: 12px 12px 50px rgba(0, 0, 0, 0.4);--wp--preset--shadow--sharp: 6px 6px 0px rgba(0, 0, 0, 0.2);--wp--preset--shadow--outlined: 6px 6px 0px -3px rgb(255, 255, 255), 6px 6px rgb(0, 0, 0);--wp--preset--shadow--crisp: 6px 6px 0px rgb(0, 0, 0);}.wp-block-button{--wp--preset--dimension--25: 25%;--wp--preset--dimension--50: 50%;--wp--preset--dimension--75: 75%;--wp--preset--dimension--100: 100%;}:where(body) { margin: 0; }:where(.is-layout-flex){gap: 0.5em;}:where(.is-layout-grid){gap: 0.5em;}body .is-layout-flex{display: flex;}.is-layout-flex{flex-wrap: wrap;align-items: center;}.is-layout-flex > :is(*, div){margin: 0;}body .is-layout-grid{display: grid;}.is-layout-grid > :is(*, div){margin: 0;}body{padding-top: 0px;padding-right: 0px;padding-bottom: 0px;padding-left: 0px;}:root :where(.wp-element-button, .wp-block-button__link){background-color: #32373c;border-width: 0;color: #fff;font-family: inherit;font-size: inherit;font-style: inherit;font-weight: inherit;letter-spacing: inherit;line-height: inherit;padding-top: calc(0.667em + 2px);padding-right: calc(1.333em + 2px);padding-bottom: calc(0.667em + 2px);padding-left: calc(1.333em + 2px);text-decoration: none;text-transform: inherit;}.has-black-color{color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-color{color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-color{color: var(--wp--preset--color--white) !important;}.has-pale-pink-color{color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-color{color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-color{color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-color{color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-color{color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-color{color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-color{color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-color{color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-color{color: var(--wp--preset--color--vivid-purple) !important;}.has-medium-blue-color{color: var(--wp--preset--color--medium-blue) !important;}.has-bright-blue-color{color: var(--wp--preset--color--bright-blue) !important;}.has-dark-gray-color{color: var(--wp--preset--color--dark-gray) !important;}.has-light-gray-color{color: var(--wp--preset--color--light-gray) !important;}.has-black-background-color{background-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-background-color{background-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-background-color{background-color: var(--wp--preset--color--white) !important;}.has-pale-pink-background-color{background-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-background-color{background-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-background-color{background-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-background-color{background-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-background-color{background-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-background-color{background-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-background-color{background-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-background-color{background-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-background-color{background-color: var(--wp--preset--color--vivid-purple) !important;}.has-medium-blue-background-color{background-color: var(--wp--preset--color--medium-blue) !important;}.has-bright-blue-background-color{background-color: var(--wp--preset--color--bright-blue) !important;}.has-dark-gray-background-color{background-color: var(--wp--preset--color--dark-gray) !important;}.has-light-gray-background-color{background-color: var(--wp--preset--color--light-gray) !important;}.has-black-border-color{border-color: var(--wp--preset--color--black) !important;}.has-cyan-bluish-gray-border-color{border-color: var(--wp--preset--color--cyan-bluish-gray) !important;}.has-white-border-color{border-color: var(--wp--preset--color--white) !important;}.has-pale-pink-border-color{border-color: var(--wp--preset--color--pale-pink) !important;}.has-vivid-red-border-color{border-color: var(--wp--preset--color--vivid-red) !important;}.has-luminous-vivid-orange-border-color{border-color: var(--wp--preset--color--luminous-vivid-orange) !important;}.has-luminous-vivid-amber-border-color{border-color: var(--wp--preset--color--luminous-vivid-amber) !important;}.has-light-green-cyan-border-color{border-color: var(--wp--preset--color--light-green-cyan) !important;}.has-vivid-green-cyan-border-color{border-color: var(--wp--preset--color--vivid-green-cyan) !important;}.has-pale-cyan-blue-border-color{border-color: var(--wp--preset--color--pale-cyan-blue) !important;}.has-vivid-cyan-blue-border-color{border-color: var(--wp--preset--color--vivid-cyan-blue) !important;}.has-vivid-purple-border-color{border-color: var(--wp--preset--color--vivid-purple) !important;}.has-medium-blue-border-color{border-color: var(--wp--preset--color--medium-blue) !important;}.has-bright-blue-border-color{border-color: var(--wp--preset--color--bright-blue) !important;}.has-dark-gray-border-color{border-color: var(--wp--preset--color--dark-gray) !important;}.has-light-gray-border-color{border-color: var(--wp--preset--color--light-gray) !important;}.has-vivid-cyan-blue-to-vivid-purple-gradient-background{background: var(--wp--preset--gradient--vivid-cyan-blue-to-vivid-purple) !important;}.has-light-green-cyan-to-vivid-green-cyan-gradient-background{background: var(--wp--preset--gradient--light-green-cyan-to-vivid-green-cyan) !important;}.has-luminous-vivid-amber-to-luminous-vivid-orange-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-amber-to-luminous-vivid-orange) !important;}.has-luminous-vivid-orange-to-vivid-red-gradient-background{background: var(--wp--preset--gradient--luminous-vivid-orange-to-vivid-red) !important;}.has-very-light-gray-to-cyan-bluish-gray-gradient-background{background: var(--wp--preset--gradient--very-light-gray-to-cyan-bluish-gray) !important;}.has-cool-to-warm-spectrum-gradient-background{background: var(--wp--preset--gradient--cool-to-warm-spectrum) !important;}.has-blush-light-purple-gradient-background{background: var(--wp--preset--gradient--blush-light-purple) !important;}.has-blush-bordeaux-gradient-background{background: var(--wp--preset--gradient--blush-bordeaux) !important;}.has-luminous-dusk-gradient-background{background: var(--wp--preset--gradient--luminous-dusk) !important;}.has-pale-ocean-gradient-background{background: var(--wp--preset--gradient--pale-ocean) !important;}.has-electric-grass-gradient-background{background: var(--wp--preset--gradient--electric-grass) !important;}.has-midnight-gradient-background{background: var(--wp--preset--gradient--midnight) !important;}.has-small-font-size{font-size: var(--wp--preset--font-size--small) !important;}.has-medium-font-size{font-size: var(--wp--preset--font-size--medium) !important;}.has-large-font-size{font-size: var(--wp--preset--font-size--large) !important;}.has-x-large-font-size{font-size: var(--wp--preset--font-size--x-large) !important;}.has-albert-sans-font-family{font-family: var(--wp--preset--font-family--albert-sans) !important;}.has-alegreya-font-family{font-family: var(--wp--preset--font-family--alegreya) !important;}.has-arvo-font-family{font-family: var(--wp--preset--font-family--arvo) !important;}.has-bodoni-moda-font-family{font-family: var(--wp--preset--font-family--bodoni-moda) !important;}.has-bricolage-grotesque-font-family{font-family: var(--wp--preset--font-family--bricolage-grotesque) !important;}.has-cabin-font-family{font-family: var(--wp--preset--font-family--cabin) !important;}.has-chivo-font-family{font-family: var(--wp--preset--font-family--chivo) !important;}.has-commissioner-font-family{font-family: var(--wp--preset--font-family--commissioner) !important;}.has-cormorant-font-family{font-family: var(--wp--preset--font-family--cormorant) !important;}.has-courier-prime-font-family{font-family: var(--wp--preset--font-family--courier-prime) !important;}.has-crimson-pro-font-family{font-family: var(--wp--preset--font-family--crimson-pro) !important;}.has-dm-mono-font-family{font-family: var(--wp--preset--font-family--dm-mono) !important;}.has-dm-sans-font-family{font-family: var(--wp--preset--font-family--dm-sans) !important;}.has-dm-serif-display-font-family{font-family: var(--wp--preset--font-family--dm-serif-display) !important;}.has-domine-font-family{font-family: var(--wp--preset--font-family--domine) !important;}.has-eb-garamond-font-family{font-family: var(--wp--preset--font-family--eb-garamond) !important;}.has-epilogue-font-family{font-family: var(--wp--preset--font-family--epilogue) !important;}.has-fahkwang-font-family{font-family: var(--wp--preset--font-family--fahkwang) !important;}.has-figtree-font-family{font-family: var(--wp--preset--font-family--figtree) !important;}.has-fira-sans-font-family{font-family: var(--wp--preset--font-family--fira-sans) !important;}.has-fjalla-one-font-family{font-family: var(--wp--preset--font-family--fjalla-one) !important;}.has-fraunces-font-family{font-family: var(--wp--preset--font-family--fraunces) !important;}.has-gabarito-font-family{font-family: var(--wp--preset--font-family--gabarito) !important;}.has-ibm-plex-mono-font-family{font-family: var(--wp--preset--font-family--ibm-plex-mono) !important;}.has-ibm-plex-sans-font-family{font-family: var(--wp--preset--font-family--ibm-plex-sans) !important;}.has-ibarra-real-nova-font-family{font-family: var(--wp--preset--font-family--ibarra-real-nova) !important;}.has-instrument-serif-font-family{font-family: var(--wp--preset--font-family--instrument-serif) !important;}.has-inter-font-family{font-family: var(--wp--preset--font-family--inter) !important;}.has-josefin-sans-font-family{font-family: var(--wp--preset--font-family--josefin-sans) !important;}.has-jost-font-family{font-family: var(--wp--preset--font-family--jost) !important;}.has-libre-baskerville-font-family{font-family: var(--wp--preset--font-family--libre-baskerville) !important;}.has-libre-franklin-font-family{font-family: var(--wp--preset--font-family--libre-franklin) !important;}.has-literata-font-family{font-family: var(--wp--preset--font-family--literata) !important;}.has-lora-font-family{font-family: var(--wp--preset--font-family--lora) !important;}.has-merriweather-font-family{font-family: var(--wp--preset--font-family--merriweather) !important;}.has-montserrat-font-family{font-family: var(--wp--preset--font-family--montserrat) !important;}.has-newsreader-font-family{font-family: var(--wp--preset--font-family--newsreader) !important;}.has-noto-sans-mono-font-family{font-family: var(--wp--preset--font-family--noto-sans-mono) !important;}.has-nunito-font-family{font-family: var(--wp--preset--font-family--nunito) !important;}.has-open-sans-font-family{font-family: var(--wp--preset--font-family--open-sans) !important;}.has-overpass-font-family{font-family: var(--wp--preset--font-family--overpass) !important;}.has-pt-serif-font-family{font-family: var(--wp--preset--font-family--pt-serif) !important;}.has-petrona-font-family{font-family: var(--wp--preset--font-family--petrona) !important;}.has-piazzolla-font-family{font-family: var(--wp--preset--font-family--piazzolla) !important;}.has-playfair-display-font-family{font-family: var(--wp--preset--font-family--playfair-display) !important;}.has-plus-jakarta-sans-font-family{font-family: var(--wp--preset--font-family--plus-jakarta-sans) !important;}.has-poppins-font-family{font-family: var(--wp--preset--font-family--poppins) !important;}.has-raleway-font-family{font-family: var(--wp--preset--font-family--raleway) !important;}.has-roboto-font-family{font-family: var(--wp--preset--font-family--roboto) !important;}.has-roboto-slab-font-family{font-family: var(--wp--preset--font-family--roboto-slab) !important;}.has-rubik-font-family{font-family: var(--wp--preset--font-family--rubik) !important;}.has-rufina-font-family{font-family: var(--wp--preset--font-family--rufina) !important;}.has-sora-font-family{font-family: var(--wp--preset--font-family--sora) !important;}.has-source-sans-3-font-family{font-family: var(--wp--preset--font-family--source-sans-3) !important;}.has-source-serif-4-font-family{font-family: var(--wp--preset--font-family--source-serif-4) !important;}.has-space-mono-font-family{font-family: var(--wp--preset--font-family--space-mono) !important;}.has-syne-font-family{font-family: var(--wp--preset--font-family--syne) !important;}.has-texturina-font-family{font-family: var(--wp--preset--font-family--texturina) !important;}.has-urbanist-font-family{font-family: var(--wp--preset--font-family--urbanist) !important;}.has-work-sans-font-family{font-family: var(--wp--preset--font-family--work-sans) !important;}
|
||
:where(.wp-block-gallery.is-layout-flex){gap: var( --wp--style--gallery-gap-default, var( --gallery-block--gutter-size, var( --wp--style--block-gap, 0.5em ) ) );}:where(.wp-block-gallery.is-layout-grid){gap: var( --wp--style--gallery-gap-default, var( --gallery-block--gutter-size, var( --wp--style--block-gap, 0.5em ) ) );}
|
||
:where(.wp-block-latest-posts.is-layout-flex){gap: 1.25em;}:where(.wp-block-latest-posts.is-layout-grid){gap: 1.25em;}
|
||
/*# sourceURL=global-styles-inline-css */
|
||
</style>
|
||
|
||
<link crossorigin='anonymous' rel='stylesheet' id='all-css-14-1' href='/wp-content/mu-plugins/jetpack-mu-wpcom-plugin/moon/jetpack_vendor/automattic/jetpack-mu-wpcom/src/build/verbum-comments/verbum-comments.css?m=1785895867i&cssminify=yes' type='text/css' media='all' />
|
||
<link rel='stylesheet' id='verbum-gutenberg-css-css' href='https://widgets.wp.com/verbum-block-editor/block-editor.css?ver=1771405207' media='all' />
|
||
<link crossorigin='anonymous' rel='stylesheet' id='all-css-16-1' href='/_static/??-eJydkNEKwjAMRX/IGh0D7YP4KbLV2GVr09J2DP/ebAgOFB/2Eu59OPcmgSkqE7ggF/Cjim60xBl6LLExw9uDD4HhRmzAImMiIfJvuTc572AVWjr0mCGOLRDfMaIMLkq8o9xhUhXk8nS4BRQEWhfMsKl2PmepVlM0wX9FrN6RUGqsSLt0fuw/yGJQslxTSJ63NurhGkozevWX4+lcaX3Qte5fvXGUcQ==&cssminify=yes' type='text/css' media='all' />
|
||
<link crossorigin='anonymous' rel='stylesheet' id='print-css-17-1' href='/wp-content/mu-plugins/global-print/global-print.css?m=1465851035i&cssminify=yes' type='text/css' media='print' />
|
||
<style id="jetpack-global-styles-frontend-style-inline-css">
|
||
:root { --font-headings: unset; --font-base: unset; --font-headings-default: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif; --font-base-default: -apple-system,BlinkMacSystemFont,"Segoe UI",Roboto,Oxygen-Sans,Ubuntu,Cantarell,"Helvetica Neue",sans-serif;}
|
||
/*# sourceURL=jetpack-global-styles-frontend-style-inline-css */
|
||
</style>
|
||
<link crossorigin='anonymous' rel='stylesheet' id='all-css-20-1' href='/_static/??-eJyNjcEKAjEMRH/ImhVlqwfxU6TbhrZrmhTTIv69u+JFvHgZ5sHwBh7VeOGG3KB0U6nHzAoztur87cNQRNYInVBBk7tjcCE83zVz3HrVDfxvumb2MPVMAVR8dmRIougX/DhbwrK8pwNEksnROriU884e9+PJDnaYXxwFS20=&cssminify=yes' type='text/css' media='all' />
|
||
<script id="jetpack_related-posts-js-extra">
|
||
var related_posts_js_options = {"post_heading":"h4"};
|
||
//# sourceURL=jetpack_related-posts-js-extra
|
||
</script>
|
||
<script id="wpcom-actionbar-placeholder-js-extra">
|
||
var actionbardata = {"siteID":"30291541","postID":"7237","siteURL":"https://surfingcomplexity.blog","xhrURL":"https://surfingcomplexity.blog/wp-admin/admin-ajax.php","nonce":"e8f3aebd24","isLoggedIn":"","statusMessage":"","subsEmailDefault":"instantly","proxyScriptUrl":"https://s0.wp.com/wp-content/js/wpcom-proxy-request.js?m=1513050504i&ver=20211021","shortlink":"https://wp.me/p236df-1SJ","i18n":{"followedText":"New posts from this site will now appear in your \u003Ca href=\"https://wordpress.com/reader\"\u003EReader\u003C/a\u003E","foldBar":"Collapse this bar","unfoldBar":"Expand this bar","shortLinkCopied":"Shortlink copied to clipboard."}};
|
||
//# sourceURL=wpcom-actionbar-placeholder-js-extra
|
||
</script>
|
||
<script id="jetpack-mu-wpcom-settings-js-before">
|
||
var JETPACK_MU_WPCOM_SETTINGS = {"assetsUrl":"https://s1.wp.com/wp-content/mu-plugins/jetpack-mu-wpcom-plugin/moon/jetpack_vendor/automattic/jetpack-mu-wpcom/src/build/"};
|
||
//# sourceURL=jetpack-mu-wpcom-settings-js-before
|
||
</script>
|
||
<script crossorigin='anonymous' type='text/javascript' src='/_static/??/wp-content/mu-plugins/jetpack-plugin/moon/_inc/build/related-posts/related-posts.min.js,/wp-content/js/rlt-proxy.js?m=1788798821j'></script>
|
||
<script id="rlt-proxy-js-after">
|
||
rltInitialize( {"token":null,"iframeOrigins":["https:\/\/widgets.wp.com"]} );
|
||
//# sourceURL=rlt-proxy-js-after
|
||
</script>
|
||
<link rel="EditURI" type="application/rsd+xml" title="RSD" href="https://lorinhochstein.wordpress.com/xmlrpc.php?rsd" />
|
||
<meta name="generator" content="WordPress.com" />
|
||
<link rel="canonical" href="https://surfingcomplexity.blog/2026/01/31/ashby-taught-us-we-have-to-fight-fire-with-fire/" />
|
||
<link rel='shortlink' href='https://wp.me/p236df-1SJ' />
|
||
<link rel="alternate" type="application/json+oembed" href="https://public-api.wordpress.com/oembed/?format=json&url=https%3A%2F%2Fsurfingcomplexity.blog%2F2026%2F01%2F31%2Fashby-taught-us-we-have-to-fight-fire-with-fire%2F&for=wpcom-auto-discovery" /><link rel="alternate" type="application/xml+oembed" href="https://public-api.wordpress.com/oembed/?format=xml&url=https%3A%2F%2Fsurfingcomplexity.blog%2F2026%2F01%2F31%2Fashby-taught-us-we-have-to-fight-fire-with-fire%2F&for=wpcom-auto-discovery" />
|
||
<!-- Jetpack Open Graph Tags -->
|
||
<meta property="og:type" content="article" />
|
||
<meta property="og:title" content="Ashby taught us we have to fight fire with fire" />
|
||
<meta property="og:url" content="https://surfingcomplexity.blog/2026/01/31/ashby-taught-us-we-have-to-fight-fire-with-fire/" />
|
||
<meta property="og:description" content="There’s an old saying in software engineering, originally attributed to David Wheeler: We can solve any problem by introducing an extra level of indirection. The problem is that indirection a…" />
|
||
<meta property="article:published_time" content="2026-02-01T06:38:30+00:00" />
|
||
<meta property="article:modified_time" content="2026-02-01T16:26:32+00:00" />
|
||
<meta property="og:site_name" content="Surfing Complexity" />
|
||
<meta property="og:image" content="https://surfingcomplexity.blog/wp-content/uploads/2026/01/image-9.png" />
|
||
<meta property="og:image:secure_url" content="https://i0.wp.com/surfingcomplexity.blog/wp-content/uploads/2026/01/image-9.png?ssl=1" />
|
||
<meta property="og:image" content="https://surfingcomplexity.blog/wp-content/uploads/2026/01/2560px-boeing_787_n1015b_ana_airlines_282761188066329_28cropped29.jpg" />
|
||
<meta property="og:image:secure_url" content="https://i0.wp.com/surfingcomplexity.blog/wp-content/uploads/2026/01/2560px-boeing_787_n1015b_ana_airlines_282761188066329_28cropped29.jpg?ssl=1" />
|
||
<meta property="og:image" content="https://surfingcomplexity.blog/wp-content/uploads/2026/01/clerget_9b_faam.jpg" />
|
||
<meta property="og:image:secure_url" content="https://i0.wp.com/surfingcomplexity.blog/wp-content/uploads/2026/01/clerget_9b_faam.jpg?ssl=1" />
|
||
<meta property="og:image" content="https://surfingcomplexity.blog/wp-content/uploads/2026/01/general_electric_genx_on_747-8i_prototype.jpg" />
|
||
<meta property="og:image:secure_url" content="https://i0.wp.com/surfingcomplexity.blog/wp-content/uploads/2026/01/general_electric_genx_on_747-8i_prototype.jpg?ssl=1" />
|
||
<meta property="og:image" content="https://surfingcomplexity.blog/wp-content/uploads/2026/01/image-9.png" />
|
||
<meta property="og:image:secure_url" content="https://i0.wp.com/lorinhochstein.wordpress.com/wp-content/uploads/2026/01/image-9.png?ssl=1" />
|
||
<meta property="og:image" content="https://surfingcomplexity.blog/wp-content/uploads/2026/01/2560px-boeing_787_n1015b_ana_airlines_282761188066329_28cropped29.jpg" />
|
||
<meta property="og:image:secure_url" content="https://i0.wp.com/lorinhochstein.wordpress.com/wp-content/uploads/2026/01/2560px-boeing_787_n1015b_ana_airlines_282761188066329_28cropped29.jpg?ssl=1" />
|
||
<meta property="og:image" content="https://surfingcomplexity.blog/wp-content/uploads/2026/01/clerget_9b_faam.jpg" />
|
||
<meta property="og:image:secure_url" content="https://i0.wp.com/lorinhochstein.wordpress.com/wp-content/uploads/2026/01/clerget_9b_faam.jpg?ssl=1" />
|
||
<meta property="og:image" content="https://surfingcomplexity.blog/wp-content/uploads/2026/01/general_electric_genx_on_747-8i_prototype.jpg" />
|
||
<meta property="og:image:secure_url" content="https://i0.wp.com/lorinhochstein.wordpress.com/wp-content/uploads/2026/01/general_electric_genx_on_747-8i_prototype.jpg?ssl=1" />
|
||
<meta property="og:image" content="https://surfingcomplexity.blog/wp-content/uploads/2026/01/image-8.png" />
|
||
<meta property="og:image:secure_url" content="https://i0.wp.com/lorinhochstein.wordpress.com/wp-content/uploads/2026/01/image-8.png?ssl=1" />
|
||
<meta property="og:image" content="https://surfingcomplexity.blog/wp-content/uploads/2026/01/tron.png" />
|
||
<meta property="og:image:secure_url" content="https://i0.wp.com/lorinhochstein.wordpress.com/wp-content/uploads/2026/01/tron.png?ssl=1" />
|
||
<meta property="og:image:width" content="2560" />
|
||
<meta property="og:image:height" content="1707" />
|
||
<meta property="og:image:alt" content="" />
|
||
<meta property="og:locale" content="en_US" />
|
||
<meta property="article:publisher" content="https://www.facebook.com/WordPresscom" />
|
||
<meta name="twitter:text:title" content="Ashby taught us we have to fight fire with fire" />
|
||
<meta name="twitter:image" content="https://surfingcomplexity.blog/wp-content/uploads/2026/01/image-9.png?w=640" />
|
||
<meta name="twitter:card" content="summary_large_image" />
|
||
|
||
<!-- End Jetpack Open Graph Tags -->
|
||
<link rel='openid.server' href='https://surfingcomplexity.blog/?openidserver=1' />
|
||
<link rel='openid.delegate' href='https://surfingcomplexity.blog/' />
|
||
<link rel="search" type="application/opensearchdescription+xml" href="https://surfingcomplexity.blog/osd.xml" title="Surfing Complexity" />
|
||
<link rel="search" type="application/opensearchdescription+xml" href="https://s1.wp.com/opensearch.xml" title="WordPress.com" />
|
||
<link rel="pingback" href="https://surfingcomplexity.blog/xmlrpc.php"> <style type="text/css">
|
||
.recentcomments a {
|
||
display: inline !important;
|
||
padding: 0 !important;
|
||
margin: 0 !important;
|
||
}
|
||
|
||
table.recentcommentsavatartop img.avatar, table.recentcommentsavatarend img.avatar {
|
||
border: 0px;
|
||
margin: 0;
|
||
}
|
||
|
||
table.recentcommentsavatartop a, table.recentcommentsavatarend a {
|
||
border: 0px !important;
|
||
background-color: transparent !important;
|
||
}
|
||
|
||
td.recentcommentsavatarend, td.recentcommentsavatartop {
|
||
padding: 0px 0px 1px 0px;
|
||
margin: 0px;
|
||
}
|
||
|
||
td.recentcommentstextend {
|
||
border: none !important;
|
||
padding: 0px 0px 2px 10px;
|
||
}
|
||
|
||
.rtl td.recentcommentstextend {
|
||
padding: 0px 10px 2px 0px;
|
||
}
|
||
|
||
td.recentcommentstexttop {
|
||
border: none;
|
||
padding: 0px 0px 0px 10px;
|
||
}
|
||
|
||
.rtl td.recentcommentstexttop {
|
||
padding: 0px 10px 0px 0px;
|
||
}
|
||
</style>
|
||
<meta name="description" content="There's an old saying in software engineering, originally attributed to David Wheeler: We can solve any problem by introducing an extra level of indirection. The problem is that indirection adds complexity to a system. Just ask anybody who is learning C and is wrestling with the concept of pointers. Or ask someone who is operating…" />
|
||
<link rel="icon" href="https://surfingcomplexity.blog/wp-content/uploads/2020/05/surfer_1f3c4.png?w=32" sizes="32x32" />
|
||
<link rel="icon" href="https://surfingcomplexity.blog/wp-content/uploads/2020/05/surfer_1f3c4.png?w=120" sizes="192x192" />
|
||
<link rel="apple-touch-icon" href="https://surfingcomplexity.blog/wp-content/uploads/2020/05/surfer_1f3c4.png?w=120" />
|
||
<meta name="msapplication-TileImage" content="https://surfingcomplexity.blog/wp-content/uploads/2020/05/surfer_1f3c4.png?w=120" />
|
||
<link crossorigin='anonymous' rel='stylesheet' id='all-css-0-5' href='/_static/??-eJyNjMEKhDAMBX9IfaiIXsRPWdxskGqbFNPi7y+CevY4wzA4YkkqiSUh5DL6vDgxrJziTNvFCKqCjxPC1yttBjtc5L0iswLvD0F/2bOB5l2zsX+iW5zDKYx1P3RN07b1sP4BKPs7aw==&cssminify=yes' type='text/css' media='all' />
|
||
<style id="core-block-supports-inline-css">
|
||
.wp-block-gallery.wp-block-gallery-1{--wp--style--unstable-gallery-gap:var( --wp--style--gallery-gap-default, var( --gallery-block--gutter-size, var( --wp--style--block-gap, 0.5em ) ) );}.wp-block-gallery.wp-block-gallery-2{--wp--style--unstable-gallery-gap:var( --wp--style--gallery-gap-default, var( --gallery-block--gutter-size, var( --wp--style--block-gap, 0.5em ) ) );}
|
||
/*# sourceURL=core-block-supports-inline-css */
|
||
</style>
|
||
|
||
</head>
|
||
|
||
<body class="wp-singular post-template-default single single-post postid-7237 single-format-standard wp-embed-responsive wp-theme-pubindependent-publisher-2 customizer-styles-applied has-sidebar jetpack-reblog-enabled">
|
||
|
||
<div id="page" class="hfeed site">
|
||
<a class="skip-link screen-reader-text" href="#content">Skip to content</a>
|
||
|
||
<div id="hero-header" class="site-hero-section">
|
||
<header id="masthead" class="site-header" role="banner">
|
||
<div class="inner">
|
||
<div class="site-branding">
|
||
|
||
<a class="site-logo-link" href="https://surfingcomplexity.blog/">
|
||
<img referrerpolicy="no-referrer" alt='Unknown's avatar' src='https://0.gravatar.com/avatar/f2641f12e815a54896f8f2ac04660c52efb896e09131390ad2a6f2f5fca81432?s=80&d=identicon&r=G' srcset='https://0.gravatar.com/avatar/f2641f12e815a54896f8f2ac04660c52efb896e09131390ad2a6f2f5fca81432?s=80&d=identicon&r=G 1x, https://0.gravatar.com/avatar/f2641f12e815a54896f8f2ac04660c52efb896e09131390ad2a6f2f5fca81432?s=120&d=identicon&r=G 1.5x, https://0.gravatar.com/avatar/f2641f12e815a54896f8f2ac04660c52efb896e09131390ad2a6f2f5fca81432?s=160&d=identicon&r=G 2x, https://0.gravatar.com/avatar/f2641f12e815a54896f8f2ac04660c52efb896e09131390ad2a6f2f5fca81432?s=240&d=identicon&r=G 3x, https://0.gravatar.com/avatar/f2641f12e815a54896f8f2ac04660c52efb896e09131390ad2a6f2f5fca81432?s=320&d=identicon&r=G 4x' class='avatar avatar-80 site-logo-image' height='80' width='80' loading='eager' decoding='async' /> </a><!-- .site-logo-link -->
|
||
<p class="site-title"><a href="https://surfingcomplexity.blog/" rel="home">Surfing Complexity</a></p>
|
||
<p class="site-description">Lorin Hochstein's ramblings about software, complex systems, and incidents.</p>
|
||
</div><!-- .site-branding -->
|
||
|
||
|
||
|
||
</div><!-- .inner -->
|
||
</header><!-- #masthead -->
|
||
</div>
|
||
|
||
|
||
|
||
|
||
<div id="content-wrapper" class="content-wrapper">
|
||
<div id="content" class="site-content">
|
||
|
||
<div id="primary" class="content-area">
|
||
<main id="main" class="site-main" role="main">
|
||
|
||
|
||
|
||
<article id="post-7237" class="post-7237 post type-post status-publish format-standard hentry category-cognitive-systems-engineering category-software tag-ai">
|
||
<header class="entry-header">
|
||
<h1 class="entry-title">Ashby taught us we have to fight fire with fire</h1> </header><!-- .entry-header --> <div class="entry-meta">
|
||
<span class="byline">
|
||
<a href="https://surfingcomplexity.blog/author/lorinh/" rel="author">Lorin Hochstein</a> </span>
|
||
<span class="cat-links">
|
||
<a href="https://surfingcomplexity.blog/category/cognitive-systems-engineering/" rel="category tag">cognitive-systems-engineering</a>, <a href="https://surfingcomplexity.blog/category/software/" rel="category tag">software</a> </span><!-- .cat-links -->
|
||
|
||
|
||
<span class="published-on">
|
||
<time class="entry-date published" datetime="2026-01-31T22:38:30-08:00">January 31, 2026</time><time class="updated" datetime="2026-02-01T08:26:32-08:00">February 1, 2026</time> </span>
|
||
|
||
<span class="word-count">8 Minutes</span> </div><!-- .entry-meta -->
|
||
|
||
<div class="entry-content">
|
||
|
||
<p class="wp-block-paragraph">There’s an old saying in software engineering, <a href="https://en.wikipedia.org/wiki/Fundamental_theorem_of_software_engineering">originally attributed to David Wheeler</a>: <em>We can solve any problem by introducing an extra level of indirection</em>. The problem is that indirection adds complexity to a system. Just ask anybody who is learning C and is wrestling with the concept of pointers. Or ask someone who is operating an unfamiliar codebase and is trying to use grep to find the code that relates to certain log messages. Indirection is a powerful tool, but it also renders systems more difficult to reason about.</p>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">The old saying points at a more general phenomenon: our engineering solutions to problems invariably add complexity. </p>
|
||
|
||
|
||
|
||
<h2 class="wp-block-heading">Spinning is hard</h2>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">There was a fun example of this phenomenon that made it to Hacker News the other day. It was a post written by <a href="https://www.linkedin.com/in/clementgregoire/">Clément Grégoire</a> of siliceum titled <a href="https://www.siliceum.com/en/blog/post/spinning-around/">Spinning around: Please don’t!</a>. The post was about the challenges of implementing spin locks. </p>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">A spin lock is a type of lock where the thread <em>spins</em> in a loop waiting for the lock to be released so it can grab it. The appeal of a spin-lock is that it should be faster than a traditional mutex lock provided by the operating system: using a spin-lock saves you the performance cost of doing a context switch into the kernel. Grégoire’s initial C++ spin-lock implementation looks basically like this (I made some very minor style changes):</p>
|
||
|
||
|
||
<div class="wp-block-code">
|
||
<div class="cm-editor">
|
||
<div class="cm-scroller">
|
||
|
||
<pre>
|
||
<code class="language-c++"><div class="cm-line"><span class="tok-keyword">class</span> <span class="tok-typeName">SpinLock</span> <span class="tok-punctuation">{</span></div><div class="cm-line"> <span class="tok-typeName">int</span> <span class="tok-propertyName">is_locked</span> = <span class="tok-number">0</span>;</div><div class="cm-line"> <span class="tok-keyword">public</span>:</div><div class="cm-line"> <span class="tok-typeName">void</span> <span class="tok-propertyName">lock</span><span class="tok-punctuation">(</span><span class="tok-punctuation">)</span> <span class="tok-punctuation">{</span></div><div class="cm-line"> <span class="tok-keyword">while</span> <span class="tok-punctuation">(</span><span class="tok-variableName">is_locked</span> <span class="tok-operator">!=</span> <span class="tok-number">0</span><span class="tok-punctuation">)</span> <span class="tok-punctuation">{</span> <span class="tok-comment">/* spin */</span> <span class="tok-punctuation">}</span></div><div class="cm-line"> <span class="tok-variableName">is_locked</span> = <span class="tok-number">1</span>;</div><div class="cm-line"> <span class="tok-punctuation">}</span></div><div class="cm-line"> <span class="tok-typeName">void</span> <span class="tok-propertyName">unlock</span><span class="tok-punctuation">(</span><span class="tok-punctuation">)</span> <span class="tok-punctuation">{</span> <span class="tok-variableName">is_locked</span> = <span class="tok-number">0</span>; <span class="tok-punctuation">}</span></div><div class="cm-line"><span class="tok-punctuation">}</span></div></code></pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<p class="wp-block-paragraph">As far as locking implementations go, this is a simple one. Unfortunately, it has all sorts of problems. Grégoire’s post goes on to describe these problems, as well as potential solutions, and additional problems created by those proposed solutions. Along the way, he mentions issues such as:</p>
|
||
|
||
|
||
|
||
<ul class="wp-block-list">
|
||
<li>torn reads</li>
|
||
|
||
|
||
|
||
<li>race condition</li>
|
||
|
||
|
||
|
||
<li>high CPU utilization when not using the dedicated <a href="https://www.felixcloutier.com/x86/pause">PAUSE</a> (x86) or <a href="https://developer.arm.com/documentation/dui0801/d/A64-General-Instructions/YIELD">YIELD </a>(arm) (spin loop hint) instruction</li>
|
||
|
||
|
||
|
||
<li>waiting for too long when using the dedicated instruction</li>
|
||
|
||
|
||
|
||
<li>contention across multiple cores attempting atomic writes</li>
|
||
|
||
|
||
|
||
<li>high cache coherency traffic across multiple core caches</li>
|
||
|
||
|
||
|
||
<li>excessive use of memory barriers</li>
|
||
|
||
|
||
|
||
<li>priority inversion</li>
|
||
|
||
|
||
|
||
<li>false sharing</li>
|
||
</ul>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">Below is an implementation that Grégoire proposes to address these issues, with very slight modifications. Note that it requires a system call, so it’s operating-system-specific. He used Windows systems calls, so that’s why I used as well: on Linux, Grégoire notes that you can use the <a href="/2024/10/05/futexes-in-tla/">futex API</a>.</p>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">(Note: I did not even try to run this code, it’s just to illustrate what the solution looks like)</p>
|
||
|
||
|
||
<div class="wp-block-code">
|
||
<div class="cm-editor">
|
||
<div class="cm-scroller">
|
||
|
||
<pre>
|
||
<code class="language-c++"><div class="cm-line"><span class="tok-meta">#include</span> <span class="tok-string2"><atomic></span> <span class="tok-comment">// for std::atomic</span></div><div class="cm-line"><span class="tok-meta">#include</span> <span class="tok-string2"><Windows.h></span> <span class="tok-comment">// for WaitOnAddress, WakeByAddressSingle</span></div><div class="cm-line"></div><div class="cm-line"><span class="tok-keyword">class</span> <span class="tok-typeName">SpinLock</span> <span class="tok-punctuation">{</span></div><div class="cm-line"> <span class="tok-namespace">std</span>::<span class="tok-typeName">atomic</span><span class="tok-punctuation"><</span><span class="tok-typeName">int32_t</span><span class="tok-punctuation">></span> <span class="tok-propertyName">is_locked</span><span class="tok-punctuation">{</span><span class="tok-number">0</span><span class="tok-punctuation">}</span>;</div><div class="cm-line"> <span class="tok-keyword">public</span>:</div><div class="cm-line"> <span class="tok-typeName">void</span> <span class="tok-propertyName">lock</span><span class="tok-punctuation">(</span><span class="tok-punctuation">)</span>;</div><div class="cm-line"> <span class="tok-typeName">void</span> <span class="tok-propertyName">unlock</span><span class="tok-punctuation">(</span><span class="tok-punctuation">)</span>; </div><div class="cm-line"><span class="tok-punctuation">}</span>;</div><div class="cm-line"></div><div class="cm-line"><span class="tok-typeName">void</span> <span class="tok-variableName tok-definition">cpu_pause</span><span class="tok-punctuation">(</span><span class="tok-punctuation">)</span> <span class="tok-punctuation">{</span></div><div class="cm-line"><span class="tok-meta">#if</span> defined(__i386__) || defined(__x86_64__) || defined(_M_IX86) || defined(_M_X64)</div><div class="cm-line"> <span class="tok-variableName">_mm_pause</span><span class="tok-punctuation">(</span><span class="tok-punctuation">)</span>;</div><div class="cm-line"><span class="tok-meta">#elif</span> defined(__arm__) || defined(__aarch64__) || defined(_M_ARM) || defined(_M_ARM64) || defined(_M_ARM64EC)</div><div class="cm-line"> <span class="tok-variableName">__builtin_arm_yield</span><span class="tok-punctuation">(</span><span class="tok-punctuation">)</span>;</div><div class="cm-line"><span class="tok-meta">#else</span></div><div class="cm-line"> <span class="tok-meta">#error</span> "unknown instruction set"</div><div class="cm-line"><span class="tok-meta">#endif</span></div><div class="cm-line"><span class="tok-punctuation">}</span></div><div class="cm-line"></div><div class="cm-line"><span class="tok-keyword">static</span> <span class="tok-keyword">inline</span> <span class="tok-typeName">uint64_t</span> <span class="tok-variableName tok-definition">get_tsc</span><span class="tok-punctuation">(</span><span class="tok-punctuation">)</span> <span class="tok-punctuation">{</span></div><div class="cm-line"><span class="tok-meta">#if</span> defined(__i386__) || defined(__x86_64__) || defined(_M_IX86) || defined(_M_X64)</div><div class="cm-line"> <span class="tok-keyword">return</span> <span class="tok-variableName">__rdtsc</span><span class="tok-punctuation">(</span><span class="tok-punctuation">)</span>;</div><div class="cm-line"><span class="tok-meta">#elif</span> defined(__arm__) || defined(__aarch64__) || defined(_M_ARM) || defined(_M_ARM64) || defined(_M_ARM64EC)</div><div class="cm-line"> <span class="tok-keyword">return</span> <span class="tok-variableName">__builtin_arm_rsr64</span><span class="tok-punctuation">(</span><span class="tok-string">"cntvct_el0"</span><span class="tok-punctuation">)</span>;</div><div class="cm-line"><span class="tok-meta">#else</span></div><div class="cm-line"> <span class="tok-meta">#error</span> "unknown instruction set"</div><div class="cm-line"><span class="tok-meta">#endif</span></div><div class="cm-line"><span class="tok-punctuation">}</span></div><div class="cm-line"></div><div class="cm-line"><span class="tok-keyword">static</span> <span class="tok-keyword">inline</span> <span class="tok-typeName">bool</span> <span class="tok-variableName tok-definition">before</span><span class="tok-punctuation">(</span><span class="tok-typeName">uint64_t</span> <span class="tok-variableName">a</span><span class="tok-punctuation">,</span> <span class="tok-typeName">uint64_t</span> <span class="tok-variableName">b</span><span class="tok-punctuation">)</span> <span class="tok-punctuation">{</span></div><div class="cm-line"> <span class="tok-keyword">return</span> <span class="tok-punctuation">(</span><span class="tok-punctuation">(</span><span class="tok-typeName">int64_t</span><span class="tok-punctuation">)</span><span class="tok-variableName">b</span> <span class="tok-operator">-</span> <span class="tok-punctuation">(</span><span class="tok-typeName">int64_t</span><span class="tok-punctuation">)</span><span class="tok-variableName">a</span><span class="tok-punctuation">)</span> <span class="tok-operator">></span> <span class="tok-number">0</span>;</div><div class="cm-line"><span class="tok-punctuation">}</span></div><div class="cm-line"></div><div class="cm-line"><span class="tok-keyword">struct</span> <span class="tok-typeName">Yielder</span> <span class="tok-punctuation">{</span></div><div class="cm-line"> <span class="tok-keyword">static</span> <span class="tok-keyword">const</span> <span class="tok-typeName">int</span> <span class="tok-propertyName">maxPauses</span> = <span class="tok-number">64</span>; <span class="tok-comment">// MAX_BACKOFF</span></div><div class="cm-line"> <span class="tok-typeName">int</span> <span class="tok-propertyName">nbPauses</span> = <span class="tok-number">1</span>;</div><div class="cm-line"></div><div class="cm-line"> <span class="tok-keyword">const</span> <span class="tok-typeName">int</span> <span class="tok-propertyName">maxCycles</span> =<span class="tok-comment">/*Some value*/</span>;</div><div class="cm-line"></div><div class="cm-line"> <span class="tok-typeName">void</span> <span class="tok-variableName tok-definition">do_yield_expo_and_jitter</span><span class="tok-punctuation">(</span><span class="tok-punctuation">)</span> <span class="tok-punctuation">{</span></div><div class="cm-line"> <span class="tok-typeName">uint64_t</span> <span class="tok-variableName">beginTSC</span> = <span class="tok-variableName">get_tsc</span><span class="tok-punctuation">(</span><span class="tok-punctuation">)</span>;</div><div class="cm-line"> <span class="tok-typeName">uint64_t</span> <span class="tok-variableName">endTSC</span> = <span class="tok-variableName">beginTSC</span> <span class="tok-operator">+</span> <span class="tok-variableName">maxCycles</span>; <span class="tok-comment">// Max duration of the yield</span></div><div class="cm-line"> <span class="tok-comment">// jitter is in the range of [0;nbPauses-1].</span></div><div class="cm-line"> <span class="tok-comment">// We can use bitwise AND since nbPauses is a power of 2.</span></div><div class="cm-line"> <span class="tok-keyword">const</span> <span class="tok-typeName">int</span> <span class="tok-variableName">jitter</span> = <span class="tok-variableName">static_cast</span><span class="tok-punctuation"><</span><span class="tok-typeName">int</span><span class="tok-punctuation">></span><span class="tok-punctuation">(</span><span class="tok-variableName">beginTSC</span> <span class="tok-operator">&</span> <span class="tok-punctuation">(</span><span class="tok-variableName">nbPauses</span> <span class="tok-operator">-</span> <span class="tok-number">1</span><span class="tok-punctuation">)</span><span class="tok-punctuation">)</span>;</div><div class="cm-line"> <span class="tok-comment">// So subtracting we get a value between [1;nbPauses]</span></div><div class="cm-line"> <span class="tok-keyword">const</span> <span class="tok-typeName">int</span> <span class="tok-variableName">nbPausesThisLoop</span> = <span class="tok-variableName">nbPauses</span> <span class="tok-operator">-</span> <span class="tok-variableName">jitter</span>;</div><div class="cm-line"> <span class="tok-keyword">for</span> <span class="tok-punctuation">(</span><span class="tok-typeName">int</span> <span class="tok-variableName">i</span> = <span class="tok-number">0</span>; <span class="tok-variableName">i</span> <span class="tok-operator"><</span> <span class="tok-variableName">nbPausesThisLoop</span> <span class="tok-operator">&&</span> <span class="tok-variableName">before</span><span class="tok-punctuation">(</span><span class="tok-variableName">get_tsc</span><span class="tok-punctuation">(</span><span class="tok-punctuation">)</span><span class="tok-punctuation">,</span> <span class="tok-variableName">endTSC</span><span class="tok-punctuation">)</span>; <span class="tok-variableName">i</span><span class="tok-operator">++</span><span class="tok-punctuation">)</span></div><div class="cm-line"> <span class="tok-variableName">cpu_pause</span><span class="tok-punctuation">(</span><span class="tok-punctuation">)</span>;</div><div class="cm-line"> <span class="tok-comment">// Multiply the number of pauses by 2 until we reach the max backoff count.</span></div><div class="cm-line"> <span class="tok-variableName">nbPauses</span> = <span class="tok-variableName">nbPauses</span> <span class="tok-operator"><</span> <span class="tok-variableName">maxPauses</span> ? <span class="tok-variableName">nbPauses</span> <span class="tok-operator">*</span> <span class="tok-number">2</span> : <span class="tok-variableName">nbPauses</span>;</div><div class="cm-line"> <span class="tok-punctuation">}</span></div><div class="cm-line"></div><div class="cm-line"> <span class="tok-typeName">void</span> <span class="tok-variableName tok-definition">do_yield</span><span class="tok-punctuation">(</span><span class="tok-typeName">int32_t</span>* <span class="tok-variableName">address</span><span class="tok-punctuation">,</span> <span class="tok-typeName">int32_t</span> <span class="tok-variableName">comparisonValue</span><span class="tok-punctuation">,</span> <span class="tok-typeName">uint32_t</span> <span class="tok-variableName">timeoutMs</span><span class="tok-punctuation">)</span> <span class="tok-punctuation">{</span></div><div class="cm-line"> <span class="tok-variableName">do_yield_expo_and_jitter</span><span class="tok-punctuation">(</span><span class="tok-punctuation">)</span>;</div><div class="cm-line"> <span class="tok-keyword">if</span> <span class="tok-punctuation">(</span><span class="tok-variableName">nbPauses</span> <span class="tok-operator">>=</span> <span class="tok-variableName">maxPauses</span><span class="tok-punctuation">)</span> <span class="tok-punctuation">{</span></div><div class="cm-line"> <span class="tok-variableName">WaitOnAddress</span><span class="tok-punctuation">(</span><span class="tok-variableName">address</span><span class="tok-punctuation">,</span> &<span class="tok-variableName">comparisonValue</span><span class="tok-punctuation">,</span> <span class="tok-keyword">sizeof</span><span class="tok-punctuation">(</span><span class="tok-typeName">comparisonValue</span><span class="tok-punctuation">)</span><span class="tok-punctuation">,</span> <span class="tok-variableName">timeoutMs</span><span class="tok-punctuation">)</span>;</div><div class="cm-line"> <span class="tok-variableName">nbPauses</span> = <span class="tok-number">1</span>;</div><div class="cm-line"> <span class="tok-punctuation">}</span></div><div class="cm-line"> <span class="tok-punctuation">}</span></div><div class="cm-line"><span class="tok-punctuation">}</span>;</div><div class="cm-line"></div><div class="cm-line"><span class="tok-typeName">void</span> <span class="tok-namespace">SpinLock</span>::<span class="tok-variableName">lock</span><span class="tok-punctuation">(</span><span class="tok-punctuation">)</span> <span class="tok-punctuation">{</span></div><div class="cm-line"> <span class="tok-typeName">Yielder</span> <span class="tok-variableName">yield</span>;</div><div class="cm-line"> <span class="tok-comment">// Actually start by an exchange, we assume the lock is not already taken</span></div><div class="cm-line"> <span class="tok-comment">// This is because the main use case of a spinlock is when there's no contention!</span></div><div class="cm-line"> <span class="tok-keyword">while</span> <span class="tok-punctuation">(</span><span class="tok-variableName">is_locked</span>.<span class="tok-propertyName">exchange</span><span class="tok-punctuation">(</span><span class="tok-number">1</span><span class="tok-punctuation">,</span> <span class="tok-namespace">std</span>::<span class="tok-variableName">memory_order_acquire</span><span class="tok-punctuation">)</span> <span class="tok-operator">!=</span> <span class="tok-number">0</span><span class="tok-punctuation">)</span></div><div class="cm-line"> <span class="tok-punctuation">{</span></div><div class="cm-line"> <span class="tok-comment">// To avoid locking the cache line with a write access, always only read before attempting the writes</span></div><div class="cm-line"> <span class="tok-keyword">do</span> <span class="tok-punctuation">{</span></div><div class="cm-line"> <span class="tok-variableName">yield</span>.<span class="tok-propertyName">do_yield</span><span class="tok-punctuation">(</span>&<span class="tok-variableName">is_locked</span><span class="tok-punctuation">,</span> <span class="tok-number">1</span> <span class="tok-comment">/*while locked*/</span> <span class="tok-punctuation">,</span> <span class="tok-number">1</span> <span class="tok-comment">/*ms*/</span><span class="tok-punctuation">)</span>;</div><div class="cm-line"> <span class="tok-punctuation">}</span> <span class="tok-keyword">while</span> <span class="tok-punctuation">(</span><span class="tok-variableName">is_locked</span>.<span class="tok-propertyName">load</span><span class="tok-punctuation">(</span><span class="tok-namespace">std</span>::<span class="tok-variableName">memory_order_relaxed</span><span class="tok-punctuation">)</span> <span class="tok-operator">!=</span> <span class="tok-number">0</span><span class="tok-punctuation">)</span>;</div><div class="cm-line"> <span class="tok-punctuation">}</span></div><div class="cm-line"><span class="tok-punctuation">}</span></div><div class="cm-line"></div><div class="cm-line"><span class="tok-typeName">void</span> <span class="tok-namespace">SpinLock</span>::<span class="tok-variableName">unlock</span><span class="tok-punctuation">(</span><span class="tok-punctuation">)</span> <span class="tok-punctuation">{</span></div><div class="cm-line"> <span class="tok-variableName">is_locked</span> = <span class="tok-number">0</span>;</div><div class="cm-line"> <span class="tok-variableName">WakeByAddressSingle</span><span class="tok-punctuation">(</span>&<span class="tok-variableName">is_locked</span><span class="tok-punctuation">)</span>; <span class="tok-comment">// Notify a potential thread waiting, if any </span></div><div class="cm-line"><span class="tok-punctuation">}</span></div></code></pre>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
|
||
<p class="wp-block-paragraph">Yeesh, this is a lot more complex than our original solution! And yet, that complexity exists to address real problems. It uses dedicated hardware instructions for spin-looping more efficiently, it uses exponential backoff with jittering to reduce contention across cores, it takes into account memory ordering to eliminate unwanted barriers, and it uses special system calls to help the system calls schedule the threads more effectively. The simplicity of this initial solution was no match for the complexity of modern multi-core NUMA machines. No matter how simple that initial solution looked as a C++ program, the solution must interact with the complexity of the fundamental building blocks of compilers, operating systems, and hardware architecture.</p>
|
||
|
||
|
||
|
||
<h2 class="wp-block-heading">Flying is even harder</h2>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">Now let’s take an example from outside of software: aviation. Consider the following two airplanes: a WWI era Sopwith Camel, and a Boeing 787 Dreamliner. </p>
|
||
|
||
|
||
|
||
<figure data-carousel-extra='{"blog_id":30291541,"permalink":"https://surfingcomplexity.blog/2026/01/31/ashby-taught-us-we-have-to-fight-fire-with-fire/"}' class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-1 is-layout-flex wp-block-gallery-is-layout-flex">
|
||
<figure class="wp-block-image size-large"><a href="https://surfingcomplexity.blog/wp-content/uploads/2026/01/image-9.png"><img data-attachment-id="7243" data-permalink="https://surfingcomplexity.blog/2026/01/31/ashby-taught-us-we-have-to-fight-fire-with-fire/image-485/" data-orig-file="https://surfingcomplexity.blog/wp-content/uploads/2026/01/image-9.png" data-orig-size="2560,1707" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="WWI Sopwith Camel biplane" data-image-description="<p>Source: https://commons.wikimedia.org/wiki/File:Sopwith_Camel_-_Season_Premiere_Airshow_2018_(42058141172).jpg</p>
|
||
" data-image-caption="<p>Sopwith Camel</p>
|
||
" data-large-file="https://surfingcomplexity.blog/wp-content/uploads/2026/01/image-9.png?w=1024" width="1024" height="682" data-id="7243" src="https://surfingcomplexity.blog/wp-content/uploads/2026/01/image-9.png?w=1024" alt="" class="wp-image-7243" srcset="https://surfingcomplexity.blog/wp-content/uploads/2026/01/image-9.png?w=1024 1024w, https://surfingcomplexity.blog/wp-content/uploads/2026/01/image-9.png?w=2048 2048w, https://surfingcomplexity.blog/wp-content/uploads/2026/01/image-9.png?w=150 150w, https://surfingcomplexity.blog/wp-content/uploads/2026/01/image-9.png?w=300 300w, https://surfingcomplexity.blog/wp-content/uploads/2026/01/image-9.png?w=768 768w, https://surfingcomplexity.blog/wp-content/uploads/2026/01/image-9.png?w=1440 1440w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption"><a href="https://commons.wikimedia.org/wiki/File:Sopwith_Camel_-_Season_Premiere_Airshow_2018_(cropped).jpg">Sopwith Camel</a></figcaption></figure>
|
||
|
||
|
||
|
||
<figure class="wp-block-image size-large"><a href="https://surfingcomplexity.blog/wp-content/uploads/2026/01/2560px-boeing_787_n1015b_ana_airlines_282761188066329_28cropped29.jpg"><img data-attachment-id="7246" data-permalink="https://surfingcomplexity.blog/2560px-boeing_787_n1015b_ana_airlines_282761188066329_28cropped29/" data-orig-file="https://surfingcomplexity.blog/wp-content/uploads/2026/01/2560px-boeing_787_n1015b_ana_airlines_282761188066329_28cropped29.jpg" data-orig-size="2560,1649" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="Boeing 787 Dreamliner" data-image-description="" data-image-caption="<p>Boeing 787 Dreamliner</p>
|
||
" data-large-file="https://surfingcomplexity.blog/wp-content/uploads/2026/01/2560px-boeing_787_n1015b_ana_airlines_282761188066329_28cropped29.jpg?w=1024" width="1024" height="659" data-id="7246" src="https://surfingcomplexity.blog/wp-content/uploads/2026/01/2560px-boeing_787_n1015b_ana_airlines_282761188066329_28cropped29.jpg?w=1024" alt="" class="wp-image-7246" srcset="https://surfingcomplexity.blog/wp-content/uploads/2026/01/2560px-boeing_787_n1015b_ana_airlines_282761188066329_28cropped29.jpg?w=1024 1024w, https://surfingcomplexity.blog/wp-content/uploads/2026/01/2560px-boeing_787_n1015b_ana_airlines_282761188066329_28cropped29.jpg?w=2048 2048w, https://surfingcomplexity.blog/wp-content/uploads/2026/01/2560px-boeing_787_n1015b_ana_airlines_282761188066329_28cropped29.jpg?w=150 150w, https://surfingcomplexity.blog/wp-content/uploads/2026/01/2560px-boeing_787_n1015b_ana_airlines_282761188066329_28cropped29.jpg?w=300 300w, https://surfingcomplexity.blog/wp-content/uploads/2026/01/2560px-boeing_787_n1015b_ana_airlines_282761188066329_28cropped29.jpg?w=768 768w, https://surfingcomplexity.blog/wp-content/uploads/2026/01/2560px-boeing_787_n1015b_ana_airlines_282761188066329_28cropped29.jpg?w=1440 1440w" sizes="(max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption"><a href="https://commons.wikimedia.org/wiki/File:Boeing_787_N1015B_ANA_Airlines_(27611880663)_(cropped).jpg">Boeing 787 Dreamliner</a></figcaption></figure>
|
||
</figure>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">While we debate endlessly over what we mean by <em>complexity</em>, I feel confident in claiming that the Dreamliner is a more complex airplane than the Camel. Heck, just look at the difference in the engines used by the two planes: the Clerget 9B for the Camel, and the GE GEnx for the Dreamliner.</p>
|
||
|
||
|
||
|
||
<figure data-carousel-extra='{"blog_id":30291541,"permalink":"https://surfingcomplexity.blog/2026/01/31/ashby-taught-us-we-have-to-fight-fire-with-fire/"}' class="wp-block-gallery has-nested-images columns-default is-cropped wp-block-gallery-2 is-layout-flex wp-block-gallery-is-layout-flex">
|
||
<figure class="wp-block-image size-large"><a href="https://surfingcomplexity.blog/wp-content/uploads/2026/01/clerget_9b_faam.jpg"><img data-attachment-id="7250" data-permalink="https://surfingcomplexity.blog/olympus-digital-camera/" data-orig-file="https://surfingcomplexity.blog/wp-content/uploads/2026/01/clerget_9b_faam.jpg" data-orig-size="2446,2463" data-comments-opened="1" data-image-meta="{"aperture":"3.5","credit":"","camera":"E-410","caption":"OLYMPUS DIGITAL CAMERA","created_timestamp":"1269517305","copyright":"","focal_length":"17","iso":"200","shutter_speed":"0.033333333333333","title":"OLYMPUS DIGITAL CAMERA","orientation":"0"}" data-image-title="Clerget 9B" data-image-description="<p>OLYMPUS DIGITAL CAMERA</p>
|
||
" data-image-caption="<p>Clerget 9B</p>
|
||
" data-large-file="https://surfingcomplexity.blog/wp-content/uploads/2026/01/clerget_9b_faam.jpg?w=1017" width="1017" height="1024" data-id="7250" src="https://surfingcomplexity.blog/wp-content/uploads/2026/01/clerget_9b_faam.jpg?w=1017" alt="" class="wp-image-7250" srcset="https://surfingcomplexity.blog/wp-content/uploads/2026/01/clerget_9b_faam.jpg?w=1017 1017w, https://surfingcomplexity.blog/wp-content/uploads/2026/01/clerget_9b_faam.jpg?w=2034 2034w, https://surfingcomplexity.blog/wp-content/uploads/2026/01/clerget_9b_faam.jpg?w=150 150w, https://surfingcomplexity.blog/wp-content/uploads/2026/01/clerget_9b_faam.jpg?w=298 298w, https://surfingcomplexity.blog/wp-content/uploads/2026/01/clerget_9b_faam.jpg?w=768 768w, https://surfingcomplexity.blog/wp-content/uploads/2026/01/clerget_9b_faam.jpg?w=1440 1440w" sizes="(max-width: 1017px) 100vw, 1017px" /></a><figcaption class="wp-element-caption"><a href="https://commons.wikimedia.org/wiki/File:Clerget_9B_FAAM.JPG">Clerget 9B</a></figcaption></figure>
|
||
|
||
|
||
|
||
<figure class="wp-block-image size-large"><a href="https://surfingcomplexity.blog/wp-content/uploads/2026/01/general_electric_genx_on_747-8i_prototype.jpg"><img data-attachment-id="7251" data-permalink="https://surfingcomplexity.blog/general_electric_genx_on_747-8i_prototype/" data-orig-file="https://surfingcomplexity.blog/wp-content/uploads/2026/01/general_electric_genx_on_747-8i_prototype.jpg" data-orig-size="3648,2736" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"Olivier Cleynen","camera":"S95","caption":"","created_timestamp":"0","copyright":"CC by-sa","focal_length":"6","iso":"100","shutter_speed":"0","title":"","orientation":"1"}" data-image-title="general_electric_genx_on_747-8i_prototype" data-image-description="" data-image-caption="<p>GE GEnx</p>
|
||
" data-large-file="https://surfingcomplexity.blog/wp-content/uploads/2026/01/general_electric_genx_on_747-8i_prototype.jpg?w=1024" loading="lazy" width="1024" height="768" data-id="7251" src="https://surfingcomplexity.blog/wp-content/uploads/2026/01/general_electric_genx_on_747-8i_prototype.jpg?w=1024" alt="" class="wp-image-7251" srcset="https://surfingcomplexity.blog/wp-content/uploads/2026/01/general_electric_genx_on_747-8i_prototype.jpg?w=1024 1024w, https://surfingcomplexity.blog/wp-content/uploads/2026/01/general_electric_genx_on_747-8i_prototype.jpg?w=2048 2048w, https://surfingcomplexity.blog/wp-content/uploads/2026/01/general_electric_genx_on_747-8i_prototype.jpg?w=150 150w, https://surfingcomplexity.blog/wp-content/uploads/2026/01/general_electric_genx_on_747-8i_prototype.jpg?w=300 300w, https://surfingcomplexity.blog/wp-content/uploads/2026/01/general_electric_genx_on_747-8i_prototype.jpg?w=768 768w, https://surfingcomplexity.blog/wp-content/uploads/2026/01/general_electric_genx_on_747-8i_prototype.jpg?w=1440 1440w" sizes="auto, (max-width: 1024px) 100vw, 1024px" /></a><figcaption class="wp-element-caption"><a href="https://commons.wikimedia.org/wiki/File:General_Electric_GEnx_on_747-8I_prototype.jpg">GE GEnx</a></figcaption></figure>
|
||
</figure>
|
||
|
||
|
||
|
||
<p class="has-small-font-size wp-block-paragraph"><em><span style="text-decoration: underline">Image attributions</span><br><a href="https://commons.wikimedia.org/wiki/File:Sopwith_Camel_-_Season_Premiere_Airshow_2018_(cropped).jpg">Sopwith Camel: Airwolfhound, CC BY-SA 2.0 via Wikimedia Commons</a><br><a href="https://commons.wikimedia.org/wiki/File:Boeing_787_N1015B_ANA_Airlines_(27611880663)_(cropped).jpg">Boeing 787 Dreamliner: pjs2005 from Hampshire, UK, CC BY-SA 2.0 via Wikimedia Commons<br>Clerget 9B: Nimbus227, Public domain, via Wikimedia Commons<br></a><a href="https://commons.wikimedia.org/wiki/File:General_Electric_GEnx_on_747-8I_prototype.jpg">GE Genx: Olivier Cleynen, CC BY-SA 3.0 via Wikimedia Commons</a></em></p>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">And, yet, despite the Camel being simpler than the Dreamliner, the Camel was such a dangerous airplane to fly that <a href="https://www.nationalmuseum.af.mil/Visit/Museum-Exhibits/Fact-Sheets/Display/Article/197401/sopwith-f-1-camel/">almost as many Camel pilots died flying it in training as were killed flying in combat!</a> The Dreamliner is both more complex and safer. The additional complexity is doing real work here, it <em>contributes to making the Dreamliner safer</em>.</p>
|
||
|
||
|
||
|
||
<h2 class="wp-block-heading">Complexity: threat or menace?</h2>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">But we’re also right to fear complexity. Complexity makes it harder for us humans to reason about the behavior of systems. Evolution has certainly accomplished remarkable things in designing biological systems: these systems are amazingly resilient. One thing they aren’t, though, is easy to understand, as any biology major will tell you. </p>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">Complexity also creates novel failure modes. The Dreamliner itself experienced <a href="https://www.ntsb.gov/investigations/AccidentReports/Reports/AIR1401.pdf">safety issues related to electrical fires</a>: a problem that Camel pilots never had to worry about. And there were outright crashes where software complexity was a contributing factor, such as Lion Air Flight 610, Ethiopian Airlines Flight 302 (both <a href="https://en.wikipedia.org/wiki/Boeing_737_MAX_groundings">Boeing 737 MAX aircraft</a>), and <a href="/2014/09/30/cloud-software-fragility-and-air-france-447/">Air France Flight 447</a> (an Airbus A330). </p>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">Unfortunately for us, making systems more robust means adding complexity. An <a href="https://en.wikipedia.org/wiki/David_Wheeler_(computer_scientist)#Quotes">alternate formulation</a> of the saying at the top of this post is: <em>All problems in computer science can be solved by another level of indirection, except for the problem of too many layers of indirection.</em> Complexity solves all problems except the problem of complexity. </p>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">The psychiatrist and cybernetician W. Ross Ashby expressed this phenomenon as a law, which he called the Law of Requisite Variety. Today it’s also known as <a href="/2020/01/18/there-is-no-escape-from-ashbys-law/">Ashby’s Law</a>. Ashby noted that when you’re building a control system, the more complex the problem space is, the more complex your controller needs to be. For example, a self-driving car is necessarily going to have a much more complex control system than a thermostat. </p>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">When faced with a complex problem, we have to throw complexity at it in order to solve it. </p>
|
||
|
||
|
||
|
||
<figure class="wp-block-image size-large"><a href="https://surfingcomplexity.blog/wp-content/uploads/2026/01/image-8.png"><img data-attachment-id="7241" data-permalink="https://surfingcomplexity.blog/2026/01/31/ashby-taught-us-we-have-to-fight-fire-with-fire/image-484/" data-orig-file="https://surfingcomplexity.blog/wp-content/uploads/2026/01/image-8.png" data-orig-size="640,480" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="image" data-image-description="" data-image-caption="" data-large-file="https://surfingcomplexity.blog/wp-content/uploads/2026/01/image-8.png?w=640" loading="lazy" width="640" height="480" src="https://surfingcomplexity.blog/wp-content/uploads/2026/01/image-8.png?w=640" alt="" class="wp-image-7241" srcset="https://surfingcomplexity.blog/wp-content/uploads/2026/01/image-8.png 640w, https://surfingcomplexity.blog/wp-content/uploads/2026/01/image-8.png?w=150 150w, https://surfingcomplexity.blog/wp-content/uploads/2026/01/image-8.png?w=300 300w" sizes="auto, (max-width: 640px) 100vw, 640px" /></a><figcaption class="wp-element-caption">Homer had the right idea</figcaption></figure>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">This blog is called <em>surfing complexity</em> because I want to capture the notion that we will always have to deal with complexity: we can’t defeat it, but we can get better at navigating through it effectively.</p>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">And that brings us, of course, to AI.</p>
|
||
|
||
|
||
|
||
<h2 class="wp-block-heading">Throwing complexity back at the computer</h2>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">Modern LLM systems are enormously complex. OpenAI, Anthropic, and Google don’t publish parameter counts for their models anymore, but Meta’s <a href="https://www.llama.com/docs/model-cards-and-prompt-formats/llama4/">Llama 4</a> has 17 billion active parameters, and either 109 or 400 billion total parameters, depending on the model. These systems are so complex that trying to understand their behavior <a href="https://www.anthropic.com/research/tracing-thoughts-language-model">looks more like biology research than engineering</a>.</p>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">One type of task that LLMs are very good at solving are the kind of problem that exist solely because of computers in. For example, have you ever struggled to align content the right way in a Word document? It’s an absolute exercise in frustration. My wife threw this problem at an LLM and it fixed up the formatting for her. I’ve used LLMs for various tasks myself, including asking it do development tasks, and using it like a search engine to answer questions. And sometimes it works well, and sometimes it doesn’t. But where’ve find that these tools really shine is when I’ve got some batch of data, maybe a log file or a CSV or some JSON, and I want it do some processing task, like change the shape of it, or extract some data, so I can feed it into some other thing. I don’t ask it for the output directly, instead I ask it to generate a shell script or a Perl one-liner that’ll do the ad-hoc task, and then I run it. And, like the Word problem, I have a problem that was created by a computer that I need to solve. </p>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">I’m using this enormously complex system, an LLM, to help me solve a problem that was created by software complexity in the first place.</p>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">Back in March 2016, Tom Limoncelli wrote a piece for ACM Queue titled <a href="https://dl.acm.org/doi/10.1145/2844546">Automation Should Be Like Iron Man, Not Ultron</a>. Drawing inspiration from <a href="https://www.kitchensoap.com/2012/09/21/a-mature-role-for-automation-part-i/">John Allspaw</a> in particular, and Cognitive Systems Engineering in general, Limoncelli argued that automation should be written to be directable by humans rather than acting fully independently. He drew an analogy to Iron Man’s suit being an example of good automation, and the robot villain Ultron being an example of bad automation. Iron Man’s suit enables him to do things he couldn’t do otherwise, but he remains in control of it, and he can direct it to do the things he needs it to do. Ultron is an autonomous agent that was built for defensive purposes but ends up behaving unexpectedly, causing more problems than it solves. But my recent experiences with LLMs have led me to a different analogy: <em>Tron</em>.</p>
|
||
|
||
|
||
|
||
<figure class="wp-block-image size-large"><a href="https://surfingcomplexity.blog/wp-content/uploads/2026/01/tron.png"><img data-attachment-id="7273" data-permalink="https://surfingcomplexity.blog/2026/01/31/ashby-taught-us-we-have-to-fight-fire-with-fire/tron/" data-orig-file="https://surfingcomplexity.blog/wp-content/uploads/2026/01/tron.png" data-orig-size="400,180" data-comments-opened="1" data-image-meta="{"aperture":"0","credit":"","camera":"","caption":"","created_timestamp":"0","copyright":"","focal_length":"0","iso":"0","shutter_speed":"0","title":"","orientation":"0"}" data-image-title="tron" data-image-description="" data-image-caption="" data-large-file="https://surfingcomplexity.blog/wp-content/uploads/2026/01/tron.png?w=400" loading="lazy" width="400" height="180" src="https://surfingcomplexity.blog/wp-content/uploads/2026/01/tron.png?w=400" alt="" class="wp-image-7273" srcset="https://surfingcomplexity.blog/wp-content/uploads/2026/01/tron.png 400w, https://surfingcomplexity.blog/wp-content/uploads/2026/01/tron.png?w=150 150w, https://surfingcomplexity.blog/wp-content/uploads/2026/01/tron.png?w=300 300w" sizes="auto, (max-width: 400px) 100vw, 400px" /></a></figure>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">In the original movie, <em>Tron</em> is a good computer program that fights the bad computer programs. In particular, he’s opposed to the <em>Master Control Program</em>, an evil AI who is referred to as the MCP. (Incidentally, this is what a Gen Xer like me automatically thinks of when hearing the term “MCP”). Tron struggles against the MCP on behalf of the humans, who create and use the programs. He fights for the users.</p>
|
||
|
||
|
||
|
||
<p class="wp-block-paragraph">I frequently describe my day-to-day work as “fighting with the computer”. On some days I win the fight, and on some days I lose. AI tools have not removed the need to fight with the computer to get my work done. But now I can send an AI agent to fight some of these battles for me. There’s a software agent who will fight with other software on my behalf. They haven’t reduced the overall complexity of the system. In fact, if you take into account the LLM’s complexity, the overall system complexity is much larger. But I’m deploying this complexity in an Ashby-ian sense, to help defeat other software complexity so I can get my work done. Like Tron, it fights for the user. </p>
|
||
<div id="jp-post-flair" class="sharedaddy sd-like-enabled sd-sharing-enabled"><div class="sharedaddy sd-sharing-enabled"><div class="robots-nocontent sd-block sd-social sd-social-icon-text sd-sharing"><h3 class="sd-title">Share this:</h3><div class="sd-content"><ul><li class="share-twitter"><a rel="nofollow noopener noreferrer"
|
||
data-shared="sharing-twitter-7237"
|
||
class="share-twitter sd-button share-icon"
|
||
href="https://surfingcomplexity.blog/2026/01/31/ashby-taught-us-we-have-to-fight-fire-with-fire/?share=twitter"
|
||
target="_blank"
|
||
aria-labelledby="sharing-twitter-7237"
|
||
>
|
||
<span id="sharing-twitter-7237" hidden>Share on X (Opens in new window)</span>
|
||
<span>X</span>
|
||
</a></li><li class="share-facebook"><a rel="nofollow noopener noreferrer"
|
||
data-shared="sharing-facebook-7237"
|
||
class="share-facebook sd-button share-icon"
|
||
href="https://surfingcomplexity.blog/2026/01/31/ashby-taught-us-we-have-to-fight-fire-with-fire/?share=facebook"
|
||
target="_blank"
|
||
aria-labelledby="sharing-facebook-7237"
|
||
>
|
||
<span id="sharing-facebook-7237" hidden>Share on Facebook (Opens in new window)</span>
|
||
<span>Facebook</span>
|
||
</a></li><li class="share-end"></li></ul></div></div></div><div class='sharedaddy sd-block sd-like jetpack-likes-widget-wrapper jetpack-likes-widget-unloaded' id='like-post-wrapper-30291541-7237-6aa4f76fecc66' data-src='//widgets.wp.com/likes/index.html?ver=20260912#blog_id=30291541&post_id=7237&origin=lorinhochstein.wordpress.com&obj_id=30291541-7237-6aa4f76fecc66&domain=surfingcomplexity.blog' data-name='like-post-frame-30291541-7237-6aa4f76fecc66' data-title='Like or Reblog'><div class='likes-widget-placeholder post-likes-widget-placeholder' style='height: 55px;'><span class='button'><span>Like</span></span> <span class='loading'>Loading...</span></div><span class='sd-text-color'></span><a class='sd-link-color'></a></div>
|
||
<div id='jp-relatedposts' class='jp-relatedposts' >
|
||
|
||
</div></div> </div><!-- .entry-content -->
|
||
|
||
<div class="entry-footer">
|
||
<ul class="post-tags light-text"><li>Tagged</li><li><a href="https://surfingcomplexity.blog/tag/ai/" rel="tag">ai</a></li></ul><!-- .post-tags --> </div><!-- .entry-footer -->
|
||
|
||
<div class="entry-author-wrapper">
|
||
<div class="entry-author author-avatar-show">
|
||
<div class="author-avatar">
|
||
<img referrerpolicy="no-referrer" alt='Unknown's avatar' src='https://0.gravatar.com/avatar/f2641f12e815a54896f8f2ac04660c52efb896e09131390ad2a6f2f5fca81432?s=80&d=identicon&r=G' srcset='https://0.gravatar.com/avatar/f2641f12e815a54896f8f2ac04660c52efb896e09131390ad2a6f2f5fca81432?s=80&d=identicon&r=G 1x, https://0.gravatar.com/avatar/f2641f12e815a54896f8f2ac04660c52efb896e09131390ad2a6f2f5fca81432?s=120&d=identicon&r=G 1.5x, https://0.gravatar.com/avatar/f2641f12e815a54896f8f2ac04660c52efb896e09131390ad2a6f2f5fca81432?s=160&d=identicon&r=G 2x, https://0.gravatar.com/avatar/f2641f12e815a54896f8f2ac04660c52efb896e09131390ad2a6f2f5fca81432?s=240&d=identicon&r=G 3x, https://0.gravatar.com/avatar/f2641f12e815a54896f8f2ac04660c52efb896e09131390ad2a6f2f5fca81432?s=320&d=identicon&r=G 4x' class='avatar avatar-80' height='80' width='80' loading='lazy' decoding='async' /> </div><!-- .author-avatar -->
|
||
|
||
<div class="author-heading">
|
||
<h2 class="author-title">
|
||
Published by <span class="author-name">Lorin Hochstein</span> </h2>
|
||
</div><!-- .author-heading -->
|
||
|
||
<p class="author-bio">
|
||
<a class="author-link" href="https://surfingcomplexity.blog/author/lorinh/" rel="author">
|
||
View all posts by Lorin Hochstein </a>
|
||
</p><!-- .author-bio -->
|
||
</div><!-- .entry-auhtor -->
|
||
<div class="site-posted-on">
|
||
<strong>Published</strong>
|
||
<time class="entry-date published" datetime="2026-01-31T22:38:30-08:00">January 31, 2026</time><time class="updated" datetime="2026-02-01T08:26:32-08:00">February 1, 2026</time> </div><!-- .site-posted-on -->
|
||
</div>
|
||
</article><!-- #post-## -->
|
||
|
||
|
||
<nav class="navigation post-navigation" aria-label="Posts">
|
||
<h2 class="screen-reader-text">Post navigation</h2>
|
||
<div class="nav-links"><div class="nav-previous"><a href="https://surfingcomplexity.blog/2026/01/24/because-coordination-is-expensive/" rel="prev"><span class="meta-nav screen-reader-text">Previous Post</span> Because coordination is expensive</a></div><div class="nav-next"><a href="https://surfingcomplexity.blog/2026/02/07/on-variability/" rel="next"><span class="meta-nav screen-reader-text">Next Post</span> On variability</a></div></div>
|
||
</nav>
|
||
|
||
<div id="comments" class="comments-area">
|
||
|
||
|
||
<h2 class="comments-title">
|
||
One thought on “<span>Ashby taught us we have to fight fire with fire</span>” </h2><!-- .comments-title -->
|
||
|
||
|
||
<ol class="comment-list">
|
||
<li id="comment-9794" class="comment byuser comment-author-balloonthoughtfullyd2339b22c8 even thread-even depth-1">
|
||
<article id="div-comment-9794" class="comment-body">
|
||
<footer class="comment-meta">
|
||
<div class="comment-author vcard">
|
||
<img referrerpolicy="no-referrer" alt='balloonthoughtfullyd2339b22c8's avatar' src='https://2.gravatar.com/avatar/b67ce05cffd8aa16c2f8ed0f4cbd31aa5de99ea80e70e0d6f9c5af9031e30479?s=48&d=identicon&r=G' srcset='https://2.gravatar.com/avatar/b67ce05cffd8aa16c2f8ed0f4cbd31aa5de99ea80e70e0d6f9c5af9031e30479?s=48&d=identicon&r=G 1x, https://2.gravatar.com/avatar/b67ce05cffd8aa16c2f8ed0f4cbd31aa5de99ea80e70e0d6f9c5af9031e30479?s=72&d=identicon&r=G 1.5x, https://2.gravatar.com/avatar/b67ce05cffd8aa16c2f8ed0f4cbd31aa5de99ea80e70e0d6f9c5af9031e30479?s=96&d=identicon&r=G 2x, https://2.gravatar.com/avatar/b67ce05cffd8aa16c2f8ed0f4cbd31aa5de99ea80e70e0d6f9c5af9031e30479?s=144&d=identicon&r=G 3x, https://2.gravatar.com/avatar/b67ce05cffd8aa16c2f8ed0f4cbd31aa5de99ea80e70e0d6f9c5af9031e30479?s=192&d=identicon&r=G 4x' class='avatar avatar-48' height='48' width='48' loading='lazy' decoding='async' /> <b class="fn">balloonthoughtfullyd2339b22c8</b> <span class="says">says:</span> </div><!-- .comment-author -->
|
||
|
||
<div class="comment-metadata">
|
||
<a href="https://surfingcomplexity.blog/2026/01/31/ashby-taught-us-we-have-to-fight-fire-with-fire/#comment-9794"><time datetime="2026-02-01T12:48:33-08:00">February 1, 2026 at 12:48 pm</time></a> </div><!-- .comment-metadata -->
|
||
|
||
</footer><!-- .comment-meta -->
|
||
|
||
<div class="comment-content">
|
||
<p>Love post; so many great points; so many ways to amplify. Have to go farther than Ashby56 to explain them. My Requisite Revision of Ashby in 2022 as another way to explain TGE: Law of future adaptive capacity: Only the ability to revise past answers to ‘what is requisite variety’ can produce future requisitevariety. <a href="https://www.youtube.com/watch?v=-fjHJgg3X5U" rel="nofollow ugc">https://www.youtube.com/watch?v=-fjHJgg3X5U</a> Your points also highlight ’Messiness is conserved’ in the RyF, NFL, TGE theorems sense> See the Messy 9 heuristic introduced on This is Fine podcast.</p>
|
||
</div><!-- .comment-content -->
|
||
|
||
<div class="reply"><a rel="nofollow" class="comment-reply-link" href="https://surfingcomplexity.blog/2026/01/31/ashby-taught-us-we-have-to-fight-fire-with-fire/?replytocom=9794#respond" data-commentid="9794" data-postid="7237" data-belowelement="div-comment-9794" data-respondelement="respond" data-replyto="Reply to balloonthoughtfullyd2339b22c8" aria-label="Reply to balloonthoughtfullyd2339b22c8">Reply</a></div> </article><!-- .comment-body -->
|
||
</li><!-- #comment-## -->
|
||
</ol><!-- .comment-list -->
|
||
|
||
|
||
|
||
|
||
<div id="respond" class="comment-respond">
|
||
<h3 id="reply-title" class="comment-reply-title">Leave a comment <small><a rel="nofollow" id="cancel-comment-reply-link" href="/2026/01/31/ashby-taught-us-we-have-to-fight-fire-with-fire/#respond" style="display:none;">Cancel reply</a></small></h3><form action="https://surfingcomplexity.blog/wp-comments-post.php" method="post" id="commentform" class="comment-form">
|
||
|
||
|
||
<div class="comment-form__verbum transparent"></div><div class="verbum-form-meta"><input type='hidden' name='comment_post_ID' value='7237' id='comment_post_ID' />
|
||
<input type='hidden' name='comment_parent' id='comment_parent' value='0' />
|
||
|
||
<input type="hidden" name="highlander_comment_nonce" id="highlander_comment_nonce" value="4affefa77f" />
|
||
<input type="hidden" name="verbum_show_subscription_modal" value="" /></div><p style="display: none;"><input type="hidden" id="akismet_comment_nonce" name="akismet_comment_nonce" value="d3c7aba078" /></p><p style="display: none !important;" class="akismet-fields-container" data-prefix="ak_"><label>Δ<textarea name="ak_hp_textarea" cols="45" rows="8" maxlength="100"></textarea></label><input type="hidden" id="ak_js_1" name="ak_js" value="206"/><script>
|
||
document.getElementById( "ak_js_1" ).setAttribute( "value", ( new Date() ).getTime() );
|
||
</script>
|
||
</p></form> </div><!-- #respond -->
|
||
|
||
</div><!-- #comments -->
|
||
|
||
|
||
</main><!-- #main -->
|
||
</div><!-- #primary -->
|
||
|
||
<div id="secondary" class="widget-area" role="complementary">
|
||
<aside id="block-3" class="widget widget_block widget_search"><form role="search" method="get" action="https://surfingcomplexity.blog/" class="wp-block-search__button-outside wp-block-search__text-button wp-block-search" ><label class="wp-block-search__label" for="wp-block-search__input-3" >Search</label><div class="wp-block-search__inside-wrapper" ><input class="wp-block-search__input" id="wp-block-search__input-3" placeholder="" value="" type="search" name="s" required /><button aria-label="Search" class="wp-block-search__button wp-element-button" type="submit" >Search</button></div></form></aside><aside id="block-7" class="widget widget_block">
|
||
<ul class="wp-block-list">
|
||
<li><a href="https://lorinhochstein.org">lorinhochstein.org</a></li>
|
||
|
||
|
||
|
||
<li><a href="https://bsky.app/profile/norootcause.surfingcomplexity.com">Bluesky</a></li>
|
||
|
||
|
||
|
||
<li><a href="https://hachyderm.io/@norootcause">Mastodon</a></li>
|
||
</ul>
|
||
</aside><aside id="block-4" class="widget widget_block widget_recent_entries"><ul class="wp-block-latest-posts__list wp-block-latest-posts is-layout-flow wp-block-latest-posts-is-layout-flow"><li><a class="wp-block-latest-posts__post-title" href="https://surfingcomplexity.blog/2026/09/01/thoughts-on-the-buildkite-aug-25-incident/">Thoughts on the Buildkite Aug 25 incident</a></li>
|
||
<li><a class="wp-block-latest-posts__post-title" href="https://surfingcomplexity.blog/2026/08/29/quick-thoughts-on-github-actions-aug-26-incident/">Quick thoughts on GitHub Actions Aug 26 incident</a></li>
|
||
<li><a class="wp-block-latest-posts__post-title" href="https://surfingcomplexity.blog/2026/08/29/omnipresent-availability-risks-in-cloud-software/">Omnipresent availability risks in cloud software</a></li>
|
||
<li><a class="wp-block-latest-posts__post-title" href="https://surfingcomplexity.blog/2026/08/22/wild-ai-related-reliability-incidents-are-coming/">Wild AI-related reliability incidents are coming</a></li>
|
||
<li><a class="wp-block-latest-posts__post-title" href="https://surfingcomplexity.blog/2026/08/19/github-autoscaling-and-the-component-substitution-fallacy/">GitHub, autoscaling, and the component substitution fallacy</a></li>
|
||
</ul></aside></div><!-- #secondary -->
|
||
|
||
</div><!-- #content -->
|
||
|
||
<footer id="colophon" class="site-footer" role="contentinfo">
|
||
<div class="site-info">
|
||
<a href="https://wordpress.com/?ref=footer_blog" rel="nofollow">Blog at WordPress.com.</a>
|
||
|
||
</div><!-- .site-info -->
|
||
</footer><!-- #colophon -->
|
||
</div><!-- #content-wrapper -->
|
||
</div><!-- #page -->
|
||
|
||
<!-- -->
|
||
<script type="speculationrules">
|
||
{"prefetch":[{"source":"document","where":{"and":[{"href_matches":"/*"},{"not":{"href_matches":["/wp-*.php","/wp-admin/*","/files/*","/wp-content/*","/wp-content/plugins/*","/wp-content/themes/pub/independent-publisher-2/*","/*\\?(.+)"]}},{"not":{"selector_matches":"a[rel~=\"nofollow\"]"}},{"not":{"selector_matches":".no-prefetch, .no-prefetch a"}}]},"eagerness":"conservative"}]}
|
||
</script>
|
||
<script id="grofiles-cards-js" src="//0.gravatar.com/js/hovercards/hovercards.min.js?ver=202637d1133547e8a1f2801609f51cef12522abe7f6647d869e9fbc974fe356a37e613"></script>
|
||
<script id="wpgroho-js-extra">
|
||
var WPGroHo = {"my_hash":""};
|
||
//# sourceURL=wpgroho-js-extra
|
||
</script>
|
||
<script crossorigin='anonymous' type='text/javascript' src='/wp-content/mu-plugins/gravatar-hovercards/wpgroho.js?m=1610363240i'></script>
|
||
|
||
<script>
|
||
// Initialize and attach hovercards to all gravatars
|
||
( function() {
|
||
function init() {
|
||
if ( typeof Gravatar === 'undefined' ) {
|
||
return;
|
||
}
|
||
|
||
if ( typeof Gravatar.init !== 'function' ) {
|
||
return;
|
||
}
|
||
|
||
Gravatar.profile_cb = function ( hash, id ) {
|
||
WPGroHo.syncProfileData( hash, id );
|
||
};
|
||
|
||
Gravatar.my_hash = WPGroHo.my_hash;
|
||
Gravatar.init(
|
||
'body',
|
||
'#wp-admin-bar-my-account',
|
||
{
|
||
i18n: {
|
||
'Edit your profile →': 'Edit your profile →',
|
||
'View profile →': 'View profile →',
|
||
'Contact': 'Contact',
|
||
'Send money': 'Send money',
|
||
'Sorry, we are unable to load this Gravatar profile.': 'Sorry, we are unable to load this Gravatar profile.',
|
||
'Gravatar not found.': 'Gravatar not found.',
|
||
'Too Many Requests.': 'Too Many Requests.',
|
||
'Internal Server Error.': 'Internal Server Error.',
|
||
'Is this you?': 'Is this you?',
|
||
'Claim your free profile.': 'Claim your free profile.',
|
||
'Email': 'Email',
|
||
'Home Phone': 'Home Phone',
|
||
'Work Phone': 'Work Phone',
|
||
'Cell Phone': 'Cell Phone',
|
||
'Contact Form': 'Contact Form',
|
||
'Calendar': 'Calendar',
|
||
},
|
||
}
|
||
);
|
||
}
|
||
|
||
if ( document.readyState !== 'loading' ) {
|
||
init();
|
||
} else {
|
||
document.addEventListener( 'DOMContentLoaded', init );
|
||
}
|
||
} )();
|
||
</script>
|
||
|
||
<div style="display:none">
|
||
<div class="grofile-hash-map-c690634d340d85fb40ac03668259ff1c">
|
||
</div>
|
||
<div class="grofile-hash-map-58f47d8a3996ae815cd82cdfb1f6b6d6">
|
||
</div>
|
||
</div>
|
||
<div id="actionbar" dir="ltr" style="display: none;"
|
||
class="actnbr-pub-independent-publisher-2 actnbr-has-follow actnbr-has-actions">
|
||
<ul>
|
||
<li class="actnbr-btn actnbr-hidden">
|
||
<a class="actnbr-action actnbr-actn-comment" href="https://surfingcomplexity.blog/2026/01/31/ashby-taught-us-we-have-to-fight-fire-with-fire/#comments">
|
||
<svg class="gridicon gridicons-comment" height="20" width="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M12 16l-5 5v-5H5c-1.1 0-2-.9-2-2V5c0-1.1.9-2 2-2h14c1.1 0 2 .9 2 2v9c0 1.1-.9 2-2 2h-7z"/></g></svg> <span>Comment </span>
|
||
</a>
|
||
</li>
|
||
<li class="actnbr-btn actnbr-hidden">
|
||
<a class="actnbr-action actnbr-actn-reblog" href="">
|
||
<svg class="gridicon gridicons-reblog" height="20" width="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M22.086 9.914L20 7.828V18c0 1.105-.895 2-2 2h-7v-2h7V7.828l-2.086 2.086L14.5 8.5 19 4l4.5 4.5-1.414 1.414zM6 16.172V6h7V4H6c-1.105 0-2 .895-2 2v10.172l-2.086-2.086L.5 15.5 5 20l4.5-4.5-1.414-1.414L6 16.172z"/></g></svg><span>Reblog</span>
|
||
</a>
|
||
</li>
|
||
<li class="actnbr-btn actnbr-hidden">
|
||
<a class="actnbr-action actnbr-actn-follow " href="">
|
||
<svg class="gridicon" height="20" width="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path clip-rule="evenodd" d="m4 4.5h12v6.5h1.5v-6.5-1.5h-1.5-12-1.5v1.5 10.5c0 1.1046.89543 2 2 2h7v-1.5h-7c-.27614 0-.5-.2239-.5-.5zm10.5 2h-9v1.5h9zm-5 3h-4v1.5h4zm3.5 1.5h-1v1h1zm-1-1.5h-1.5v1.5 1 1.5h1.5 1 1.5v-1.5-1-1.5h-1.5zm-2.5 2.5h-4v1.5h4zm6.5 1.25h1.5v2.25h2.25v1.5h-2.25v2.25h-1.5v-2.25h-2.25v-1.5h2.25z" fill-rule="evenodd"></path></svg>
|
||
<span>Subscribe</span>
|
||
</a>
|
||
<a class="actnbr-action actnbr-actn-following no-display" href="">
|
||
<svg class="gridicon" height="20" width="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M16 4.5H4V15C4 15.2761 4.22386 15.5 4.5 15.5H11.5V17H4.5C3.39543 17 2.5 16.1046 2.5 15V3H17.5V12.5H16V4.5ZM5.5 6.5H14.5V8H5.5V6.5ZM5.5 9.5H9.5V11H5.5V9.5ZM12 11H13V12H12V11ZM10.5 9.5H14.5V13.5H10.5V9.5ZM5.5 12H9.5V13.5H5.5V12Z" fill="#008A20"></path><path d="M19.5303 15.0303L15.5 19.0605L12.9697 16.5303L14.0303 15.4697L15.5 16.9395L18.4697 13.9697L19.5303 15.0303Z" fill="#008A20"></path></svg>
|
||
<span>Subscribed</span>
|
||
</a>
|
||
<div class="actnbr-popover tip tip-top-left actnbr-notice" id="follow-bubble">
|
||
<div class="tip-arrow"></div>
|
||
<div class="tip-inner actnbr-follow-bubble">
|
||
<ul>
|
||
<li class="actnbr-sitename">
|
||
<a href="https://surfingcomplexity.blog">
|
||
<img loading='lazy' alt='' src='https://surfingcomplexity.blog/wp-content/uploads/2020/05/surfer_1f3c4.png?w=50' srcset='https://surfingcomplexity.blog/wp-content/uploads/2020/05/surfer_1f3c4.png?w=50 1x, https://surfingcomplexity.blog/wp-content/uploads/2020/05/surfer_1f3c4.png?w=75 1.5x, https://surfingcomplexity.blog/wp-content/uploads/2020/05/surfer_1f3c4.png?w=100 2x, https://surfingcomplexity.blog/wp-content/uploads/2020/05/surfer_1f3c4.png?w=120 3x, https://surfingcomplexity.blog/wp-content/uploads/2020/05/surfer_1f3c4.png?w=120 4x' class='avatar avatar-50' height='50' width='50' /> Surfing Complexity </a>
|
||
</li>
|
||
<div class="actnbr-message no-display"></div>
|
||
<form method="post" action="https://subscribe.wordpress.com" accept-charset="utf-8" style="display: none;">
|
||
<div class="actnbr-follow-count">Join 263 other subscribers</div>
|
||
<div>
|
||
<input type="email" name="email" placeholder="Enter your email address" class="actnbr-email-field" aria-label="Enter your email address" />
|
||
</div>
|
||
<input type="hidden" name="action" value="subscribe" />
|
||
<input type="hidden" name="blog_id" value="30291541" />
|
||
<input type="hidden" name="source" value="https://surfingcomplexity.blog/2026/01/31/ashby-taught-us-we-have-to-fight-fire-with-fire/" />
|
||
<input type="hidden" name="sub-type" value="actionbar-follow" />
|
||
<input type="hidden" id="_wpnonce" name="_wpnonce" value="0db45c92b7" /> <div class="actnbr-button-wrap">
|
||
<button type="submit" value="Sign me up">
|
||
Sign me up </button>
|
||
</div>
|
||
</form>
|
||
<li class="actnbr-login-nudge">
|
||
<div>
|
||
Already have a WordPress.com account? <a href="https://wordpress.com/log-in?redirect_to=https%3A%2F%2Fr-login.wordpress.com%2Fremote-login.php%3Faction%3Dlink%26back%3Dhttps%253A%252F%252Fsurfingcomplexity.blog%252F2026%252F01%252F31%252Fashby-taught-us-we-have-to-fight-fire-with-fire%252F">Log in now.</a> </div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
<li class="actnbr-ellipsis actnbr-hidden">
|
||
<svg class="gridicon gridicons-ellipsis" height="24" width="24" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M7 12c0 1.104-.896 2-2 2s-2-.896-2-2 .896-2 2-2 2 .896 2 2zm12-2c-1.104 0-2 .896-2 2s.896 2 2 2 2-.896 2-2-.896-2-2-2zm-7 0c-1.104 0-2 .896-2 2s.896 2 2 2 2-.896 2-2-.896-2-2-2z"/></g></svg> <div class="actnbr-popover tip tip-top-left actnbr-more">
|
||
<div class="tip-arrow"></div>
|
||
<div class="tip-inner">
|
||
<ul>
|
||
<li class="actnbr-sitename">
|
||
<a href="https://surfingcomplexity.blog">
|
||
<img loading='lazy' alt='' src='https://surfingcomplexity.blog/wp-content/uploads/2020/05/surfer_1f3c4.png?w=50' srcset='https://surfingcomplexity.blog/wp-content/uploads/2020/05/surfer_1f3c4.png?w=50 1x, https://surfingcomplexity.blog/wp-content/uploads/2020/05/surfer_1f3c4.png?w=75 1.5x, https://surfingcomplexity.blog/wp-content/uploads/2020/05/surfer_1f3c4.png?w=100 2x, https://surfingcomplexity.blog/wp-content/uploads/2020/05/surfer_1f3c4.png?w=120 3x, https://surfingcomplexity.blog/wp-content/uploads/2020/05/surfer_1f3c4.png?w=120 4x' class='avatar avatar-50' height='50' width='50' /> Surfing Complexity </a>
|
||
</li>
|
||
<li class="actnbr-folded-follow">
|
||
<a class="actnbr-action actnbr-actn-follow " href="">
|
||
<svg class="gridicon" height="20" width="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20"><path clip-rule="evenodd" d="m4 4.5h12v6.5h1.5v-6.5-1.5h-1.5-12-1.5v1.5 10.5c0 1.1046.89543 2 2 2h7v-1.5h-7c-.27614 0-.5-.2239-.5-.5zm10.5 2h-9v1.5h9zm-5 3h-4v1.5h4zm3.5 1.5h-1v1h1zm-1-1.5h-1.5v1.5 1 1.5h1.5 1 1.5v-1.5-1-1.5h-1.5zm-2.5 2.5h-4v1.5h4zm6.5 1.25h1.5v2.25h2.25v1.5h-2.25v2.25h-1.5v-2.25h-2.25v-1.5h2.25z" fill-rule="evenodd"></path></svg>
|
||
<span>Subscribe</span>
|
||
</a>
|
||
<a class="actnbr-action actnbr-actn-following no-display" href="">
|
||
<svg class="gridicon" height="20" width="20" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 20 20" fill="none"><path fill-rule="evenodd" clip-rule="evenodd" d="M16 4.5H4V15C4 15.2761 4.22386 15.5 4.5 15.5H11.5V17H4.5C3.39543 17 2.5 16.1046 2.5 15V3H17.5V12.5H16V4.5ZM5.5 6.5H14.5V8H5.5V6.5ZM5.5 9.5H9.5V11H5.5V9.5ZM12 11H13V12H12V11ZM10.5 9.5H14.5V13.5H10.5V9.5ZM5.5 12H9.5V13.5H5.5V12Z" fill="#008A20"></path><path d="M19.5303 15.0303L15.5 19.0605L12.9697 16.5303L14.0303 15.4697L15.5 16.9395L18.4697 13.9697L19.5303 15.0303Z" fill="#008A20"></path></svg>
|
||
<span>Subscribed</span>
|
||
</a>
|
||
</li>
|
||
<li class="actnbr-signup"><a href="https://wordpress.com/start/">Sign up</a></li>
|
||
<li class="actnbr-login"><a href="https://wordpress.com/log-in?redirect_to=https%3A%2F%2Fr-login.wordpress.com%2Fremote-login.php%3Faction%3Dlink%26back%3Dhttps%253A%252F%252Fsurfingcomplexity.blog%252F2026%252F01%252F31%252Fashby-taught-us-we-have-to-fight-fire-with-fire%252F">Log in</a></li>
|
||
<li class="actnbr-shortlink">
|
||
<a href="https://wp.me/p236df-1SJ">
|
||
<span class="actnbr-shortlink__text">Copy shortlink</span>
|
||
<span class="actnbr-shortlink__icon"><svg class="gridicon gridicons-checkmark" height="16" width="16" xmlns="http://www.w3.org/2000/svg" viewBox="0 0 24 24"><g><path d="M9 19.414l-6.707-6.707 1.414-1.414L9 16.586 20.293 5.293l1.414 1.414"/></g></svg></span>
|
||
</a>
|
||
</li>
|
||
<li class="flb-report">
|
||
<a href="https://wordpress.com/abuse/?report_url=https://surfingcomplexity.blog/2026/01/31/ashby-taught-us-we-have-to-fight-fire-with-fire/" target="_blank" rel="noopener noreferrer">
|
||
Report this content </a>
|
||
</li>
|
||
<li class="actnbr-reader">
|
||
<a href="https://wordpress.com/reader/blogs/30291541/posts/7237">
|
||
View post in Reader </a>
|
||
</li>
|
||
<li class="actnbr-subs">
|
||
<a href="https://subscribe.wordpress.com/">Manage subscriptions</a>
|
||
</li>
|
||
<li class="actnbr-fold"><a href="">Collapse this bar</a></li>
|
||
</ul>
|
||
</div>
|
||
</div>
|
||
</li>
|
||
</ul>
|
||
</div>
|
||
|
||
<script>
|
||
window.addEventListener( "DOMContentLoaded", function( event ) {
|
||
var link = document.createElement( "link" );
|
||
link.href = "/wp-content/mu-plugins/actionbar/actionbar.css?v=20250116";
|
||
link.type = "text/css";
|
||
link.rel = "stylesheet";
|
||
document.head.appendChild( link );
|
||
|
||
var script = document.createElement( "script" );
|
||
script.src = "/wp-content/mu-plugins/actionbar/actionbar.js?v=20250204";
|
||
document.body.appendChild( script );
|
||
} );
|
||
</script>
|
||
|
||
<div id="jp-carousel-loading-overlay" style="display: none;">
|
||
<div id="jp-carousel-loading-wrapper">
|
||
<span id="jp-carousel-library-loading"><svg class="jetpack-spinner" width="40" height="40" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><circle cx="50" cy="50" r="46" fill="none" stroke="#ddd" stroke-width="8"/><path d="M 50 4 A 46 46 0 0 1 96 50" fill="none" stroke="currentColor" stroke-width="8" stroke-linecap="round"><animateTransform attributeName="transform" type="rotate" dur="1.4s" from="0 50 50" to="360 50 50" repeatCount="indefinite"/></path></svg></span>
|
||
</div>
|
||
</div>
|
||
<div class="jp-carousel-overlay" style="display: none;">
|
||
|
||
<div class="jp-carousel-container">
|
||
<!-- The Carousel Swiper -->
|
||
<div
|
||
class="jp-carousel-wrap swiper jp-carousel-swiper-container jp-carousel-transitions"
|
||
itemscope
|
||
itemtype="https://schema.org/ImageGallery">
|
||
<div class="jp-carousel swiper-wrapper"></div>
|
||
<div class="jp-swiper-button-prev swiper-button-prev">
|
||
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||
<mask id="maskPrev" mask-type="alpha" maskUnits="userSpaceOnUse" x="8" y="6" width="9" height="12">
|
||
<path d="M16.2072 16.59L11.6496 12L16.2072 7.41L14.8041 6L8.8335 12L14.8041 18L16.2072 16.59Z" fill="white"/>
|
||
</mask>
|
||
<g mask="url(#maskPrev)">
|
||
<rect x="0.579102" width="23.8823" height="24" fill="#FFFFFF"/>
|
||
</g>
|
||
</svg>
|
||
</div>
|
||
<div class="jp-swiper-button-next swiper-button-next">
|
||
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||
<mask id="maskNext" mask-type="alpha" maskUnits="userSpaceOnUse" x="8" y="6" width="8" height="12">
|
||
<path d="M8.59814 16.59L13.1557 12L8.59814 7.41L10.0012 6L15.9718 12L10.0012 18L8.59814 16.59Z" fill="white"/>
|
||
</mask>
|
||
<g mask="url(#maskNext)">
|
||
<rect x="0.34375" width="23.8822" height="24" fill="#FFFFFF"/>
|
||
</g>
|
||
</svg>
|
||
</div>
|
||
</div>
|
||
<!-- The main close buton -->
|
||
<div class="jp-carousel-close-hint">
|
||
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||
<mask id="maskClose" mask-type="alpha" maskUnits="userSpaceOnUse" x="5" y="5" width="15" height="14">
|
||
<path d="M19.3166 6.41L17.9135 5L12.3509 10.59L6.78834 5L5.38525 6.41L10.9478 12L5.38525 17.59L6.78834 19L12.3509 13.41L17.9135 19L19.3166 17.59L13.754 12L19.3166 6.41Z" fill="white"/>
|
||
</mask>
|
||
<g mask="url(#maskClose)">
|
||
<rect x="0.409668" width="23.8823" height="24" fill="#FFFFFF"/>
|
||
</g>
|
||
</svg>
|
||
</div>
|
||
<!-- Image info, comments and meta -->
|
||
<div class="jp-carousel-info">
|
||
<div class="jp-carousel-info-footer">
|
||
<div class="jp-carousel-pagination-container">
|
||
<div class="jp-swiper-pagination swiper-pagination"></div>
|
||
<div class="jp-carousel-pagination"></div>
|
||
</div>
|
||
<div class="jp-carousel-photo-title-container">
|
||
<div class="jp-carousel-photo-caption"></div>
|
||
</div>
|
||
<div class="jp-carousel-photo-icons-container">
|
||
<a href="#" class="jp-carousel-icon-btn jp-carousel-icon-info" aria-label="Toggle photo metadata visibility">
|
||
<span class="jp-carousel-icon">
|
||
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||
<mask id="maskInfo" mask-type="alpha" maskUnits="userSpaceOnUse" x="2" y="2" width="21" height="20">
|
||
<path fill-rule="evenodd" clip-rule="evenodd" d="M12.7537 2C7.26076 2 2.80273 6.48 2.80273 12C2.80273 17.52 7.26076 22 12.7537 22C18.2466 22 22.7046 17.52 22.7046 12C22.7046 6.48 18.2466 2 12.7537 2ZM11.7586 7V9H13.7488V7H11.7586ZM11.7586 11V17H13.7488V11H11.7586ZM4.79292 12C4.79292 16.41 8.36531 20 12.7537 20C17.142 20 20.7144 16.41 20.7144 12C20.7144 7.59 17.142 4 12.7537 4C8.36531 4 4.79292 7.59 4.79292 12Z" fill="white"/>
|
||
</mask>
|
||
<g mask="url(#maskInfo)">
|
||
<rect x="0.8125" width="23.8823" height="24" fill="#FFFFFF"/>
|
||
</g>
|
||
</svg>
|
||
</span>
|
||
</a>
|
||
<a href="#" class="jp-carousel-icon-btn jp-carousel-icon-comments" aria-label="Toggle photo comments visibility">
|
||
<span class="jp-carousel-icon">
|
||
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||
<mask id="maskComments" mask-type="alpha" maskUnits="userSpaceOnUse" x="2" y="2" width="21" height="20">
|
||
<path fill-rule="evenodd" clip-rule="evenodd" d="M4.3271 2H20.2486C21.3432 2 22.2388 2.9 22.2388 4V16C22.2388 17.1 21.3432 18 20.2486 18H6.31729L2.33691 22V4C2.33691 2.9 3.2325 2 4.3271 2ZM6.31729 16H20.2486V4H4.3271V18L6.31729 16Z" fill="white"/>
|
||
</mask>
|
||
<g mask="url(#maskComments)">
|
||
<rect x="0.34668" width="23.8823" height="24" fill="#FFFFFF"/>
|
||
</g>
|
||
</svg>
|
||
|
||
<span class="jp-carousel-has-comments-indicator" aria-label="This image has comments."></span>
|
||
</span>
|
||
</a>
|
||
</div>
|
||
</div>
|
||
<div class="jp-carousel-info-extra">
|
||
<div class="jp-carousel-info-content-wrapper">
|
||
<div class="jp-carousel-photo-title-container">
|
||
<div class="jp-carousel-photo-title"></div>
|
||
</div>
|
||
<div class="jp-carousel-comments-wrapper">
|
||
<div id="jp-carousel-comments-loading">
|
||
<span>Loading Comments...</span>
|
||
</div>
|
||
<div class="jp-carousel-comments"></div>
|
||
<div id="jp-carousel-comment-form-container">
|
||
<span id="jp-carousel-comment-form-spinner"><svg class="jetpack-spinner" width="20" height="20" viewBox="0 0 100 100" xmlns="http://www.w3.org/2000/svg" aria-hidden="true" focusable="false"><circle cx="50" cy="50" r="46" fill="none" stroke="#ddd" stroke-width="8"/><path d="M 50 4 A 46 46 0 0 1 96 50" fill="none" stroke="currentColor" stroke-width="8" stroke-linecap="round"><animateTransform attributeName="transform" type="rotate" dur="1.4s" from="0 50 50" to="360 50 50" repeatCount="indefinite"/></path></svg></span>
|
||
<div id="jp-carousel-comment-post-results"></div>
|
||
<form id="jp-carousel-comment-form">
|
||
<label for="jp-carousel-comment-form-comment-field" class="screen-reader-text">Write a Comment...</label>
|
||
<textarea
|
||
name="comment"
|
||
class="jp-carousel-comment-form-field jp-carousel-comment-form-textarea"
|
||
id="jp-carousel-comment-form-comment-field"
|
||
placeholder="Write a Comment..."
|
||
></textarea>
|
||
<div id="jp-carousel-comment-form-submit-and-info-wrapper">
|
||
<div id="jp-carousel-comment-form-commenting-as">
|
||
<fieldset>
|
||
<label for="jp-carousel-comment-form-email-field">Email (Required)</label>
|
||
<input type="text" name="email" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-email-field" />
|
||
</fieldset>
|
||
<fieldset>
|
||
<label for="jp-carousel-comment-form-author-field">Name (Required)</label>
|
||
<input type="text" name="author" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-author-field" />
|
||
</fieldset>
|
||
<fieldset>
|
||
<label for="jp-carousel-comment-form-url-field">Website</label>
|
||
<input type="text" name="url" class="jp-carousel-comment-form-field jp-carousel-comment-form-text-field" id="jp-carousel-comment-form-url-field" />
|
||
</fieldset>
|
||
</div>
|
||
<input
|
||
type="submit"
|
||
name="submit"
|
||
class="jp-carousel-comment-form-button"
|
||
id="jp-carousel-comment-form-button-submit"
|
||
value="Post Comment" />
|
||
</div>
|
||
</form>
|
||
</div>
|
||
</div>
|
||
<div class="jp-carousel-image-meta">
|
||
<div class="jp-carousel-title-and-caption">
|
||
<div class="jp-carousel-photo-info">
|
||
<div class="jp-carousel-caption" itemprop="caption description"></div>
|
||
</div>
|
||
|
||
<div class="jp-carousel-photo-description"></div>
|
||
</div>
|
||
<a class="jp-carousel-image-download" href="#" aria-label="Download image" target="_blank" style="display: none;">
|
||
<svg width="25" height="24" viewBox="0 0 25 24" fill="none" xmlns="http://www.w3.org/2000/svg">
|
||
<mask id="mask0" mask-type="alpha" maskUnits="userSpaceOnUse" x="3" y="3" width="19" height="18">
|
||
<path fill-rule="evenodd" clip-rule="evenodd" d="M5.84615 5V19H19.7775V12H21.7677V19C21.7677 20.1 20.8721 21 19.7775 21H5.84615C4.74159 21 3.85596 20.1 3.85596 19V5C3.85596 3.9 4.74159 3 5.84615 3H12.8118V5H5.84615ZM14.802 5V3H21.7677V10H19.7775V6.41L9.99569 16.24L8.59261 14.83L18.3744 5H14.802Z" fill="white"/>
|
||
</mask>
|
||
<g mask="url(#mask0)">
|
||
<rect x="0.870605" width="23.8823" height="24" fill="#FFFFFF"/>
|
||
</g>
|
||
</svg>
|
||
<span class="jp-carousel-download-text"></span>
|
||
</a>
|
||
<div class="jp-carousel-image-map" style="display: none;"></div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
</div>
|
||
|
||
</div>
|
||
|
||
<script type="text/javascript">
|
||
window.WPCOM_sharing_counts = {"https://surfingcomplexity.blog/2026/01/31/ashby-taught-us-we-have-to-fight-fire-with-fire/":7237};
|
||
</script>
|
||
|
||
<script type="text/javascript">
|
||
(function () {
|
||
var wpcom_reblog = {
|
||
source: 'toolbar',
|
||
|
||
toggle_reblog_box_flair: function (obj_id, post_id) {
|
||
|
||
// Go to site selector. This will redirect to their blog if they only have one.
|
||
const postEndpoint = `https://wordpress.com/post`;
|
||
|
||
// Ideally we would use the permalink here, but fortunately this will be replaced with the
|
||
// post permalink in the editor.
|
||
const originalURL = `${ document.location.href }?page_id=${ post_id }`;
|
||
|
||
const url =
|
||
postEndpoint +
|
||
'?url=' +
|
||
encodeURIComponent( originalURL ) +
|
||
'&is_post_share=true' +
|
||
'&v=5';
|
||
|
||
const redirect = function () {
|
||
if (
|
||
! window.open( url, '_blank' )
|
||
) {
|
||
location.href = url;
|
||
}
|
||
};
|
||
|
||
if ( /Firefox/.test( navigator.userAgent ) ) {
|
||
setTimeout( redirect, 0 );
|
||
} else {
|
||
redirect();
|
||
}
|
||
},
|
||
};
|
||
|
||
window.wpcom_reblog = wpcom_reblog;
|
||
})();
|
||
</script>
|
||
<script crossorigin='anonymous' type='text/javascript' src='/wp-content/mu-plugins/likes/queuehandler.js?m=1741961244i'></script>
|
||
<script id="wp-hooks-js" src="/wp-content/plugins/gutenberg-core/v23.9.1/build/scripts/hooks/index.min.js?m=1788785546i&ver=f0f188028580e8dc1255"></script>
|
||
<script id="wp-i18n-js" src="/wp-content/plugins/gutenberg-core/v23.9.1/build/scripts/i18n/index.min.js?m=1788785546i&ver=1dfe7db3940c23ea9216"></script>
|
||
<script id="wp-i18n-js-after">
|
||
wp.i18n.setLocaleData( { 'text direction\u0004ltr': [ 'ltr' ] } );
|
||
//# sourceURL=wp-i18n-js-after
|
||
</script>
|
||
<script id="verbum-settings-js-before">
|
||
window.VerbumComments = {"Log in or provide your name and email to leave a reply.":"Log in or provide your name and email to leave a reply.","Log in or provide your name and email to leave a comment.":"Log in or provide your name and email to leave a comment.","Receive web and mobile notifications for posts on this site.":"Receive web and mobile notifications for posts on this site.","Name":"Name","Email (address never made public)":"Email (address never made public)","Website (optional)":"Website (optional)","Leave a reply. (log in optional)":"Leave a reply. (log in optional)","Leave a comment. (log in optional)":"Leave a comment. (log in optional)","Log in to leave a reply.":"Log in to leave a reply.","Log in to leave a comment.":"Log in to leave a comment.","Logged in via %s":"Logged in via %s","Log out":"Log out","Your browser is blocking the cookies needed to log in and comment here. Allow cookies in your privacy settings, then reload the page.":"Your browser is blocking the cookies needed to log in and comment here. Allow cookies in your privacy settings, then reload the page.","Email":"Email","(Address never made public)":"(Address never made public)","Instantly":"Instantly","Daily":"Daily","Reply":"Reply","Comment":"Comment","WordPress":"WordPress","Weekly":"Weekly","Notify me of new posts":"Notify me of new posts","Email me new posts":"Email me new posts","Email me new comments":"Email me new comments","Cancel":"Cancel","Write a comment...":"Write a comment...","Write a reply...":"Write a reply...","Website":"Website","Optional":"Optional","We'll keep you in the loop!":"We'll keep you in the loop!","Loading your comment...":"Loading your comment...","Discover more from":"Discover more from Surfing Complexity","Subscribe now to keep reading and get access to the full archive.":"Subscribe now to keep reading and get access to the full archive.","Continue reading":"Continue reading","Never miss a beat!":"Never miss a beat!","Interested in getting blog post updates? Simply click the button below to stay in the loop!":"Interested in getting blog post updates? Simply click the button below to stay in the loop!","Enter your email address":"Enter your email address","Subscribe":"Subscribe","Comment sent successfully":"Comment sent successfully","Save my name, email, and website in this browser for the next time I comment.":"Save my name, email, and website in this browser for the next time I comment.","hovercardi18n":{"Edit your profile \u2192":"Edit your profile \u2192","View profile \u2192":"View profile \u2192","Contact":"Contact","Send money":"Send money","Gravatar not found.":"Gravatar not found.","This profile is private.":"This profile is private.","Too Many Requests.":"Too Many Requests.","Internal Server Error.":"Internal Server Error.","Sorry, we are unable to load this Gravatar profile.":"Sorry, we are unable to load this Gravatar profile."},"siteId":30291541,"postId":7237,"mustLogIn":false,"requireNameEmail":true,"commentRegistration":false,"connectURL":"https://lorinhochstein.wordpress.com/public.api/connect/?action=request\u0026domain=surfingcomplexity.blog","logoutURL":"https://lorinhochstein.wordpress.com/wp-login.php?action=logout\u0026_wpnonce=b263a00deb","homeURL":"https://surfingcomplexity.blog/","subscribeToBlog":true,"subscribeToComment":true,"isJetpackCommentsLoggedIn":false,"jetpackUsername":"","jetpackUserId":0,"jetpackSignature":"","jetpackAvatar":"https://0.gravatar.com/avatar/?s=96\u0026amp;d=identicon\u0026amp;r=G","enableBlocks":true,"enableSubscriptionModal":true,"currentLocale":"en","isJetpackComments":false,"allowedBlocks":["core/paragraph","core/list","core/code","core/list-item","core/quote","core/image","core/embed","core/quote","core/code"],"embedNonce":"2db44e3fcc","verbumBundleUrl":"/wp-content/mu-plugins/jetpack-mu-wpcom-plugin/moon/jetpack_vendor/automattic/jetpack-mu-wpcom/src/features/verbum-comments/dist/index.js","isRTL":false,"vbeCacheBuster":1771405207,"iframeUniqueId":0,"colorScheme":false}
|
||
//# sourceURL=verbum-settings-js-before
|
||
</script>
|
||
<script data-wp-strategy="defer" defer id="verbum-dynamic-loader-js" src="/wp-content/mu-plugins/jetpack-mu-wpcom-plugin/moon/jetpack_vendor/automattic/jetpack-mu-wpcom/src/build/verbum-comments/assets/dynamic-loader.js?m=1772518873i&minify=false&ver=8b5296f9195db92c42e4"></script>
|
||
<script id="coblocks-loader-js-extra">
|
||
var wpcom_coblocks_js = {"coblocks_masonry_js":"https://s2.wp.com/wp-content/plugins/coblocks/2.18.1-simple-rev.4/dist/js/coblocks-masonry.min.js?m=1681832297i","coblocks_lightbox_js":"https://s2.wp.com/wp-content/plugins/coblocks/2.18.1-simple-rev.4/dist/js/coblocks-lightbox.min.js?m=1681832297i","jquery_core_js":"/wp-includes/js/jquery/jquery.min.js","jquery_migrate_js":"/wp-includes/js/jquery/jquery-migrate.min.js","masonry_js":"/wp-includes/js/masonry.min.js","imagesloaded_js":"/wp-includes/js/imagesloaded.min.js"};
|
||
var coblocksLigthboxData = {"closeLabel":"Close Gallery","leftLabel":"Previous","rightLabel":"Next"};
|
||
//# sourceURL=coblocks-loader-js-extra
|
||
</script>
|
||
<script id="jetpack-carousel-js-extra">
|
||
var jetpackSwiperLibraryPath = {"url":"/wp-content/mu-plugins/jetpack-plugin/moon/_inc/blocks/swiper.js"};
|
||
var jetpackCarouselStrings = {"widths":[370,700,1000,1200,1400,2000],"is_logged_in":"","lang":"en","ajaxurl":"https://surfingcomplexity.blog/wp-admin/admin-ajax.php","nonce":"fd1855488a","display_exif":"1","display_comments":"1","single_image_gallery":"1","single_image_gallery_media_file":"","background_color":"black","comment":"Comment","post_comment":"Post Comment","write_comment":"Write a Comment...","loading_comments":"Loading Comments...","image_label":"Open image in full-screen.","download_original":"View full size \u003Cspan class=\"photo-size\"\u003E{0}\u003Cspan class=\"photo-size-times\"\u003E\u00d7\u003C/span\u003E{1}\u003C/span\u003E","no_comment_text":"Please be sure to submit some text with your comment.","no_comment_email":"Please provide an email address to comment.","no_comment_author":"Please provide your name to comment.","comment_post_error":"Sorry, but there was an error posting your comment. Please try again later.","comment_approved":"Your comment was approved.","comment_unapproved":"Your comment is in moderation.","camera":"Camera","aperture":"Aperture","shutter_speed":"Shutter Speed","focal_length":"Focal Length","copyright":"Copyright","comment_registration":"0","require_name_email":"1","login_url":"https://lorinhochstein.wordpress.com/wp-login.php?redirect_to=https%3A%2F%2Fsurfingcomplexity.blog%2F2026%2F01%2F31%2Fashby-taught-us-we-have-to-fight-fire-with-fire%2F","blog_id":"30291541","meta_data":["camera","aperture","shutter_speed","focal_length","copyright"],"stats_query_args":"blog=30291541&v=wpcom&tz=-7&user_id=0&subd=lorinhochstein","is_public":"1"};
|
||
//# sourceURL=jetpack-carousel-js-extra
|
||
</script>
|
||
<script id="sharing-js-js-extra">
|
||
var sharing_js_options = {"lang":"en","counts":"1","is_stats_active":"1"};
|
||
//# sourceURL=sharing-js-js-extra
|
||
</script>
|
||
<script id="jetpack-script-data-js-before">
|
||
window.JetpackScriptData = {"site":{"host":"wpcom","is_wpcom_platform":true}};
|
||
//# sourceURL=jetpack-script-data-js-before
|
||
</script>
|
||
<script crossorigin='anonymous' type='text/javascript' src='/_static/??-eJydkN1uwjAMhV9oaYBtwC4mHgWZxIDb/Cl2YLz90kJZhaZp4iaKj+3v2NbnpEwMgkF0cuVAgbWJOxdNx3rRzNfNXDH55FBlPDVv2hKLbn+KlItgMTeeQtPyi57w5IgeWaey0xQsJqxPEFVjR3zErBY9KMCJDiAUn+znjpJyFDq1j6aw2tPXCKJgXLEVMczrfd+dMbnLk9NWnmaTKYk6pwp8RPiixhu2KAlMp6o0lN4S2scYxuT2VD1i1lAkehAhc28DZhTWu0LO3sWbtQWBfzhPDbf95FeYgRwLo7vXjcJvN5lgoSP2KOq1mV1xo7DPQ7H9o3e0uJ7iIXx+FT5CRgvWXoYvhcNth43/nK/Wq4/32Xq5bL8B61oT8g=='></script>
|
||
<script id="sharing-js-js-after">
|
||
window.WPCOM_sharing_popups = window.WPCOM_sharing_popups || {};
|
||
window.WPCOM_sharing_popups[ "twitter" ] = "menubar=1,resizable=1,width=600,height=350";
|
||
window.WPCOM_sharing_popups = window.WPCOM_sharing_popups || {};
|
||
window.WPCOM_sharing_popups[ "facebook" ] = "menubar=1,resizable=1,width=600,height=400";
|
||
//# sourceURL=sharing-js-js-after
|
||
</script>
|
||
<script id="wp-emoji-settings" type="application/json">
|
||
{"baseUrl":"https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/72x72/","ext":".png","svgUrl":"https://s0.wp.com/wp-content/mu-plugins/wpcom-smileys/twemoji/2/svg/","svgExt":".svg","source":{"concatemoji":"/wp-includes/js/wp-emoji-release.min.js?m=1783090810i&ver=7.1.1-alpha-63555"}}
|
||
</script>
|
||
<script type="module">
|
||
/*! This file is auto-generated */
|
||
var e="script#wp-emoji-settings",t=document.querySelector(e);if(!(t instanceof HTMLScriptElement))throw new Error("Element missing: "+e);const r=JSON.parse(t.text),s=(window._wpemojiSettings=r,"wpEmojiSettingsSupports"),o=["flag","emoji"];function i(e){try{var t={supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(s,JSON.stringify(t))}catch(e){}}function c(e,t,n){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);t=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(n,0,0);const r=new Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)=>e===r[t])}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var n=e.getImageData(16,16,1,1);for(let e=0;e<n.data.length;e++)if(0!==n.data[e])return!1;return!0}function u(e,t,n,r){switch(t){case"flag":return n(e,"\ud83c\udff3\ufe0f\u200d\u26a7\ufe0f","\ud83c\udff3\ufe0f\u200b\u26a7\ufe0f")?!1:!n(e,"\ud83c\udde8\ud83c\uddf6","\ud83c\udde8\u200b\ud83c\uddf6")&&!n(e,"\ud83c\udff4\udb40\udc67\udb40\udc62\udb40\udc65\udb40\udc6e\udb40\udc67\udb40\udc7f","\ud83c\udff4\u200b\udb40\udc67\u200b\udb40\udc62\u200b\udb40\udc65\u200b\udb40\udc6e\u200b\udb40\udc67\u200b\udb40\udc7f");case"emoji":return!r(e,"\ud83e\u1fac8")}return!1}function f(e,t,n,r){let a;const s=(a="undefined"!=typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement("canvas")).getContext("2d",{willReadFrequently:!0}),o=(s.textBaseline="top",s.font="600 32px Arial",{});return e.forEach(e=>{o[e]=t(s,e,n,r)}),o}function a(e){var t=document.createElement("script");t.src=e,t.defer=!0,document.head.appendChild(t)}r.supports={everything:!0,everythingExceptFlag:!0},new Promise(t=>{let n=function(){try{var e=JSON.parse(sessionStorage.getItem(s));if("object"==typeof e&&"number"==typeof e.timestamp&&(new Date).valueOf()<e.timestamp+604800&&"object"==typeof e.supportTests)return e.supportTests}catch(e){}return null}();if(!n){if("undefined"!=typeof Worker&&"undefined"!=typeof OffscreenCanvas&&"undefined"!=typeof URL&&URL.createObjectURL&&"undefined"!=typeof Blob)try{var e="postMessage("+f.toString()+"("+[JSON.stringify(o),u.toString(),c.toString(),p.toString()].join(",")+"));",r=new Blob([e],{type:"text/javascript"});const a=new Worker(URL.createObjectURL(r),{name:"wpTestEmojiSupports"});return void(a.onmessage=e=>{i(n=e.data),a.terminate(),t(n)})}catch(e){}i(n=f(o,u,c,p))}t(n)}).then(e=>{for(const n in e)r.supports[n]=e[n],r.supports.everything=r.supports.everything&&r.supports[n],"flag"!==n&&(r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&r.supports[n]);var t;r.supports.everythingExceptFlag=r.supports.everythingExceptFlag&&!r.supports.flag,r.supports.everything||((t=r.source||{}).concatemoji?a(t.concatemoji):t.wpemoji&&t.twemoji&&(a(t.twemoji),a(t.wpemoji)))});
|
||
//# sourceURL=/wp-includes/js/wp-emoji-loader.min.js
|
||
</script>
|
||
<iframe src='https://widgets.wp.com/likes/master.html?ver=20260912#ver=20260912' scrolling='no' id='likes-master' name='likes-master' style='display:none;'></iframe>
|
||
<div id='likes-other-gravatars' role="dialog" aria-hidden="true" tabindex="-1"><div class="likes-text"><span>%d</span></div><ul class="wpl-avatars sd-like-gravatars"></ul></div>
|
||
<script src="//stats.wp.com/w.js?69" defer></script> <script type="text/javascript">
|
||
_tkq = window._tkq || [];
|
||
_stq = window._stq || [];
|
||
_tkq.push(['storeContext', {'blog_id':'30291541','blog_tz':'-7','user_lang':'en','blog_lang':'en','user_id':'0'}]);
|
||
// Prevent sending pageview tracking from WP-Admin pages.
|
||
_stq.push(['view', {'blog':'30291541','v':'wpcom','tz':'-7','user_id':'0','post':'7237','subd':'lorinhochstein'}]);
|
||
_stq.push(['extra', {'crypt':'UE5tW3cvZGRTd1VXTHx0Q0pyYT89K3QrZXh+YlZCT3lNLEN2NzQ2Njh8QTJiL1BzZVh+MTlwZTc3TkdTOFRnU0szQW1JRDNWXXZWanJ3XTlaa3R4TiVPZl9IUXlmUXcrR2V3LkdaZH5TVWowZHctPVhHeiZsLnd6aUdrYjhkdl1hMWEvSjlCbDRrN2diajdBcXhrPUF5OHIwJVhMX01SU1hIanZxL1VEWkFNRlJUP35sMS8yRkdDa1c4ckhxMVBoQW9FPUVdMEExRU9iRGt1Qk84S0lRJQ=='}]);
|
||
_stq.push([ 'clickTrackerInit', '30291541', '7237' ]);
|
||
</script>
|
||
<noscript><img src="https://pixel.wp.com/b.gif?v=noscript" style="height:1px;width:1px;overflow:hidden;position:absolute;bottom:1px;" alt="" /></noscript>
|
||
<meta id="bilmur" property="bilmur:data" content="" data-provider="wordpress.com" data-service="simple" data-site-tz="America/Los_Angeles" data-custom-props="{"logged_in":"0","wptheme":"pub\/independent-publisher-2","wptheme_is_block":"0"}" >
|
||
<script defer src="/wp-content/js/bilmur.min.js?i=17&m=202637"></script>
|
||
<script>
|
||
(function() {
|
||
'use strict';
|
||
|
||
const fetches = {};
|
||
const promises = {};
|
||
const urls = {
|
||
'wp-polyfill': '/wp-includes/js/dist/vendor/wp-polyfill.min.js?m=1786440387i&ver=3.15.0',
|
||
'verbum': '/wp-content/mu-plugins/jetpack-mu-wpcom-plugin/moon/jetpack_vendor/automattic/jetpack-mu-wpcom/src/build/verbum-comments/verbum-comments.js?m=1788898305i&minify=false&ver=3d6130a57c3104d5bc3b'
|
||
};
|
||
const loaders = {
|
||
'verbum': () => {
|
||
fetchExternalScript('wp-polyfill');
|
||
fetchExternalScript('verbum');
|
||
promises['wp-polyfill'] = promises['wp-polyfill'] || loadWPScript('wp-polyfill');
|
||
promises['verbum'] = promises['verbum'] || promises['wp-polyfill'].then( () => loadWPScript('verbum') );
|
||
return promises['verbum'];
|
||
},
|
||
|
||
};
|
||
const scriptExtras = {
|
||
|
||
};
|
||
|
||
window.WP_Enqueue_Dynamic_Script = {
|
||
loadScript: (handle) => {
|
||
if (!loaders[handle]) {
|
||
console.error('WP_Enqueue_Dynamic_Script: unregistered script `' + handle + '`.');
|
||
}
|
||
return loaders[handle]();
|
||
}
|
||
};
|
||
|
||
function fetchExternalScript(handle) {
|
||
if (!urls[handle]) {
|
||
return Promise.resolve();
|
||
}
|
||
|
||
fetches[handle] = fetches[handle] || fetch(urls[handle], { mode: 'no-cors' });
|
||
return fetches[handle];
|
||
}
|
||
|
||
function runExtraScript(handle, type, index) {
|
||
const id = 'wp-enqueue-dynamic-script:' + handle + ':' + type + ':' + (index + 1);
|
||
const template = document.getElementById(id);
|
||
if (!template) {
|
||
return Promise.reject();
|
||
}
|
||
|
||
const script = document.createElement( 'script' );
|
||
script.innerHTML = template.innerHTML;
|
||
document.body.appendChild( script );
|
||
return Promise.resolve();
|
||
}
|
||
|
||
function loadExternalScript(handle) {
|
||
if (!urls[handle]) {
|
||
return Promise.resolve();
|
||
}
|
||
|
||
return fetches[handle].then(() => {
|
||
return new Promise((resolve, reject) => {
|
||
const script = document.createElement('script');
|
||
script.onload = () => resolve();
|
||
script.onerror = (e) => reject(e);
|
||
script.src = urls[handle];
|
||
document.body.appendChild(script);
|
||
});
|
||
});
|
||
}
|
||
|
||
function loadExtra(handle, pos) {
|
||
const count = (scriptExtras[handle] && scriptExtras[handle][pos]) || 0;
|
||
let promise = Promise.resolve();
|
||
|
||
for (let i = 0; i < count; i++) {
|
||
promise = promise.then(() => runExtraScript(handle, pos, i));
|
||
}
|
||
|
||
return promise;
|
||
}
|
||
|
||
function loadWPScript(handle) {
|
||
// Core loads scripts in this order. See: https://github.com/WordPress/WordPress/blob/a59eb9d39c4fcba834b70c9e8dfd64feeec10ba6/wp-includes/class-wp-scripts.php#L428.
|
||
return loadExtra(handle, 'translations')
|
||
.then(() => loadExtra(handle, 'before'))
|
||
.then(() => loadExternalScript(handle))
|
||
.then(() => loadExtra(handle, 'after'));
|
||
}
|
||
} )();
|
||
</script>
|
||
|
||
</body>
|
||
</html>
|