Connect with us

New Hampshire

šŸ† Here are the winners of the Globe N.H. election prediction challenge – The Boston Globe

Published

on

šŸ† Here are the winners of the Globe N.H. election prediction challenge – The Boston Globe


No one nabbed a perfect score in the Globe New Hampshire 2024 election prediction challenge, though several soothsayers came fairly close.

Ninety readers locked in their best guesses prior to Election Day, predicting who would win key races, which party would win a majority of seats in each New Hampshire legislative chamber, and whether voters would approve a constitutional amendment.

The two prognosticators who scored highest, Lee Hurst of Hampton and Stephen Cabral of Manchester, each earned 36 of 41 possible points. They accurately predicted that Kamala D. Harris would win New Hampshire’s four Electoral College votes by 2-4 percentage points and Kelly Ayotte would win the gubernatorial race by at least 25,000 votes.

Advertisement

Hurst gets first-place bragging rights for having locked in answers about 12 hours earlier than Cabral did, on Oct. 7, when we first launched the challenge.

The imperfections in Hurst’s and Cabral’s predictions pertain to the New Hampshire House and Senate. Although they both said Republicans would win the most seats in each chamber, they underestimated how many. The GOP emerged with a 222-178 majority in the House and a 16-8 majority in the Senate, pending recounts in a handful of state representative races.

Third place in the Globe New Hampshire challenge goes to Stephen DeFilippo of Manchester, who scored 33 points. DeFilippo correctly predicted the Harris and Ayotte victories but expected a narrower margin in the gubernatorial race.

Advertisement

In fourth and fifth, we have Sandra B. Allen of Newmarket and Tom Boucher of Bedford, who scored 32 points. Allen locked in answers on Oct. 8, two days before Boucher.

These top scorers will receive Globe New Hampshire swag as a trophy. šŸ†

A few other takeaways from the predictions:

  • Only four readers predicted Republicans would win 215 seats or more in the New Hampshire House.
  • Just three readers said the GOP would expand its current 14-10 majority in the Senate, and zero predicted the 16-8 result.
  • The individual races that tripped up most readers were in Senate Districts 11 and 18, where Democratic incumbents lost to Republican challengers.

This story first appeared in Globe NH | Morning Report, our free newsletter focused on the news you need to know about New Hampshire, including great coverage from the Boston Globe and links to interesting articles from other places. If you’d like to receive it via e-mail Monday through Friday, you can sign up here.


Steven Porter can be reached at steven.porter@globe.com. Follow him @reporterporter.

Advertisement





Source link

New Hampshire

Snow totals across New Hampshire after April flakes

Published

on

Snow totals across New Hampshire after April flakes


WMUR

snow falls in manchester on april 7, 2026

Advertisement

SOURCE: WMUR

The first full week of April brought another round of snow. Here are totals throughout the state: Bedford – 1.5″Bradford – 4.0″Chichester – 2.5″Concord – 0.3″Contoocook – 2.4″Gilsum – 4.0″Hooksett – 1.5″Jaffrey – 3.5″Jefferson – 2.3″Lyndeborough – 2.5″Madison – 1.5″Manchester – 0.5″Northfield – 3.0″Peterborough – 2.0″Salisbury – 3.5″Thornton – 4.0″Washington – 3.0″Warner – 3.1″Wolfeboro – 3.9″

Advertisement

The first full week of April brought another round of snow. Here are totals throughout the state:

Bedford – 1.5″

Bradford – 4.0″

Advertisement

Chichester – 2.5″

Concord – 0.3″

Contoocook – 2.4″

Gilsum – 4.0″

Hooksett – 1.5″

Advertisement

Jaffrey – 3.5″

Jefferson – 2.3″

Lyndeborough – 2.5″

Madison – 1.5″

Manchester – 0.5″

Advertisement

Northfield – 3.0″

Peterborough – 2.0″

Salisbury – 3.5″

Thornton – 4.0″

Washington – 3.0″

Advertisement

Warner – 3.1″

Wolfeboro – 3.9″

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’;

Advertisement

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’);

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;
}

Advertisement

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) {}

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;

Advertisement

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.wmur.com/alerts”);
weatherWatchLink.setAttribute(‘onclick’, “return handleWeatherLinkClick(event, ‘click_alerts’, ‘click’, ‘mobile-weather’, “https://www.wmur.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;
}

Advertisement

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’);
}

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);
}
}

Advertisement

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);

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();
}
}

Advertisement

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’);

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’);
}
}

Advertisement

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) {}

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’);
});
}
}

Advertisement

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.wmur.com/alerts”);
weatherWatchLink.setAttribute(‘onclick’, “return handleWeatherLinkClick(event, ‘click_alerts’, ‘click’, ‘sidelist-weather’, “https://www.wmur.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’);
}

Advertisement

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’);
}

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);
}
}

Advertisement

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);

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…

Advertisement



Source link

Continue Reading

New Hampshire

Separate fatal shootings in New Hampshire investigated – Valley News

Published

on

Separate fatal shootings in New Hampshire investigated – Valley News


Two people have died following separate law enforcement-involved shootings in New Hampshire over the past three days, marking the first such fatalities in the state this year.

The most recent incident occurred in the early hours of Monday morning, when officers responding to a domestic disturbance call at a private residence in Northfield, N.H., shot and killed an adult woman.

According to the New Hampshire attorney general’s office, the woman died at the scene. The victim’s name will be released after the next of kin have been notified.

Advertisement

No additional details have been released, as the investigation remains active.

Another shooting took place on Saturday night, which was the culmination of an hours-long manhunt in Raymond, N.H.

Matthew J. Masse (NH State Police photograph)

Law enforcement responded to a call shortly after 1:30 p.m. that reported Matthew Masse, 38, was shooting a rifle at his family members at a home on Ham Road, according to a news release from the attorney general’s office.

During the initial response, Masse shot and wounded a Nottingham, N.H., police officer, who is being treated for non-life-threatening injuries.

Masse then fled into the surrounding woods.

Advertisement

After an hours-long search and shelter-in-place advisory, officers made contact with Masse around 10:06 p.m. and attempted to arrest him, which resulted in a shootout.

Law enforcement then approached Masse and found him dead, authorities said.

Warrants had been issued for Masse’s arrest following an incident two days earlier, according to reporting by NHPR. But, police hadn’t located him until they responded to the call on Saturday.

Family members told WMUR that Masse struggled with his mental health.

In both incidents, autopsies are yet to be conducted.

Advertisement

The attorney general’s office has opened an investigation into both incidents, as it does for all shootings that involve police officers. The officers involved have not been publicly identified.

Last year, the state recorded nine officer-involved shootings, only one of which involved a female victim, making Monday’s incident in Northfield a particularly rare occurrence.



Source link

Advertisement
Continue Reading

New Hampshire

Portland Sea Dogs host New Hampshire in home opener Tuesday at Delta Dental Park at 4 p.m.

Published

on

Portland Sea Dogs host New Hampshire in home opener Tuesday at Delta Dental Park at 4 p.m.


After a long wait, the Portland Sea Dogs are set to open their home schedule Tuesday afternoon at Delta Dental Park, welcoming New Hampshire for the home opener.

The team’s newly installed field at Hadlock is already in great shape, with the Sea Dogs grounds crew putting the final touches on it Monday.

First pitch is scheduled for 4 p.m. Tuesday, and kids will be admitted free. Fans may want to bundle up, though, as conditions are expected to be chilly, with temperatures in the low 40s after the team recently played in the mid-80s.



Source link

Advertisement
Continue Reading

Trending