Help
RSS
API
Feed
Maltego
Contact
Domain > groveronline.com
×
More information on this domain is in
AlienVault OTX
Is this malicious?
Yes
No
DNS Resolutions
Date
IP Address
2022-05-26
172.64.134.27
(
ClassC
)
2026-02-26
192.0.78.24
(
ClassC
)
Port 80
HTTP/1.1 301 Moved PermanentlyServer: nginxDate: Thu, 26 Feb 2026 00:05:16 GMTContent-Type: text/htmlContent-Length: 162Connection: keep-aliveLocation: https://groveronline.com/Alt-Svc: h3:443; ma86400Server-Timing: a8c-cdn, dc;descsea, cache;descBYPASS;dur0.0 html>head>title>301 Moved Permanently/title>/head>body>center>h1>301 Moved Permanently/h1>/center>hr>center>nginx/center>/body>/html>
Port 443
HTTP/1.1 200 OKServer: nginxDate: Thu, 26 Feb 2026 00:05:16 GMTContent-Type: text/html; charsetUTF-8Transfer-Encoding: chunkedConnection: keep-aliveStrict-Transport-Security: max-age31536000Vary: Accept-EncodingX-hacker: Want root? Visit join.a8c.com/hacker and mention this header.Host-Header: WordPress.comLink: https://public-api.wordpress.com/wp-json/?rest_route/sites/groveronline3.wordpress.com>; relhttps://api.w.org/Vary: accept, content-type, cookieLink: https://wp.me/fbFZF>; relshortlinkLink: https://groveronline.com/@groveronline.com>; titleActivityPub (JSON); relalternate; typeapplication/activity+jsonVary: AcceptLast-Modified: Sun, 22 Feb 2026 04:06:04 GMTCache-Control: max-age300, must-revalidateX-nananana: Batcache-SetX-ac: 2.sea _bur STALEAlt-Svc: h3:443; ma86400Server-Timing: a8c-cdn, dc;descsea, cache;descSTALE;dur2.0 !DOCTYPE html>html langen>head>meta charsetUTF-8>meta nameviewport contentwidthdevice-width, initial-scale1>link relprofile hrefhttp://gmpg.org/xfn/11>title>Groveronline – A Grover. Online. Saying stuff./title>meta namerobots contentmax-image-preview:large />!-- Async WordPress.com Remote Login -->script idwpcom_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 loginwindow.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_loginvalidate + &wpcomid + data.wpcomid + &token + encodeURIComponent( data.token ) + &host + window.location.protocol + // + window.location.hostname + &postid640 + &is_singular; 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_accessdenied; path/; max-age31536000; 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_loginrequest_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 resourceswindow.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_loginkey + &originaHR0cHM6Ly9ncm92ZXJvbmxpbmUuY29t + &wpcomid224428075 + &time + Math.floor( Date.now() / 1000 ); document.body.appendChild( iframe );}, false );/script>link reldns-prefetch href//s2.wp.com />link reldns-prefetch href//s0.wp.com />link relalternate typeapplication/rss+xml titleGroveronline » Feed hrefhttps://groveronline.com/feed/ />link relalternate typeapplication/rss+xml titleGroveronline » Comments Feed hrefhttps://groveronline.com/comments/feed/ /> script typetext/javascript> /* !CDATA */ function addLoadEvent(func) { var oldonload window.onload; if (typeof window.onload ! function) { window.onload func; } else { window.onload function () { oldonload(); func(); } } } /* > */ /script> link crossoriginanonymous relstylesheet idall-css-0-1 href/wp-content/mu-plugins/jetpack-plugin/moon/modules/infinite-scroll/infinity.css?m1770909026i&cssminifyyes typetext/css mediaall />style idwp-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; }/*# sourceURLwp-emoji-styles-inline-css *//style>link crossoriginanonymous relstylesheet idall-css-2-1 href/wp-content/plugins/gutenberg-core/v22.5.3/build/styles/block-library/style.min.css?m1770945363i&cssminifyyes typetext/css mediaall />style idwp-block-library-inline-css>.has-text-align-justify { text-align:justify;}.has-text-align-justify{text-align:justify;}/*# sourceURLwp-block-library-inline-css *//style>style idwp-block-embed-inline-css>.wp-block-embed.alignleft,.wp-block-embed.alignright,.wp-blockdata-alignleft>data-typecore/embed,.wp-blockdata-alignright>data-typecore/embed{max-width:360px;width:100%}.wp-block-embed.alignleft .wp-block-embed__wrapper,.wp-block-embed.alignright .wp-block-embed__wrapper,.wp-blockdata-alignleft>data-typecore/embed .wp-block-embed__wrapper,.wp-blockdata-alignright>data-typecore/embed .wp-block-embed__wrapper{min-width:280px}.wp-block-cover .wp-block-embed{min-height:240px;min-width:320px}.wp-block-group.is-layout-flex .wp-block-embed{flex:1 1 0%;min-width:0}.wp-block-embed{overflow-wrap:break-word}.wp-block-embed :where(figcaption){margin-bottom:1em;margin-top:.5em}.wp-block-embed iframe{max-width:100%}.wp-block-embed__wrapper{position:relative}.wp-embed-responsive .wp-has-aspect-ratio .wp-block-embed__wrapper:before{content:;display:block;padding-top:50%}.wp-embed-responsive .wp-has-aspect-ratio iframe{bottom:0;height:100%;left:0;position:absolute;right:0;top:0;width:100%}.wp-embed-responsive .wp-embed-aspect-21-9 .wp-block-embed__wrapper:before{padding-top:42.85%}.wp-embed-responsive .wp-embed-aspect-18-9 .wp-block-embed__wrapper:before{padding-top:50%}.wp-embed-responsive .wp-embed-aspect-16-9 .wp-block-embed__wrapper:before{padding-top:56.25%}.wp-embed-responsive .wp-embed-aspect-4-3 .wp-block-embed__wrapper:before{padding-top:75%}.wp-embed-responsive .wp-embed-aspect-1-1 .wp-block-embed__wrapper:before{padding-top:100%}.wp-embed-responsive .wp-embed-aspect-9-16 .wp-block-embed__wrapper:before{padding-top:177.77%}.wp-embed-responsive .wp-embed-aspect-1-2 .wp-block-embed__wrapper:before{padding-top:200%}/*# sourceURLhttps://s0.wp.com/wp-content/plugins/gutenberg-core/v22.5.3/build/styles/block-library/embed/style.min.css *//style>style idwp-block-embed-theme-inline-css>.wp-block-embed :where(figcaption){color:#555;font-size:13px;text-align:center}.is-dark-theme .wp-block-embed :where(figcaption){color:#ffffffa6}.wp-block-embed{margin:0 0 1em}/*# sourceURLhttps://s0.wp.com/wp-content/plugins/gutenberg-core/v22.5.3/build/styles/block-library/embed/theme.min.css *//style>style idwp-block-quote-inline-css>.wp-block-quote{box-sizing:border-box;overflow-wrap:break-word}.wp-block-quote.is-large:where(:not(.is-style-plain)),.wp-block-quote.is-style-large:where(:not(.is-style-plain)){margin-bottom:1em;padding:0 1em}.wp-block-quote.is-large:where(:not(.is-style-plain)) p,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) p{font-size:1.5em;font-style:italic;line-height:1.6}.wp-block-quote.is-large:where(:not(.is-style-plain)) cite,.wp-block-quote.is-large:where(:not(.is-style-plain)) footer,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) cite,.wp-block-quote.is-style-large:where(:not(.is-style-plain)) footer{font-size:1.125em;text-align:right}.wp-block-quote>cite{display:block}/*# sourceURLhttps://s0.wp.com/wp-content/plugins/gutenberg-core/v22.5.3/build/styles/block-library/quote/style.min.css *//style>style idwp-block-quote-theme-inline-css>.wp-block-quote{border-left:.25em solid;margin:0 0 1.75em;padding-left:1em}.wp-block-quote cite,.wp-block-quote footer{color:currentColor;font-size:.8125em;font-style:normal;position:relative}.wp-block-quote:where(.has-text-align-right){border-left:none;border-right:.25em solid;padding-left:0;padding-right:1em}.wp-block-quote:where(.has-text-align-center){border:none;padding-left:0}.wp-block-quote.is-large,.wp-block-quote.is-style-large,.wp-block-quote:where(.is-style-plain){border:none}/*# sourceURLhttps://s0.wp.com/wp-content/plugins/gutenberg-core/v22.5.3/build/styles/block-library/quote/theme.min.css *//style>style idwp-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-leftstyle*writing-mode:where(style*vertical-lr),h1.has-text-align-rightstyle*writing-mode:where(style*vertical-rl),h2.has-text-align-leftstyle*writing-mode:where(style*vertical-lr),h2.has-text-align-rightstyle*writing-mode:where(style*vertical-rl),h3.has-text-align-leftstyle*writing-mode:where(style*vertical-lr),h3.has-text-align-rightstyle*writing-mode:where(style*vertical-rl),h4.has-text-align-leftstyle*writing-mode:where(style*vertical-lr),h4.has-text-align-rightstyle*writing-mode:where(style*vertical-rl),h5.has-text-align-leftstyle*writing-mode:where(style*vertical-lr),h5.has-text-align-rightstyle*writing-mode:where(style*vertical-rl),h6.has-text-align-leftstyle*writing-mode:where(style*vertical-lr),h6.has-text-align-rightstyle*writing-mode:where(style*vertical-rl){rotate:180deg}/*# sourceURLhttps://s0.wp.com/wp-content/plugins/gutenberg-core/v22.5.3/build/styles/block-library/heading/style.min.css *//style>style idwp-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-imagestyle*border-radius img,.wp-block-imagestyle*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 viewBox0 0 100 100 xmlnshttp://www.w3.org/2000/svg>circle cx50 cy50 r50/>/svg>);mask-image:url(data:image/svg+xml;utf8,svg viewBox0 0 100 100 xmlnshttp://www.w3.org/2000/svg>circle cx50 cy50 r50/>/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:#5a5a5a40;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 #5a5a5a40;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:#5a5a5a40;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 .close-button{align-items:center;cursor:pointer;display:flex;justify-content:center;min-height:40px;min-width:40px;padding:0;position:absolute;right:calc(env(safe-area-inset-right) + 16px);top:calc(env(safe-area-inset-top) + 16px);z-index:5000000}.wp-lightbox-overlay .close-button:focus,.wp-lightbox-overlay .close-button:hover,.wp-lightbox-overlay .close-button:not(:hover):not(:active):not(.has-background){background:none;border:none}.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:9999999999}.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}}/*# sourceURLhttps://s0.wp.com/wp-content/plugins/gutenberg-core/v22.5.3/build/styles/block-library/image/style.min.css *//style>style idwp-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:#ffffffa6}.wp-block-image{margin:0 0 1em}/*# sourceURLhttps://s0.wp.com/wp-content/plugins/gutenberg-core/v22.5.3/build/styles/block-library/image/theme.min.css *//style>style idwp-block-list-inline-css>ol,ul{box-sizing:border-box}:root :where(.wp-block-list.has-background){padding:1.25em 2.375em}/*# sourceURLhttps://s0.wp.com/wp-content/plugins/gutenberg-core/v22.5.3/build/styles/block-library/list/style.min.css *//style>style idwp-block-page-list-inline-css>.wp-block-navigation .wp-block-page-list{align-items:var(--navigation-layout-align,initial);background-color:inherit;display:flex;flex-direction:var(--navigation-layout-direction,initial);flex-wrap:var(--navigation-layout-wrap,wrap);justify-content:var(--navigation-layout-justify,initial)}.wp-block-navigation .wp-block-navigation-item{background-color:inherit}.wp-block-page-list{box-sizing:border-box}/*# sourceURLhttps://s0.wp.com/wp-content/plugins/gutenberg-core/v22.5.3/build/styles/block-library/page-list/style.min.css *//style>style idwp-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-leftstyle*writing-mode:vertical-lr,p.has-text-align-rightstyle*writing-mode:vertical-rl{rotate:180deg}/*# sourceURLhttps://s0.wp.com/wp-content/plugins/gutenberg-core/v22.5.3/build/styles/block-library/paragraph/style.min.css *//style>style idwp-block-tag-cloud-inline-css>.wp-block-tag-cloud{box-sizing:border-box}.wp-block-tag-cloud.aligncenter{justify-content:center;text-align:center}.wp-block-tag-cloud a{display:inline-block;margin-right:5px}.wp-block-tag-cloud span{display:inline-block;margin-left:5px;text-decoration:none}:root :where(.wp-block-tag-cloud.is-style-outline){display:flex;flex-wrap:wrap;gap:1ch}:root :where(.wp-block-tag-cloud.is-style-outline a){border:1px solid;font-size:unset!important;margin-right:0;padding:1ch 2ch;text-decoration:none!important}/*# sourceURLhttps://s0.wp.com/wp-content/plugins/gutenberg-core/v22.5.3/build/styles/block-library/tag-cloud/style.min.css *//style>style idclassic-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}/*# sourceURL/wp-content/plugins/gutenberg-core/v22.5.3/build/styles/block-library/classic.min.css *//style>style idglobal-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);}: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;}/*# sourceURLglobal-styles-inline-css *//style>link crossoriginanonymous relstylesheet idall-css-4-1 href/_static/??-eJydkN0KwjAMhV/IGH9AvREfRboau2z9o+kQ3944BQXHLrwJOSVfTnPwlsGmWClWDANkPziOgjYV0veQTUWdCHRhQ56Cji2tyAKnsVtWBpomFxIBrYGHALVVUOa4jmo2tn9rDClFPHO06ChSYSVkuv1Z+vLCPDTI8UKZtMQKqj1LSwU2KPXu6R9QEWx8sv1fts9zRmsYU5qLo5DaOG3d6PmRc5CjBPo5U1nD+xZw9YbLEz2F43q/X+9Wu+1h1T0AZbO+qA&cssminifyyes typetext/css mediaall />link crossoriginanonymous relstylesheet idprint-css-5-1 href/wp-content/mu-plugins/global-print/global-print.css?m1465851035i&cssminifyyes typetext/css mediaprint />style idjetpack-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;}/*# sourceURLjetpack-global-styles-frontend-style-inline-css *//style>link crossoriginanonymous relstylesheet idall-css-8-1 href/wp-content/themes/h4/global.css?m1420737423i&cssminifyyes typetext/css mediaall />script typetext/javascript idwpcom-actionbar-placeholder-js-extra>/* !CDATA */var actionbardata {siteID:224428075,postID:0,siteURL:https://groveronline.com,xhrURL:https://groveronline.com/wp-admin/admin-ajax.php,nonce:b262149d68,isLoggedIn:,statusMessage:,subsEmailDefault:instantly,proxyScriptUrl:https://s0.wp.com/wp-content/js/wpcom-proxy-request.js?m1513050504i&ver20211021,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.}};//# sourceURLwpcom-actionbar-placeholder-js-extra/* > *//script>script typetext/javascript idjetpack-mu-wpcom-settings-js-before>/* !CDATA */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/};//# sourceURLjetpack-mu-wpcom-settings-js-before/* > *//script>script crossoriginanonymous typetext/javascript src/wp-content/js/rlt-proxy.js?m1720530689i>/script>script typetext/javascript idrlt-proxy-js-after>/* !CDATA */ rltInitialize( {token:null,iframeOrigins:https:\/\/widgets.wp.com} );//# sourceURLrlt-proxy-js-after/* > *//script>link relEditURI typeapplication/rsd+xml titleRSD hrefhttps://groveronline3.wordpress.com/xmlrpc.php?rsd />meta namegenerator contentWordPress.com />link relshortlink hrefhttps://wp.me/fbFZF />!-- Jetpack Open Graph Tags -->meta propertyog:type contentwebsite />meta propertyog:title contentGroveronline />meta propertyog:description contentA Grover. Online. Saying stuff. />meta propertyog:url contenthttps://groveronline.com/ />meta propertyog:site_name contentGroveronline />meta propertyog:image contenthttps://s0.wp.com/i/blank.jpg?m1383295312i />meta propertyog:image:width content200 />meta propertyog:image:height content200 />meta propertyog:image:alt content />meta propertyog:locale contenten_US />!-- End Jetpack Open Graph Tags -->link relshortcut icon typeimage/x-icon hrefhttps://s1.wp.com/i/favicon.ico?m1713425267i sizes16x16 24x24 32x32 48x48 />link relicon typeimage/x-icon hrefhttps://s1.wp.com/i/favicon.ico?m1713425267i sizes16x16 24x24 32x32 48x48 />link relapple-touch-icon hrefhttps://s2.wp.com/i/webclip.png?m1713868326i />link relsearch typeapplication/opensearchdescription+xml hrefhttps://groveronline.com/osd.xml titleGroveronline />link relsearch typeapplication/opensearchdescription+xml hrefhttps://s1.wp.com/opensearch.xml titleWordPress.com />meta nametheme-color content#ffffff />meta propertyfediverse:creator namefediverse:creator contentgroveronline.com@groveronline.com />meta namedescription contentA Grover. Online. Saying stuff. />link relalternate titleActivityPub (JSON) typeapplication/activity+json hrefhttps://groveronline.com/@groveronline.com />link crossoriginanonymous relstylesheet idall-css-0-4 href/_static/??-eJydjdEKAiEQRX8oG4RIeog+JWwcxN3REUdZ9u8rqOgpYh/P5XIOLNWglE6lQx6m8oipKEzUq8f5xZBFClxTQbix4KygS6rU9qi6g/8NWcJgUkDfZCjx5/QetgqXFCJ1hSgSGvnwSOgXbdX2xBRM9MzU1l/0DFzy2Tpnj9adDna6A7MQgfE&cssminifyyes typetext/css mediaall />/head>body classhome blog wp-custom-logo wp-embed-responsive wp-theme-pubindependent-publisher-2 customizer-styles-applied has-sidebar jetpack-reblog-enabled custom-colors>div idpage classhfeed site> a classskip-link screen-reader-text href#content>Skip to content/a> div idhero-header classsite-hero-section> header idmasthead classsite-header rolebanner> div classinner> div classsite-branding> a hrefhttps://groveronline.com/ classcustom-logo-link relhome aria-currentpage>img width950 height193 srchttps://groveronline.com/wp-content/uploads/2023/10/44af1-masthead2.png classcustom-logo altGroveronline decodingasync srcsethttps://groveronline.com/wp-content/uploads/2023/10/44af1-masthead2.png 950w, https://groveronline.com/wp-content/uploads/2023/10/44af1-masthead2.png?w150&h30 150w, https://groveronline.com/wp-content/uploads/2023/10/44af1-masthead2.png?w300&h61 300w, https://groveronline.com/wp-content/uploads/2023/10/44af1-masthead2.png?w768&h156 768w sizes(max-width: 950px) 100vw, 950px data-attachment-id383 data-permalinkhttps://groveronline.com/masthead2-png/ data-orig-filehttps://groveronline.com/wp-content/uploads/2023/10/44af1-masthead2.png data-orig-size950,193 data-comments-opened0 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-titlemasthead2.png data-image-description<p>https://groveronline.com/wp-content/uploads/2013/03/masthead2.png</p> data-image-caption data-medium-filehttps://groveronline.com/wp-content/uploads/2023/10/44af1-masthead2.png?w300 data-large-filehttps://groveronline.com/wp-content/uploads/2023/10/44af1-masthead2.png?w950 />/a> a classsite-logo-link hrefhttps://groveronline.com/> img referrerpolicyno-referrer altUnknown's avatar srchttps://2.gravatar.com/avatar/b3e615e9b51ffe79f6d9e209160039ca3b9f00f33680f416dc8386b3e9bd4fa8?s80&didenticon&rG srcsethttps://2.gravatar.com/avatar/b3e615e9b51ffe79f6d9e209160039ca3b9f00f33680f416dc8386b3e9bd4fa8?s80&didenticon&rG 1x, https://2.gravatar.com/avatar/b3e615e9b51ffe79f6d9e209160039ca3b9f00f33680f416dc8386b3e9bd4fa8?s120&didenticon&rG 1.5x, https://2.gravatar.com/avatar/b3e615e9b51ffe79f6d9e209160039ca3b9f00f33680f416dc8386b3e9bd4fa8?s160&didenticon&rG 2x, https://2.gravatar.com/avatar/b3e615e9b51ffe79f6d9e209160039ca3b9f00f33680f416dc8386b3e9bd4fa8?s240&didenticon&rG 3x, https://2.gravatar.com/avatar/b3e615e9b51ffe79f6d9e209160039ca3b9f00f33680f416dc8386b3e9bd4fa8?s320&didenticon&rG 4x classavatar avatar-80 site-logo-image height80 width80 loadingeager decodingasync /> /a>!-- .site-logo-link --> h1 classsite-title>a hrefhttps://groveronline.com/ relhome>Groveronline/a>/h1> p classsite-description>A Grover. Online. Saying stuff./p> /div>!-- .site-branding --> /div>!-- .inner --> /header>!-- #masthead --> /div> div idcontent-wrapper classcontent-wrapper> div idcontent classsite-content> div idprimary classcontent-area> main idmain classsite-main rolemain> article idpost-640 classpost-640 post type-post status-publish format-standard hentry category-uncategorized tag-ai tag-llm> header classentry-header> h1 classentry-title>a hrefhttps://groveronline.com/2025/09/02/conflicted-about-ai/ relbookmark>Conflicted about AI/a>/h1> /header>!-- .entry-header --> div classentry-content> p classwp-block-paragraph>I’m feeling extremely conflicted about AI. On one hand, I’ve been learning about and using AI recently, and I’ve also been pursuing creative pursuits like audiobook narration. I’ve seen many many creative people filled with rage about AI, and specifically people trying to pass off AI-generated works as their own creative output. Even outside of this deception, AI offers “good enough” (highly debatable) versions of art, of music, of speech, and this directly impacts the ability of all the people working in these fields earning money to support themselves, to keep doing what they love and also pay the bills./p>h2 classwp-block-heading>s>George Costanza/s> Me: Was that wrong?/h2>p classwp-block-paragraph>My a hrefhttps://groveronline.com/2025/08/26/local-llms-and-ollama/>previous post about AI/a> used a picture that was AI-generated. Immediately following that post I see demigod-from-the-proto-Internet Jamie Zawinski in my Mastodon feed boosting a a hrefhttps://vmst.io/@jalefkowit/115123942862368164>post/a> declaring what I just did was super bad:/p>blockquote classwp-block-quote is-layout-flow wp-block-quote-is-layout-flow>p classwp-block-paragraph>Before you add an AI-generated image to your blog post, have you considered saving even more time and just putting “YOU CAN STOP READING NOW” in 120 point text/p>/blockquote>p classwp-block-paragraph>Goddamn it. I was so pleased, using these cool new tools and coming up with a prompt that got ChatGPT Sora to roughly give me what I wanted for an image — a (O)llama relaxing at home watching TV in the dark. If I hadn’t done this, it’s not like I would have commissioned a human artist, or tried to draw something myself, I just would have published the post with no image at all and called it good enough./p>p classwp-block-paragraph>Isn’t the net addition of an amusing picture to a blog post a good thing? But also, isn’t there something to the negative sentiment?/p>h2 classwp-block-heading>Also me: This is Not Good./h2>p classwp-block-paragraph>AI is disrupting the audiobook world. When I, as a person seeking to start doing audiobook narration look to audition for self-published books on Amazon’s a hrefhttps://www.acx.com/>ACX/a> platform, the primary way I know people are writing the fiction books is: no AI would write this poorly! But when it comes to nonfiction, it’s much harder to know. Do I need to fall back on the classic a hrefhttps://en.wikipedia.org/wiki/Large_language_model>LLM/a> tells of bulleted lists and use of em-dashes to guess? How do I feel about auditioning to narrate a book possibly s>written/s> generated by an LLM? Should it matter? Am I validating or <something>-washing the approach by doing an actual human-produced narration of the book?/p>p classwp-block-paragraph>At least the book’s author wanted an actual human narration, instead of relying on AI for that too. A human narration is always going to sound better (for now), but when the producer of AI-generated books is using a quantity-over-quality approach to flood the marketplace, will that matter, or will consumers eventually come to accept AI narration as their ears get used to it, much the same way pop music fans are now used to autotuned vocals?/p>h2 classwp-block-heading>This blog post will eventually be used to train LLMs/h2>p classwp-block-paragraph>LLMs are being trained on the entire accessible internet (sanitized). LLMs are a distillation of all their training, and do not refer back to the original source to respond to a query. There is a negative feedback loop in the making: the more we use LLMs, the less incentive there is to publish on the internet, since it will result in fewer hits by actual users. The less published, the less training data for LLMs, unless they resort to synthetic training data./p>p classwp-block-paragraph>I do not believe a hrefhttps://en.wikipedia.org/wiki/Artificial_general_intelligence>AGI/a> is coming soon, or that scaling LLMs will result in another quantum leap in their capabilities. But even the current level of technology has only begun to disrupt the status quo. Even if it makes mistakes and hallucinates, it is still incredibly useful, but it will still be years before we understand where best to deploy it. Before then, I think we can expect that em>someone/em> will try to use AI for every possible application, and some of these will fail in unforeseen and incredibly damaging ways./p>p classwp-block-paragraph>So yeah. I’m extremely conflicted./p> /div>!-- .entry-content --> footer classentry-footer> div classentry-meta> span classbyline> a hrefhttps://groveronline.com/author/asgrover/ titlePosts by agrover relauthor>agrover/a> /span> span classcat-links> a hrefhttps://groveronline.com/category/uncategorized/ relcategory tag>Uncategorized/a> /span>!-- .cat-links --> span classcomments-link>a hrefhttps://groveronline.com/2025/09/02/conflicted-about-ai/#respond>Leave a comment/a>/span>!-- .comments-link --> span classpublished-on> a hrefhttps://groveronline.com/2025/09/02/conflicted-about-ai/ relbookmark>time classentry-date published datetime2025-09-02T13:23:59-07:00>September 2, 2025/time>time classupdated datetime2025-09-02T14:42:22-07:00>September 2, 2025/time>/a> /span> span classword-count>3 Minutes/span> /div>!-- .entry-meta --> /footer>!-- .entry-footer -->/article>!-- #post-## --> article idpost-627 classpost-627 post type-post status-publish format-standard hentry category-uncategorized tag-ai tag-artificial-intelligence tag-chatgpt tag-ellama tag-llm tag-ollama tag-technology> header classentry-header> h1 classentry-title>a hrefhttps://groveronline.com/2025/08/26/local-llms-and-ollama/ relbookmark>Local LLMs and Ollama/a>/h1> /header>!-- .entry-header --> div classentry-content> div classwp-block-image is-style-default>figure classalignright size-large is-resized>img data-attachment-id634 data-permalinkhttps://groveronline.com/2025/08/26/local-llms-and-ollama/assets_task_01k3jmakgxemr82x6krmaxy27x_1756193262_img_0/ data-orig-filehttps://groveronline.com/wp-content/uploads/2025/08/assets_task_01k3jmakgxemr82x6krmaxy27x_1756193262_img_0.webp data-orig-size1024,1536 data-comments-opened1 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-titleassets_task_01k3jmakgxemr82x6krmaxy27x_1756193262_img_0 data-image-description data-image-caption data-medium-filehttps://groveronline.com/wp-content/uploads/2025/08/assets_task_01k3jmakgxemr82x6krmaxy27x_1756193262_img_0.webp?w200 data-large-filehttps://groveronline.com/wp-content/uploads/2025/08/assets_task_01k3jmakgxemr82x6krmaxy27x_1756193262_img_0.webp?w683 width683 height1024 srchttps://groveronline.com/wp-content/uploads/2025/08/assets_task_01k3jmakgxemr82x6krmaxy27x_1756193262_img_0.webp?w683 altA Llama relaxing at home. classwp-image-634 styleaspect-ratio:0.6669960424023953;width:333px;height:auto srcsethttps://groveronline.com/wp-content/uploads/2025/08/assets_task_01k3jmakgxemr82x6krmaxy27x_1756193262_img_0.webp?w683 683w, https://groveronline.com/wp-content/uploads/2025/08/assets_task_01k3jmakgxemr82x6krmaxy27x_1756193262_img_0.webp?w100 100w, https://groveronline.com/wp-content/uploads/2025/08/assets_task_01k3jmakgxemr82x6krmaxy27x_1756193262_img_0.webp?w200 200w, https://groveronline.com/wp-content/uploads/2025/08/assets_task_01k3jmakgxemr82x6krmaxy27x_1756193262_img_0.webp?w768 768w, https://groveronline.com/wp-content/uploads/2025/08/assets_task_01k3jmakgxemr82x6krmaxy27x_1756193262_img_0.webp 1024w sizes(max-width: 683px) 100vw, 683px />/figure>/div>p classwp-block-paragraph>Lately as part of my time-off learning, I’ve been diving into AI. (Gawd, I em>know/em>, right?) Of course, they have been such a big deal over the past few years I feel like I’m a little late to the party, but I’m also NOT late to the party. While big proprietary tools like ChatGPT and Claude are no longer new, development is still happening rapidly! Most interesting to me, smaller models, and “open source” models, have improved dramatically, and we can now have our own private LLM instances that we can query, for free and with no data leakage!/p>h2 classwp-block-heading>Step One: LM Studio on Macbook Air/h2>p classwp-block-paragraph>Download LM Studio. Run it. Download Qwen3 4B Thinking model. Load it. Chat away. How frickin’ easy is this?? I’m running a LLM and don’t need to worry about OpenAI harvesting my queries, or having to pay a subscription. Apple M-series Macs are actually decent at running LLMs, they have a unified CPU/video memory architecture, so a Mac with a lot of RAM can hold and run big models reasonably fast, where you’d otherwise need numerous high-end GPUs with a lot of VRAM, that would be even more money and power./p>p classwp-block-paragraph>But on my 16GB M3 Air, after a bit of this, one does start to notice… it’s a little slow, innit? And, the answers, when asking about obscure things, are craaazy. My favorite is to ask about 80s sitcoms My Two Dads or Who’s the Boss. Qwen3 4B said My Two Dads is about a woman named Grace who em>marries her two fathers after they divorce/em>. Uh, no./p>p classwp-block-paragraph>But still, I am hooked! /p>p classwp-block-paragraph>Hmm, my pandemic-era gaming machine is sitting idle, I bet it could run some more models…/p>h2 classwp-block-heading>Step Two: LM Studio on Windows with RTX 3090/h2>p classwp-block-paragraph>Installing LM Studio on my Windows gaming machine and downloading some larger models that fit within its 3090’s 24GB VRAM blows my hair back! Better results! And fast! I immediately start making plans to upgrade the system’s RAM, and exploring LM Studio’s server options. Clearly I want a fast and large (or at least medium-sized) LLM: for dumb questions, for smart questions, for programming assistance, which seems to be the number one killer app for LLMs so far. My editor of choice is Emacs (which you will take from my cold, dead hands). I jump through a number of hoops to get LM Studio listening on a port, Windows firewall made aware, and Emacs code>gptel/code> configured./p>p classwp-block-paragraph>Eh, it works ok./p>p classwp-block-paragraph>I’ve heard good things about Ollama, let’s try that./p>h2 classwp-block-heading>Step 3: Switch to Ollama and Ellama/h2>p classwp-block-paragraph>Ollama on Windows has a GUI, although simpler than LM Studio’s. It still allows you to download models and chat, although that’s about it. The main reasons to use Ollama are: it’s open-source (MIT), it seems to handle model dynamic loading pretty well, and its service API is a little richer than LM Studio’s OpenAI-compatible API./p>p classwp-block-paragraph>Alas, trying to copy a 23GB model file from LM Studio to Ollama’s code>.models/code>/ directory doesn’t work. Looks like some painful re-downloading is in our future./p>p classwp-block-paragraph>I ditched code>gptel/code> and am now using code>Ellama/code> package, on my laptop running Emacs on Fedora. After some difficulty getting it to connect to the model server, it’s working. Pretty damn slick. It does a lot. A whole lot! I’m going to need to learn how to use all of this. I keep generating text into buffers for source code, and there are a lot of options to explore. Docs exist but is of the “assume you know what everything does” variety, which I still don’t. But, very exciting!/p>h2 classwp-block-heading>Aside: So Many Models!/h2>p classwp-block-paragraph>Here in mid-2025 the models I’ve been using are gpt-oss:20b, deepseek-r1:32b, gemma3:27b, and llama4:scout. Played some with 120b and 70b versions but they’re so much slower I don’t have the patience. I am also using some proprietary LLMs (ChatGPT, Claude) and they are definitely better, but… I dunno, I just really like the idea of using a local LLM. Smaller models and distillations keep getting better. Maybe I missed the boat on LLMs initially, but I think I started playing with local LLMs at the perfect time./p>p classwp-block-paragraph>Really interesting to see where models are coming from. Big US tech firms, and also really good-for-their-size Chinese models. HmmmMMMmmmm./p>h2 classwp-block-heading>Step 4: LLM Server RAM upgrade/h2>p classwp-block-paragraph>It had 32GB. I upgrade it to 128GB, the max the motherboard supports. It lets me run larger (e.g. 70B) models, although a bit more slowly, even with Ollama putting as much as it can into the 3090’s VRAM./p>p classwp-block-paragraph>One default behavior of Ollama is it likes to unload models after a couple of minutes. This affects initial queries, since it has to load the 23GB file off storage and into VRAM before it can run the LLM. Disable this – keep the last LLM model loaded indefinitely./p>p classwp-block-paragraph>It would also be cool if Ollama could keep multiple models loaded in RAM, although maybe only one could use VRAM at a time. Still working on figuring this out./p>h2 classwp-block-heading>Step 5: Browser support/h2>p classwp-block-paragraph>I install a Firefox plugin called “Ollama Client” on all my machines. (Does it really only have 30 users??? Is no one else using local LLMs yet??) Also works well, once I do some Firefox-specific magic to allow CORS or something./p>h2 classwp-block-heading>Conclusion and Next Steps/h2>p classwp-block-paragraph>So yeah, this all is pretty cool. I’ve been watching a lot of videos on LLMs, it’s really interesting to understand how the training and tuning phases work, all the data-scrubbing issues involved , and things like why LLMs hallucinate citations and other things. (BTW, AI owes a huge debt of gratitude to Wikipedia, Reddit, and Github!) AI is not scary, it’s just a tool. Even as a software engineer, I have no fear of being replaced by ChatGPT. It will just be my helper./p>p classwp-block-paragraph>But, man! I sure wish GPUs with gobs of VRAM were cheaper! (Join the club, huh?)/p>p classwp-block-paragraph>Next Steps:/p>ol classwp-block-list>li>Keep using and learning Ellama/li>li>Investigate ollama-rs/li>li>Investigate encrypted (i.e. https) connections to Ollama, unencrypted freaks me out even on my home network.ul classwp-block-list>li>Investigate auth, so I can use my LLM server from elsewhere for free/li>/ul>/li>li>Tool use/MCPs with Ollama server/li>li>Multimodal (e.g. images)/li>/ol> /div>!-- .entry-content --> footer classentry-footer> div classentry-meta> span classbyline> a hrefhttps://groveronline.com/author/asgrover/ titlePosts by agrover relauthor>agrover/a> /span> span classcat-links> a hrefhttps://groveronline.com/category/uncategorized/ relcategory tag>Uncategorized/a> /span>!-- .cat-links --> span classcomments-link>a hrefhttps://groveronline.com/2025/08/26/local-llms-and-ollama/#respond>Leave a comment/a>/span>!-- .comments-link --> span classpublished-on> a hrefhttps://groveronline.com/2025/08/26/local-llms-and-ollama/ relbookmark>time classentry-date published datetime2025-08-26T00:37:10-07:00>August 26, 2025/time>time classupdated datetime2025-08-26T00:38:23-07:00>August 26, 2025/time>/a> /span> span classword-count>4 Minutes/span> /div>!-- .entry-meta --> /footer>!-- .entry-footer -->/article>!-- #post-## --> article idpost-605 classpost-605 post type-post status-publish format-standard hentry category-blog tag-efi tag-fedora tag-grub2 tag-linux tag-lvm tag-swap> header classentry-header> h1 classentry-title>a hrefhttps://groveronline.com/2020/10/30/upgrading-to-fedora-33-removing-your-old-swap-file-on-efi-machine/ relbookmark>Upgrading to Fedora 33: Removing Your Old Swap File on EFI Machine/a>/h1> /header>!-- .entry-header --> div classentry-content> p classwp-block-paragraph>Fedora 33 adds a compressed-memory-based swap device using a hrefhttps://en.wikipedia.org/wiki/Zram>zram/a>. Cool! Now you can remove your old swap device, if you were a curmudgeon like me and even had one in the first place./p>p classwp-block-paragraph>If you are NOT on an EFI system or not using LVM, be aware of this and make changes to these steps as needed. (Specifically, the path given in step 6 will be different.)/p>ol classwp-block-list>li>After upgrading to Fedora 33, run code>free/code>. Notice that swap size is the sum of the 4G zram device plus your previous disk-based swap device. Try code>zramctl/code> and code>lsblk/code> commands for more info./li>li>Stop swapping to the swap device we’re about to remove. If using LVM, expect the VG and LV names to be different.br>code>swapoff /dev/vg0/swap/code>/li>li>If LVM, remove the no-longer-needed logical volume.br>code>lvremove /dev/vg0/swap/code>/li>li>Edit code>/etc/fstab/code> and remove (or comment out) the line for your swap device./li>li>Edit code>/etc/default/grub/code>.br>In the code>GRUB_CMDLINE_LINUX/code> line, remove the “resume” part referring to the now-gone swap partition, and the code>rd.lvm.lv/code>” part that also refers to it./li>li>Apply above changes to actual GRUB configuration:br>code>grub2-mkconfig -o /boot/efi/EFI/fedora/grub.cfg/code>/li>/ol>p classwp-block-paragraph>Reboot and your system should come back up. Enjoy using that reclaimed disk space for more useful things — it’s now unused space in the LVM volume group. If you want to actually use it, look into code>lvextend/code>, and also code>resize2fs/code> or code>xfs_growfs/code>./p> /div>!-- .entry-content --> footer classentry-footer> div classentry-meta> span classbyline> a hrefhttps://groveronline.com/author/asgrover/ titlePosts by agrover relauthor>agrover/a> /span> span classcat-links> a hrefhttps://groveronline.com/category/blog/ relcategory tag>Blog/a> /span>!-- .cat-links --> span classcomments-link>a hrefhttps://groveronline.com/2020/10/30/upgrading-to-fedora-33-removing-your-old-swap-file-on-efi-machine/#comments>4 Comments/a>/span>!-- .comments-link --> span classpublished-on> a hrefhttps://groveronline.com/2020/10/30/upgrading-to-fedora-33-removing-your-old-swap-file-on-efi-machine/ relbookmark>time classentry-date published datetime2020-10-30T12:01:45-07:00>October 30, 2020/time>time classupdated datetime2020-12-12T10:39:05-08:00>December 12, 2020/time>/a> /span> span classword-count>1 Minute/span> /div>!-- .entry-meta --> /footer>!-- .entry-footer -->/article>!-- #post-## --> article idpost-600 classpost-600 post type-post status-publish format-standard has-post-thumbnail hentry category-blog tag-development tag-fedora tag-linux tag-rust tag-storage tag-stratis> header classentry-header> h1 classentry-title>a hrefhttps://groveronline.com/2018/10/04/stratis-1-0-released/ relbookmark>Stratis 1.0 released!/a>/h1> /header>!-- .entry-header --> div classpost-image-link>a relbookmark hrefhttps://groveronline.com/2018/10/04/stratis-1-0-released/>img width676 height410 srchttps://groveronline.com/wp-content/uploads/2023/10/65cc1-stratis_cmyk_grey.jpg?w676 classattachment-independent-publisher-2-full-width size-independent-publisher-2-full-width wp-post-image alt decodingasync loadinglazy srcsethttps://groveronline.com/wp-content/uploads/2023/10/65cc1-stratis_cmyk_grey.jpg 676w, https://groveronline.com/wp-content/uploads/2023/10/65cc1-stratis_cmyk_grey.jpg?w150 150w, https://groveronline.com/wp-content/uploads/2023/10/65cc1-stratis_cmyk_grey.jpg?w300 300w sizes(max-width: 676px) 100vw, 676px data-attachment-id578 data-permalinkhttps://groveronline.com/?attachment_id578 data-orig-filehttps://groveronline.com/wp-content/uploads/2023/10/65cc1-stratis_cmyk_grey.jpg data-orig-size676,410 data-comments-opened1 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-titlestratis_CMYK_grey data-image-description data-image-caption data-medium-filehttps://groveronline.com/wp-content/uploads/2023/10/65cc1-stratis_cmyk_grey.jpg?w300 data-large-filehttps://groveronline.com/wp-content/uploads/2023/10/65cc1-stratis_cmyk_grey.jpg?w676 />/a>/div>!-- .post-image-link --> div classentry-content> p>a hrefhttps://stratis-storage.github.io/relnotes/relnotes-1.0.html>We just tagged Stratis 1.0/a>./p>p>I can’t believe I haven’t blogged about Stratis before, although I’ve a hrefhttps://opensource.com/article/18/4/stratis-easy-use-local-storage-management-linux>written/a> a hrefhttps://opensource.com/article/18/4/stratis-lessons-learned>in/a> a hrefhttps://opensource.com/article/18/5/stratis-storage-linux-command-line>other/a> a hrefhttps://lwn.net/Articles/755454/>places/a> about it. We’ve been working on it for two years./p>p>Basically, it’s a fancy manager of device-mapper and XFS configuration, to provide a similar experience as ZFS and Btrfs, but completely different under the hood./p>h5>Four things that took the most development time (so far)/h5>ol>li>Writing the a hrefhttps://stratis-storage.github.io/StratisSoftwareDesign.pdf>design doc/a>. Early on, much of the work was convincing people the approach we wanted was a good one. We spent a lot of time discussing details among ourselves and winning over internal stakeholders (or not), but most of all, showing that we had given serious thought to various alternatives, and had spent some time to comprehend the consequences of initial design choices. Having the design doc made these discussions easier, and solicited feedback that resulted in a much better design than what we started with./li>li>Implementing on-disk metadata formats and algorithms to protect maximally against corruption and over-write. People said it would take more time than we thought and they…weren’t wrong! I still think implementing this was the right call, however./li>li>The hordes of range lists Stratis manages internally. It was probably inevitable that using multiple device-mapper layers involves a lot of range mapping. Stratis does a lot of it now, and it will be doing way more in the future, once we start using DM devices like integrity, raid, and compression. Rust really came through for us here I think. Rust’s functional aspects work very well for things like mapping and allocating./li>li>The D-Bus interface was a big effort in the pre-0.5 timeframe, but now that it is up and running it’s easy to maintain and update. We owe much of this to the quality of the a hrefhttps://github.com/diwic/dbus-rs>dbus-rs/a> library, and the receptivity of its author, a hrefhttps://github.com/diwic>diwic/a>, to help us understand how to use it, and also helping to add small bits that aided our usage of D-Bus./li>/ol>h5>People to thank/h5>p>Thanks to a hrefhttps://github.com/ignatenkobrain>Igor Gnatenko/a> and a hrefhttps://github.com/cuviper>Josh Stone/a>, two people who played a large part in making Rust on Fedora a reality. When I started writing the prototype for Stratis, this was a big question mark! I just hoped that the value of Rust would ensure that sooner or later Rust would be supported on Fedora and RHEL, and thanks to these two (and others, and, oh, you know, Firefox needing it…) it worked out./p>p>I’d also like to thank the a hrefhttps://www.rust-lang.org/en-US/community.html>Rust community/a>, for making such a compelling, productive systems language through friendliness and respect, sweating the details, and sharing! Like I alluded to before, Rust’s functional style was a good match for our problem space, and Rust’s intense focus on error handling also was perfect for a critical piece of software like stratisd, where what to do about errors is the most important part of what it does./p>p>Finally, I’d like to thank the other members of the Stratis core team: a hrefhttps://github.com/trgill>Todd/a>, a hrefhttps://github.com/mulkieran>Mulhern/a>, and a hrefhttps://github.com/tasleson>Tony/a>. Stratis 1.0 is immeasurably better because of the different backgrounds and strengths we each brought to bear on developing this new piece of software. Thanks, everybody. You made 1.0 happen./p>h5>The Future/h5>p>The 1.0 release marks the end of the beginning, so to speak. We just left the Shire, Frodo! Stratis is a viable product, but there’s so much more to do. Integrating more high-value device-mapper layers, more integration with other storage APIs (both “above” and “below”), more flexibility around adding and removing storage devices, while keeping the UI clean and the admin work low, is the challenge./p>p>Stratis is going to need some major help to get there. For people interested in doing development, testing, packaging, or using Stratis, I invite you to visit our a hrefhttps://stratis-storage.github.io/>website/a> and a hrefhttps://github.com/stratis-storage/stratisd>GitHub/a>, or just keep tabs by following the project on a hrefhttps://plus.google.com/114927487029202093990>Google Plus/a> or a hrefhttps://twitter.com/StratisStorage>Twitter/a>./p> /div>!-- .entry-content --> footer classentry-footer> div classentry-meta> span classbyline> a hrefhttps://groveronline.com/author/asgrover/ titlePosts by agrover relauthor>agrover/a> /span> span classcat-links> a hrefhttps://groveronline.com/category/blog/ relcategory tag>Blog/a> /span>!-- .cat-links --> span classcomments-link>a hrefhttps://groveronline.com/2018/10/04/stratis-1-0-released/#comments>5 Comments/a>/span>!-- .comments-link --> span classpublished-on> a hrefhttps://groveronline.com/2018/10/04/stratis-1-0-released/ relbookmark>time classentry-date published updated datetime2018-10-04T15:44:57-07:00>October 4, 2018/time>/a> /span> span classword-count>3 Minutes/span> /div>!-- .entry-meta --> /footer>!-- .entry-footer -->/article>!-- #post-## --> article idpost-568 classpost-568 post type-post status-publish format-standard hentry category-blog tag-devicemapper tag-froyo tag-linux tag-rust tag-storage> header classentry-header> h1 classentry-title>a hrefhttps://groveronline.com/2016/07/20/recording-from-my-talk-on-rust-features-used-by-froyo/ relbookmark>Recording from my talk on Rust features used by Froyo/a>/h1> /header>!-- .entry-header --> div classentry-content> p>I spoke at PDXRust this month. A recording of the talk is available a hrefhttps://archive.org/details/PdxrustJuly2016AndyGroverOnFroyo>here/a>./p> /div>!-- .entry-content --> footer classentry-footer> div classentry-meta> span classbyline> a hrefhttps://groveronline.com/author/asgrover/ titlePosts by agrover relauthor>agrover/a> /span> span classcat-links> a hrefhttps://groveronline.com/category/blog/ relcategory tag>Blog/a> /span>!-- .cat-links --> span classcomments-link>a hrefhttps://groveronline.com/2016/07/20/recording-from-my-talk-on-rust-features-used-by-froyo/#comments>1 Comment/a>/span>!-- .comments-link --> span classpublished-on> a hrefhttps://groveronline.com/2016/07/20/recording-from-my-talk-on-rust-features-used-by-froyo/ relbookmark>time classentry-date published updated datetime2016-07-20T11:28:34-07:00>July 20, 2016/time>/a> /span> span classword-count>1 Minute/span> /div>!-- .entry-meta --> /footer>!-- .entry-footer -->/article>!-- #post-## --> article idpost-555 classpost-555 post type-post status-publish format-standard hentry category-blog tag-linux tag-programming tag-rust> header classentry-header> h1 classentry-title>a hrefhttps://groveronline.com/2016/06/10/why-rust-for-low-level-linux-programming/ relbookmark>Why Rust for Low-level Linux programming?/a>/h1> /header>!-- .entry-header --> div classentry-content> p>I think a hrefhttps://www.rust-lang.org/>Rust/a> is extremely well-suited for low level Linux systems userspace programming — daemons, services, command-line tools, that sort of thing./p>p>Low-level userspace code on Linux is almost universally written in C — until one gets to a certain point where it’s acceptable for Python to be used. Undoubtedly this springs from Linux’s GNU & Unix heritage, but there are also many recent and Linux-specific pieces that are written in C. I think Rust is a better choice for new projects, and here’s why./p>h5>Coding is challenging because of mental context-keeping/h5>p>Coding is hard and distractions are bad because of how much context the developer needs to keep straight as they look at the code. Buffers allocated, locks taken, local variables — these all create little mental things that I need to remember if I’m going to understand a chunk of code, and fix or improve it. Why have proper indentation? Because it helps us keep things straight in our heads. Why keep functions short? Same reason./p>p>Rust reduces the amount of state I need to keep track of in my brain. It checks things that before I depended on myself to check. It gives me tools to express what I want in fewer lines, but still allows maximum control when needed. The same functionality with less code, and checks to ensure it’s em>better/em> code, these make me more productive and introduce fewer bugs./p>h5>Strong types help the compiler help you/h5>p>Strong typing gives the compiler information it can use to spot errors. This is important as a program grows from a toy into a useful thing. Assumptions within the code change and strong typing check the assumptions so that each version of the program globally either uses the old, or the new assumptions, but not both./p>p>The key to this is being able to describe to the compiler the intended constraints of our code as clearly as possible./p>h5>Expressive types prevent needing type “escape hatches”/h5>p>One problem with weakly-typed languages is when you need to do something that the type system doesn’t quite let you describe. This leads to needing to use the language’s escape hatches, the “do what I mean!” outs, like casting, that let you do what you need to do, but also inherently create places where the compiler can’t help check things./p>p>Or, there may be ambiguity because a type serves two purposes, depending on the context. One example would be returning a pointer. Is NULL a “good” return value, or is it an error? The programmer needs to know based upon external information (docs), and the compiler can’t help by checking the return value is used properly. Or, say a function returns int. Usually a negative value is an error, but not always. And, negative values are nonzero so they evaluate as true in a conditional statement! It’s just…loose./p>p>Rust distinguishes between valid and error results much more explicitly. It has a richer type system with a hrefhttps://en.wikipedia.org/wiki/Tagged_union>sum types/a> like a hrefhttps://doc.rust-lang.org/std/option/enum.Option.html>Option/a> and a hrefhttps://doc.rust-lang.org/std/result/enum.Result.html>Result/a>. These eliminate using a single value for both error and success return cases, and let the compiler help the programmer get it right. A richer type system lets us avoid needing escapes./p>h5>Memory Safety, Lifetimes, and the Borrow Checker/h5>p>For me, this is another case where Rust is enabling the verification of something that C programmers learned painfully how to do right — or else. In C I’ve had functions that “borrowed” a pointer versus ones that “took ownership”, but this was not enforced in the language, only documented in the occasional comment above the function that it had one behavior or the other. So for me it was like “duh”, yeah, we notate this, have terms that express what’s happening, and the compiler can check it. Having to use ref-counting or garbage collection is great but for most cases it’s not strictly needed. And if we do need it, a hrefhttps://doc.rust-lang.org/std/rc/struct.Rc.html>it’s available/a>./p>h5>Cargo and Libraries/h5>p>Cargo makes using libraries easy. Easy libraries mean your program can focus more on doing its thing, and in turn make it easier for others to use what you provide. Efficient use of libraries reduce duplicated work and keep lines of code down./p>h5>Functional Code, Functional thinking/h5>p>I like iterators and methods like map, filter, zip, and chain because they make it easier to break down what I’m doing to a sequence into easier to understand fundamental steps, and also make it easier for other coders to understand the code’s intent./p>h5>Rewrite everything?/h5>p>It’s starting to be a cliche. Let’s rewrite everything in Rust! OpenSSL, Tor, the kernel, the browser. Wheeee! Of course this isn’t realistic, but why do people exposed to Rust keep thinking things would be better off in Rust?/p>p>I think for two reasons, each from a different group. First, from coders coming from Python, Ruby, and JavaScript, Rust offers some of the higher-level conveniences and productivity they expect. They’re familiar with Rust development model and its Cargo-based, GitHub-powered ecosystem. Types and the borrow checker are a learning curve for them, but the result is blazingly fast code, and the ability to do systems-level things, like calling ioctls, in which a C extension would’ve been called for — but these people don’t want to learn C. These people might call for a rewrite in Rust because it brings that component into the realm of things they can hack on./p>p>Second, there are people like me, people working in C and Python on Linux systems-level stuff — the “plumbing”, who are frustrated with low productivity. C and Python have diametrically-opposed advantages and disadvantages. C is fast to run but slow to write, and hard to write securely. Python is more productive but too slow and RAM-hungry for something running all the time, on every system. We must deal with getting C components to talk to Python components all the time, and it isn’t fun. Rust is the first language that gives a system programmer performance em>and/em> productivity. These people might see Rust as a chance to increase security, to increase their own productivity, to never have to touch libtool/autoconf ever again, and to solve the C/Python dilemma with a one language solution./p>h5>Incremental Evolution of the Linux Platform/h5>p>Fun to think about for a coder, but then, what, now we have C, Python, AND Rust that need to interact? “If only everything were Rust… and it would be so easy… how hard could it be?” 🙂 Even in Rust, a huge, not-terribly-fun task. I think Rust has great promise, but success lies in incremental evolution of the Linux platform. We’ve seen service consolidation in systemd and the idea of Linux as a platform distinct from Unix. We have a very useful language-agnostic IPC mechanism — DBus — that gives us more freedom to link things written in new languages. I’m hopeful Rust can find places it can be useful as Linux gains new capabilities, and then perhaps converting existing components may happen as maintainers gain exposure and experience with Rust, and recognize its virtues./p>h5>The Future/h5>p>Rust is not standing still. Recent developments like native debugging support in GDB, and the ongoing MIR work, show that Rust will become even better over time. But don’t wait. Rust can be used to rapidly develop high-quality programs em>today/em>. Learning Rust can benefit you now, and also yield dividends as Rust and its ecosystem continue to improve./p> /div>!-- .entry-content --> footer classentry-footer> div classentry-meta> span classbyline> a hrefhttps://groveronline.com/author/asgrover/ titlePosts by agrover relauthor>agrover/a> /span> span classcat-links> a hrefhttps://groveronline.com/category/blog/ relcategory tag>Blog/a> /span>!-- .cat-links --> span classcomments-link>a hrefhttps://groveronline.com/2016/06/10/why-rust-for-low-level-linux-programming/#comments>33 Comments/a>/span>!-- .comments-link --> span classpublished-on> a hrefhttps://groveronline.com/2016/06/10/why-rust-for-low-level-linux-programming/ relbookmark>time classentry-date published datetime2016-06-10T09:00:58-07:00>June 10, 2016/time>time classupdated datetime2016-06-10T12:30:02-07:00>June 10, 2016/time>/a> /span> span classword-count>5 Minutes/span> /div>!-- .entry-meta --> /footer>!-- .entry-footer -->/article>!-- #post-## --> article idpost-551 classpost-551 post type-post status-publish format-standard hentry category-blog tag-conservancy tag-copyleft tag-copyright tag-gpl tag-licenses tag-linux> header classentry-header> h1 classentry-title>a hrefhttps://groveronline.com/2016/02/27/im-part-of-sfconservancys-gpl-compliance-project-for-linux/ relbookmark>I’m Part of SFConservancy’s GPL Compliance Project for Linux/a>/h1> /header>!-- .entry-header --> div classentry-content> p>I believe GPL enforcement in general, and specifically around the Linux kernel, is a good thing. Because of this, I am one of the Linux copyright holders who has signed an agreement for the a hrefhttps://sfconservancy.org/>Software Freedom Conservancy/a> to enforce the GPL on my behalf. I’m also a financial supporter of Conservancy./p>p>That I hold any copyright at all to the work I’ve done is actually somewhat surprising. Usually one of the documents you sign when beginning employment at a company is agreeing that the company has ownership of work you do for them, and even things you create off-hours. Fair enough. But, a hrefhttp://www.redhat.com>my current employer/a> does not do this. Its agreement lets its employees retain individual copyright to their work for open source development projects. I haven’t checked, but I suspect the agreement I signed with my less-steeped-in-F/OSS a hrefhttp://www.intel.com>previous/a> a hrefhttp://www.oracle.com>employers/a> did not./p>p>It’s something to ask about when considering accepting a new position./p>p>I consider myself an idealist, but not a zealot. For projects I’ve started, I’ve used MIT, a hrefhttps://www.gnu.org/licenses/agpl.txt>AGPLv3/a>, a hrefhttps://www.mozilla.org/en-US/MPL/2.0/>MPLv2/a>, GPLv2, GPLv3, LGPLv2, and a hrefhttp://www.apache.org/licenses/LICENSE-2.0>Apache 2.0/a> licenses, based on the individual circumstances./p>p>I believe if you’re going to build upon someone else’s work, it’s only fair to honor the rules they have set — the license — that allow it. Everyone isn’t doing that now with Linux, and are using the ambiguity over what is a “derived work” as a fig leaf. Enforcing the GPL is the only way to ensure the intent of the license is honored. We’ll also hopefully eventually gain some clarity on exactly what constitutes a derived work from the courts./p>p>a hrefhttps://sfconservancy.org/supporter/>Please consider becoming a Conservancy Supporter./a>/p> /div>!-- .entry-content --> footer classentry-footer> div classentry-meta> span classbyline> a hrefhttps://groveronline.com/author/asgrover/ titlePosts by agrover relauthor>agrover/a> /span> span classcat-links> a hrefhttps://groveronline.com/category/blog/ relcategory tag>Blog/a> /span>!-- .cat-links --> span classcomments-link>a hrefhttps://groveronline.com/2016/02/27/im-part-of-sfconservancys-gpl-compliance-project-for-linux/#comments>1 Comment/a>/span>!-- .comments-link --> span classpublished-on> a hrefhttps://groveronline.com/2016/02/27/im-part-of-sfconservancys-gpl-compliance-project-for-linux/ relbookmark>time classentry-date published updated datetime2016-02-27T18:29:55-08:00>February 27, 2016/time>/a> /span> span classword-count>1 Minute/span> /div>!-- .entry-meta --> /footer>!-- .entry-footer -->/article>!-- #post-## --> article idpost-542 classpost-542 post type-post status-publish format-standard hentry category-blog tag-fedora tag-isns tag-linux tag-lio tag-storage> header classentry-header> h1 classentry-title>a hrefhttps://groveronline.com/2015/10/21/isns-support-coming-soon-for-lio-in-fedora/ relbookmark>iSNS support coming soon for LIO in Fedora/a>/h1> /header>!-- .entry-header --> div classentry-content> p>a hrefhttps://github.com/cvubrugier/target-isns>target-isns/a> recently was added to Rawhide, and will be in a future Fedora release. This add-on to LIO allows it to register with an iSNS server, which potential initiators can then query for available targets. (On Fedora, see code>isns-utils/code> for both the server, and client query tools.) This removes one of the few remaining areas that other target implementations have been ahead of LIO./p>p>Kudos and thanks to span classvcard-fullname>a hrefhttps://github.com/cvubrugier>Christophe Vu-Brugier/a> for writing this useful program!/span>/p> /div>!-- .entry-content --> footer classentry-footer> div classentry-meta> span classbyline> a hrefhttps://groveronline.com/author/asgrover/ titlePosts by agrover relauthor>agrover/a> /span> span classcat-links> a hrefhttps://groveronline.com/category/blog/ relcategory tag>Blog/a> /span>!-- .cat-links --> span classcomments-link>a hrefhttps://groveronline.com/2015/10/21/isns-support-coming-soon-for-lio-in-fedora/#respond>Leave a comment/a>/span>!-- .comments-link --> span classpublished-on> a hrefhttps://groveronline.com/2015/10/21/isns-support-coming-soon-for-lio-in-fedora/ relbookmark>time classentry-date published updated datetime2015-10-21T17:29:41-07:00>October 21, 2015/time>/a> /span> span classword-count>1 Minute/span> /div>!-- .entry-meta --> /footer>!-- .entry-footer -->/article>!-- #post-## --> article idpost-536 classpost-536 post type-post status-publish format-standard hentry category-blog tag-development tag-gluster tag-linux tag-lio tag-rtslib tag-storage tag-targetcli tag-tcmu-runner> header classentry-header> h1 classentry-title>a hrefhttps://groveronline.com/2015/10/21/targetcli-tcmu-questions/ relbookmark>Some targetcli and TCMU questions/a>/h1> /header>!-- .entry-header --> div classentry-content> p dirltr>Just got an email full of interesting questions, I hope the author will be ok with me answering them here so future searches will see them:/p>blockquote>p>I searched on internet and I don’t find some relevant info about gluster api support via tcmu-runner. Can you tell me please if this support will be added to the stable redhat targetcli in the near future? And I want to know also which targetcli is recommended for setup (targetcli or targetcli-fb) and what is the status for targetcli-3.0./p>/blockquote>p dirltr>a hrefhttps://github.com/agrover/tcmu-runner>tcmu-runner/a> is a userspace daemon add-on to a hrefhttp://linux-iscsi.org/wiki/Main_Page>LIO/a> that allows requests for a device to be handled by a user process. tcmu-runner has early support for using glfs (via gfapi). Both tcmu-runner and its glfs plugin are beta-quality and will need further work before they are ready for stable Fedora, much less a RHEL release. tcmu-runner just landed in Rawhide, but this is really just to make it easier to test./p>p dirltr>RHEL & Fedora use targetcli-fb, which is a fork of targetcli, and what I work on. Since I’m working on both tcmu-runner and targetcli-fb, targetcli-fb will see TCMU support very early./p>p dirltr>The -fb packages I maintain switched to a “fbXX” version scheme, so I think you must be referring to the other one 🙂 I don’t have any info about the RTS/Datera targetcli’s status, other than nobody likes having two versions, the targetcli maintainer and I have discussed unifying them into a common version, but the un-fun work of merging them has not happened yet./p> /div>!-- .entry-content --> footer classentry-footer> div classentry-meta> span classbyline> a hrefhttps://groveronline.com/author/asgrover/ titlePosts by agrover relauthor>agrover/a> /span> span classcat-links> a hrefhttps://groveronline.com/category/blog/ relcategory tag>Blog/a> /span>!-- .cat-links --> span classcomments-link>a hrefhttps://groveronline.com/2015/10/21/targetcli-tcmu-questions/#comments>2 Comments/a>/span>!-- .comments-link --> span classpublished-on> a hrefhttps://groveronline.com/2015/10/21/targetcli-tcmu-questions/ relbookmark>time classentry-date published datetime2015-10-21T14:58:47-07:00>October 21, 2015/time>time classupdated datetime2015-10-21T16:27:29-07:00>October 21, 2015/time>/a> /span> span classword-count>1 Minute/span> /div>!-- .entry-meta --> /footer>!-- .entry-footer -->/article>!-- #post-## --> article idpost-528 classpost-528 post type-post status-publish format-standard hentry category-blog tag-kernel tag-linux tag-lio tag-rhel tag-storage> header classentry-header> h1 classentry-title>a hrefhttps://groveronline.com/2015/09/04/rhel-7-2-has-an-updated-kernel-target/ relbookmark>RHEL 7.2 has an updated kernel target/a>/h1> /header>!-- .entry-header --> div classentry-content> p>As mentioned in the beta release notes, the kernel in RHEL 7.2 contains a rebased LIO kernel target, to the equivalent of the Linux 4.0.stable series./p>p>This is a big update. LIO has improved greatly since 3.10. It has added support for SCSI features that enable VMWare VAAI support, as well as data integrity (DIF), and significant iSER work, for those of you using Infiniband. (SRP is also supported, as well as iSCSI and FCoE, of course.)/p>p>Note that we still do not ship support for the Fibre Channel qla2xxx fabric. It still seems to be something storage vendors and integrators want, more than a feature our customers are telling us they want in RHEL./p>p>(On a side note, Infiniband hardware is pretty affordable these days! For all you datacenter hobbyists who have a rack in the garage, I might suggest a cheap previous-gen IB setup and either SRP or iSER as the way to go and still get really high IOPs.)/p>p>Users of RHEL 7’s SCSI target should find RHEL 7.2 to be a very nice upgrade. Please try the beta out and report any issues you find of course, but it’s looking really good so far./p> /div>!-- .entry-content --> footer classentry-footer> div classentry-meta> span classbyline> a hrefhttps://groveronline.com/author/asgrover/ titlePosts by agrover relauthor>agrover/a> /span> span classcat-links> a hrefhttps://groveronline.com/category/blog/ relcategory tag>Blog/a> /span>!-- .cat-links --> span classcomments-link>a hrefhttps://groveronline.com/2015/09/04/rhel-7-2-has-an-updated-kernel-target/#respond>Leave a comment/a>/span>!-- .comments-link --> span classpublished-on> a hrefhttps://groveronline.com/2015/09/04/rhel-7-2-has-an-updated-kernel-target/ relbookmark>time classentry-date published datetime2015-09-04T14:50:17-07:00>September 4, 2015/time>time classupdated datetime2015-09-04T14:54:28-07:00>September 4, 2015/time>/a> /span> span classword-count>1 Minute/span> /div>!-- .entry-meta --> /footer>!-- .entry-footer -->/article>!-- #post-## --> nav classnavigation posts-navigation aria-labelPosts> h2 classscreen-reader-text>Posts navigation/h2> div classnav-links>div classnav-previous>a hrefhttps://groveronline.com/page/2/ >Older posts/a>/div>/div> /nav> /main>!-- #main --> /div>!-- #primary -->div idsecondary classwidget-area rolecomplementary> aside idblock-8 classwidget widget_block>ul classwp-block-page-list>li classwp-block-pages-list__item>a classwp-block-pages-list__item__link hrefhttps://groveronline.com/hacks/>Old Hacks/a>/li>li classwp-block-pages-list__item>a classwp-block-pages-list__item__link hrefhttps://groveronline.com/music/>Old Music/a>/li>/ul>/aside>aside idblock-11 classwidget widget_block>ul classwp-block-list>li classhas-medium-font-size>a hrefhttps://www.listful.com/agrover/list/wishlist-0ac5183e?collectionId28d12eea-bbff-401e-8a35-8b18f081eb6c&listsOfagrover>em>Andy Gift Wishlist/em>/a>/li>li>a hrefhttp://JEN - https://www.listful.com/jenredpdx/list/jennifers-wishlist-eb5ed793 ANDY - https://www.listful.com/agrover/list/wishlist-0ac5183e>em>Jen Gift Wishlist/em>/a>/li>/ul>/aside>aside idblock-10 classwidget widget_block>figure classwp-block-embed is-type-rich is-provider-soundcloud wp-block-embed-soundcloud wp-embed-aspect-4-3 wp-has-aspect-ratio>div classwp-block-embed__wrapper>div classembed-soundcloud>iframe titleAGRO width1100 height450 scrollingno frameborderno srchttps://w.soundcloud.com/player/?visualtrue&urlhttps%3A%2F%2Fapi.soundcloud.com%2Fusers%2F10776017&show_artworktrue&maxheight1000&maxwidth1100>/iframe>/div>/div>/figure>/aside>aside idblock-2 classwidget widget_block widget_tag_cloud>p classwp-block-tag-cloud>a hrefhttps://groveronline.com/tag/ableton/ classtag-cloud-link tag-link-336507 tag-link-position-1 stylefont-size: 10.172413793103pt; aria-labelableton (2 items)>ableton/a>a hrefhttps://groveronline.com/tag/ac3/ classtag-cloud-link tag-link-299998 tag-link-position-2 stylefont-size: 8pt; aria-labelac3 (1 item)>ac3/a>a hrefhttps://groveronline.com/tag/ai/ classtag-cloud-link tag-link-14067 tag-link-position-3 stylefont-size: 10.172413793103pt; aria-labelai (2 items)>ai/a>a hrefhttps://groveronline.com/tag/apis/ classtag-cloud-link tag-link-40428 tag-link-position-4 stylefont-size: 12.827586206897pt; aria-labelAPIs (4 items)>APIs/a>a hrefhttps://groveronline.com/tag/architect/ classtag-cloud-link tag-link-11627 tag-link-position-5 stylefont-size: 8pt; aria-labelArchitect (1 item)>Architect/a>a hrefhttps://groveronline.com/tag/bash/ classtag-cloud-link tag-link-2674 tag-link-position-6 stylefont-size: 8pt; aria-labelbash (1 item)>bash/a>a hrefhttps://groveronline.com/tag/bass/ classtag-cloud-link tag-link-33809 tag-link-position-7 stylefont-size: 8pt; aria-labelbass (1 item)>bass/a>a hrefhttps://groveronline.com/tag/benro/ classtag-cloud-link tag-link-6019611 tag-link-position-8 stylefont-size: 8pt; aria-labelbenro (1 item)>benro/a>a hrefhttps://groveronline.com/tag/blackmagic/ classtag-cloud-link tag-link-1723629 tag-link-position-9 stylefont-size: 8pt; aria-labelblackmagic (1 item)>blackmagic/a>a hrefhttps://groveronline.com/tag/broken/ classtag-cloud-link tag-link-27669 tag-link-position-10 stylefont-size: 8pt; aria-labelbroken (1 item)>broken/a>a hrefhttps://groveronline.com/tag/campaign-reform/ classtag-cloud-link tag-link-365646 tag-link-position-11 stylefont-size: 8pt; aria-labelcampaign reform (1 item)>campaign reform/a>a hrefhttps://groveronline.com/tag/commercial/ classtag-cloud-link tag-link-2174 tag-link-position-12 stylefont-size: 8pt; aria-labelcommercial (1 item)>commercial/a>a hrefhttps://groveronline.com/tag/conservancy/ classtag-cloud-link tag-link-204404 tag-link-position-13 stylefont-size: 8pt; aria-labelconservancy (1 item)>conservancy/a>a hrefhttps://groveronline.com/tag/copyleft/ classtag-cloud-link tag-link-45138 tag-link-position-14 stylefont-size: 8pt; aria-labelcopyleft (1 item)>copyleft/a>a hrefhttps://groveronline.com/tag/copyright/ classtag-cloud-link tag-link-9386 tag-link-position-15 stylefont-size: 8pt; aria-labelcopyright (1 item)>copyright/a>a hrefhttps://groveronline.com/tag/creative/ classtag-cloud-link tag-link-6263 tag-link-position-16 stylefont-size: 8pt; aria-labelcreative (1 item)>creative/a>a hrefhttps://groveronline.com/tag/demo/ classtag-cloud-link tag-link-3186 tag-link-position-17 stylefont-size: 8pt; aria-labeldemo (1 item)>demo/a>a hrefhttps://groveronline.com/tag/development/ classtag-cloud-link tag-link-780 tag-link-position-18 stylefont-size: 12.827586206897pt; aria-labeldevelopment (4 items)>development/a>a hrefhttps://groveronline.com/tag/devicemapper/ classtag-cloud-link tag-link-311264964 tag-link-position-19 stylefont-size: 8pt; aria-labeldevicemapper (1 item)>devicemapper/a>a hrefhttps://groveronline.com/tag/devops/ classtag-cloud-link tag-link-28070474 tag-link-position-20 stylefont-size: 8pt; aria-labeldevops (1 item)>devops/a>a hrefhttps://groveronline.com/tag/distributions/ classtag-cloud-link tag-link-37394 tag-link-position-21 stylefont-size: 8pt; aria-labeldistributions (1 item)>distributions/a>a hrefhttps://groveronline.com/tag/dvd/ classtag-cloud-link tag-link-1181 tag-link-position-22 stylefont-size: 8pt; aria-labeldvd (1 item)>dvd/a>a hrefhttps://groveronline.com/tag/efi/ classtag-cloud-link tag-link-322469 tag-link-position-23 stylefont-size: 8pt; aria-labelefi (1 item)>efi/a>a hrefhttps://groveronline.com/tag/emacs/ classtag-cloud-link tag-link-11362 tag-link-position-24 stylefont-size: 8pt; aria-labelemacs (1 item)>emacs/a>a hrefhttps://groveronline.com/tag/falsetto/ classtag-cloud-link tag-link-1874396 tag-link-position-25 stylefont-size: 8pt; aria-labelfalsetto (1 item)>falsetto/a>a hrefhttps://groveronline.com/tag/fedora/ classtag-cloud-link tag-link-611 tag-link-position-26 stylefont-size: 18.258620689655pt; aria-labelfedora (13 items)>fedora/a>a hrefhttps://groveronline.com/tag/froyo/ classtag-cloud-link tag-link-1748345 tag-link-position-27 stylefont-size: 8pt; aria-labelfroyo (1 item)>froyo/a>a hrefhttps://groveronline.com/tag/gluster/ classtag-cloud-link tag-link-3060687 tag-link-position-28 stylefont-size: 8pt; aria-labelgluster (1 item)>gluster/a>a hrefhttps://groveronline.com/tag/gnome/ classtag-cloud-link tag-link-870 tag-link-position-29 stylefont-size: 10.172413793103pt; aria-labelgnome (2 items)>gnome/a>a hrefhttps://groveronline.com/tag/kernel/ classtag-cloud-link tag-link-2428 tag-link-position-30 stylefont-size: 11.620689655172pt; aria-labelkernel (3 items)>kernel/a>a hrefhttps://groveronline.com/tag/kmod/ classtag-cloud-link tag-link-311959 tag-link-position-31 stylefont-size: 10.172413793103pt; aria-labelkmod (2 items)>kmod/a>a hrefhttps://groveronline.com/tag/libification/ classtag-cloud-link tag-link-765870275 tag-link-position-32 stylefont-size: 10.172413793103pt; aria-labellibification (2 items)>libification/a>a hrefhttps://groveronline.com/tag/linux/ classtag-cloud-link tag-link-610 tag-link-position-33 stylefont-size: 22pt; aria-labellinux (28 items)>linux/a>a hrefhttps://groveronline.com/tag/lio/ classtag-cloud-link tag-link-313572 tag-link-position-34 stylefont-size: 14.637931034483pt; aria-labellio (6 items)>lio/a>a hrefhttps://groveronline.com/tag/llm/ classtag-cloud-link tag-link-642672 tag-link-position-35 stylefont-size: 10.172413793103pt; aria-labelllm (2 items)>llm/a>a hrefhttps://groveronline.com/tag/lvm/ classtag-cloud-link tag-link-186680 tag-link-position-36 stylefont-size: 11.620689655172pt; aria-labellvm (3 items)>lvm/a>a hrefhttps://groveronline.com/tag/plumbers/ classtag-cloud-link tag-link-223857 tag-link-position-37 stylefont-size: 11.620689655172pt; aria-labelplumbers (3 items)>plumbers/a>a hrefhttps://groveronline.com/tag/python/ classtag-cloud-link tag-link-832 tag-link-position-38 stylefont-size: 15.241379310345pt; aria-labelpython (7 items)>python/a>a hrefhttps://groveronline.com/tag/rhel/ classtag-cloud-link tag-link-566306 tag-link-position-39 stylefont-size: 11.620689655172pt; aria-labelrhel (3 items)>rhel/a>a hrefhttps://groveronline.com/tag/rtslib/ classtag-cloud-link tag-link-765870277 tag-link-position-40 stylefont-size: 11.620689655172pt; aria-labelrtslib (3 items)>rtslib/a>a hrefhttps://groveronline.com/tag/rust/ classtag-cloud-link tag-link-185574 tag-link-position-41 stylefont-size: 11.620689655172pt; aria-labelrust (3 items)>rust/a>a hrefhttps://groveronline.com/tag/storage/ classtag-cloud-link tag-link-3386 tag-link-position-42 stylefont-size: 18.258620689655pt; aria-labelstorage (13 items)>storage/a>a hrefhttps://groveronline.com/tag/targetcli/ classtag-cloud-link tag-link-241101375 tag-link-position-43 stylefont-size: 14.637931034483pt; aria-labeltargetcli (6 items)>targetcli/a>a hrefhttps://groveronline.com/tag/targetd/ classtag-cloud-link tag-link-71557348 tag-link-position-44 stylefont-size: 12.827586206897pt; aria-labeltargetd (4 items)>targetd/a>a hrefhttps://groveronline.com/tag/tips/ classtag-cloud-link tag-link-1788 tag-link-position-45 stylefont-size: 10.172413793103pt; aria-labeltips (2 items)>tips/a>/p>/aside>aside idwpcom-goodreads-2 classwidget widget_goodreads>h1 classwidget-title>Goodreads/h1>div classjetpack-goodreads-legacy-widget gr_custom_widget idgr_custom_widget_146621021_read>/div>script srchttps://www.goodreads.com/review/custom_widget/146621021.Goodreads:%20read?cover_position&cover_sizesmall&num_books5&orderd&shelfread&sortdate_added&widget_bg_transparent&widget_id146621021_read>/script>/aside>/div>!-- #secondary --> /div>!-- #content --> footer idcolophon classsite-footer rolecontentinfo> div classsite-info> a hrefhttps://wordpress.com/?reffooter_blog relnofollow>Blog at WordPress.com./a> /div>!-- .site-info --> /footer>!-- #colophon --> /div>!-- #content-wrapper -->/div>!-- #page --> script typetext/javascript> var infiniteScroll {settings:{id:main,ajaxurl:https://groveronline.com/?infinityscrolling,type:scroll,wrapper:true,wrapper_class:infinite-wrap,footer:page,click_handle:1,text:Older posts,totop:Scroll back to top,currentday:04.09.15,order:DESC,scripts:,styles:,google_analytics:false,offset:1,history:{host:groveronline.com,path:/page/%d/,use_trailing_slashes:true,parameters:},query_args:{error:,m:,p:0,post_parent:,subpost:,subpost_id:,attachment:,attachment_id:0,name:,pagename:,page_id:0,second:,minute:,hour:,day:0,monthnum:0,year:0,w:0,category_name:,tag:,cat:,tag_id:,author:,author_name:,feed:,tb:,paged:0,meta_key:,meta_value:,preview:,s:,sentence:,title:,fields:all,menu_order:,embed:,category__in:,category__not_in:,category__and:,post__in:,post__not_in:,post_name__in:,tag__in:,tag__not_in:,tag__and:,tag_slug__in:,tag_slug__and:,post_parent__in:,post_parent__not_in:,author__in:,author__not_in:,search_columns:,lazy_load_term_meta:false,posts_per_page:10,ignore_sticky_posts:false,suppress_filters:false,cache_results:true,update_post_term_cache:true,update_menu_item_cache:false,update_post_meta_cache:true,post_type:,nopaging:false,comments_per_page:50,no_found_rows:false,order:DESC},query_before:2026-02-21 20:06:04,last_post_date:2015-09-04 14:50:17,body_class:infinite-scroll neverending,loading_text:Loading new page,stats:blog224428075\u0026vwpcom\u0026tz-8\u0026user_id0\u0026arch_home1\u0026subdgroveronline3\u0026x_pagetypeinfinite}}; /script> !-- -->script typespeculationrules>{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:arel~\nofollow\}},{not:{selector_matches:.no-prefetch, .no-prefetch a}}},eagerness:conservative}}/script>script typetext/javascript src//0.gravatar.com/js/hovercards/hovercards.min.js?ver202608924dcd77a86c6f1d3698ec27fc5da92b28585ddad3ee636c0397cf312193b2a1 idgrofiles-cards-js>/script>script typetext/javascript idwpgroho-js-extra>/* !CDATA */var WPGroHo {my_hash:};//# sourceURLwpgroho-js-extra/* > *//script>script crossoriginanonymous typetext/javascript src/wp-content/mu-plugins/gravatar-hovercards/wpgroho.js?m1610363240i>/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 styledisplay:none> div classgrofile-hash-map-4e16e9f7894203ddb1d05f5e9f059cc5> /div> /div> div idinfinite-footer> div classcontainer> div classblog-info> a idinfinity-blog-title hrefhttps://groveronline.com/ relhome> Groveronline /a> /div> div classblog-credits> a hrefhttps://wordpress.com/?reffooter_blog relnofollow>Blog at WordPress.com./a> /div> /div> /div>!-- #infinite-footer --> div idactionbar dirltr styledisplay: none; classactnbr-pub-independent-publisher-2 actnbr-has-follow actnbr-has-actions> ul> li classactnbr-btn actnbr-hidden> a classactnbr-action actnbr-actn-follow href> svg classgridicon height20 width20 xmlnshttp://www.w3.org/2000/svg viewBox0 0 20 20>path clip-ruleevenodd dm4 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-ruleevenodd>/path>/svg> span>Subscribe/span> /a> a classactnbr-action actnbr-actn-following no-display href> svg classgridicon height20 width20 xmlnshttp://www.w3.org/2000/svg viewBox0 0 20 20>path fill-ruleevenodd clip-ruleevenodd dM16 4.5H4V15C4 15.2761 4.22386 15.5 4.5 15.5H11.5V17H4.5C3.39543 17 2.5 16.1046 2.5 15V4.5V3H4H16H17.5V4.5V12.5H16V4.5ZM5.5 6.5H14.5V8H5.5V6.5ZM5.5 9.5H9.5V11H5.5V9.5ZM12 11H13V12H12V11ZM10.5 9.5H12H13H14.5V11V12V13.5H13H12H10.5V12V11V9.5ZM5.5 12H9.5V13.5H5.5V12Z fill#008A20>/path>path classfollowing-icon-tick dM13.5 16L15.5 18L19 14.5 stroke#008A20 stroke-width1.5>/path>/svg> span>Subscribed/span> /a> div classactnbr-popover tip tip-top-left actnbr-notice idfollow-bubble> div classtip-arrow>/div> div classtip-inner actnbr-follow-bubble> ul> li classactnbr-sitename> a hrefhttps://groveronline.com> img loadinglazy alt srchttps://s2.wp.com/i/logo/wpcom-gray-white.png?m1479929237i srcsethttps://s2.wp.com/i/logo/wpcom-gray-white.png 1x classavatar avatar-50 height50 width50 /> Groveronline /a> /li> div classactnbr-message no-display>/div> form methodpost actionhttps://subscribe.wordpress.com accept-charsetutf-8 styledisplay: none;> div> input typeemail nameemail placeholderEnter your email address classactnbr-email-field aria-labelEnter your email address /> /div> input typehidden nameaction valuesubscribe /> input typehidden nameblog_id value224428075 /> input typehidden namesource valuehttps://groveronline.com/ /> input typehidden namesub-type valueactionbar-follow /> input typehidden id_wpnonce name_wpnonce valueeb3fb58559 /> div classactnbr-button-wrap> button typesubmit valueSign me up> Sign me up /button> /div> /form> li classactnbr-login-nudge> div> Already have a WordPress.com account? a hrefhttps://wordpress.com/log-in?redirect_tohttps%3A%2F%2Fr-login.wordpress.com%2Fremote-login.php%3Faction%3Dlink%26back%3Dhttps%253A%252F%252Fgroveronline.com%252F2025%252F09%252F02%252Fconflicted-about-ai%252F>Log in now./a> /div> /li> /ul> /div> /div> /li> li classactnbr-ellipsis actnbr-hidden> svg classgridicon gridicons-ellipsis height24 width24 xmlnshttp://www.w3.org/2000/svg viewBox0 0 24 24>g>path dM7 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 classactnbr-popover tip tip-top-left actnbr-more> div classtip-arrow>/div> div classtip-inner> ul> li classactnbr-sitename> a hrefhttps://groveronline.com> img loadinglazy alt srchttps://s2.wp.com/i/logo/wpcom-gray-white.png?m1479929237i srcsethttps://s2.wp.com/i/logo/wpcom-gray-white.png 1x classavatar avatar-50 height50 width50 /> Groveronline /a> /li> li classactnbr-folded-follow> a classactnbr-action actnbr-actn-follow href> svg classgridicon height20 width20 xmlnshttp://www.w3.org/2000/svg viewBox0 0 20 20>path clip-ruleevenodd dm4 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-ruleevenodd>/path>/svg> span>Subscribe/span> /a> a classactnbr-action actnbr-actn-following no-display href> svg classgridicon height20 width20 xmlnshttp://www.w3.org/2000/svg viewBox0 0 20 20>path fill-ruleevenodd clip-ruleevenodd dM16 4.5H4V15C4 15.2761 4.22386 15.5 4.5 15.5H11.5V17H4.5C3.39543 17 2.5 16.1046 2.5 15V4.5V3H4H16H17.5V4.5V12.5H16V4.5ZM5.5 6.5H14.5V8H5.5V6.5ZM5.5 9.5H9.5V11H5.5V9.5ZM12 11H13V12H12V11ZM10.5 9.5H12H13H14.5V11V12V13.5H13H12H10.5V12V11V9.5ZM5.5 12H9.5V13.5H5.5V12Z fill#008A20>/path>path classfollowing-icon-tick dM13.5 16L15.5 18L19 14.5 stroke#008A20 stroke-width1.5>/path>/svg> span>Subscribed/span> /a> /li> li classactnbr-signup>a hrefhttps://wordpress.com/start/>Sign up/a>/li> li classactnbr-login>a hrefhttps://wordpress.com/log-in?redirect_tohttps%3A%2F%2Fr-login.wordpress.com%2Fremote-login.php%3Faction%3Dlink%26back%3Dhttps%253A%252F%252Fgroveronline.com%252F2025%252F09%252F02%252Fconflicted-about-ai%252F>Log in/a>/li> li classflb-report> a hrefhttps://wordpress.com/abuse/?report_urlhttps://groveronline.com target_blank relnoopener noreferrer> Report this content /a> /li> li classactnbr-reader> a hrefhttps://wordpress.com/reader/feeds/150038535> View site in Reader /a> /li> li classactnbr-subs> a hrefhttps://subscribe.wordpress.com/>Manage subscriptions/a> /li> li classactnbr-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?v20250116; 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?v20250204; document.body.appendChild( script );} );/script> div idjp-carousel-loading-overlay> div idjp-carousel-loading-wrapper> span idjp-carousel-library-loading> /span> /div> /div> div classjp-carousel-overlay styledisplay: none;> div classjp-carousel-container> !-- The Carousel Swiper --> div classjp-carousel-wrap swiper jp-carousel-swiper-container jp-carousel-transitions itemscope itemtypehttps://schema.org/ImageGallery> div classjp-carousel swiper-wrapper>/div> div classjp-swiper-button-prev swiper-button-prev> svg width25 height24 viewBox0 0 25 24 fillnone xmlnshttp://www.w3.org/2000/svg> mask idmaskPrev mask-typealpha maskUnitsuserSpaceOnUse x8 y6 width9 height12> path dM16.2072 16.59L11.6496 12L16.2072 7.41L14.8041 6L8.8335 12L14.8041 18L16.2072 16.59Z fillwhite/> /mask> g maskurl(#maskPrev)> rect x0.579102 width23.8823 height24 fill#FFFFFF/> /g> /svg> /div> div classjp-swiper-button-next swiper-button-next> svg width25 height24 viewBox0 0 25 24 fillnone xmlnshttp://www.w3.org/2000/svg> mask idmaskNext mask-typealpha maskUnitsuserSpaceOnUse x8 y6 width8 height12> path dM8.59814 16.59L13.1557 12L8.59814 7.41L10.0012 6L15.9718 12L10.0012 18L8.59814 16.59Z fillwhite/> /mask> g maskurl(#maskNext)> rect x0.34375 width23.8822 height24 fill#FFFFFF/> /g> /svg> /div> /div> !-- The main close buton --> div classjp-carousel-close-hint> svg width25 height24 viewBox0 0 25 24 fillnone xmlnshttp://www.w3.org/2000/svg> mask idmaskClose mask-typealpha maskUnitsuserSpaceOnUse x5 y5 width15 height14> path dM19.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 fillwhite/> /mask> g maskurl(#maskClose)> rect x0.409668 width23.8823 height24 fill#FFFFFF/> /g> /svg> /div> !-- Image info, comments and meta --> div classjp-carousel-info> div classjp-carousel-info-footer> div classjp-carousel-pagination-container> div classjp-swiper-pagination swiper-pagination>/div> div classjp-carousel-pagination>/div> /div> div classjp-carousel-photo-title-container> h2 classjp-carousel-photo-caption>/h2> /div> div classjp-carousel-photo-icons-container> a href# classjp-carousel-icon-btn jp-carousel-icon-info aria-labelToggle photo metadata visibility> span classjp-carousel-icon> svg width25 height24 viewBox0 0 25 24 fillnone xmlnshttp://www.w3.org/2000/svg> mask idmaskInfo mask-typealpha maskUnitsuserSpaceOnUse x2 y2 width21 height20> path fill-ruleevenodd clip-ruleevenodd dM12.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 fillwhite/> /mask> g maskurl(#maskInfo)> rect x0.8125 width23.8823 height24 fill#FFFFFF/> /g> /svg> /span> /a> a href# classjp-carousel-icon-btn jp-carousel-icon-comments aria-labelToggle photo comments visibility> span classjp-carousel-icon> svg width25 height24 viewBox0 0 25 24 fillnone xmlnshttp://www.w3.org/2000/svg> mask idmaskComments mask-typealpha maskUnitsuserSpaceOnUse x2 y2 width21 height20> path fill-ruleevenodd clip-ruleevenodd dM4.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 fillwhite/> /mask> g maskurl(#maskComments)> rect x0.34668 width23.8823 height24 fill#FFFFFF/> /g> /svg> span classjp-carousel-has-comments-indicator aria-labelThis image has comments.>/span> /span> /a> /div> /div> div classjp-carousel-info-extra> div classjp-carousel-info-content-wrapper> div classjp-carousel-photo-title-container> h2 classjp-carousel-photo-title>/h2> /div> div classjp-carousel-comments-wrapper> div idjp-carousel-comments-loading> span>Loading Comments.../span> /div> div classjp-carousel-comments>/div> div idjp-carousel-comment-form-container> span idjp-carousel-comment-form-spinner> /span> div idjp-carousel-comment-post-results>/div> form idjp-carousel-comment-form> label forjp-carousel-comment-form-comment-field classscreen-reader-text>Write a Comment.../label> textarea namecomment classjp-carousel-comment-form-field jp-carousel-comment-form-textarea idjp-carousel-comment-form-comment-field placeholderWrite a Comment... >/textarea> div idjp-carousel-comment-form-submit-and-info-wrapper> div idjp-carousel-comment-form-commenting-as> fieldset> label forjp-carousel-comment-form-email-field>Email (Required)/label> input typetext nameemail classjp-carousel-comment-form-field jp-carousel-comment-form-text-field idjp-carousel-comment-form-email-field /> /fieldset> fieldset> label forjp-carousel-comment-form-author-field>Name (Required)/label> input typetext nameauthor classjp-carousel-comment-form-field jp-carousel-comment-form-text-field idjp-carousel-comment-form-author-field /> /fieldset> fieldset> label forjp-carousel-comment-form-url-field>Website/label> input typetext nameurl classjp-carousel-comment-form-field jp-carousel-comment-form-text-field idjp-carousel-comment-form-url-field /> /fieldset> /div> input typesubmit namesubmit classjp-carousel-comment-form-button idjp-carousel-comment-form-button-submit valuePost Comment /> /div> /form> /div> /div> div classjp-carousel-image-meta> div classjp-carousel-title-and-caption> div classjp-carousel-photo-info> h3 classjp-carousel-caption itempropcaption description>/h3> /div> div classjp-carousel-photo-description>/div> /div> ul classjp-carousel-image-exif styledisplay: none;>/ul> a classjp-carousel-image-download href# target_blank styledisplay: none;> svg width25 height24 viewBox0 0 25 24 fillnone xmlnshttp://www.w3.org/2000/svg> mask idmask0 mask-typealpha maskUnitsuserSpaceOnUse x3 y3 width19 height18> path fill-ruleevenodd clip-ruleevenodd dM5.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 fillwhite/> /mask> g maskurl(#mask0)> rect x0.870605 width23.8823 height24 fill#FFFFFF/> /g> /svg> span classjp-carousel-download-text>/span> /a> div classjp-carousel-image-map styledisplay: none;>/div> /div> /div> /div> /div> /div> /div> script typetext/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_sharetrue + &v5; 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 typetext/javascript idjetpack-carousel-js-extra>/* !CDATA */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://groveronline.com/wp-admin/admin-ajax.php,nonce:e6f4f85a4b,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://groveronline3.wordpress.com/wp-login.php?redirect_tohttps%3A%2F%2Fgroveronline.com%2F2025%2F08%2F26%2Flocal-llms-and-ollama%2F,blog_id:224428075,meta_data:camera,aperture,shutter_speed,focal_length,copyright,stats_query_args:blog224428075&vwpcom&tz-8&user_id0&arch_home1&subdgroveronline3,is_public:1};//# sourceURLjetpack-carousel-js-extra/* > *//script>script crossoriginanonymous typetext/javascript src/_static/??-eJydkMEOgkAMRH/IUvGAXIyfYmApUNjtbuiu6N+LCRjjyXBp8pqZSWZwDmC8RJKILkGwqWNRHCiGyowro/Ne8MZisE5sG2RpWTgSqJm8tRs/M8eSDXrAr9TYkyPFkOpF1lCg5UiEhS1rTxOccFCU6s5dFdnv9OvIASzLCK03SaHlx46gd8OlEocIczDe/Ub8v5CpJp+U7Ee3PdaJru6Sn4u8LI95UQ4vq46RnQ>/script>script typetext/javascript src/wp-content/mu-plugins/jetpack-plugin/moon/_inc/build/tiled-gallery/tiled-gallery/tiled-gallery.min.js?m1755006225i&ver15.6-a.4 idtiled-gallery-js deferdefer data-wp-strategydefer>/script>script crossoriginanonymous typetext/javascript src/wp-content/mu-plugins/carousel-wpcom/carousel-wpcom.js?m1761899756i>/script>script idwp-emoji-settings typeapplication/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?m1764078722i&ver6.9.1-alpha-61558}}/script>script typemodule>/* !CDATA *//*! This file is auto-generated */const aJSON.parse(document.getElementById(wp-emoji-settings).textContent),o(window._wpemojiSettingsa,wpEmojiSettingsSupports),sflag,emoji;function i(e){try{var t{supportTests:e,timestamp:(new Date).valueOf()};sessionStorage.setItem(o,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);tnew 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 anew Uint32Array(e.getImageData(0,0,e.canvas.width,e.canvas.height).data);return t.every((e,t)>eat)}function p(e,t){e.clearRect(0,0,e.canvas.width,e.canvas.height),e.fillText(t,0,0);var ne.getImageData(16,16,1,1);for(let e0;en.data.length;e++)if(0!n.datae)return!1;return!0}function u(e,t,n,a){switch(t){caseflag: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);caseemoji:return!a(e,\ud83e\u1fac8)}return!1}function f(e,t,n,a){let r;const o(rundefined!typeof WorkerGlobalScope&&self instanceof WorkerGlobalScope?new OffscreenCanvas(300,150):document.createElement(canvas)).getContext(2d,{willReadFrequently:!0}),s(o.textBaselinetop,o.font600 32px Arial,{});return e.forEach(e>{set(o,e,n,a)}),s}function r(e){var tdocument.createElement(script);t.srce,t.defer!0,document.head.appendChild(t)}a.supports{everything:!0,everythingExceptFlag:!0},new Promise(t>{let nfunction(){try{var eJSON.parse(sessionStorage.getItem(o));if(objecttypeof e&&numbertypeof e.timestamp&&(new Date).valueOf()e.timestamp+604800&&objecttypeof 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 epostMessage(+f.toString()+(+JSON.stringify(s),u.toString(),c.toString(),p.toString().join(,)+));,anew Blob(e,{type:text/javascript});const rnew Worker(URL.createObjectURL(a),{name:wpTestEmojiSupports});return void(r.onmessagee>{i(ne.data),r.terminate(),t(n)})}catch(e){}i(nf(s,u,c,p))}t(n)}).then(e>{for(const n in e)a.supportsnen,a.supports.everythinga.supports.everything&&a.supportsn,flag!n&&(a.supports.everythingExceptFlaga.supports.everythingExceptFlag&&a.supportsn);var t;a.supports.everythingExceptFlaga.supports.everythingExceptFlag&&!a.supports.flag,a.supports.everything||((ta.source||{}).concatemoji?r(t.concatemoji):t.wpemoji&&t.twemoji&&(r(t.twemoji),r(t.wpemoji)))});//# sourceURL/wp-includes/js/wp-emoji-loader.min.js/* > *//script> script typetext/javascript> (function() { var extend function(out) { out out || {}; for (var i 1; i arguments.length; i++) { if (!argumentsi) continue; for (var key in argumentsi) { if (argumentsi.hasOwnProperty(key)) outkey argumentsikey; } } return out; }; extend( window.infiniteScroll.settings.scripts, jetpack-mu-wpcom-settings,rlt-proxy,wpcom-actionbar-placeholder,grofiles-cards,wpgroho,the-neverending-homepage,independent-publisher-2-navigation,independent-publisher-2-skip-link-focus-fix,independent-publisher-2-wpcom-functions,jetpack-carousel,tiled-gallery,carousel-wpcom ); extend( window.infiniteScroll.settings.styles, the-neverending-homepage,wp-block-library,wpcom-core-compat-playlist-styles,wpcom-bbpress2-staff-css,genericons,independent-publisher-2-style,independent-publisher-2-block-style,independent-publisher-2-wpcom-style,reblogging,geo-location-flair,a8c-global-print,h4-global,wp-emoji-styles,classic-theme-styles,jetpack-global-styles-frontend-style,wp-block-embed,wp-block-embed-theme,wp-block-list-item,wp-block-list-item-theme,wp-block-quote,wp-block-quote-theme,wp-block-heading,wp-block-heading-theme,wp-block-image,wp-block-image-theme,wp-block-list,wp-block-list-theme,wp-block-page-list,wp-block-page-list-theme,wp-block-paragraph,wp-block-paragraph-theme,wp-block-tag-cloud,wp-block-tag-cloud-theme,global-styles,jetpack-swiper-library,jetpack-carousel,goodreads-widget,tiled-gallery,core-block-supports-duotone ); })(); /script> span idinfinite-aria aria-livepolite>/span> script src//stats.wp.com/w.js?68 defer>/script> script typetext/javascript>_tkq window._tkq || ;_stq window._stq || ;_tkq.push(storeContext, {blog_id:224428075,blog_tz:-8,user_lang:en,blog_lang:en,user_id:0}); // Prevent sending pageview tracking from WP-Admin pages. _stq.push(view, {blog:224428075,v:wpcom,tz:-8,user_id:0,arch_home:1,subd:groveronline3}); _stq.push(extra, {crypt:UE5tW3cvZGRTd1VXTHx0Q0pyYT89K3QrZXh+YlZCT3lNLEN2NzQ2Njh8QTJiL1BzZVh+MTlwZTc3TkdTOFRnU25kb3V1UXJpTUJadTA4dlE9cmFWYU5kR1dqdlI4VDg3enQwdGRdYnhWMUV3TmgvLF98Qz9kdDQxLTE0eWhsQlZ0P1lvZ11aekx+L09YV284eWZMLFtYJUwyW3xrUnZVbXFqY1NLN3pENmJSLTdQZGxZQitnOSZ1Z3xsL1YraDNYdT16S25pdS4uL3Y/b2RDZmstbzhZXUo});_stq.push( clickTrackerInit, 224428075, 0 );/script>noscript>img srchttps://pixel.wp.com/b.gif?vnoscript styleheight:1px;width:1px;overflow:hidden;position:absolute;bottom:1px; alt />/noscript>meta idbilmur propertybilmur:data content data-providerwordpress.com data-servicesimple data-site-tzAmerica/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?i17&m202608>/script> /body>/html>!-- generated in 0.310 seconds 144234 bytes batcached for 300 seconds-->
View on OTX
|
View on ThreatMiner
Please enable JavaScript to view the
comments powered by Disqus.
Data with thanks to
AlienVault OTX
,
VirusTotal
,
Malwr
and
others
. [
Sitemap
]