CINXE.COM
cncf-tag-env-sustainability@lists.cncf.io | Topics
<!DOCTYPE html> <html lang="en-US"> <head> <meta http-equiv="Content-Type" content="text/html;charset=UTF-8"> <meta http-equiv="X-UA-Compatible" content="IE=edge"> <meta name="viewport" content="width=device-width, initial-scale=1.0"> <meta name="pinterest" content="nopin" /> <meta name="pinterest" content="nohover" /> <meta name="3778517eb4810dfb5d143ed8f1b359b3b5a82923" content="0f56257c3db4a222e91b11bc6871c4df2e263b28" /> <link rel="apple-touch-icon" sizes="57x57" href="/img/org.10/favicons/apple-icon-57x57.png"> <link rel="apple-touch-icon" sizes="60x60" href="/img/org.10/favicons/apple-icon-60x60.png"> <link rel="apple-touch-icon" sizes="72x72" href="/img/org.10/favicons/apple-icon-72x72.png"> <link rel="apple-touch-icon" sizes="76x76" href="/img/org.10/favicons/apple-icon-76x76.png"> <link rel="apple-touch-icon" sizes="114x114" href="/img/org.10/favicons/apple-icon-114x114.png"> <link rel="apple-touch-icon" sizes="120x120" href="/img/org.10/favicons/apple-icon-120x120.png"> <link rel="apple-touch-icon" sizes="144x144" href="/img/org.10/favicons/apple-icon-144x144.png"> <link rel="apple-touch-icon" sizes="152x152" href="/img/org.10/favicons/apple-icon-152x152.png"> <link rel="apple-touch-icon" sizes="180x180" href="/img/org.10/favicons/apple-icon-180x180.png"> <link rel="icon" type="image/png" sizes="192x192" href="/img/org.10/favicons/android-icon-192x192.png"> <link rel="icon" type="image/png" sizes="32x32" href="/img/org.10/favicons/favicon-32x32.png"> <link rel="icon" type="image/png" sizes="96x96" href="/img/org.10/favicons/favicon-96x96.png"> <link rel="icon" type="image/png" sizes="16x16" href="/img/org.10/favicons/favicon-16x16.png"> <link rel="manifest" href="/img/org.10/favicons/manifest.json"> <meta name="msapplication-TileColor" content="#ffffff"> <meta name="msapplication-TileImage" content="/ms-icon-144x144.png"> <script> /* stubs */ const hapticsImpactHeavy = async () => { }; const hapticsImpactMedium = async () => { }; const hapticsImpactLight = async () => { }; const hapticsVibrate = async () => { }; const hapticsSelectionStart = async () => { }; const hapticsSelectionChanged = async () => { }; const hapticsSelectionEnd = async () => { }; </script> <script> function setPullToRefresh() {} function gotoURL(inurl) { window.location.href = inurl; return; } function contentLoaded(isHTMX, f, caller = "") { console.log("contentLoaded: " + isHTMX + " " + caller); if (isHTMX == true) { document.body.addEventListener('htmx:afterSettle', f, {once: true}); } else { if (document.readyState !== 'loading') { console.log('document is already ready, just execute code here'); f(); } else { console.log('document was not ready, place code here'); document.addEventListener('DOMContentLoaded', f, {once: true}); } } } function HideAppSidebarOnKeyboard() { console.log("In HideAppSidebarOnKeyboard"); } // stub function logError(data, url, linenumber) { console.log(data) return; } var pushSubToken; var ignoreErrors = false; var lastError = ""; window.onerror = function(errorMessage, errorUrl, errorLine, errorColumn, errorObj) { let column; let stack; if (console && console.log) { console.log("msg:", errorMessage); console.log("url:", errorUrl); console.log("line:", errorLine); if (errorColumn !== undefined && errorObj != null) { console.log("column:", errorColumn); column = errorColumn; } if (errorObj !== undefined && errorObj != null) { console.log("stack:", errorObj.stack); stack = errorObj.stack; } console.log("client_id:", "web.web08.5266698.1732386716540308890"); console.log("last_error:", lastError); console.log("stack:", stack); } if (errorUrl == "" || errorUrl === null) { errorUrl = window.location.href; } if (errorMessage.includes("SecurityError:") == true) { ignoreErrors = true; } if (ignoreErrors == true) { console.log("cookies, disabled, ignoring"); lastError = errorMessage; return; } jQuery.ajax({ type: 'POST', url: '/jsclienterror', data: { msg: errorMessage, url: errorUrl, line: errorLine, column: column, stack: stack, last_error: lastError, client_id: "web.web08.5266698.1732386716540308890" }, success: function() { if (console && console.log) { console.log('JS error report successful.'); } lastError = errorMessage; }, error: function() { if (console && console.error) { console.error('JS error report submission failed!'); } lastError = errorMessage; } }); return true; } </script> <script src="/tinymce-5.10.9/tinymce.min.js"></script> <script src="/js/browser-image-compression-2.0.2.min.js"></script> <link href="/css/application-6630163a3be19b6cee26ce35342d0d92.css" rel="stylesheet" id="groupsio-css"> <script src="/js/application-9b2c27b802a13063cf8a712fe566f004.js" id="groupsio-js"></script> <script src="/js/run_prettify.js"></script> <title> cncf-tag-env-sustainability@lists.cncf.io | Topics </title> <link rel="canonical" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topics"> <meta property="og:title" content="Topics" /> <meta property="og:description" content="" /> <meta property="og:image" content="https://lists.cncf.io/g/cncf-tag-env-sustainability/coverphoto" /> <script> htmx.config.scrollBehavior = "instant"; htmx.config.historyCacheSize = 0; htmx.config.defaultSettleDelay = 0; console.log("FULL PAGE LOAD"); </script> </head> <body id="body" class="" hx-headers='{"Accept-Version": "58f989bb651da14c2b1295c4c0447aef4773d1f9"}' hx-ext="preload" hx-boost="false"> <script> if (window.matchMedia && window.matchMedia('(prefers-color-scheme: dark)').matches) { document.body.classList.add('dark-mode'); } </script> <div class="navbar navbar-head navbar-fixed-top" role="navigation" id="headerbar"> <div class="container-fluid" style="padding-left:0px;"> <a href="https://lists.cncf.io" class="navbar-left" hx-boost="false" hx-disinherit="*"> <img src="https://lists.cncf.io/img/org.10/mainlogo.png?cachebust" height="50" alt="Groups.io"> </a> <ul class="nav navbar-nav pull-right visible-xs" style="margin-top:5px;margin-bottom:5px;"> <li> <a href="#" data-toggle="modal" data-target="#mobileAccount"> <i class="fa-fw fa fa-bars fa-lg"></i> </a> </li> </ul> <ul class="nav navbar-nav pull-right hidden-xs"> <li class="dropdown"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="fa-fw fa-regular fa-globe"></i> EN <b class="caret"></b> </a> <ul class="dropdown-menu"> <li> <a href="https://lists.cncf.io/unsetlang"> EN </a> </li> <li> <a href="https://lists.cncf.io/setlang/de"> DE </a> </li> <li> <a href="https://lists.cncf.io/setlang/es"> ES </a> </li> <li> <a href="https://lists.cncf.io/setlang/fr"> FR </a> </li> <li> <a href="https://lists.cncf.io/setlang/it"> IT </a> </li> <li> <a href="https://lists.cncf.io/setlang/pt"> PT </a> </li> <li> <a href="https://lists.cncf.io/setlang/uk"> UK </a> </li> </ul> </li> <li> <a href="https://lists.cncf.io/helpcenter" target="_blank"> Help </a> </li> <li> <a href="https://lists.cncf.io/login" hx-boost="false" hx-disinherit="*"> <i class="fa fa-sign-in-alt"></i> Log In </a> </li> </ul> </div> </div> <div class="modal fade" id="mobileAccount" role="dialog"> <div class="modal-dialog" style="margin-top:50px;"> <div class="modal-content"> <div class="modal-body"> <ul class="list-group noborderlist"> <li class="noborderitem list-group-item"> <a href="https://lists.cncf.io/login" hx-boost="false" hx-disinherit="*"> <i class="fa fa-sign-in-alt"></i> Log In </a> </li> <li class="noborderitem list-group-item"> <a href="https://lists.cncf.io/helpcenter" target="_blank"> <i class="fa-fw fa fa-question-circle"></i> Help </a> </li> <li class="dropdown noborderitem list-group-item"> <a href="#" class="dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="fa-fw fa-regular fa-globe"></i> EN <b class="caret"></b> </a> <ul class="dropdown-menu"> <li> <a href="https://lists.cncf.io/unsetlang"> EN </a> </li> <li> <a href="https://lists.cncf.io/setlang/de"> DE </a> </li> <li> <a href="https://lists.cncf.io/setlang/es"> ES </a> </li> <li> <a href="https://lists.cncf.io/setlang/fr"> FR </a> </li> <li> <a href="https://lists.cncf.io/setlang/it"> IT </a> </li> <li> <a href="https://lists.cncf.io/setlang/pt"> PT </a> </li> <li> <a href="https://lists.cncf.io/setlang/uk"> UK </a> </li> </ul> </li> </ul> </div> </div> </div> </div> <script> var groupnavigatorData = [ ]; </script> <!-- Modal Dialog for Autocomplete --> <div class="modal fade" id="groupnavigatorModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel" aria-hidden="true"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-body"> <input type="text" class="form-control" id="groupnavigatorInput" placeholder="Go to group..." style="margin-bottom:10px"> <div id="groupnavigatorContainer" class="autocompleteResults" style="max-height:250px; overflow-y: auto;"></div> <div class="text-center" style="margin-top:10px; font-size:12px;"><i class="fa-sharp fa-arrow-up-arrow-down"></i> to navigate <i class="fa-sharp fa-arrow-turn-down-left"></i> to use <strong>esc</strong> to dismiss</div> </div> </div> </div> </div> <script> // Keep track of the currently selected index var selectedIndex = -1; // Function to highlight the matched substring function highlightSubstring(str, substring) { var index = str.toLowerCase().indexOf(substring.toLowerCase()); if (index !== -1) { var before = str.substring(0, index); var middle = str.substring(index, index + substring.length); var after = str.substring(index + substring.length); return before + '<span class="autocomplete-highlight">' + middle + '</span>' + after; } return str; } // Function to highlight the selected item and ensure it is visible in the scrollable list function highlightSelectedItem(modalName) { var listContainer = document.getElementById(modalName + 'Container'); var items = document.getElementsByClassName(modalName + '-list-item'); Array.from(items).forEach(function(item, idx) { item.className = idx === selectedIndex ? modalName + '-list-item autocomplete-list-item btn-primary no-hover' : modalName + '-list-item autocomplete-list-item no-hover'; // Apply btn-primary class to the selected item }); if (items.length > 0 && selectedIndex >= 0) { var selectedItem = items[selectedIndex]; var containerTop = listContainer.scrollTop; var containerBottom = containerTop + listContainer.clientHeight; var itemTop = selectedItem.offsetTop; var itemBottom = itemTop + selectedItem.offsetHeight; const fudge = 59; if (selectedIndex > 0 && itemTop > containerBottom) { // If there are items below the selected item and the selected item is not fully visible, scroll down listContainer.scrollTop = itemTop - listContainer.clientHeight + items[selectedIndex - 1].offsetHeight; } else if (selectedIndex < items.length - 1 && (itemTop - fudge) < containerTop) { // If there are items above the selected item and the selected item is not fully visible, scroll up listContainer.scrollTop = itemTop - fudge - items[selectedIndex + 1].offsetHeight; } } } // function to populate the list based on the input function populateList(modalName, data) { var input = document.getElementById(modalName+'Input').value; var listContainer = document.getElementById(modalName+'Container'); listContainer.innerHTML = ''; data.forEach(function(item) { if (item.name.toLowerCase().includes(input.toLowerCase())) { var div = document.createElement('div'); div.innerHTML = highlightSubstring(item.name, input); div.className = modalName+'-list-item autocomplete-list-item no-hover'; // Apply no-hover class div.addEventListener('click', function() { // Navigate to the specified URL when a list item is clicked window.location.href = item.url; }); div.addEventListener('mousemove', function() { // Remove no-hover class from all items when the mouse is moved over any item console.log("mouse move"); var items = document.getElementsByClassName(modalName+'-list-item'); Array.from(items).forEach(function(item) { item.classList.remove('no-hover'); }); }); listContainer.appendChild(div); } }); highlightSelectedItem(modalName); } function InitAutocomplete(modalName, data) { // Focus the input field when the modal is shown and populate the list $('#' + modalName + 'Modal').on('shown.bs.modal', function () { $('#' + modalName + 'Input').focus().val(''); populateList(modalName, data); selectedIndex = 0; highlightSelectedItem(modalName); }); // Event listener for input field typing document.getElementById(modalName + 'Input').addEventListener('input', function() { populateList(modalName, data); selectedIndex = 0; }); // Event listener for arrow keys and enter key document.getElementById(modalName + 'Input').addEventListener('keydown', function(event) { var items = document.getElementsByClassName(modalName + '-list-item'); if (event.key === 'ArrowDown') { event.preventDefault(); if (selectedIndex < items.length - 1) selectedIndex++; highlightSelectedItem(modalName); } else if (event.key === 'ArrowUp') { event.preventDefault(); if (selectedIndex > 0) selectedIndex--; highlightSelectedItem(modalName); } else if (event.key === 'Enter' && selectedIndex >= 0 && selectedIndex < items.length) { event.preventDefault(); items[selectedIndex].click(); } }); } function showAutocompleteModal(modalName) { $('#' + modalName + 'Modal').modal('show'); selectedIndex = -1; } </script> <div id="content" class="container-fluid"> <script> InitAutocomplete("groupnavigator", groupnavigatorData); document.body.addEventListener("showReloadPageDialog", function(evt) { console.log("Forced reload"); location.reload(); }); function ShowBackButton(label) { var logoElement = document.getElementById("logo"); if (logoElement) { html = ` <span style="color:#fff;margin-top:14px;margin-left:12px;float:left !important; height:36px;"> <a onclick="goBack()" style="color:#fff"> <i class="fa-fw fa-solid fa-chevron-left fa-lg"></i> </a></span>`; if (label != "") { html += `<div style="position:absolute;left:50%;transform:translateX(-50%);text-align:center;color:#ecf0f1;margin-top:5px;"><h4>` + label + `</h4></div>`; } logoElement.innerHTML = html; } } function HideBackButton() { var logoElement = document.getElementById("logo"); if (logoElement) { logoElement.innerHTML = ` <a href="https://lists.cncf.io" class="navbar-left"> <img src="https://lists.cncf.io/img/org.10/mainlogo.png?cachebust" height="50" alt="Groups.io"> </a>`; } } function goBack() { history.back(); } // submitEvent acts like .submit(), except it is compatible with the app, by using events instead. function submitEvent(ele) { console.log("in submitEvent"); if (ele.startsWith('#')) { ele = ele.slice(1); } document.getElementById(ele).submit(); return; /* const theEvent = new CustomEvent('submit', { bubbles: true, cancelable: true }); if (typeof ele === 'string' || ele instanceof String) { if (ele.startsWith("#") == true) { ele = ele.slice(1); } if (document.getElementById(ele).dispatchEvent(theEvent) == true) { // if not cancelled, do normal submit console.log("calling submit"); document.getElementById(ele).submit(); } return; } // assume ele is the element if (ele.dispatchEvent(theEvent) == true) { // if not cancelled, do normal submit console.log("calling submit"); ele.submit(); } */ } // gioDestroy is a convenience function for destroy callbacks function gioDestroy(eventCB) { let internalGioDestroy = function(evt) { // do not activate on infinite scroll events if (evt.detail.target !== undefined && evt.detail.target.id != "maincontent-refresh") { console.log("Ignoring infinite scroll event"); return; } console.log("Calling destroy callback"); eventCB(evt); } document.body.addEventListener("htmx:beforeSwap", internalGioDestroy, {once: true}); document.body.addEventListener("htmx:historyCacheMiss", internalGioDestroy, {once: true}); } var drawerCloseFunc = function(evt) { console.log("in drawerCloseFunc"); // Find all elements with the class 'drawer' var drawers = document.querySelectorAll('.drawer'); // Iterate over each element and call closeDrawer() on each drawers.forEach(function(obj) { drawerObj.closeDrawer(obj); }); $('.modal').modal('hide'); } document.body.addEventListener('htmx:beforeSwap', drawerCloseFunc); document.body.addEventListener('htmx:historyCacheMiss', drawerCloseFunc); var keydownFunc = function(event) { var tagName = event.target.tagName.toLowerCase(); if (tagName === 'input' || tagName === 'textarea' || event.target.isContentEditable) { if (event.key === 'Escape') { event.target.blur(); } return; } // check if the viewimages viewer is up let element = document.getElementById('overlay'); if (element && element.classList.contains('visible')) { return; } console.log("HERE: " + event.key + " " + event.ctrlKey + " " + event.shiftKey + " " + event.metaKey); if (event.ctrlKey && event.shiftKey && (event.key === '?' || event.key === '/')) { event.preventDefault(); // Prevent the default action // Show the modal dialog for keyboard shortcuts $('#shortcutModal').modal('show'); return; } $('#shortcutModal').modal('hide'); if (event.key.toLowerCase() === 'g') { // For Windows and Linux if (event.ctrlKey) { event.preventDefault(); showAutocompleteModal("groupnavigator"); return; } } // Check if the pressed key is '/' if ((event.key === 'f' || event.key === 'F') && event.shiftKey) { if (navigator.platform.toUpperCase().indexOf('MAC') >= 0) { if (event.metaKey) { event.preventDefault(); // Prevent the default action // Focus on the search box let box = document.getElementById('searchbox') if (box != null) { document.getElementById('searchbox').focus(); } } } else { // For Windows and Linux if (event.ctrlKey) { event.preventDefault(); // Prevent the default action // Focus on the search box let box = document.getElementById('searchbox') if (box != null) { document.getElementById('searchbox').focus(); } } } } } document.addEventListener('keydown', keydownFunc); var removeDrawerCloseFunc = function(evt) { document.body.removeEventListener('htmx:beforeSwap', drawerCloseFunc); document.body.removeEventListener('htmx:historyCacheMiss', drawerCloseFunc); document.removeEventListener('keydown', keydownFunc); } document.body.addEventListener("htmx:historyCacheMiss", removeDrawerCloseFunc, {once: true}); </script> <!-- Modal Dialog for Keyboard Shortcuts --> <div class="modal fade" id="shortcutModal" tabindex="-1" role="dialog" aria-labelledby="myModalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <h4 class="modal-title" id="myModalLabel">Keyboard Shortcuts</h4> </div> <div class="modal-body"> <div class="row"> <div class="col-xs-3 text-right"><strong>ctrl</strong> + <strong>shift</strong> + <strong>?</strong> :</div> <div class="col-xs-9" style="margin-left: -23px;">Show all keyboard shortcuts</div> </div> <div class="row"> <div class="col-xs-3 text-right"><strong>ctrl</strong> + <strong>g</strong> :</div> <div class="col-xs-9" style="margin-left: -23px;">Navigate to a group</div> </div> <div class="row"> <div class="col-xs-3 text-right"><strong class="ctrlmeta">ctrl</strong> + <strong>shift</strong> + <strong>f</strong> :</div> <div class="col-xs-9" style="margin-left: -23px;">Find</div> </div> <div class="row"> <div class="col-xs-3 text-right"><strong class="ctrlmeta">ctrl</strong> + <strong>/</strong> :</div> <div class="col-xs-9" style="margin-left: -23px;">Quick actions</div> </div> </div> <div class="text-center" style="margin-top:10px; margin-bottom:10px; font-size:12px;"><strong>esc</strong> to dismiss</div> </div> </div> </div> <div id="mainrow" class="row" hx-boost="true" hx-target="#maincontent-refresh" hx-push-url="true" hx-history="false" hx-on::after-request="document.getElementById('maincontent').scrollTo({top: 0, behavior: 'instant'})" > <div id="groupsidebar" class="scrollbar hidden-print"> <div class="scrollbar-content"> <div id="accordion" role="tablist" aria-multiselectable="true" style="margin-bottom:20px;"> <div class="list-group noborderlist" style="border:0;margin-bottom:0px"> <a title="Group Home" href="https://lists.cncf.io/g/cncf-tag-env-sustainability" class="list-group-item sidebar-item"> <i class="fa-fw fa fa-home fa-lg"></i> Home </a> <a title="Messages" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topics?sidebar=true" id="sidebar-archives" class="noborderitem list-group-item sidebar-item sidebar-item-archives active"> <i class="fa-fw fa fa-comments fa-lg"></i> Messages <span id="sidebar-archives-badge" class="badge"></span> </a> <a title="Hashtags" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/hashtags" id="sidebar-hashtags" class="noborderitem list-group-item sidebar-item sidebar-item-hashtags"> <i class="fa-fw fa fa-hashtag fa-lg"></i> Hashtags <span id="sidebar-hashtags-badge" class="badge"></span> </a> <a title="Subgroups" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/subgroups" id="sidebar-subgroups" class="noborderitem list-group-item sidebar-item sidebar-item-subgroups"> <i class="fa-fw fa fa-chart-pie fa-lg"></i> Subgroups <span id="sidebar-subgroups-badge" class="badge"></span> </a> </div> </div> <div class="text-center" style="font-size:13px;margin-bottom:30px"> <div style="padding-bottom:10px;"> <strong>ctrl</strong> + <strong>shift</strong> + <strong>?</strong> for shortcuts </div> <div style="padding-bottom:5px;"> <a href="https://groups.io/static/about"> About </a> · <a href="https://groups.io/static/features"> Features </a> · <a href="https://groups.io/static/pricing"> Pricing </a> </div> <div style="padding-bottom:5px;"> <a rel="nofollow" href="https://groups.io/g/updates/messages?expanded=1"> Updates </a> · <a href="https://groups.io/static/tos"> Terms </a> · <a href="https://groups.io/helpcenter" target="_blank"> Help </a> </div> <div style="padding-bottom:5px;"> © 2024 Groups.io </div> </div> </div> </div> <div id="maincontent" class="groupmaincontent"> <div id="maincontent-refresh"> <div id="maincontent-column" class="col-xs-12 maincontent-column"> <div id="alertdiv"></div> <div class="noticetemplate template"> <div class="alert alert-success alert-dismissible" role="alert"> <button type="button" class="close" data-dismiss="alert" aria-label="Close"> <span aria-hidden="true"> × </span> </button> <span class="flashmsg"></span> </div> </div> <div class="alerttemplate template"> <div class="alert alert-danger alert-dismissible" role="alert"> <button type="button" class="close" data-dismiss="alert" aria-label="Close"> <span aria-hidden="true"> × </span> </button> <span class="flashmsg"></span> </div> </div> <div class="alertnoclosetemplate template"> <div class="alert alert-danger" role="alert"> <span class="flashmsg"></span> </div> </div> <script> function dismiss() { console.log("dismiss"); $.get( "/dismissalert"); } var $alerttemplate = $(".alerttemplate"); var $alertnoclosetemplate = $(".alertnoclosetemplate"); var $noticetemplate = $(".noticetemplate"); function createAlert(msg, isError, autoClose, noClose) { if (isError == false) { $newPanel = $noticetemplate.clone(); } else { if (noClose) { $newPanel = $alertnoclosetemplate.clone(); } else { $newPanel = $alerttemplate.clone(); } } $newPanel.find(".flashmsg").html(msg); if (autoClose == true) { $("#alertdiv").append($newPanel.fadeTo(2000, 500).slideUp(500, function(){ $newPanel.slideUp(500); $newPanel.remove(); })); } else { $("#alertdiv").append($newPanel.fadeIn()); } return $newPanel; } </script> <div class="row breadcrumb-row" style="margin-bottom: 10px"> <div class="col-xs-12 col-sm-9"> <span class="hidden-sm hidden-md hidden-lg pull-right" style="padding:8px 15px;"><a data-toggle="modal" data-target="#searchModal"><i class="fa fa-search"></i></a></span> <div class="breadcrumb-container"> <ol class="breadcrumb scroll-breadcrumb"> <li><a href="https://lists.cncf.io/g/cncf-tag-env-sustainability"><i class="fa fa-home"></i> Cncf-Tag-Env-Sustainability</a></li> <li class="active"><i class="fa fa-inbox"></i> Topics</li> </ol> </div> </div> <div class="col-sm-3 hidden-xs" style="padding-right:0px"> <form class="form-inline pull-right" method="get" action="https://lists.cncf.io/g/cncf-tag-env-sustainability/search"> <input type="hidden" name="p" value="recentpostdate/sticky,,,20,2,0,0"> <div class="input-group"> <input id="searchbox" type="text" class="form-control" placeholder="Search" title="Search" name="q" size="20" value="" style="height:37px"> <div class="input-group-btn"> <button class="btn btn-primary" type="submit" style="height:37px;" aria-label="Search"> <span class="fa fa-search"></span> </button> </div> </div> </form> </div> </div> <div class="modal fade" id="searchModal" tabindex="-1" role="dialog" aria-labelledby="searchModalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal"> <span aria-hidden="true"> × </span> <span class="sr-only"> Close </span> </button> <h4 class="modal-title" id="searchModalLabel"> Search </h4> </div> <form class="form-horizontal" method="get" action="https://lists.cncf.io/g/cncf-tag-env-sustainability/search"> <div class="modal-body"> <div class="form-group"> <div class="col-sm-12"> <input type="text" class="form-control" placeholder="Search" title="Search" name="q" value=""> </div> </div> </div> <div class="modal-footer"> <button class="btn btn-primary btn-sm" aria-label="Search"> <i class="fa fa-search"></i> Search </button> <button type="button" class="btn btn-default btn-sm" data-dismiss="modal"> <i class="fa fa-times"></i> Cancel </button> </div> </form> </div> </div> </div> <div class="row"> <div class="col-xs-9 col-sm-6 col-md-6 narrow-padding" style="padding-top:5px;padding-bottom:10px;"> <form class="form-inline" id="searchForm" method="get" action="https://lists.cncf.io/g/cncf-tag-env-sustainability/search"> <div class="form-group button-link-group"> <div class="btn-group" style="display:inline-block"> <button id="wide-messages" type="button" class="dropdown-wide btn btn-sm btn-default dropdown-toggle" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> <i class="fa fa-inbox"></i> Topics <span class="caret"></span> </button> <ul class="dropdown-menu" role="menu"> <li> <a title="Messages" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/messages"> <i class="fa fa-comments"></i> Messages </a> </li> <li> <a title="Expanded" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/messages?expanded=1"> <i class="fa fa-comments"></i> Expanded </a> </li> <li> <a title="Polls" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/polls"> <i class="fa fa-chart-bar"></i> Polls </a> </li> </ul> </div> <div class="btn-group"> <a id="narrow-messages" href="javascript:void(0)" class="dropdown-narrow btn btn-sm btn-default " style="margin-left:-4px;" data-drawer-trigger aria-controls="messages-drawer" aria-expanded="false"> <i class="fa fa-inbox"></i> Topics <span class="caret"></span> </a> </div> <section class="drawer drawer-bottom" id="messages-drawer" data-drawer-target> <div class="drawer-overlay" data-drawer-close tabindex="-1"></div> <div class="drawer-wrapper"> <div class="drawer-content"> <div class="list-group"> <a href="#" class="list-group-item disabled" title="Topics"> <i class="fa fa-inbox"></i> Topics </a> <a class="list-group-item" title="Messages" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/messages"> <i class="fa fa-comments"></i> Messages </a> <a class="list-group-item" title="Expanded" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/messages?expanded=1"> <i class="fa fa-comments"></i> Expanded </a> <a class="list-group-item" title="Polls" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/polls"> <i class="fa fa-chart-bar"></i> Polls </a> </div> </div> </div> </section> <script> function modalmessages(target) { drawer = document.getElementById('messages-drawer'); if (drawer != null) { drawerObj.closeDrawer(drawer); } $(target).modal('show'); } </script> <input type="hidden" name="d" id="dates" value=""> <input type="hidden" name="ct" id="ct" value="1"> <input type="hidden" name="ev" value=""> <div class="btn-group"> <button class="btn btn-sm btn-info" type="button" data-toggle="collapse" data-target="#advancedSearch" aria-expanded="false" aria-controls="advancedSearch"> Filter <i class="fa fa-filter"></i> </button> </div> <div class="collapse" id="advancedSearch" style="margin-top:10px;"> <div class="btn-group"> <button type="button" class="btn btn-info btn-sm dropdown-toggle bottom10" data-toggle="dropdown" aria-haspopup="true" aria-expanded="false"> Any Time <span class="caret"></span> </button> <ul class="dropdown-menu"> <li> <a href="javascript:void(0)" onclick="$('#dates').val('0'); submitEvent('#searchForm');"> Any Time </a> </li> <li> <a href="javascript:void(0)" onclick="$('#dates').val('1'); submitEvent('#searchForm');"> Past Hour </a> </li> <li> <a href="javascript:void(0)" onclick="$('#dates').val('2'); submitEvent('#searchForm');"> Past 24 Hours </a> </li> <li> <a href="javascript:void(0)" onclick="$('#dates').val('3'); submitEvent('#searchForm');"> Past Week </a> </li> <li> <a href="javascript:void(0)" onclick="$('#dates').val('4'); submitEvent('#searchForm');"> Past Month </a> </li> <li> <a href="javascript:void(0)" onclick="$('#dates').val('5'); submitEvent('#searchForm');"> Past Year </a> </li> <li role="separator" class="divider"></li> <li> <a href="javascript:void(0)" data-toggle="modal" data-target="#customRangeModal"> Custom range... </a> </li> </ul> </div> </div> <!-- Custom Range Modal --> <div class="modal fade" id="customRangeModal" tabindex="-1" role="dialog" aria-labelledby="customRangeModalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal"> <span aria-hidden="true"> × </span> <span class="sr-only"> Close </span> </button> <h4 class="modal-title" id="customRangeModalLabel"> Custom Range </h4> </div> <div class="modal-body"> Between <input name="startdate" id="startdate" class="form-control" type="text" size="10" placeholder="Start" /> and <input name="enddate" id="enddate" class="form-control" type="text" size="10" placeholder="End" /> </div> <div class="modal-footer"> <a class="btn btn-primary btn-sm" href="javascript:void(0);" onclick="$('#dates').val('6'); $('#searchForm').submit()"> <i class="fa fa-check"></i> Go </a> </div> </div> </div> </div> <script> flatpickr("#startdate", { onChange: function(selectedDates, dateStr, instance) { const enddateFp = document.querySelector("#enddate")._flatpickr; const startdate = moment($('#startdate').val(), 'MM/DD/YYYY h:mma'); const enddate = moment($('#enddate').val(), 'MM/DD/YYYY h:mma'); console.log("startdate:"+ startdate) if (enddate.isBefore(startdate) || $('#enddate').val() == "") { // send endTime to t + 1 hour u = moment(startdate).add(1, 'days'); var newenddate = u.format("MM/DD/YYYY"); console.log("newenddate:"+ newenddate) enddateFp.setDate(newenddate); } }, static: true }); flatpickr("#enddate", { onChange: function(selectedDates, dateStr, instance) { const startdateFp = document.querySelector("#startdate")._flatpickr; const startdate = moment($('#startdate').val(), 'MM/DD/YYYY h:mma'); const enddate = moment($('#enddate').val(), 'MM/DD/YYYY h:mma'); if (enddate.isBefore(startdate) || $('#startdate').val() == "") { // send endTime to t + 1 hour u = moment(enddate).add(-1, 'days'); var newstartdate = u.format("MM/DD/YYYY"); console.log("newstartdate:"+ newstartdate) startdateFp.setDate(newstartdate); } }, static: true }); </script> </div> </form> </div> <div class="col-xs-3 col-sm-6 col-md-6 narrow-padding"> <form class="form-inline" method="get" action="https://lists.cncf.io/g/cncf-tag-env-sustainability/topics"> <div class="pull-right" style="margin-bottom:10px"> <a rel="nofollow" class="button-link" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topics?dir=asc"> Date <i class="fa fa-xs fa-sort-down"></i> </a> <span class="hidden-xs"> <span class="form-group"> 1 - 20 of 39 </span> <ul class="pagination form-group" style="margin: 0px !important;"> <li class="disabled"> <a href="#"> <i class="fa fa-chevron-left"> <span class="sr-only"> previous page </span> </i> </a> </li> <li> <a href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topics?page=2&after=1663630803872600969"> <i class="fa fa-chevron-right"> <span class="sr-only"> next page </span> </i> </a> </li> </ul> </span> </div> </form> </div> </div> <table id="records" class="table table-condensed table-fixed" hx-disinherit="*"> <tr > <td hx-boost="true" hx-target="#maincontent-refresh" hx-push-url="true" hx-history="false" hx-on::after-request="document.getElementById('maincontent').scrollTo({top: 0, behavior: 'instant'})" > <div style="margin-top:3px;margin-bottom:3px;"> <div class="row"> <div class="col-xs-12"> <span class="subject"> <a class="showvisited subject" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topic/eager_to_contribute_to_tag/104396285">Eager to Contribute to TAG Environmental Sustainability!</a> </span> <div class="truncate-one-line"> <div tabindex="0">Dear TAG Environmental Sustainability Team, My name is Shahbaz Ali and I am writing to express my strong interest in contributing to the important work of your group. I am passionate about both open source technology and environmental sustainability, and I believe the intersection of these areas holds immense potential for positive impact. I have been closely following the initiatives of the TAG Environmental Sustainability and am highly impressed by your focus on: Defining environmental sustainability factors for the cloud-native landscape. Incubating and advocating open source projects for carbon footprint measurement and optimization. Promoting cloud-native infrastructure to combat environmental challenges. Raising awareness of environmental sustainability within the open source community. These goals perfectly align with my own aspirations, and I am eager to offer my skills and experience to support your efforts. I am particularly interested in contributing to community engagement, communication. I understand that there may not be a formal application process to join the TAG, but I would be grateful if you could provide guidance on how I can best get involved. I am happy to participate in any way that is most beneficial to the group, whether it be attending meetings, contributing to specific projects, or simply offering my ideas and support. Thank you for your time and consideration. I look forward to learning more about how I can become a part of this impactful initiative. Sincerely, Shahbaz Ali</div> </div> <span class="thread-attribution"> Started by your freedom @ <script id="timedisptopic104396285"> $('#timedisptopic104396285').replaceWith(DisplayShortTime(1708102600676866662, false )); </script> </span> </div> </div> </div> </td> </tr> <tr > <td hx-boost="true" hx-target="#maincontent-refresh" hx-push-url="true" hx-history="false" hx-on::after-request="document.getElementById('maincontent').scrollTo({top: 0, behavior: 'instant'})" > <div style="margin-top:3px;margin-bottom:3px;"> <div class="row"> <div class="col-xs-12"> <span class="subject"> <a class="showvisited subject" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topic/help_wanted_finding/104124280">HELP WANTED | Finding friendly meeting time for Asia & India Time Zones</a> </span> <div class="truncate-one-line"> <div tabindex="0">Hello, The TAG leads are trying to find time that works for the Asia and India time zones to be included in the Env Sustainability TAG. This will be the first meeting and we can decide as a group the best cadence moving forward. We understand that the times in the poll are during Lunar New Year. If you could still pick a day(s) and time(s) that work for your schedule and we can adjust the actual dates. Note: the current Europe/NA TAG meeting will remain the same. This is an additional meeting that is time zone adjacent to Asia and India. Please fill out this POLL https://doodle.com/meeting/participate/id/e0Aoymya Thank you so much, Cara Delia TAG Technical Lead | WG Comms Co-chair</div> </div> <span class="thread-attribution"> Started by Cara Delia @ <script id="timedisptopic104124280"> $('#timedisptopic104124280').replaceWith(DisplayShortTime(1706896094150521704, false )); </script> </span> </div> </div> </div> </td> </tr> <tr > <td hx-boost="true" hx-target="#maincontent-refresh" hx-push-url="true" hx-history="false" hx-on::after-request="document.getElementById('maincontent').scrollTo({top: 0, behavior: 'instant'})" > <div style="margin-top:3px;margin-bottom:3px;"> <div class="row"> <div class="col-xs-12"> <span class="subject"> <a class="showvisited subject" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topic/communications_wg_charter/101381711">Communications WG Charter Proposal Review</a> </span> <div class="truncate-one-line"> <div tabindex="0">Hi All! Please take a minute to review and give your feedback on the Communications WG Charter. Here is the issue: https://github.com/cncf/tag-env-sustainability/issues/206 Please let me know if you are interested in being a co-lead with me. Thanks, Cara</div> </div> <span class="thread-attribution"> Started by Cara Delia @ <script id="timedisptopic101381711"> $('#timedisptopic101381711').replaceWith(DisplayShortTime(1694791551913901454, false )); </script> </span> </div> </div> </div> </td> </tr> <tr > <td hx-boost="true" hx-target="#maincontent-refresh" hx-push-url="true" hx-history="false" hx-on::after-request="document.getElementById('maincontent').scrollTo({top: 0, behavior: 'instant'})" > <div style="margin-top:3px;margin-bottom:3px;"> <div class="row"> <div class="col-xs-12"> <span class="subject"> <a class="showvisited subject" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topic/cncf_tag_environmental/100915359">CNCF TAG Environmental Sustainability - CFP for Cloud Native Sustainability Week is now live!</a> <span class="hashtag-position label label-primary" style="font-size:11.25px;">2</span> </span> <div class="truncate-one-line"> <div tabindex="0">Hello everyone. We have some great news to share - CFP for Cloud Native Sustainability Week virtual meetup and local meetups is now open!🥳 This link can be shared with others: https://docs.google.com/forms/d/e/1FAIpQLSdwy7gaIbgyfITJhDC1axzR9AuO6rPuZGyi2nZQynILgP77qQ/viewform?usp=sf_link We have published announcement both on our LinkedIn page (give it a follow😊) and Twitter/X - please spread the love! LinkedIn: https://www.linkedin.com/feed/update/urn:li:activity:7100112838999875584 Twitter/X: https://twitter.com/CNCFEnvTAG/status/1694348695045603790?s=20 You can learn more about Cloud Native Sustainability Week and planned events here: https://tag-env-sustainability.cncf.io/cloud-native-sustainability-week If you have any questions or suggestions, please reach out on Slack. Thank you!😊 Kind regards Kristina Devochko, on behalf of CNCF TAG Environmental Sustainability</div> </div> <span class="thread-attribution"> Started by Kristina D. @ <script id="timedisptopic100915359"> $('#timedisptopic100915359').replaceWith(DisplayShortTime(1692800116717089808, false )); </script> · Most recent @ <script id="timedisptopic-recent100915359"> $('#timedisptopic-recent100915359').replaceWith(DisplayShortTime(1694100267157407868, false )); </script> </span> </div> </div> </div> </td> </tr> <tr > <td hx-boost="true" hx-target="#maincontent-refresh" hx-push-url="true" hx-history="false" hx-on::after-request="document.getElementById('maincontent').scrollTo({top: 0, behavior: 'instant'})" > <div style="margin-top:3px;margin-bottom:3px;"> <div class="row"> <div class="col-xs-12"> <span class="subject"> <a class="showvisited subject" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topic/cncf_tag_environmental/100180597">CNCF TAG Environmental Sustainability Green Reviews Working Group : YOUR input is needed!</a> <span class="hashtag-position label label-primary" style="font-size:11.25px;">2</span> </span> <div class="truncate-one-line"> <div tabindex="0">Hello everyone! For some time now we have been working on a proposal to establish Green Reviews Working Group under Environmental Sustainability TAG and the PR for this is now available for review: https://github.com/cncf/tag-env-sustainability/pull/151 PR adds structure and detailed information about overall TAG's Working Groups, as well as adds detailed information about Green Reviews Working Group to the TAG's repository and website. Additional information regarding related issues, authors and proposal document are included as part of the PR description. It would be great to get input and review from as many of you as possible so that we can make this proposal even better together!😊 Thanks to the co-authors of this initiative, Niki and Leo, and thanks to every one of you who contributed with valuable suggestions, comments and discussions until now!😊 Looking forward to your input. Wishing you a wonderful weekend and upcoming week! Kind regards Kristina Devochko, on behalf of CNCF TAG Environmental Sustainability</div> </div> <span class="thread-attribution"> Started by Kristina D. @ <script id="timedisptopic100180597"> $('#timedisptopic100180597').replaceWith(DisplayShortTime(1689531820207782311, false )); </script> · Most recent @ <script id="timedisptopic-recent100180597"> $('#timedisptopic-recent100180597').replaceWith(DisplayShortTime(1689931755048602944, false )); </script> </span> </div> </div> </div> </td> </tr> <tr > <td hx-boost="true" hx-target="#maincontent-refresh" hx-push-url="true" hx-history="false" hx-on::after-request="document.getElementById('maincontent').scrollTo({top: 0, behavior: 'instant'})" > <div style="margin-top:3px;margin-bottom:3px;"> <div class="row"> <div class="col-xs-12"> <span class="subject"> <a class="showvisited subject" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topic/cncf_global_week_of/99526591">🌱 CNCF Global Week of Cloud Native Sustainability</a> </span> <div class="truncate-one-line"> <div tabindex="0">Hi everyone, the CNCF TAG Environmental Sustainability is working on a Cloud Native Sustainability Week event to be held during the second week of October this year. There are multiple options to contribute, but first let me briefly summarize the event. A more detailed plan is described in this document, and we track the work with this issue. The CNCF Global Week of Cloud Native Sustainability event leverages CNCF community group structures to host in-person meetups in various cities around the globe to discuss Cloud Native Sustainability. All these meetups will go down in the second week of October and follow the same theme. There are hundreds of smaller meetups (usually with 50 to 100 attendees) held throughout the year on the topic of Cloud Native and its broader spectrum. Many of these meetups are already a part of the CNCF community. We will use this platform to address the global problem of environmental sustainability with our global cloud native community. We already have 25 people interested in hosting a local meetup in different cities in a total of 15 different countries. In addition to the face-to-face meetups, the CNCF TAG ENV will host a virtual event to talk about the group, goals, vision, projects, and members, and host external presentations. We are excited to see the impact we can make when we pull together. There are multiple different ways to contribute to this cause. Organize a local meetup: If you are interested in organizing a local meetup, that's awesome! You can take a look at this document, which describes the event in more detail and provides some guidance for you. We will expand the document in the coming weeks and months. At the end of the document is a list of folks listed, please add yourself and join the tag-env-sustainability channel in the CNCF Slack Workspace. Support the overall organization: We are looking for some helping hands to organize the overall event. We want to make sure that we learn as much as we can from the discussions at the local meetups and that it is a great event overall. Please reach out to me if you are interested in helping out. This document lists tasks. People interested in supporting the organization are meeting next Thursday. The meeting is open to all, stop by and say hello :). Supporting & Facilitating: If you know someone who is interested in this topic, feel free to let them know about this. Or maybe you have some time to read through the document and add some comments to improve the program, that is also very welcome! Speaker: Perhaps you are currently involved with the topic of cloud native sustainability and would be open to speaking about it at one of the events. Please let us know. Each local Meetup organizer is responsible for organizing their Meetup locally, including finding a venue, speakers, etc., but we are happy to facilitate your interest! There are plenty of things for us to do until the event goes down in the second week of October. Until then, see you around. And browse through the TAG ENV Slack channel and the calendar for the latest discussions. There are many things in motion and interesting discussions, projects, and collaborations are emerging. Thanks to all for the support! — Leo Co-Chair CNCF TAG Environmental Sustainability</div> </div> <span class="thread-attribution"> Started by Leonard Pahlke @ <script id="timedisptopic99526591"> $('#timedisptopic99526591').replaceWith(DisplayShortTime(1686746816541021038, false )); </script> </span> </div> </div> </div> </td> </tr> <tr > <td hx-boost="true" hx-target="#maincontent-refresh" hx-push-url="true" hx-history="false" hx-on::after-request="document.getElementById('maincontent').scrollTo({top: 0, behavior: 'instant'})" > <div style="margin-top:3px;margin-bottom:3px;"> <div class="row"> <div class="col-xs-12"> <span class="subject"> <a class="showvisited subject" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topic/vote_tag_env_sustainability/98951522">[VOTE] TAG Env Sustainability Communications Working Group</a> <span class="hashtag-position label label-primary" style="font-size:11.25px;">16</span> <i class="fa fa-paperclip"></i> </span> <div class="truncate-one-line"> <div tabindex="0">Hello All, A new Communications Working Group (WG) has been proposed within the Env Sustainability TAG. Here is the proposal: Description Create separate working group (WG) focused on communications for the TAG to organize communications and marketing efforts. Impact This WG will help to focus our main meetings. Each main meeting will include an update from Comms WG. Scope Separate meetings (to be determined frequency/length by TAG) from main meeting regarding the following: events website maintenance marketing content (blogs, white papers, website copy, etc. Please vote with a +1 if in agreement. Voting will remain open for 3 weeks, ending June 6. Thank you!</div> </div> <span class="thread-attribution"> Started by Cara Delia @ <script id="timedisptopic98951522"> $('#timedisptopic98951522').replaceWith(DisplayShortTime(1684339784260216568, false )); </script> · Most recent @ <script id="timedisptopic-recent98951522"> $('#timedisptopic-recent98951522').replaceWith(DisplayShortTime(1684951516851488389, false )); </script> </span> </div> </div> </div> </td> </tr> <tr > <td hx-boost="true" hx-target="#maincontent-refresh" hx-push-url="true" hx-history="false" hx-on::after-request="document.getElementById('maincontent').scrollTo({top: 0, behavior: 'instant'})" > <div style="margin-top:3px;margin-bottom:3px;"> <div class="row"> <div class="col-xs-12"> <span class="subject"> <a class="showvisited subject" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topic/kepler_demo_deck_and_slack/98103502">Kepler demo deck and slack</a> <i class="fa fa-paperclip"></i> </span> <div class="truncate-one-line"> <div tabindex="0">Hi Community, It was a pleasure to present Kepler at the meeting yesterday. Please find the updated deck. If you are interested in knowing more, you are welcome to join the slack channel https://join.slack.com/t/sustainableco-ese6814/shared_invite/zt-12fc90l1d-0ESqa4pEiWvCbirKE9B2ZQ Cheers! Huamin</div> </div> <span class="thread-attribution"> Started by Huamin Chen @ <script id="timedisptopic98103502"> $('#timedisptopic98103502').replaceWith(DisplayShortTime(1680783645357634316, false )); </script> </span> </div> </div> </div> </td> </tr> <tr > <td hx-boost="true" hx-target="#maincontent-refresh" hx-push-url="true" hx-history="false" hx-on::after-request="document.getElementById('maincontent').scrollTo({top: 0, behavior: 'instant'})" > <div style="margin-top:3px;margin-bottom:3px;"> <div class="row"> <div class="col-xs-12"> <span class="subject"> <a class="showvisited subject" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topic/cncf_tag_env_at_kubecon_eu/98035182">CNCF TAG ENV at Kubecon EU</a> <i class="fa fa-paperclip"></i> </span> <div class="truncate-one-line"> <div tabindex="0">Hello everyone, Kubecon EU starts in about two weeks from now and this marks a milestone for the TAG ENV. The TAG ENV has a meetup planned on Tuesday and a talk on Thursday. Here are things work in process which we like to wrap up until then. Each item in the list has a link to its tracking GitHub issue in its title. Landscape Document: TODO: review current version next week - @MarlowWeston will write in #tag-environmental-sustainability when she is ready Blog post about the Survey we did last fall: TODO: review slides, support draft blog post sustainability.cncf.io website content: TODO: add content TAG ENV Meetup at Kubecon: TODO: add your items on the agenda @NikiManoledaki put together a list of sustainability related talks at Kubecon you’ll might be interested in checking out Tuesday 19th of April Power-Aware Scheduling: https://sched.co/1HyWC GreenCourier: https://sched.co/1HyXM TAG Project Meeting: https://sched.co/1JWOX Wednesday 19th of April Building a Sustainable, Carbon-Aware Cloud: https://sched.co/1HyPo Accelerate Sustainable Computing with Community Collaboration https://sched.co/1HyPf Be the Change Our Planet Seeks: How YOU Can Contribute to Running Environment-Friendly Workloads on Kubernetes https://sched.co/1HyW9 Thursday 20th of April The state of green software + cloud native https://sched.co/1Hzd3 <- last but not least, remember this one either Minimizing Energy Consumption in Bare Metal Environments https://sched.co/1HybW See you in Amsterdam! Thanks, Leo — Further discussions, please see the slack thread: Slack cloud-native.slack.com</div> </div> <span class="thread-attribution"> Started by Leonard Pahlke @ <script id="timedisptopic98035182"> $('#timedisptopic98035182').replaceWith(DisplayShortTime(1680528972365195988, false )); </script> </span> </div> </div> </div> </td> </tr> <tr > <td hx-boost="true" hx-target="#maincontent-refresh" hx-push-url="true" hx-history="false" hx-on::after-request="document.getElementById('maincontent').scrollTo({top: 0, behavior: 'instant'})" > <div style="margin-top:3px;margin-bottom:3px;"> <div class="row"> <div class="col-xs-12"> <span class="subject"> <a class="showvisited subject" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topic/potentials_of_green_coding/95691645">Potentials of Green Coding Questionnaire</a> </span> <div class="truncate-one-line"> <div tabindex="0">Hello everybody, in the project "Potentials of Green Coding", the German Informatics Society e.V., the Berlin University of Applied Sciences (HTW) and the Environmental Campus Birkenfeld of the Trier University of Applied Sciences are developing concepts and recommendations for anchoring sustainable software development in the software industry and in higher education. As part of the project, we have developed a short questionnaire that helps us better understand which strategies for sustainable software development are already in use in the software industry and how these are implemented. We would be grateful if a person with a technical role in your company would be willing to answer this 10-minute questionnaire: https://www.surveymonkey.de/r/greencoding Software as the basis of the Internet has a significant impact on energy consumption, energy efficiency and the lifespan of hardware and thus on the Internet's energy and resource consumption. Despite its great importance, general regulation or recommendations for sustainable software are still in their infancy. With this survey, we aim to answer the following questions: Which concepts regarding sustainable software development are already known to software companies? Are concrete strategies already being used and if so, which are they and how do they fit into the software development process? How do relevant stakeholders assess the potential of sustainable software development? We would greatly appreciate your support. The results will be published in spring 2023 in an industry workshop and as a working paper. Please let us know if you would be interested to participate in our other activities as well. If you have any questions about the questionnaire or the project please do not hesitate to contact us. Best, Dennis PS: I would also appreciate if you could like or share my linkedin Post, so we can extend our range for the survey: https://www.linkedin.com/feed/update/urn:li:activity:7009170608391340032/ -- Dennis M. Junger Fachbereich 2 - Ingenieurwissenschaften - Technik und Leben Hochschule für Technik und Wirtschaft (HTW) Berlin Wilhelminenhofstr. 75A, 12459 Berlin Gebäude F, Raum 213 Dennis.Junger@... | www.htw-berlin.de</div> </div> <span class="thread-attribution"> Started by Dennis M. Junger @ <script id="timedisptopic95691645"> $('#timedisptopic95691645').replaceWith(DisplayShortTime(1671120966309589640, false )); </script> </span> </div> </div> </div> </td> </tr> <tr > <td hx-boost="true" hx-target="#maincontent-refresh" hx-push-url="true" hx-history="false" hx-on::after-request="document.getElementById('maincontent').scrollTo({top: 0, behavior: 'instant'})" > <div style="margin-top:3px;margin-bottom:3px;"> <div class="row"> <div class="col-xs-12"> <div id="msgpayload-131" class="pull-right" style="margin-left:10px;"> <a href="#" onclick="ViewImages(131, 0);return false;" data-image-url="/g/cncf-tag-env-sustainability/attachment/131/0?download=1" data-id="131" data-index="0" data-image-name="CNCF-TAG-ENV-LOGO-OPTIONS.png" data-image-date="11/28/22, 01:39 PM"> <img class="img-rounded" src="/g/cncf-tag-env-sustainability/attachment/131/0?threaddownload=1" style="max-width:100px;max-height:100px;" loading="lazy"> </a> </div> <span class="subject"> <a class="showvisited subject" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topic/vote_tag_environmental/95321750">[VOTE] TAG Environmental Sustainability Logo</a> <i class="fa fa-paperclip"></i> </span> <div class="truncate-two-lines"> <div tabindex="0">Hi everyone, We now have a number of great logo options to choose from for our TAG! We have created a ballot where multiple suggestions can be submitted 🙂. You can compare the choices on the ballot with the reference image attached! We will close the voting next week Wednesday at our TAG meeting. GitHub issue: https://github.com/cncf/tag-env-sustainability/issues/41 Ballot link: https://www.rcv123.org/ballot/jd4QVE6RL2PojzuYjrihb5 — Leo</div> </div> <span class="thread-attribution"> Started by Leonard Pahlke @ <script id="timedisptopic95321750"> $('#timedisptopic95321750').replaceWith(DisplayShortTime(1669671577028840995, false )); </script> </span> </div> </div> </div> </td> </tr> <tr > <td hx-boost="true" hx-target="#maincontent-refresh" hx-push-url="true" hx-history="false" hx-on::after-request="document.getElementById('maincontent').scrollTo({top: 0, behavior: 'instant'})" > <div style="margin-top:3px;margin-bottom:3px;"> <div class="row"> <div class="col-xs-12"> <span class="subject"> <a class="showvisited subject" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topic/cncf_tag_environmental/95203801">CNCF TAG Environmental Sustainability Updates November</a> </span> <div class="truncate-one-line"> <div tabindex="0">Dear all, we wanted to give you an overview of the items we are working on, and looking for your help. Our survey https://www.surveymonkey.com/r/TAG-Environmental-Sustainability-2022 is still open until the end of November. Please take 5 minutes for the survey, and also, sharing it in your network would be more than welcome. We tidied up our repository and migrated open tasks to GitHub issues. You can find an overview here https://github.com/orgs/cncf/projects/10 . As a next target, we are looking at KubeCon+CloudNativeCon Europe in the end of April 2023. For this milestone (https://github.com/cncf/tag-env-sustainability/milestone/1) we currently have a few tasks and deliverables selected: Plan a project/TAG meeting at KubeCon https://github.com/cncf/tag-env-sustainability/issues/43 Finalize a current version of the landscape document https://github.com/cncf/tag-env-sustainability/issues/48 Analyze and prepare a report from our survey https://github.com/cncf/tag-env-sustainability/issues/51 Define the first version of a maturity model https://github.com/cncf/tag-env-sustainability/issues/50 Besides this, we have other open items that we are working on and can be found in the issues list https://github.com/cncf/tag-env-sustainability/issues . We invite everyone to contribute to those open items, just leave a comment on the issue you like to support or maybe even take over and drive it. Our next TAG meeting will be on the 7th of December. Best Regards Liquid Reply GmbH Sitz/Registered Office: Gütersloh Handelsregister/Register of Companies: Amtsgericht Gütersloh, HRB 11915 Geschäftsführer/Managing Directors: Dr. Thomas Hartmann, Tomislav Zorc</div> </div> <span class="thread-attribution"> Started by Koerbaecher Max @ <script id="timedisptopic95203801"> $('#timedisptopic95203801').replaceWith(DisplayShortTime(1669145361736824018, false )); </script> </span> </div> </div> </div> </td> </tr> <tr > <td hx-boost="true" hx-target="#maincontent-refresh" hx-push-url="true" hx-history="false" hx-on::after-request="document.getElementById('maincontent').scrollTo({top: 0, behavior: 'instant'})" > <div style="margin-top:3px;margin-bottom:3px;"> <div class="row"> <div class="col-xs-12"> <span class="subject"> <a class="showvisited subject" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topic/result_tag_environmental/94187320">[RESULT] TAG Environmental Sustainability Chairs Elected</a> <span class="hashtag-position label label-primary" style="font-size:11.25px;">10</span> </span> <div class="truncate-one-line"> <div tabindex="0">The TOC has elected the following three people for co-chair of TAG Environmental Sustainability: Max Körbächer Leonard Pahlke Marlow Weston Thank you to all the nominees! -- Amye Scavarda Perrin | Director of Developer Programs, CNCF | amye@...</div> </div> <span class="thread-attribution"> Started by Amye Scavarda Perrin @ <script id="timedisptopic94187320"> $('#timedisptopic94187320').replaceWith(DisplayShortTime(1665171332927002759, false )); </script> · Most recent @ <script id="timedisptopic-recent94187320"> $('#timedisptopic-recent94187320').replaceWith(DisplayShortTime(1665586764658793572, false )); </script> </span> </div> </div> </div> </td> </tr> <tr > <td hx-boost="true" hx-target="#maincontent-refresh" hx-push-url="true" hx-history="false" hx-on::after-request="document.getElementById('maincontent').scrollTo({top: 0, behavior: 'instant'})" > <div style="margin-top:3px;margin-bottom:3px;"> <div class="row"> <div class="col-xs-12"> <span class="subject"> <a class="showvisited subject" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topic/environmental_sustainability/94120735">Environmental Sustainability Survey Proposal</a> <span class="hashtag-position label label-primary" style="font-size:11.25px;">11</span> </span> <div class="truncate-one-line"> <div tabindex="0">Dear all, Some weeks back, we discussed that we would like to have a survey prepared for the KubeCon+CloudNativeCon and the following weeks, to understand the community and especially the end users of the cloud native ecosystem regarding their current sustainability challenges and demands. We would like to hear your feedback (as a comment within the doc) or a +1 on this mail if you are happy with it and good to go. Due to the narrow timeline, we would be happy to get fast feedback to process the survey through its next steps. Please find the survey questions and answers here: https://docs.google.com/document/d/1_yTOtWeosDsGpSy--gzIlous_zxGcHYRXFhcg1PMCSA/edit?usp=sharing Best regards Your Environmental Sustainability TAG Liquid Reply GmbH Sitz/Registered Office: Gütersloh Handelsregister/Register of Companies: Amtsgericht Gütersloh, HRB 11915 Geschäftsführer/Managing Directors: Dr. Thomas Hartmann, Tomislav Zorc</div> </div> <span class="thread-attribution"> Started by Koerbaecher Max @ <script id="timedisptopic94120735"> $('#timedisptopic94120735').replaceWith(DisplayShortTime(1664909795744127623, false )); </script> · Most recent @ <script id="timedisptopic-recent94120735"> $('#timedisptopic-recent94120735').replaceWith(DisplayShortTime(1665486464293351953, false )); </script> </span> </div> </div> </div> </td> </tr> <tr > <td hx-boost="true" hx-target="#maincontent-refresh" hx-push-url="true" hx-history="false" hx-on::after-request="document.getElementById('maincontent').scrollTo({top: 0, behavior: 'instant'})" > <div style="margin-top:3px;margin-bottom:3px;"> <div class="row"> <div class="col-xs-12"> <span class="subject"> <a class="showvisited subject" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topic/kubecon_speaking_session/94022251">Kubecon Speaking Session Submitted</a> <span class="hashtag-position label label-primary" style="font-size:11.25px;">4</span> </span> <div class="truncate-one-line"> <div tabindex="0">Hi All, The Title/Abstract/Tentative Bio have been shared for Kubecon. Here is what was submitted> Title: How to Get Involved in CNCF Environmental Sustainability TAG Abstract: In September of 2022, the Environmental Sustainability Technical Advisory Group (TAG) was created within the CNCF. The charter was worked on by many members of the community with passion for minimizing carbon consumption. The TAG was created to advocate, develop, support, and help evaluate environmental sustainability initiatives within cloud native technologies. Hear from the TAG co-chairs as they present to the CNCF community the TAG’s charter and scope, introduce ongoing and planned initiatives, and answer questions from the community. In this session, we will discuss in detail the goals of the TAG, share how it will identify values and incentives for service providers to reduce their consumption and carbon footprint through cloud native tooling, and discuss how you can become involved. Bio: The bio is tentative as the co-chairs for the TAG have not yet been chosen. Marlow Weston is a Cloud Software Architect at Intel working on resource management with a focus on performance and sustainability. Previously, she has worked in a variety of areas including MLOps, high performance computing tools, security, embedded systems, kernel drivers, tracing libraries, and web scrapers. (No headshot.) (edited)</div> </div> <span class="thread-attribution"> Started by Cara Delia @ <script id="timedisptopic94022251"> $('#timedisptopic94022251').replaceWith(DisplayShortTime(1664559173962269806, false )); </script> · Most recent @ <script id="timedisptopic-recent94022251"> $('#timedisptopic-recent94022251').replaceWith(DisplayShortTime(1664563902445920664, false )); </script> </span> </div> </div> </div> </td> </tr> <tr > <td hx-boost="true" hx-target="#maincontent-refresh" hx-push-url="true" hx-history="false" hx-on::after-request="document.getElementById('maincontent').scrollTo({top: 0, behavior: 'instant'})" > <div style="margin-top:3px;margin-bottom:3px;"> <div class="row"> <div class="col-xs-12"> <span class="subject"> <a class="showvisited subject" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topic/call_for_chairs_nomination/93811268">Call for Chairs, nomination period open now through September 30th</a> <span class="hashtag-position label label-primary" style="font-size:11.25px;">8</span> </span> <div class="truncate-one-line"> <div tabindex="0">As defined in the TAG Charter ( https://github.com/cncf/toc/blob/main/tags/cncf-tags.md#chair), three co-chair positions are open for TAG Environmental Sustainability. The role of the chair is to support the group in an administrative capacity: "Primarily performs administrative functions including collecting and compiling topics for the (bi)weekly agenda, chairing the meeting, ensuring that quality meeting minutes are published, and follow-up actions tracked and resolved." Nominations are open at this time through noon Pacific time on Friday, September 30th. If you are interested in nominating yourself for one of the three co-chair positions, please reply to this email with a nominating statement and biography. -- Amye Scavarda Perrin | Director of Developer Programs, CNCF | amye@...</div> </div> <span class="thread-attribution"> Started by Amye Scavarda Perrin @ <script id="timedisptopic93811268"> $('#timedisptopic93811268').replaceWith(DisplayShortTime(1663700298775728317, false )); </script> · Most recent @ <script id="timedisptopic-recent93811268"> $('#timedisptopic-recent93811268').replaceWith(DisplayShortTime(1664463463034343276, false )); </script> </span> </div> </div> </div> </td> </tr> <tr > <td hx-boost="true" hx-target="#maincontent-refresh" hx-push-url="true" hx-history="false" hx-on::after-request="document.getElementById('maincontent').scrollTo({top: 0, behavior: 'instant'})" > <div style="margin-top:3px;margin-bottom:3px;"> <div class="row"> <div class="col-xs-12"> <span class="subject"> <a class="showvisited subject" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topic/co_chair_nominations/93983904">Co-Chair nominations</a> <span class="hashtag-position label label-primary" style="font-size:11.25px;">2</span> </span> <div class="truncate-one-line"> <div tabindex="0">Hello All, As your TOC sponsor I just want to make sure if you have questions regarding processes they are answered in an open fashion to equally share this information to everyone. This is typically best accomplished through the mailing list. Though it's not clearly stated in our current TOC TAG documentation, it's customary not to ping/solicit TOC members individually requesting support for their vote. Please know we will thoughtfully evaluate each nomination and if we have specific questions we will reach out to you directly. Thank you, Erin-- Erin A. Boyd Director of Emerging Technologies OCTO Distinguished Engineer Red Hat eboyd@...</div> </div> <span class="thread-attribution"> Started by Erin Boyd @ <script id="timedisptopic93983904"> $('#timedisptopic93983904').replaceWith(DisplayShortTime(1664405204539905151, false )); </script> · Most recent @ <script id="timedisptopic-recent93983904"> $('#timedisptopic-recent93983904').replaceWith(DisplayShortTime(1664406472960626784, false )); </script> </span> </div> </div> </div> </td> </tr> <tr > <td hx-boost="true" hx-target="#maincontent-refresh" hx-push-url="true" hx-history="false" hx-on::after-request="document.getElementById('maincontent').scrollTo({top: 0, behavior: 'instant'})" > <div style="margin-top:3px;margin-bottom:3px;"> <div class="row"> <div class="col-xs-12"> <span class="subject"> <a class="showvisited subject" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topic/kubecon_na_2022_tag_talk/93839473">KubeCon NA 2022 TAG talk</a> <span class="hashtag-position label label-primary" style="font-size:11.25px;">18</span> </span> <div class="truncate-one-line"> <div tabindex="0">Hi All! Good news! The CNCF (in this case, Cody) says they can hold a speaking slot for us! We need a title and abstract ASAP, hopefully by the end of this week, and can fill in speakers after chairs are chosen. Here's an example talk by a TAG: https://sched.co/182Mr Would someone like to coordinate on that? I'm happy to help as well. Hope is to have it done this week. Many thanks! --Marlow</div> </div> <span class="thread-attribution"> Started by Marlow Weston @ <script id="timedisptopic93839473"> $('#timedisptopic93839473').replaceWith(DisplayShortTime(1663805648575351596, false )); </script> · Most recent @ <script id="timedisptopic-recent93839473"> $('#timedisptopic-recent93839473').replaceWith(DisplayShortTime(1664056827639401719, false )); </script> </span> </div> </div> </div> </td> </tr> <tr > <td hx-boost="true" hx-target="#maincontent-refresh" hx-push-url="true" hx-history="false" hx-on::after-request="document.getElementById('maincontent').scrollTo({top: 0, behavior: 'instant'})" > <div style="margin-top:3px;margin-bottom:3px;"> <div class="row"> <div class="col-xs-12"> <span class="subject"> <a class="showvisited subject" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topic/sig_environmental/93860355">Sig Environmental Sustainability Deliverables for KubeCon</a> </span> <div class="truncate-one-line"> <div tabindex="0">Hi All, We have enough interest, and are meeting for the Sig Environmental Sustainability Deliverables on September 27th, 2022 at 9am CST/7AM PST/ Let's use the regular zoom for the tag-sustainability group. Link here: https://zoom.us/my/cncftagenvsustainability PW as always 77777 (assuming there is one). Best wishes, --Marlow</div> </div> <span class="thread-attribution"> Started by Marlow Weston @ <script id="timedisptopic93860355"> $('#timedisptopic93860355').replaceWith(DisplayShortTime(1663889507425112804, false )); </script> </span> </div> </div> </div> </td> </tr> <tr > <td hx-boost="true" hx-target="#maincontent-refresh" hx-push-url="true" hx-history="false" hx-on::after-request="document.getElementById('maincontent').scrollTo({top: 0, behavior: 'instant'})" > <div style="margin-top:3px;margin-bottom:3px;"> <div class="row"> <div class="col-xs-12"> <span class="subject"> <a class="showvisited subject" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topic/first_tag_meeting/93793039">First TAG meeting</a> <span class="hashtag-position label label-primary" style="font-size:11.25px;">4</span> </span> <div class="truncate-one-line"> <div tabindex="0">Hey, We are going to have the first TAG meeting Thu Sept 21st. As we are cruising into KubeCon, can we get prepared for this meeting? - During the last meeting, we had action items: community meeting schedule, end user sustainability survey and distribution, potential KubeCon F2F meeting. - It is also time sensitive to get the TAG chair and governance in place. Keep calm and think sustainable! Huamin</div> </div> <span class="thread-attribution"> Started by Huamin Chen @ <script id="timedisptopic93793039"> $('#timedisptopic93793039').replaceWith(DisplayShortTime(1663628697190229402, false )); </script> · Most recent @ <script id="timedisptopic-recent93793039"> $('#timedisptopic-recent93793039').replaceWith(DisplayShortTime(1663630803872600969, false )); </script> </span> </div> </div> </div> </td> </tr> </table> <form class="form" method="POST" action="https://lists.cncf.io/g/cncf-tag-env-sustainability/domerge"> <input type="hidden" name="threadid" id="threadid" value="0"> <!-- Verify Merge Modal --> <div class="modal fade" id="mergeThreadModal" tabindex="-1" role="dialog" aria-labelledby="mergeThreadModalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal"> <span aria-hidden="true"> × </span> <span class="sr-only"> Close </span> </button> <h4 class="modal-title" id="mergeThreadModalLabel"> Verify Merge </h4> </div> <div class="modal-body"> Are you sure you wish to merge the topic '' into the topic '<span id="subject">Action</span>'? </div> <div class="modal-footer"> <button type="button" class="btn btn-default btn-sm" data-dismiss="modal"> <i class="fa fa-times"></i> Cancel </button> <button class="btn btn-primary btn-sm" name="merge" value="1"> <i class="fa fa-compress"></i> Yes </button> </div> </div> </div> </div> </form> <div class="row" style="margin-bottom:20px;"> <div class="col-xs-12"> <div class="pull-right form-inline"> <span class="form-group"> 1 - 20 of 39 </span> <ul class="pagination form-group" style="margin: 0px !important;vertical-align:middle;"> <li class="disabled"> <a href="#"> <i class="fa fa-chevron-left"> <span class="sr-only"> previous page </span> </i> </a> </li> <li class="hidden-xs disabled"> <a class="currentpage" href="#"> 1 </a> </li> <li class="hidden-xs"> <a rel="nofollow" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topics?page=2"> 2 </a> </li> <li> <a href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topics?page=2&after=1663630803872600969"> <i class="fa fa-chevron-right"> <span class="sr-only"> next page </span> </i> </a> </li> </ul> </div> </div> </div> <!-- Verify Remove Modal --> <form class="form-horizontal" id="delModalForm" method="POST" action="https://lists.cncf.io/g/cncf-tag-env-sustainability/editthread"> <input type="hidden" name="tid" id="delthreadid" value=""> <div class="modal fade" id="deleteThreadModal" tabindex="-1" role="dialog" aria-labelledby="deleteThreadModalLabel"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-header"> <button type="button" class="close" data-dismiss="modal"> <span aria-hidden="true"> × </span> <span class="sr-only"> Close </span> </button> <h4 class="modal-title" id="deleteThreadModalLabel"> Verify Delete </h4> </div> <div class="modal-body"> Are you sure you wish to delete this topic? This cannot be undone. </div> <div class="modal-footer"> <button type="button" class="btn btn-default btn-sm" data-dismiss="modal"> <i class="fa fa-times"></i> Cancel </button> <button class="btn btn-danger btn-sm" name="delthread" value="1"> <i class="fa fa-trash-alt"></i> Yes </button> </div> </div> </div> </div> </form> <!-- View Image Modal --> <div class="viewer-overlay" id="overlay"> <div class="viewer-overlay-controls"> <i class="fa-regular fa-2x fa-arrow-down-to-line" id="downloadImage" style="margin-left: 20px;color: #FFF;cursor: pointer;"></i> <i class="fa-regular fa-2x fa-times" id="closeOverlay" style="margin-left: 20px;color: #FFF;cursor: pointer;"></i> </div> <div class="viewer-image-container"> <i class="fa-regular fa-2x fa-chevron-left viewer-arrow" id="prevImage" style="left:-35px;color: #FFF;cursor: pointer;"></i> <img id="currentImage" src="" alt="Current Image"> <i class="fa-regular fa-2x fa-chevron-right viewer-arrow" id="nextImage" style="right:-35px;color: #FFF;cursor: pointer;"></i> </div> <div class="viewer-image-info"> <b>Image Name</b><br> Sat 8:39am </div> <div class="viewer-thumbnail-outer-container" id="thumbnailOuterContainer"> <div class="viewer-thumbnail-container" id="thumbnailContainer"></div> </div> </div> <script> contentLoaded(false, function() { UpdateSidebar("archives"); const ViewImages = (function() { // Private variables let imageURLs = []; let currentImageIndex = 0; // Private functions function updateImage() { const currentImage = imageURLs[currentImageIndex]; document.getElementById('currentImage').src = currentImage.url; const imageInfo = document.querySelector('.viewer-image-info'); imageInfo.innerHTML = `<b>${currentImage.name}</b><br>${currentImage.date}`; document.querySelectorAll('.viewer-thumbnail').forEach(function(thumb, index) { thumb.classList.remove('selected'); if (index === currentImageIndex) { thumb.classList.add('selected'); } }); scrollThumbnailsToCenter(); } function scrollThumbnailsToCenter() { const outerContainer = document.getElementById('thumbnailOuterContainer'); const container = document.getElementById('thumbnailContainer'); const selectedThumb = document.querySelector('.viewer-thumbnail.selected'); const scrollLeft = -1*(selectedThumb.offsetLeft - outerContainer.offsetWidth / 2 + selectedThumb.offsetWidth / 2); console.log("offset: " + selectedThumb.offsetLeft); console.log("outerContainer width: " + outerContainer.offsetWidth); console.log("container width: " + container.offsetWidth); console.log("image width: " + selectedThumb.offsetWidth); scroll = scrollLeft + "px" console.log("scrollLeft: " + scroll); $('#thumbnailContainer').css({left:scroll}).animate({'left': scroll}, 500); } let viewerTouchStartX = 0; let viewerTouchEndX = 0; function viewerHandleTouchStart(event) { console.log("viewerHandleTouchStart"); viewerTouchStartX = event.changedTouches[0].clientX; } function viewerHandleTouchEnd(event) { console.log("viewerHandleTouchEnd"); viewerTouchEndX = event.changedTouches[0].clientX; handleSwipe(); } function handleSwipe() { if (viewerTouchEndX < viewerTouchStartX) { // Swipe left if (currentImageIndex < imageURLs.length - 1) { currentImageIndex = currentImageIndex + 1; updateImage(); } } if (viewerTouchEndX > viewerTouchStartX) { // Swipe right if (currentImageIndex > 0) { currentImageIndex = currentImageIndex - 1; updateImage(); } } } // Public functions function View(dataId, index) { event.preventDefault(); // Stop the default action // Find the parent msgpayload element using the data-id let msgPayloadElement = document.getElementById(`msgpayload-${dataId}`); // Find all image elements within the msgpayload element imageURLs = []; currentImageIndex = index; // Loop through each image element and push its src attribute to the imageURLs array let imageElements = msgPayloadElement.querySelectorAll('[data-image-url]'); imageElements.forEach(function(img) { let imgObj = new Object; imgObj.url = img.getAttribute('data-image-url'); imgObj.name = img.getAttribute('data-image-name'); imgObj.date = img.getAttribute('data-image-date'); imageURLs.push(imgObj); }); const thumbnailContainer = document.getElementById('thumbnailContainer'); thumbnailContainer.innerHTML = ''; imageURLs.forEach((image, i) => { const thumbnail = document.createElement('img'); thumbnail.className = 'viewer-thumbnail thumbnail'; thumbnail.src = image.url; thumbnail.style.display = "inline-table"; thumbnail.addEventListener('click', function() { currentImageIndex = i; updateImage(); }); thumbnailContainer.appendChild(thumbnail); }); if (imageURLs.length == 1) { // hide arrows document.getElementById('prevImage').style.display = 'none'; document.getElementById('nextImage').style.display = 'none'; } document.getElementById('overlay').classList.add('visible'); updateImage(); // Now you have an array of image URLs console.log(imageURLs); } function Destroy() { // Cleanup code, remove event listeners, etc. console.log("ViewImages destroy"); let ele = document.getElementById('downloadImage') if (ele == null) { return; } ele.removeEventListener('click', downloadImageClickHandler); document.getElementById('closeOverlay').removeEventListener('click', closeOverlayClickHandler); document.getElementById('nextImage').removeEventListener('click', nextImageClickHandler); document.getElementById('prevImage').removeEventListener('click', prevImageClickHandler); document.getElementById('currentImage').removeEventListener('touchstart', viewerHandleTouchStart); document.getElementById('currentImage').removeEventListener('touchend', viewerHandleTouchEnd); document.removeEventListener('keyup', keyupHandler); document.getElementById('prevImage').style.display = 'block'; document.getElementById('nextImage').style.display = 'block'; } // Initialize event listeners document.getElementById('downloadImage').addEventListener('click', downloadImageClickHandler); function downloadImageClickHandler() { saveImage(); } async function saveImage() { // Get the image element const imageElement = document.getElementById('myImage'); // Fetch the image const response = await fetch(imageURLs[currentImageIndex].url); const blob = await response.blob(); // Create an anchor element const a = document.createElement('a'); // Create a URL for the blob const url = URL.createObjectURL(blob); // Set the href attribute to the blob URL a.href = url; // Set the download attribute to specify the file name a.download = imageURLs[currentImageIndex].name; // Append the anchor to the DOM (this part is necessary for Firefox) document.body.appendChild(a); // Trigger the download a.click(); // Release the blob URL URL.revokeObjectURL(url); // Remove the anchor from the DOM document.body.removeChild(a); } document.getElementById('closeOverlay').addEventListener('click', closeOverlayClickHandler); function closeOverlayClickHandler() { document.getElementById('overlay').classList.remove('visible'); } document.getElementById('nextImage').addEventListener('click', nextImageClickHandler); function nextImageClickHandler() { currentImageIndex = (currentImageIndex + 1) % imageURLs.length; updateImage(); } document.getElementById('prevImage').addEventListener('click', prevImageClickHandler); function prevImageClickHandler() { currentImageIndex = (currentImageIndex - 1 + imageURLs.length) % imageURLs.length; updateImage(); } document.addEventListener('keyup', keyupHandler); function keyupHandler(e) { if (e.key === 'Escape') { let ele = document.getElementById('overlay'); if (ele != null) { ele.classList.remove('visible'); } } } // Attach touch events document.getElementById('currentImage').addEventListener('touchstart', viewerHandleTouchStart); document.getElementById('currentImage').addEventListener('touchend', viewerHandleTouchEnd); return { View, Destroy }; })(); window.ViewImages = ViewImages.View; gioDestroy(function(evt) { window.ViewImages = null; ViewImages.Destroy(); }); $('.hashtagcheckbox').change(function() { let el = $(this); switch(el.data('checked')) { // checked, going indeterminate case 0: console.log("case 0"); el.data('checked',1); el.prop('indeterminate',true); break; // indeterminate, going unchecked case 1: console.log("case 1"); el.data('checked',2); el.prop('indeterminate',false); el.prop('checked',false); break; // checked, going unchecked default: console.log("case default"); el.data('checked',0); el.prop('indeterminate',false); el.prop('checked',true); } }); // prevent dropdown closure on clicking checkbox labels $('#hashtagFilterMenu').on('click', function (e) { e.stopPropagation(); }); $('#filterdropdown').on('hide.bs.dropdown', function (e) { console.log("HIDE DROPDOWN!"); }); $(".modal").on('shown.bs.modal', function () { $(this).find("input:visible:first").focus(); }); $("[data-toggle='tooltip']").tooltip(); setPullToRefresh(); }) function searchHashtags() { var cbs = document.getElementsByTagName('input'); for(var i=0; i < cbs.length; i++) { if(cbs[i].indeterminate == true) { $('<input>').attr({ type: 'hidden', name: 'exclude', value: cbs[i].value, }).appendTo('#searchForm'); } } submitEvent('#searchForm'); } function setupInto(threadid, subject) { $("#subject").replaceWith("<span id=\"subject\">" + subject + "</span>"); $('#threadid').val(threadid); } $('#mergeThreadModal').on('show.bs.modal', function(event) { var button = $(event.relatedTarget) // Button that triggered the modal var subject = button.data('subject') // Extract info from data-* attributes var threadid = button.data('threadid') // Extract info from data-* attributes $("#subject").replaceWith("<span id=\"subject\">" + subject + "</span>"); $('#threadid').val(threadid); }) $('#deleteThreadModal').on('show.bs.modal', function(event) { var button = $(event.relatedTarget) // Button that triggered the modal var threadid = button.data('threadid') // Extract info from data-* attributes $('#delthreadid').val(threadid); }) function setupDeleteModal(threadid) { console.log("in setupDeleteModal") } function showElement(isTruncated) { this.style.display = 'block'; } </script> </div> </div> </div> </div> <div class="row hidden-print" id="mobileSidebar" hx-boost="true" hx-target="#maincontent-refresh" hx-push-url="true" hx-history="false" hx-on::after-request="document.getElementById('maincontent').scrollTo({top: 0, behavior: 'instant'})" > <div id="mobileSidebarSub" class="col-xs-12 hidden-md hidden-lg"> <div class="navbar navbar-default navbar-fixed-bottom"> <div class="container" style="display: flex; justify-content: space-around;"> <div id="mobilesidebar-archives" class="mobilesidebar-item" style="margin-top:10px; padding-bottom:20px; flex: 1; text-align: center;" hx-get="https://lists.cncf.io/g/cncf-tag-env-sustainability/topics?sidebar=true" hx-boost="true" hx-target="#maincontent-refresh" hx-push-url="true" hx-history="false" hx-on::after-request="document.getElementById('maincontent').scrollTo({top: 0, behavior: 'instant'})" > <div style="display: inline-block; position: relative;"> <div style="position: relative;display: inline-block;"> <i class="fa-fw fa-solid fa-comments fa-2x"></i> </div><br> <span style="font-size:12px;">Messages</span> </div> </div> <div style="flex: 1; text-align: center;margin-top:10px" data-drawer-trigger aria-controls="drawer-name" aria-expanded="false"> <i class="fa-fw fa-light fa-bars fa-2x"></i><br> <span style="font-size:12px;">More</span> </div> </div> </div> <section class="drawer drawer-left" id="drawer-name" data-drawer-target> <div class="drawer-overlay" data-drawer-close tabindex="-1"></div> <div class="drawer-wrapper drawer-wrapper-top"> <div class="drawer-header"> <div class="drawer-title"> <i class="fa-fw fa-regular fa-bars fa-3x"></i> <span class="sr-only"> More Options </span> More </div> <button class="drawer-close" data-drawer-close aria-label="Close Drawer"></button> </div> <div class="drawer-content"> <div class="list-group noborderlist"> <a title="Group Home" href="https://lists.cncf.io/g/cncf-tag-env-sustainability" class="list-group-item sidebar-item"> <i class="fa-fw fa fa-home fa-lg"></i> Home </a> <a title="Messages" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/topics?sidebar=true" id="sidebar-archives-mobile" class="noborderitem list-group-item sidebar-item sidebar-item-archives active"> <i class="fa-fw fa fa-comments fa-lg"></i> Messages <span id="sidebar-archives-mobile-badge" class="badge"></span> </a> <a title="Hashtags" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/hashtags" id="sidebar-hashtags-mobile" class="noborderitem list-group-item sidebar-item sidebar-item-hashtags"> <i class="fa-fw fa fa-hashtag fa-lg"></i> Hashtags <span id="sidebar-hashtags-mobile-badge" class="badge"></span> </a> <a title="Subgroups" href="https://lists.cncf.io/g/cncf-tag-env-sustainability/subgroups" id="sidebar-subgroups-mobile" class="noborderitem list-group-item sidebar-item sidebar-item-subgroups"> <i class="fa-fw fa fa-chart-pie fa-lg"></i> Subgroups <span id="sidebar-subgroups-mobile-badge" class="badge"></span> </a> <a class="noborderitem list-group-item sidebar-item" href="https://groups.io/static/tos" target="_blank"> <i class="fa-fw fal fa-newspaper fa-lg"></i> Terms </a> </div> </div> </div> </section> </div> </div> <!-- Modal Dialog for Autocomplete --> <div class="modal fade" id="quickActionsModal" tabindex="-1" role="dialog" aria-labelledby="modalLabel" aria-hidden="true"> <div class="modal-dialog" role="document"> <div class="modal-content"> <div class="modal-body"> <input type="text" class="form-control" id="quickActionsInput" placeholder="Go to page..." style="margin-bottom:10px"> <div id="quickActionsContainer" class="autocompleteResults" style="max-height:250px; overflow-y: auto;"></div> <div class="text-center" style="margin-top:10px; font-size:12px;"><i class="fa-sharp fa-arrow-up-arrow-down"></i> to navigate <i class="fa-sharp fa-arrow-turn-down-left"></i> to use <strong>esc</strong> to dismiss</div> </div> </div> </div> </div> <script> var quickActionsData = [ {name: "Group Home", url: "https://lists.cncf.io/g/cncf-tag-env-sustainability"}, {name: "Topics", url: "https://lists.cncf.io/g/cncf-tag-env-sustainability/topics"}, {name: "Messages", url: "https://lists.cncf.io/g/cncf-tag-env-sustainability/messages"}, {name: "Expanded Messages", url: "https://lists.cncf.io/g/cncf-tag-env-sustainability/messages?expanded=1"}, {name: "Polls", url: "https://lists.cncf.io/g/cncf-tag-env-sustainability/polls"}, {name: "Hashtags", url: "https://lists.cncf.io/g/cncf-tag-env-sustainability/hashtags"}, {name: "Subgroups", url: "https://lists.cncf.io/g/cncf-tag-env-sustainability/subgroups"}, /* other pages */ {name: "Help", url: "/helpcenter"}, {name: "Feed", url: "/feed"}, {name: "Your Groups", url: "/groups"}, {name: "Your Calendar", url: "/calendar"}, {name: "Your Activity", url: "/activity"}, {name: "Your Pending Messages", url: "/pendingmsgs"}, {name: "Account Login", url: "/account"}, {name: "Account Preferences", url: "/account?page=prefs"}, {name: "Account Security", url: "/account?page=security"}, {name: "Account Identity", url: "/account?page=profile&member_info_id=0"}, {name: "Account Notifications", url: "/account?page=notifications"}, {name: "Account Other Services", url: "/account?page=oauth"}, {name: "Account Bounces", url: "/account?page=bounces"}, {name: "Account Billing", url: "/account?page=billing"}, {name: "Find a Group", url: "/search?p=SubsCount,,,20,2,0,0"}, ]; InitAutocomplete("quickActions", quickActionsData); document.addEventListener('keydown', function(event) { var tagName = event.target.tagName.toLowerCase(); if (tagName === 'input' || tagName === 'textarea' || event.target.isContentEditable) { return; } // check if the viewimages viewer is up let element = document.getElementById('overlay'); if (element && element.classList.contains('visible')) { return; } if (event.key.toLowerCase() === '/') { if (navigator.platform.toUpperCase().indexOf('MAC') >= 0) { // For Mac // Check if Command (event.metaKey) is pressed, and either Option (event.altKey) is pressed or not if (event.metaKey) { event.preventDefault(); showAutocompleteModal("quickActions"); return; } } else { // For Windows and Linux if (event.ctrlKey) { event.preventDefault(); showAutocompleteModal("quickActions"); return; } } } }); function UpdateSidebar(id) { console.log(id + " was clicked"); var sidebarItems = document.querySelectorAll('.mobilesidebar-item'); sidebarItems.forEach(function(item) { var iElement = item.getElementsByTagName('div')[0].getElementsByTagName('i')[0]; if (item.id == "mobilesidebar-" + id) { console.log("making solid " + id) iElement.classList.add('fa-solid'); iElement.classList.remove('fa-light'); } else { iElement.classList.remove('fa-solid'); iElement.classList.add('fa-light'); } }); var sidebarItems = document.querySelectorAll('.sidebar-item'); // remove 'active' class from all 'sidebar-item' elements sidebarItems.forEach(function(item) { if (item.id == "sidebar-" + id) { console.log("making active " + id) item.classList.add('active'); } else { item.classList.remove('active'); } }); } </script> </div> <div id="scroll-top-outer"> <div id="scroll-top" class="scroll-top-wrapper hidden-xs"> <span class="scroll-top-inner"> <i class="fa fa-arrow-circle-up fa-fw fa-2x"></i> </span> </div> </div> <script> $(function() { $(document).on('scroll', function() { if ($(window).scrollTop() > 100) { $('.scroll-top-wrapper').addClass('show'); } else { $('.scroll-top-wrapper').removeClass('show'); } }); $('.scroll-top-wrapper').on('click', scrollToTop); }); function scrollToTop() { verticalOffset = typeof(verticalOffset) != 'undefined' ? verticalOffset : 0; element = $('body'); offset = element.offset(); offsetTop = offset.top; $('html, body').animate({ scrollTop: offsetTop }, 100, 'linear'); } if (navigator.platform.toUpperCase().indexOf('MAC') >= 0) { let elements = document.querySelectorAll('strong.ctrlmeta'); elements.forEach((element) => { // Check if the innerText is "ctrl" if (element.innerText === 'ctrl') { // Create a new "i" element let newElement = document.createElement('i'); newElement.classList.add('fa-solid', 'fa-command'); // Replace the old "strong" element with the new "i" element element.parentNode.replaceChild(newElement, element); } }); } </script> </body> </html>