91³Ô¹ÏÍø

Watch CBS News

Library Of 'Things' In Dracut Helps People Reduce Waste With 'Try Before You Buy' Items

DRACUT (CBS) - Daniel Plante of Dracut has always had an interest in music and he recently added to his skills after visiting his local library with his son.

"I noticed that there were a bunch of things that you could just sign out and one of them was the ukulele. I had been talking to my wife, saying I'd love to try the ukulele and I thought, why not?" he told WBZ-TV.

The instrument is just one of dozens of "things" available to check out of the Dracut Library.

"Things like a telescope, sewing machines," said library director Christine Muir as she showed us around the collection.

The money to buy the items came from a grant from the Massachusetts Department of Environmental Protection.

Many of the items are for one-time use, like a scanner to digitize film negatives or a car code reader that will tell you why your "check engine" light is on.

The car code reader available at the Dracut Library. (WBZ-TV)

"It's definitely not something that you have to own long-term, so it's great to just come in and borrow it from the library and use it while you need it," Muir said.

According to Brooke Nash of MassDEP, it's all about emphasizing "reduce and reuse" instead of recycling.

"By not buying something in the first place, we can each make our own personal impact on the planet," she said.

The added benefit according to Nash, is freeing up storage space at home, using a pasta maker as an example.

"How many times are you really going to make pasta," she told WBZ.

There is also the idea of trying something out before you know if you'll enjoy it. Nash talked about someone who might want to try snowshoeing. If they don't like it, they saved some money.

Muir showed us a Cricut die cut machine as an example. It can be used to cut out fabric shapes or to design your own iron-on stickers.

"It can be tricky and this is a little time consuming, which is why it's a kind of a nice 'try before you buy' option,'" she said.

That is exactly what Daniel was thinking when he checked out the ukulele.

"It had to go back and I loved playing it, so I had to get one for myself," he said.

Nash told us MassDEP has helped 41 libraries build their "thing" collections. There is information available .

"I think of libraries as reinventing themselves by adding libraries of things because we consume so much of our other media through digital sources. This is a way that libraries can continue to be a great resource for their communities," she said.

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