Connect with us

Maine

Rooks: School construction in Maine needs a major overhaul

Published

on

Rooks: School construction in Maine needs a major overhaul


Before leaving for Norway last week, Gov. Janet Mills announced a new commission to study the state’s school construction program and report to the Legislature by next April, to which one might respond, “It’s about time.”

The state’s existing construction model simply isn’t working, and has left towns and cities, and Maine’s regional school districts, with crumbling and outdated buildings and no clear path to replacing or renovating them.

Mills noted that in her first six years, there’s been $580 million committed, which sounds impressive until one realizes a single new high school often costs $100 million.

Advertisement

With dozens if not hundreds of inadequate buildings, replacing a handful won’t accomplish much, and the backlog of applications keeps growing.

The new commission, chaired by King Administration Labor Commissioner Valerie Landry, has a tall task, and should start with two major flaws in how school projects are financed.

The first is a peculiar compromise by which the state reimburses the local districts that actually borrow the money. Rather than a separate capital construction budget, funding is carved out from the mammoth General Purpose Aid account that goes mostly for operating expenses.

Construction is constrained by a debt ceiling – rarely increased – that limits new projects to debt retired from previous awards. Maine ends up being generous with operating support and stingy for capital spending.

Advertisement

The second flaw was introduced through adoption of the Essential Programs and Services (EPS) system in the late 1990s.

Previously, construction costs were shared between the state and the local district on a sliding scale. Towns and cities with robust tax bases, as in Cumberland County, would pay more, while those in Aroostook and Washington were mostly state-funded – but all districts paid something.

Under the EPS calculations the state pays 100% for almost every project, meaning it can fund even fewer projects than when local districts contributed.

Now, a few lucky districts effectively win the lottery, while everyone else is left out in the cold.

The infrastructure crisis has become so severe that some districts have tried to do without state funding and asked property taxpayers to pick up the entire tab. Even in Cumberland County, the results have been dismal.

Advertisement

While some local bonds have been approved, most have been turned down – not necessarily because voters don’t support schools but because they rightly see this as a state responsibility.

It makes little sense for Maine to provide 55% of all approved school spending but make construction projects wait a decade or longer. Students will have started school and graduated by then.

What can be done? There are other models.

When voters turned down several state prison bond issues during the McKernan administration, lawmakers created the Maine Governmental Facilities Authority, operating “off budget” and apart from General and Highway Fund bonds more familiar to voters.

Later expanded to courthouses, the authority has replaced or renovated nearly the entire state correctional system, and has built impressive judicial centers in several counties.

Advertisement

That’s all well and good, but most parents and taxpayers would place a higher priority on schools. That’s not the way things are working.

A School Facilities Authority may not be the answer, in part because we have an existing system, however flawed – but mostly because the authority has no real accountability to taxpayers and citizens.

One possibility: a robust General Fund bond that voters could approve to jumpstart the process, along with a real capital budget for the first time in decades.

There are other matters for the Landry commission to take up. Current rules require a perhaps excessive amount of acreage, eliminating sites close to urban and village centers and creating sprawl.

Kids can’t walk to school, and schools are increasingly remote from the communities that support them.

Advertisement

Finally, no amount of tinkering with construction funding can ignore Maine’s hopelessly decentralized school districts, well over 200 for fewer than 200,000 students – less than 1,000 per district.

A Baldacci administration initiative to consolidate failed because it ignored the proven formula for success: the Sinclair Act, passed in 1957 during the administration of Gov. Ed Muskie.

Implemented during the 1960s, Sinclair created 68 regional districts with generous support for mergers, and provided the first adequate rural high schools in Maine. The 2007 consolidation plan, by contrast, penalized districts for not merging while provided no state plan to do so.

The next administration could dust off Sinclair and see what will work in a high-tech era where public schools face unprecedented challenges.

Mainers have shown time and again they value public education and are willing to pay. Now the state must make sure they’re getting their money’s worth.

Advertisement

Douglas Rooks has been a Maine editor, columnist and reporter for 40 years. He is the author of four books, most recently a biography of U.S. Chief Justice Melville Fuller, and welcomes comment at drooks@tds.net.



Source link

Maine

Maine Mariners clinch home ice for first round of playoffs

Published

on

Maine Mariners clinch home ice for first round of playoffs


Maine Mariners clinch home ice for first round of playoffs

Advertisement

NA

Advertisement

Maine Mariners clinch home ice for first round of playoffs

Updated: 10:38 PM EDT Apr 11, 2026

Editorial Standards

Advertisement

The Maine Mariners will have home ice in the first round of the ECHL Playoffs. Games 1 and 2 in Portland will be on April 24th and 25th at 6:00pm.

The Maine Mariners will have home ice in the first round of the ECHL Playoffs. Games 1 and 2 in Portland will be on April 24th and 25th at 6:00pm.

Advertisement

Advertisement

`;
}

function refreshWeatherIframe(containerId) {
var iframeId = ‘weather-iframe-‘ + containerId;
var iframe = document.getElementById(iframeId);
if (iframe && iframe.src) {
var originalSrc = iframe.src;
iframe.src = originalSrc + (originalSrc.indexOf(‘?’) > -1 ? ‘&’ : ‘?’) + ‘t=” + Date.now();
}
}

function initializeWeatherBox(container) {
var containerId = container.getAttribute(“data-container-id’);
var isWeatherBoxV2 = containerId === ‘home-weather-v2’;

function switchWeatherTab(tabName, clickedElement) {
container.querySelectorAll(‘[data-tab-id]’).forEach(function(tab) {
tab.classList.remove(‘open’);
tab.setAttribute(‘aria-selected’, ‘false’);
});

clickedElement.classList.add(‘open’);
clickedElement.setAttribute(‘aria-selected’, ‘true’);

Advertisement

container.querySelectorAll(‘[data-content-id]’).forEach(function(content) {
content.style.display = ‘none’;
content.setAttribute(‘hidden’, ‘true’);
});

var targetContent = container.querySelector(‘[data-content-id=”‘ + tabName + ‘”]’);
if (targetContent) {
targetContent.style.display = ‘block’;
targetContent.removeAttribute(‘hidden’);
}
}

function loadWeatherData() {
// If weather data is already being loaded, wait for it
if (window.weatherDataPromise) {
window.weatherDataPromise.then(function(data) {
if (data && data.data) {
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
}
});
return;
}

var location = { zip: window.DEFAULT_ZIPCODE };

try {
var storedLocations = localStorage.getItem(‘hrst.zip.history’);
if (storedLocations) {
var locations = JSON.parse(storedLocations);
if (locations && locations.length > 0) {
location = locations[0];
}
}
} catch (e) {}

Advertisement

var apiUrl = (window.DEWY_HOSTNAME || ”) + ‘/api/v1/weather/full/’ + location.zip;

if (window.fetch) {
window.weatherDataPromise = fetch(apiUrl)
.then(function(response) { return response.json(); })
.then(function(data) {
if (data && data.data) {
var article = container.closest(‘.article–wrapper’);
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
return data;
}
})
.catch(function(error) {
console.error(‘Error loading weather:’, error);
// Reset to unknown background on error
updateWeatherBackground(‘unknown’);
});
}
}

function updateWeatherAlertsBar(weatherData) {
var weatherWatchHeader = container.querySelector(‘.weather-watch-header’);
if (!weatherWatchHeader) return;

var weatherWatchText = weatherWatchHeader.querySelector(‘.weather-watch-text’);
var weatherWatchLink = weatherWatchHeader.querySelector(‘.weather-watch-link’);

if (weatherData.alerts_count > 0) {
weatherWatchHeader.className=”weather-watch-header has-alerts”;
if (weatherWatchText) {
weatherWatchText.textContent = `Weather Alerts (${weatherData.alerts_count})`;
}
if (weatherWatchLink) {
if (!weatherWatchLink.getAttribute(‘data-initial-href’)) {
weatherWatchLink.setAttribute(‘data-initial-href’, weatherWatchLink.getAttribute(‘href’));
weatherWatchLink.setAttribute(‘data-initial-onclick’, weatherWatchLink.getAttribute(‘onclick’) || ”);
}
weatherWatchLink.setAttribute(‘href’, “https://www.wmtw.com/alerts”);
weatherWatchLink.setAttribute(‘onclick’, “return handleWeatherLinkClick(event, ‘click_alerts’, ‘click’, ‘mobile-weather’, “https://www.wmtw.com/alerts”);”);
}
} else {
weatherWatchHeader.className=”weather-watch-header”;
if (weatherWatchText) {
weatherWatchText.textContent = containerId === ‘home-weather-v2’ ? ‘Watch Latest Forecast’ : ‘Latest Forecast’;
}
if (weatherWatchLink) {
var initialHref = weatherWatchLink.getAttribute(‘data-initial-href’);
var initialOnclick = weatherWatchLink.getAttribute(‘data-initial-onclick’);
if (initialHref) {
weatherWatchLink.setAttribute(‘href’, initialHref);
}
if (initialOnclick) {
weatherWatchLink.setAttribute(‘onclick’, initialOnclick);
}
}
}
}

Advertisement

function updateCurrentWeather(weatherData) {
if (weatherData.current) {
var tempValue = weatherData.current.temp_f || ”;
var skyValue = weatherData.current.sky || ”;
var feelsLikeValue = weatherData.current.feels_like_f || weatherData.current.temp_f || ”;

var tempEl = container.querySelector(‘.weather-grid–current-temp-value’);
if (tempEl) {
tempEl.textContent = tempValue;
tempEl.setAttribute(‘aria-label’, tempValue + ‘ degrees Fahrenheit’);
}

var iconEl = container.querySelector(‘.weather-grid–current-icon’);
if (iconEl && weatherData.current.icon_name) {
iconEl.className=”weather-grid–current-icon weather-current-icon icon icon-weather-” + weatherData.current.icon_name;
}

var skyEl = container.querySelector(‘.weather-grid–sky’);
if (skyEl) {
skyEl.textContent = skyValue;
skyEl.setAttribute(‘aria-label’, ‘Current condition: ‘ + skyValue);
}

var feelsEl = container.querySelector(‘.weather-grid–feels’);
if (feelsEl) {
feelsEl.textContent = feelsLikeValue + ‘°F’;
feelsEl.setAttribute(‘aria-label’, feelsLikeValue + ‘ degrees Fahrenheit’);
}

Advertisement

var weatherContainer = container.querySelector(‘.weather-temp-container’);
if (weatherContainer) {
var summary = ‘Current temperature ‘ + tempValue + ‘ degrees Fahrenheit, ‘ +
skyValue + ‘, feels like ‘ + feelsLikeValue + ‘ degrees’;
weatherContainer.setAttribute(‘aria-label’, summary);
}

updateWeatherBackground(weatherData.current.icon_name);
}
}

function updateWeatherBackground(iconName) {
try {
var bgPath = weatherImages.backgrounds[iconName] || weatherImages.backgrounds.unknown;
container.style.backgroundImage=”url(” + bgPath + ‘)’;
} catch (e) {
console.log(‘Error updating weather background:’, e);
}
}

function updateForecastTabs(weatherData) {
var visibleItems = isWeatherBoxV2 ? 6 : 5;

if (weatherData.hourly) {
var hourlyContainer = container.querySelector(‘.weather-hourly-forecast’);
if (hourlyContainer) {
var html=””;
var maxHours = Math.min(visibleItems, weatherData.hourly.length);

Advertisement

for (var i = 0; i 0 ? currentIndex – 1 : tabs.length – 1;
tabs[prevIndex].focus();
break;
case ‘ArrowRight’:
e.preventDefault();
var nextIndex = currentIndex

`;
}

function refreshWeatherIframe(containerId) {
var iframeId = ‘weather-iframe-‘ + containerId;
var iframe = document.getElementById(iframeId);
if (iframe && iframe.src) {
var originalSrc = iframe.src;
iframe.src = originalSrc + (originalSrc.indexOf(‘?’) > -1 ? ‘&’ : ‘?’) + ‘t=” + Date.now();
}
}

function initializeWeatherBox(container) {
var containerId = container.getAttribute(“data-container-id’);
var isWeatherBoxV2 = containerId === ‘home-weather-v2’;

function switchWeatherTab(tabName, clickedElement) {
container.querySelectorAll(‘[data-tab-id]’).forEach(function(tab) {
tab.classList.remove(‘open’);
tab.setAttribute(‘aria-selected’, ‘false’);
});

Advertisement

clickedElement.classList.add(‘open’);
clickedElement.setAttribute(‘aria-selected’, ‘true’);

container.querySelectorAll(‘[data-content-id]’).forEach(function(content) {
content.style.display = ‘none’;
content.setAttribute(‘hidden’, ‘true’);
});

var targetContent = container.querySelector(‘[data-content-id=”‘ + tabName + ‘”]’);
if (targetContent) {
targetContent.style.display = ‘block’;
targetContent.removeAttribute(‘hidden’);
}
}

function loadWeatherData() {
// If weather data is already being loaded, wait for it
if (window.weatherDataPromise) {
window.weatherDataPromise.then(function(data) {
if (data && data.data) {
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
}
});
return;
}

var location = { zip: window.DEFAULT_ZIPCODE };

Advertisement

try {
var storedLocations = localStorage.getItem(‘hrst.zip.history’);
if (storedLocations) {
var locations = JSON.parse(storedLocations);
if (locations && locations.length > 0) {
location = locations[0];
}
}
} catch (e) {}

var apiUrl = (window.DEWY_HOSTNAME || ”) + ‘/api/v1/weather/full/’ + location.zip;

if (window.fetch) {
window.weatherDataPromise = fetch(apiUrl)
.then(function(response) { return response.json(); })
.then(function(data) {
if (data && data.data) {
var article = container.closest(‘.article–wrapper’);
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
return data;
}
})
.catch(function(error) {
console.error(‘Error loading weather:’, error);
// Reset to unknown background on error
updateWeatherBackground(‘unknown’);
});
}
}

function updateWeatherAlertsBar(weatherData) {
var weatherWatchHeader = container.querySelector(‘.weather-watch-header’);
if (!weatherWatchHeader) return;

var weatherWatchText = weatherWatchHeader.querySelector(‘.weather-watch-text’);
var weatherWatchLink = weatherWatchHeader.querySelector(‘.weather-watch-link’);

Advertisement

if (weatherData.alerts_count > 0) {
weatherWatchHeader.className=”weather-watch-header has-alerts”;
if (weatherWatchText) {
weatherWatchText.textContent = `Weather Alerts (${weatherData.alerts_count})`;
}
if (weatherWatchLink) {
if (!weatherWatchLink.getAttribute(‘data-initial-href’)) {
weatherWatchLink.setAttribute(‘data-initial-href’, weatherWatchLink.getAttribute(‘href’));
weatherWatchLink.setAttribute(‘data-initial-onclick’, weatherWatchLink.getAttribute(‘onclick’) || ”);
}
weatherWatchLink.setAttribute(‘href’, “https://www.wmtw.com/alerts”);
weatherWatchLink.setAttribute(‘onclick’, “return handleWeatherLinkClick(event, ‘click_alerts’, ‘click’, ‘sidelist-weather’, “https://www.wmtw.com/alerts”);”);
}
} else {
weatherWatchHeader.className=”weather-watch-header”;
if (weatherWatchText) {
weatherWatchText.textContent = containerId === ‘home-weather-v2’ ? ‘Watch Latest Forecast’ : ‘Latest Forecast’;
}
if (weatherWatchLink) {
var initialHref = weatherWatchLink.getAttribute(‘data-initial-href’);
var initialOnclick = weatherWatchLink.getAttribute(‘data-initial-onclick’);
if (initialHref) {
weatherWatchLink.setAttribute(‘href’, initialHref);
}
if (initialOnclick) {
weatherWatchLink.setAttribute(‘onclick’, initialOnclick);
}
}
}
}

function updateCurrentWeather(weatherData) {
if (weatherData.current) {
var tempValue = weatherData.current.temp_f || ”;
var skyValue = weatherData.current.sky || ”;
var feelsLikeValue = weatherData.current.feels_like_f || weatherData.current.temp_f || ”;

var tempEl = container.querySelector(‘.weather-grid–current-temp-value’);
if (tempEl) {
tempEl.textContent = tempValue;
tempEl.setAttribute(‘aria-label’, tempValue + ‘ degrees Fahrenheit’);
}

var iconEl = container.querySelector(‘.weather-grid–current-icon’);
if (iconEl && weatherData.current.icon_name) {
iconEl.className=”weather-grid–current-icon weather-current-icon icon icon-weather-” + weatherData.current.icon_name;
}

var skyEl = container.querySelector(‘.weather-grid–sky’);
if (skyEl) {
skyEl.textContent = skyValue;
skyEl.setAttribute(‘aria-label’, ‘Current condition: ‘ + skyValue);
}

Advertisement

var feelsEl = container.querySelector(‘.weather-grid–feels’);
if (feelsEl) {
feelsEl.textContent = feelsLikeValue + ‘°F’;
feelsEl.setAttribute(‘aria-label’, feelsLikeValue + ‘ degrees Fahrenheit’);
}

var weatherContainer = container.querySelector(‘.weather-temp-container’);
if (weatherContainer) {
var summary = ‘Current temperature ‘ + tempValue + ‘ degrees Fahrenheit, ‘ +
skyValue + ‘, feels like ‘ + feelsLikeValue + ‘ degrees’;
weatherContainer.setAttribute(‘aria-label’, summary);
}

updateWeatherBackground(weatherData.current.icon_name);
}
}

function updateWeatherBackground(iconName) {
try {
var bgPath = weatherImages.backgrounds[iconName] || weatherImages.backgrounds.unknown;
container.style.backgroundImage=”url(” + bgPath + ‘)’;
} catch (e) {
console.log(‘Error updating weather background:’, e);
}
}

function updateForecastTabs(weatherData) {
var visibleItems = isWeatherBoxV2 ? 6 : 5;

Advertisement

if (weatherData.hourly) {
var hourlyContainer = container.querySelector(‘.weather-hourly-forecast’);
if (hourlyContainer) {
var html=””;
var maxHours = Math.min(visibleItems, weatherData.hourly.length);

for (var i = 0; i 0 ? currentIndex – 1 : tabs.length – 1;
tabs[prevIndex].focus();
break;
case ‘ArrowRight’:
e.preventDefault();
var nextIndex = currentIndex

Loading more articles…



Source link

Advertisement
Continue Reading

Maine

Yoga for Good: Maine woman raising money through movement

Published

on

Yoga for Good: Maine woman raising money through movement


HELPED MORE THAN 300,000 VETERANS VISIT THE MEMORIALS BUILT IN THEIR HONOR. YOU MAY KNOW HER FROM HER POPULAR GOAT YOGA CLASSES… OR THE INSPIRING ‘YOGA FOR GOOD’ SERIES. ASHLEY FLOWERS’ WORK IS ALL ABOUT BRINGING PEOPLE TOGETHER. JAMIE AZULAY INTRODUCES US TO THIS WEEK’S COMMUNITY CHAMPION. THIS MAY LOOK LIKE A CLOTHING STORE – IT IS… BUT IT’S ALSO A MAKESHIFT YOGA STUDIO. TOAD AND CO IN PORTLAND IS ONE OF SEVERAL SPOTS YOU CAN FIND ASHLEY FLOWERS LEADING LOCAL YOGIS IN THEIR PRACTICE. “I THINK HEALTHY COMMUNITIES ARE WELL CONNECTED COMMUNITIES.” AND IT’S HERE ON DIAMOND STREET WHERE ASHLEY LEADS ‘YOGA FOR GOOD’ – DONATION-BASED CLASSES THAT SUPPORT LOCAL NON-PROFITS. “EXPERIENCING THAT SENSE OF JOY AND HAPPINESS AND PEACEFULNESS THAT YOGA BRINGS, AND KNOWING THAT YOU’RE ALL COMING TOGETHER TO DO SOMETHING GOOD FOR YOURSELVES AND THE WORLD, I THINK, IS REALLY POWERFUL.” IN 2 YEARS — 2-THOUSAND DOLLARS HAS BEEN RAISED FOR 9 NON-PROFITS… AND SHE’S ADDING MORE TO THE LINE-UP. THIS WEEK… IT WAS ALL ABOUT THE ADAPTIVE OUTDOOR EDUCATION CENTER AND THEIR MISSION TO PROVIDE RECREATION PROGRAMMING FOR PEOPLE WITH DIFFERENT ABILITIES. “IF YOU CAN BREATHE, YOU CAN DO YOGA. YOGA IS ACCESSIBLE TO EVERYONE.” “SHE ALWAYS HAS SUCH GREAT MESSAGES AS A PART OF BEING IN THE YOGA CLASS. IT’S NOT JUST COMING TO YOGA AND STRETCHING AND BREATHING, BUT ALSO WHAT CAN YOU GIVE BACK TO THE COMMUNITY AND HOW CAN WE WORK TOGETHER TO SUPPORT EACH OTHER?” COMMUNITY… AND MAKING THE WORLD A BETTER PLACE… IS WHAT ASHLEY SAYS YOGA IS ALL ABOUT. “IF YOU COULD HELP PEOPLE TO CULTIVATE A SENSE OF RESPECT FOR THEMSELVES, THEN MAYBE YOU COULD HAVE THAT SENSE OF RESPECT TO BUBBLE OUT INTO THE WORLD, AND HEAL THE WORLD

Advertisement

Yoga for Good: Maine woman raising money through movement

Updated: 11:49 AM EDT Apr 11, 2026

Editorial Standards

Advertisement

Ashley Flowers started “Yoga for Good,” a donation-based class series in support of local nonprofits, in 2024. Since then, she’s raised $2,000 for nine organizations.Flowers said, “Experiencing that sense of joy and happiness and peacefulness that yoga brings, and knowing that you’re all coming together to do something good for yourselves and the world, I think, is really powerful.”Toad & Co hosts “Yoga for Good” in the back of their Portland clothing store. After class, they collect payment, which is a suggested $15 donation. However, attendees are encouraged to pay what they can. “I don’t ever want to turn someone away from yoga because money is an issue,” Flowers said. All proceeds go directly to the cause. The most recent class on April 10 was held in support of the Adaptive Outdoor Education Center. The AOEC is a nonprofit aimed at providing recreation programming for people with different abilities. Inclusivity is a priority in Flowers’ practice. “If you can breathe, you can do yoga,” she said. “Yoga is accessible to everyone.” The AOEC has been the beneficiary of five Yoga for Good classes. When asked about working with Flowers, the nonprofit’s program and development coordinator, Alessa Foley, said, “She always has such great messages as a part of being in the yoga class. It’s not just coming to yoga and stretching and breathing, but also what can you give back to the community, and how can we work together to support each other?”That’s what Flowers thinks yoga is all about. She said, “If you could help people to cultivate a sense of respect for themselves, then maybe you could have that sense of respect to bubble out into the world and heal the world.” When Flowers is not teaching at Toad & Co, you may find her leading goat yoga at Smiling Hill Farm, online classes, or workshops at other local farms. She feels operating without a brick-and-mortar studio is a good way to support her community by drawing people into local businesses. “I think healthy communities are well-connected communities,” she said. Flowers has already lined up the next five Yoga for Good classes, which will run through September. RSVPs can be made on her website. Fri. May 8 at 8 a.m. — Adaptive Outdoor Education CenterSat. June 13 at 9 a.m. — Dempsey CenterSat. July 11 at 11 a.m. — Impact HorseSat. August 8 at 9 a.m. — Dempsey Center Fri. Sept 11 at 8 a.m. — Sea Change Yoga

Ashley Flowers started “Yoga for Good,” a donation-based class series in support of local nonprofits, in 2024. Since then, she’s raised $2,000 for nine organizations.

Flowers said, “Experiencing that sense of joy and happiness and peacefulness that yoga brings, and knowing that you’re all coming together to do something good for yourselves and the world, I think, is really powerful.”

Advertisement

Toad & Co hosts “Yoga for Good” in the back of their Portland clothing store. After class, they collect payment, which is a suggested $15 donation. However, attendees are encouraged to pay what they can. “I don’t ever want to turn someone away from yoga because money is an issue,” Flowers said.

All proceeds go directly to the cause. The most recent class on April 10 was held in support of the Adaptive Outdoor Education Center. The AOEC is a nonprofit aimed at providing recreation programming for people with different abilities.

Inclusivity is a priority in Flowers’ practice. “If you can breathe, you can do yoga,” she said. “Yoga is accessible to everyone.”

Advertisement

The AOEC has been the beneficiary of five Yoga for Good classes. When asked about working with Flowers, the nonprofit’s program and development coordinator, Alessa Foley, said, “She always has such great messages as a part of being in the yoga class. It’s not just coming to yoga and stretching and breathing, but also what can you give back to the community, and how can we work together to support each other?”

That’s what Flowers thinks yoga is all about. She said, “If you could help people to cultivate a sense of respect for themselves, then maybe you could have that sense of respect to bubble out into the world and heal the world.”

When Flowers is not teaching at Toad & Co, you may find her leading goat yoga at Smiling Hill Farm, online classes, or workshops at other local farms. She feels operating without a brick-and-mortar studio is a good way to support her community by drawing people into local businesses.

“I think healthy communities are well-connected communities,” she said.

Flowers has already lined up the next five Yoga for Good classes, which will run through September. RSVPs can be made on her website.

Advertisement
  • Fri. May 8 at 8 a.m. — Adaptive Outdoor Education Center
  • Sat. June 13 at 9 a.m. — Dempsey Center
  • Sat. July 11 at 11 a.m. — Impact Horse
  • Sat. August 8 at 9 a.m. — Dempsey Center
  • Fri. Sept 11 at 8 a.m. — Sea Change Yoga



Source link

Continue Reading

Maine

Veterans of USS Samuel B Roberts 1988 mine strike reunite in Maine

Published

on

Veterans of USS Samuel B Roberts 1988 mine strike reunite in Maine


Veterans of USS Samuel B Roberts 1988 mine strike reunite in Maine

Advertisement

STUFF DONE. GO DOWN THERE AND KICK BUTT.” THE MAINE DEMOCRATIC PRIMARY IS SCHEDULED FOR JUNE NINTH. VETERANS OF THE 1988 PERSIAN GULF MINE STRIKE ARE NOW REUNITING HERE IN MAINE. THE BATH IRON WORKS BUILT SHIP SUFFERED MAJOR DAMAGE AFTER HITTING AN IRANIAN MINE ON APRIL 14 1988. TONIGHT CATE MCCUSKER SHARES THE HEROIC ACTIONS OF THE CREW AND THE BROTHERHOOD THAT REMAINS TODAY. TUESDAY MARKS 38 YEARS SINCE A SHIP BUILT BY BATH IRON WORKS DEFIED ALL ODDS – AND SURVIVED A DANGEROUS STRIKE IN THE PERSUAN GULF…THANKS TO THE BRAVE EFFORTS OF ITS CREW. “ON OUR WAY BACK THAT WAY FROM THE MINEFIELD, AND WE HIT ONE OF THE MINES.” WHILE ON A MISSION IN THE PERSIAN GULF – DURING THE IRAN-IRAQ WAR – THE USS SAMUEL B ROBERTS STRUCK AN IRANIAN MINE “I WAS FREAKING OUT, YOU KNOW, I’M 19. NEVER GOING TO GET MARRIED, NEVER GOING TO SEE MY FAMILY AGAIN.” THE DAMAGE WAS DRASTIC – LEAVING A MASSIVE HOLE IN THE HULL OF THE SHIP – BUT THE CREW JUMPED INTO ACTION… “OUR TRAINING KICKED IN AND EVERYBODY DID WHAT THEY HAD TO DO, WHATEVER THEIR JOB WAS. FOR ME PERSONALLY, I ONLY KIND OF HESITATED AT ONE TIME, WONDERING WHAT MY WIFE WAS THINKING AT THE TIME, AND I PUSHED THAT ASIDE AND THEN WENT TO WORK. MIRACULOUSLY – EVERYONE ON BOARD SURVIVED – AND ONLY TEN PEOPLE WERE INJURED… WE FOUGHT FIRES AND FLOODING FOR ABOUT FIVE HOURS OR BETTER. THE MINE BLAST HIT US ON THE PORT SIDE, BROKE THE KEEL OF THE SHIP AND CRACKED THE SUPERSTRUCTURE ALL THE WAY AROUND. YEARS LATER – THE GROUP FREQUENTLY REUNITES… FOREVER BONDED BY THE TRAUMA AND BROTHERHOOD OF THAT MOMENT. THIS TIME THEY’VE RETURNED TO BATH – WHERE THE USS SAMUEL ROBERTS WAS BUILT… ” EACH SHIP HAS A MOTTO. OURS WAS NO HIGHER HONOR.” THIS SHIP MEANS SO MUCH TO US. AND AS THE US IS CURRENTLY ENGAGED IN A WAR WITH IRAN – WHERE MEMBERS OF THE MILITARY ARE ALSO ENCOUNTERING DANGEROUS SITUATIONS IN THAT AREA OF THE WORLD… VETERANS OF THE 1988 PERSIAN GULF MINE STRIKE SAY…

Advertisement

Veterans of USS Samuel B Roberts 1988 mine strike reunite in Maine

Updated: 10:31 PM EDT Apr 10, 2026

Editorial Standards

Advertisement

Veterans of the USS Samuel B Roberts are reuniting in Maine this weekend.Tuesday marks 38 years since the ship struck an Iranian mine in the Persian Gulf.“Our training kicked in, and everybody did what they had to do,” crewmember Brad Gutcher said. “We fought fires and flooding for about five hours. The mine blast hit us on the port side, broke the keel of the ship, and cracked the structure all the way around.”Everyone on board survived, and they now meet every few years for remembrance and camaraderie. This year, the reunion is held in Bath, as the USS Samuel B Roberts was built by Bath Iron Works.“Each ship has a motto. Ours was no higher honor,” crewmember Shane Deitert said. “This ship means so much to us.”

Veterans of the USS Samuel B Roberts are reuniting in Maine this weekend.

Tuesday marks 38 years since the ship struck an Iranian mine in the Persian Gulf.

Advertisement

“Our training kicked in, and everybody did what they had to do,” crewmember Brad Gutcher said. “We fought fires and flooding for about five hours. The mine blast hit us on the port side, broke the keel of the ship, and cracked the structure all the way around.”

Everyone on board survived, and they now meet every few years for remembrance and camaraderie. This year, the reunion is held in Bath, as the USS Samuel B Roberts was built by Bath Iron Works.

“Each ship has a motto. Ours was no higher honor,” crewmember Shane Deitert said. “This ship means so much to us.”

Advertisement
Advertisement

`;
}

function refreshWeatherIframe(containerId) {
var iframeId = ‘weather-iframe-‘ + containerId;
var iframe = document.getElementById(iframeId);
if (iframe && iframe.src) {
var originalSrc = iframe.src;
iframe.src = originalSrc + (originalSrc.indexOf(‘?’) > -1 ? ‘&’ : ‘?’) + ‘t=” + Date.now();
}
}

function initializeWeatherBox(container) {
var containerId = container.getAttribute(“data-container-id’);
var isWeatherBoxV2 = containerId === ‘home-weather-v2’;

function switchWeatherTab(tabName, clickedElement) {
container.querySelectorAll(‘[data-tab-id]’).forEach(function(tab) {
tab.classList.remove(‘open’);
tab.setAttribute(‘aria-selected’, ‘false’);
});

clickedElement.classList.add(‘open’);
clickedElement.setAttribute(‘aria-selected’, ‘true’);

Advertisement

container.querySelectorAll(‘[data-content-id]’).forEach(function(content) {
content.style.display = ‘none’;
content.setAttribute(‘hidden’, ‘true’);
});

var targetContent = container.querySelector(‘[data-content-id=”‘ + tabName + ‘”]’);
if (targetContent) {
targetContent.style.display = ‘block’;
targetContent.removeAttribute(‘hidden’);
}
}

function loadWeatherData() {
// If weather data is already being loaded, wait for it
if (window.weatherDataPromise) {
window.weatherDataPromise.then(function(data) {
if (data && data.data) {
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
}
});
return;
}

var location = { zip: window.DEFAULT_ZIPCODE };

try {
var storedLocations = localStorage.getItem(‘hrst.zip.history’);
if (storedLocations) {
var locations = JSON.parse(storedLocations);
if (locations && locations.length > 0) {
location = locations[0];
}
}
} catch (e) {}

Advertisement

var apiUrl = (window.DEWY_HOSTNAME || ”) + ‘/api/v1/weather/full/’ + location.zip;

if (window.fetch) {
window.weatherDataPromise = fetch(apiUrl)
.then(function(response) { return response.json(); })
.then(function(data) {
if (data && data.data) {
var article = container.closest(‘.article–wrapper’);
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
return data;
}
})
.catch(function(error) {
console.error(‘Error loading weather:’, error);
// Reset to unknown background on error
updateWeatherBackground(‘unknown’);
});
}
}

function updateWeatherAlertsBar(weatherData) {
var weatherWatchHeader = container.querySelector(‘.weather-watch-header’);
if (!weatherWatchHeader) return;

var weatherWatchText = weatherWatchHeader.querySelector(‘.weather-watch-text’);
var weatherWatchLink = weatherWatchHeader.querySelector(‘.weather-watch-link’);

if (weatherData.alerts_count > 0) {
weatherWatchHeader.className=”weather-watch-header has-alerts”;
if (weatherWatchText) {
weatherWatchText.textContent = `Weather Alerts (${weatherData.alerts_count})`;
}
if (weatherWatchLink) {
if (!weatherWatchLink.getAttribute(‘data-initial-href’)) {
weatherWatchLink.setAttribute(‘data-initial-href’, weatherWatchLink.getAttribute(‘href’));
weatherWatchLink.setAttribute(‘data-initial-onclick’, weatherWatchLink.getAttribute(‘onclick’) || ”);
}
weatherWatchLink.setAttribute(‘href’, “https://www.wmtw.com/alerts”);
weatherWatchLink.setAttribute(‘onclick’, “return handleWeatherLinkClick(event, ‘click_alerts’, ‘click’, ‘mobile-weather’, “https://www.wmtw.com/alerts”);”);
}
} else {
weatherWatchHeader.className=”weather-watch-header”;
if (weatherWatchText) {
weatherWatchText.textContent = containerId === ‘home-weather-v2’ ? ‘Watch Latest Forecast’ : ‘Latest Forecast’;
}
if (weatherWatchLink) {
var initialHref = weatherWatchLink.getAttribute(‘data-initial-href’);
var initialOnclick = weatherWatchLink.getAttribute(‘data-initial-onclick’);
if (initialHref) {
weatherWatchLink.setAttribute(‘href’, initialHref);
}
if (initialOnclick) {
weatherWatchLink.setAttribute(‘onclick’, initialOnclick);
}
}
}
}

Advertisement

function updateCurrentWeather(weatherData) {
if (weatherData.current) {
var tempValue = weatherData.current.temp_f || ”;
var skyValue = weatherData.current.sky || ”;
var feelsLikeValue = weatherData.current.feels_like_f || weatherData.current.temp_f || ”;

var tempEl = container.querySelector(‘.weather-grid–current-temp-value’);
if (tempEl) {
tempEl.textContent = tempValue;
tempEl.setAttribute(‘aria-label’, tempValue + ‘ degrees Fahrenheit’);
}

var iconEl = container.querySelector(‘.weather-grid–current-icon’);
if (iconEl && weatherData.current.icon_name) {
iconEl.className=”weather-grid–current-icon weather-current-icon icon icon-weather-” + weatherData.current.icon_name;
}

var skyEl = container.querySelector(‘.weather-grid–sky’);
if (skyEl) {
skyEl.textContent = skyValue;
skyEl.setAttribute(‘aria-label’, ‘Current condition: ‘ + skyValue);
}

var feelsEl = container.querySelector(‘.weather-grid–feels’);
if (feelsEl) {
feelsEl.textContent = feelsLikeValue + ‘°F’;
feelsEl.setAttribute(‘aria-label’, feelsLikeValue + ‘ degrees Fahrenheit’);
}

Advertisement

var weatherContainer = container.querySelector(‘.weather-temp-container’);
if (weatherContainer) {
var summary = ‘Current temperature ‘ + tempValue + ‘ degrees Fahrenheit, ‘ +
skyValue + ‘, feels like ‘ + feelsLikeValue + ‘ degrees’;
weatherContainer.setAttribute(‘aria-label’, summary);
}

updateWeatherBackground(weatherData.current.icon_name);
}
}

function updateWeatherBackground(iconName) {
try {
var bgPath = weatherImages.backgrounds[iconName] || weatherImages.backgrounds.unknown;
container.style.backgroundImage=”url(” + bgPath + ‘)’;
} catch (e) {
console.log(‘Error updating weather background:’, e);
}
}

function updateForecastTabs(weatherData) {
var visibleItems = isWeatherBoxV2 ? 6 : 5;

if (weatherData.hourly) {
var hourlyContainer = container.querySelector(‘.weather-hourly-forecast’);
if (hourlyContainer) {
var html=””;
var maxHours = Math.min(visibleItems, weatherData.hourly.length);

Advertisement

for (var i = 0; i 0 ? currentIndex – 1 : tabs.length – 1;
tabs[prevIndex].focus();
break;
case ‘ArrowRight’:
e.preventDefault();
var nextIndex = currentIndex

`;
}

function refreshWeatherIframe(containerId) {
var iframeId = ‘weather-iframe-‘ + containerId;
var iframe = document.getElementById(iframeId);
if (iframe && iframe.src) {
var originalSrc = iframe.src;
iframe.src = originalSrc + (originalSrc.indexOf(‘?’) > -1 ? ‘&’ : ‘?’) + ‘t=” + Date.now();
}
}

function initializeWeatherBox(container) {
var containerId = container.getAttribute(“data-container-id’);
var isWeatherBoxV2 = containerId === ‘home-weather-v2’;

function switchWeatherTab(tabName, clickedElement) {
container.querySelectorAll(‘[data-tab-id]’).forEach(function(tab) {
tab.classList.remove(‘open’);
tab.setAttribute(‘aria-selected’, ‘false’);
});

Advertisement

clickedElement.classList.add(‘open’);
clickedElement.setAttribute(‘aria-selected’, ‘true’);

container.querySelectorAll(‘[data-content-id]’).forEach(function(content) {
content.style.display = ‘none’;
content.setAttribute(‘hidden’, ‘true’);
});

var targetContent = container.querySelector(‘[data-content-id=”‘ + tabName + ‘”]’);
if (targetContent) {
targetContent.style.display = ‘block’;
targetContent.removeAttribute(‘hidden’);
}
}

function loadWeatherData() {
// If weather data is already being loaded, wait for it
if (window.weatherDataPromise) {
window.weatherDataPromise.then(function(data) {
if (data && data.data) {
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
}
});
return;
}

var location = { zip: window.DEFAULT_ZIPCODE };

Advertisement

try {
var storedLocations = localStorage.getItem(‘hrst.zip.history’);
if (storedLocations) {
var locations = JSON.parse(storedLocations);
if (locations && locations.length > 0) {
location = locations[0];
}
}
} catch (e) {}

var apiUrl = (window.DEWY_HOSTNAME || ”) + ‘/api/v1/weather/full/’ + location.zip;

if (window.fetch) {
window.weatherDataPromise = fetch(apiUrl)
.then(function(response) { return response.json(); })
.then(function(data) {
if (data && data.data) {
var article = container.closest(‘.article–wrapper’);
var weatherContainer = container.closest(‘.weather-box-container’);
if (weatherContainer) {
weatherContainer.style.display = ‘flex’;
updateCurrentWeather(data.data);
updateForecastTabs(data.data);
updateWeatherAlertsBar(data.data);
}
return data;
}
})
.catch(function(error) {
console.error(‘Error loading weather:’, error);
// Reset to unknown background on error
updateWeatherBackground(‘unknown’);
});
}
}

function updateWeatherAlertsBar(weatherData) {
var weatherWatchHeader = container.querySelector(‘.weather-watch-header’);
if (!weatherWatchHeader) return;

var weatherWatchText = weatherWatchHeader.querySelector(‘.weather-watch-text’);
var weatherWatchLink = weatherWatchHeader.querySelector(‘.weather-watch-link’);

Advertisement

if (weatherData.alerts_count > 0) {
weatherWatchHeader.className=”weather-watch-header has-alerts”;
if (weatherWatchText) {
weatherWatchText.textContent = `Weather Alerts (${weatherData.alerts_count})`;
}
if (weatherWatchLink) {
if (!weatherWatchLink.getAttribute(‘data-initial-href’)) {
weatherWatchLink.setAttribute(‘data-initial-href’, weatherWatchLink.getAttribute(‘href’));
weatherWatchLink.setAttribute(‘data-initial-onclick’, weatherWatchLink.getAttribute(‘onclick’) || ”);
}
weatherWatchLink.setAttribute(‘href’, “https://www.wmtw.com/alerts”);
weatherWatchLink.setAttribute(‘onclick’, “return handleWeatherLinkClick(event, ‘click_alerts’, ‘click’, ‘sidelist-weather’, “https://www.wmtw.com/alerts”);”);
}
} else {
weatherWatchHeader.className=”weather-watch-header”;
if (weatherWatchText) {
weatherWatchText.textContent = containerId === ‘home-weather-v2’ ? ‘Watch Latest Forecast’ : ‘Latest Forecast’;
}
if (weatherWatchLink) {
var initialHref = weatherWatchLink.getAttribute(‘data-initial-href’);
var initialOnclick = weatherWatchLink.getAttribute(‘data-initial-onclick’);
if (initialHref) {
weatherWatchLink.setAttribute(‘href’, initialHref);
}
if (initialOnclick) {
weatherWatchLink.setAttribute(‘onclick’, initialOnclick);
}
}
}
}

function updateCurrentWeather(weatherData) {
if (weatherData.current) {
var tempValue = weatherData.current.temp_f || ”;
var skyValue = weatherData.current.sky || ”;
var feelsLikeValue = weatherData.current.feels_like_f || weatherData.current.temp_f || ”;

var tempEl = container.querySelector(‘.weather-grid–current-temp-value’);
if (tempEl) {
tempEl.textContent = tempValue;
tempEl.setAttribute(‘aria-label’, tempValue + ‘ degrees Fahrenheit’);
}

var iconEl = container.querySelector(‘.weather-grid–current-icon’);
if (iconEl && weatherData.current.icon_name) {
iconEl.className=”weather-grid–current-icon weather-current-icon icon icon-weather-” + weatherData.current.icon_name;
}

var skyEl = container.querySelector(‘.weather-grid–sky’);
if (skyEl) {
skyEl.textContent = skyValue;
skyEl.setAttribute(‘aria-label’, ‘Current condition: ‘ + skyValue);
}

Advertisement

var feelsEl = container.querySelector(‘.weather-grid–feels’);
if (feelsEl) {
feelsEl.textContent = feelsLikeValue + ‘°F’;
feelsEl.setAttribute(‘aria-label’, feelsLikeValue + ‘ degrees Fahrenheit’);
}

var weatherContainer = container.querySelector(‘.weather-temp-container’);
if (weatherContainer) {
var summary = ‘Current temperature ‘ + tempValue + ‘ degrees Fahrenheit, ‘ +
skyValue + ‘, feels like ‘ + feelsLikeValue + ‘ degrees’;
weatherContainer.setAttribute(‘aria-label’, summary);
}

updateWeatherBackground(weatherData.current.icon_name);
}
}

function updateWeatherBackground(iconName) {
try {
var bgPath = weatherImages.backgrounds[iconName] || weatherImages.backgrounds.unknown;
container.style.backgroundImage=”url(” + bgPath + ‘)’;
} catch (e) {
console.log(‘Error updating weather background:’, e);
}
}

function updateForecastTabs(weatherData) {
var visibleItems = isWeatherBoxV2 ? 6 : 5;

Advertisement

if (weatherData.hourly) {
var hourlyContainer = container.querySelector(‘.weather-hourly-forecast’);
if (hourlyContainer) {
var html=””;
var maxHours = Math.min(visibleItems, weatherData.hourly.length);

for (var i = 0; i 0 ? currentIndex – 1 : tabs.length – 1;
tabs[prevIndex].focus();
break;
case ‘ArrowRight’:
e.preventDefault();
var nextIndex = currentIndex

Loading more articles…



Source link

Advertisement
Continue Reading

Trending