91³Ô¹ÏÍø

Watch CBS News

Man accused of killing grandmother with skateboard in Hudson, Massachusetts

A man has been charged with murder after allegedly killing his grandmother with a skateboard in Hudson, Massachusetts.

Middlesex County District Attorney Marian Ryan said that a 911 call came in just after 3 p.m. on Tuesday from Munson Street from a woman who said her brother was attacking her with a skateboard. 

Moments later, another call came in saying that he had begun to allegedly attack their 90-year-old grandmother with the skateboard. Ryan said that the man, identified as 29-year-old Devin Dube, attacked his grandmother, his sister, and his father, who all lived at the home. Dube fled before officers arrived. 

About 45 minutes after the first 911 call came in, Dube was reported running around a property on Tower Street. He was found hiding in a van and arrested. 

All three victims were taken to nearby hospitals. Dube's grandmother, identified as Elaine Dube, died from her injuries at UMass Memorial Medical Center in Worcester. The sister and father suffered non-life-threatening injuries to their faces and upper torso and have since been released.

"This is a senseless tragedy and our thoughts are with everyone impacted during this incredibly difficult time," said Hudson Police Chief Richard DiPersio.

Neighbors said that Elaine Dube was a "sweetheart."

Ryan said the whole family lived in the home on Munson Street in separate apartments. She said that Hudson Police had been in contact with Dube before, and specified that it had never been domestic.

Dube was charged with murder, two counts of assault and battery with a dangerous weapon on a person over 60, and one count of assault and battery with a dangerous weapon. Dube was arraigned in Marlboro District Court on Wednesday and underwent a psychological evaluation by forensic psychologist Dr. Hilary Novak. Dr. Novak said that Dube has a history of schizophrenia and was experiencing auditory hallucinations during her evaluation. 

Dr. Novak said she was unsure that Dube was competent to stand trial at this point. As a result, he will undergo a 20-day evaluation at Bridgewater State Hospital. Dube will return to court on April 17.

Police Chief DiPersio said that the attack was not random. It is not clear what led up to the altercation. The investigation is ongoing.

View CBS News In
CBS News App Open
Chrome Safari Continue
const link = doc.createElement('link'); link.rel = 'stylesheet'; link.href = '/fly/fly/bundles/cbsnewscontent/css/cmp-banner.min.css?v=296763317a51cab90faa73f1bb146d5c'; doc.head.appendChild(link); doc.body.innerHTML = CONSENT_MESSAGE; } else { el.insertAdjacentHTML('afterend', CONSENT_MESSAGE); } }); } function hidePrivacyMessage() { // Remove from the main document document.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); // Remove from inside any iframes document.querySelectorAll('iframe').forEach(iframe => { const doc = iframe.contentDocument || iframe.contentWindow.document; doc.querySelectorAll(`.${CONSENT_MESSAGE_CLASS}`).forEach(el => el.remove()); }); } function activateGatedScripts() { // Handle both new format (cmp-gated-script) and old OneTrust/Ketch format (optanon-category-4) const gatedScripts = Array.from(document.querySelectorAll('script.cmp-gated-script, script.optanon-category-4')); // Activate scripts sequentially with a small delay to avoid timing issues let delay = 0; gatedScripts.forEach(function(placeholder, index) { setTimeout(function() { // Skip if already processed if (placeholder.hasAttribute('data-cmp-processed')) { return; } placeholder.setAttribute('data-cmp-processed', 'true'); const newScript = document.createElement('script'); newScript.type = 'text/javascript'; // Try new format first (data-cmp-src), then fall back to old format (data-src) const src = placeholder.getAttribute('data-cmp-src') || placeholder.getAttribute('data-src'); if (src) { newScript.src = src; } else if (placeholder.textContent) { // Inline script - just copy the content newScript.textContent = placeholder.textContent; } // Handle new format attributes (data-cmp-attrs) - for both inline and external scripts const attrs = placeholder.getAttribute('data-cmp-attrs'); if (attrs) { const tempDiv = document.createElement('div'); tempDiv.innerHTML = '
<\/div>'; const tempAttrs = tempDiv.firstChild.attributes; for (let i = 0; i < tempAttrs.length; i++) { // For external scripts, allow defer/async. For inline scripts, skip them (not valid) if (src || (tempAttrs[i].name !== 'async' && tempAttrs[i].name !== 'defer')) { newScript.setAttribute(tempAttrs[i].name, tempAttrs[i].value); } } } // Copy other attributes from old OneTrust format for (let i = 0; i < placeholder.attributes.length; i++) { const attr = placeholder.attributes[i]; // Skip attributes we've already handled or don't want to copy if (!['class', 'data-src', 'data-type', 'data-cmp-src', 'data-cmp-attrs', 'data-cmp-processed', 'type', 'async', 'defer', 'src'].includes(attr.name)) { newScript.setAttribute(attr.name, attr.value); } } placeholder.parentNode.replaceChild(newScript, placeholder); // If external script, manually trigger window.onload handlers after it loads // This handles widgets that use window.onload for initialization if (src) { newScript.addEventListener('load', function() { // If page already loaded and script set a new onload handler, trigger it if (document.readyState === 'complete' && window.onload) { const originalOnload = window.onload; window.onload = null; // Clear temporarily to prevent loops originalOnload(); // Execute the handler } }); } }, delay); delay += 500; // 500ms delay between each script to allow full loading }); } cbsoptanon.onScriptsReady(function(cmp) { cmp.ot.targetingAllowed(function(allowed) { if (!allowed) { showPrivacyMessage(); } else { activateGatedScripts(); } }); cmp.ot.awaitInitialConsent(function(consent_model) { cmp.ot.addOnConsentChangedHandler(function() { cmp.ot.targetingAllowed(function(allowed) { if (allowed) { hidePrivacyMessage(); activateGatedScripts(); } else { showPrivacyMessage(); } }); }); }); });