') + ')', 'gi');
if (regex.test(text)) {
found = true;
var frag = document.createDocumentFragment();
var parts = text.split(regex);
parts.forEach(function(part, i) {
if (i % 2 === 0) {
frag.appendChild(document.createTextNode(part));
} else {
var span = document.createElement('span');
span.className = 'userscript-highlight';
span.textContent = part;
frag.appendChild(span);
}
});
node.parentNode.replaceChild(frag, node);
}
});
} else if (node.nodeType === 1 && node.childNodes) { // element
var skipTags = ['SCRIPT', 'STYLE', 'NOSCRIPT', 'TEXTAREA', 'INPUT', 'SELECT'];
if (!skipTags.includes(node.tagName)) {
Array.from(node.childNodes).forEach(highlight);
}
}
}
highlight(document.body);
// Re-highlight on dynamic content
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(m) {
m.addedNodes.forEach(function(node) {
if (node.nodeType === 1 || node.nodeType === 3) highlight(node);
});
});
});
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Highlight Search Terms]', __e); }
})();
(function(){
try {
var __m = "*";
var __re = new RegExp('^' + ".*" + ', 'i');
if (__m === '*' || __re.test(location.href)) {
// Strip utm_, fbclid, gclid, etc. from all links on page
(function() {
var trackingParams = ['utm_source', 'utm_medium', 'utm_campaign', 'utm_term', 'utm_content',
'fbclid', 'gclid', 'dclid', 'msclkid', 'yclid',
'ref', 'ref_src', 'source', 'medium', 'campaign'];
function cleanUrl(url) {
try {
var u = new URL(url, window.location.origin);
var changed = false;
trackingParams.forEach(function(p) {
if (u.searchParams.has(p)) {
u.searchParams.delete(p);
changed = true;
}
});
return changed ? u.toString() : url;
} catch (e) {
return url;
}
}
function cleanLinks() {
document.querySelectorAll('a[href]').forEach(function(a) {
var clean = cleanUrl(a.href);
if (clean !== a.href) a.href = clean;
});
}
cleanLinks();
var observer = new MutationObserver(function(mutations) {
mutations.forEach(function(m) {
m.addedNodes.forEach(function(node) {
if (node.nodeType === 1) {
if (node.tagName === 'A') cleanLinks();
node.querySelectorAll('a[href]').forEach(function(a) {
var clean = cleanUrl(a.href);
if (clean !== a.href) a.href = clean;
});
}
});
});
});
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:Remove Tracking Parameters from Links]', __e); }
})();
(function(){
try {
var __m = "youtube.com";
var __re = new RegExp('^' + "youtube\\.com" + ', 'i');
if (__m === '*' || __re.test(location.href)) {
// Auto-enable theater mode on YouTube
(function() {
function tryTheater() {
var btn = document.querySelector('button[aria-label="Theater mode"], ytd-player #player button[title="Theater mode"]');
if (btn && !btn.classList.contains('activated')) {
btn.click();
}
}
// Try immediately
tryTheater();
// Try after navigation (SPA)
var lastUrl = location.href;
setInterval(function() {
if (location.href !== lastUrl) {
lastUrl = location.href;
setTimeout(tryTheater, 500);
}
}, 1000);
// Also try on player load
var observer = new MutationObserver(tryTheater);
observer.observe(document.body, { childList: true, subtree: true });
})();
}
} catch(__e) { console.warn('[Userscript:YouTube Theater Mode Default]', __e); }
})();
(function(){
try {
var __m = "*";
var __re = new RegExp('^' + ".*" + ', 'i');
if (__m === '*' || __re.test(location.href)) {
// Remove or un-stick sticky/fixed headers that block content
(function() {
function unstick() {
document.querySelectorAll('header, nav, [role="banner"], .header, .navbar, .sticky, .fixed-top, [style*="position: fixed"], [style*="position:sticky"]').forEach(function(el) {
if (el.style.position === 'fixed' || el.style.position === 'sticky' || getComputedStyle(el).position === 'fixed' || getComputedStyle(el).position === 'sticky') {
el.style.position = 'static';
el.style.top = 'auto';
el.style.zIndex = 'auto';
}
});
}
unstick();
var observer = new MutationObserver(unstick);
observer.observe(document.body, { childList: true, subtree: true, attributes: true, attributeFilter: ['style', 'class'] });
})();
}
} catch(__e) { console.warn('[Userscript:Kill Sticky Headers]', __e); }
})();
})();
Measurement Engineering Group · GitHub
Measurement Engineering Group
Measurement Engineering Group (german: "Elektrische Messtechnik", EMT) at Paderborn University, Germany
Welcome to the github profile of Measurement Engineering Group.
We maintain various open software and hardware projects.
To help you find your way around, here is a small breakdown of our repositories.
Material related to our courses and lectures:
Repositories related to our research:
dsch , schema-based approach to measurement data storage.pyfds , a modular field simulation tool using finite differences.united , a SI unit representation and conversion tool.proposal_dfg , a LaTeX template for grant proposals to the DFG.If you are a lab geek searching for THAT missing Python interface these might be useful for you:
handyscope , an interface for TiePie USB oscilloscopes.tektronixsg , an interface for Tektronix signal generators.keysightosc , an interface for Keysight oscilloscopes.You can't relate with any of the topics mentioned, but still want to understand them? Click here .
Pinned
Loading
Structured, metadata-enhanced data storage.
Python
2
Modular field simulation tool using finite differences.
Python
3
A LaTeX template for grant proposals to the DFG.
TeX
30
11
A SI unit representation and conversion tool.
Python
1
Python interface to USB-oscilloscopes made by TiePie.
Python
3
4
An easy-to-use graphical software to learn signal analysis methods
Python
6
2
Repositories
Showing 10 of 27 repositories icu_proceedings
Public
Template for submissions to the 2025 ICU proceedings
emtpb/icu_proceedings's past year of commit activity TeX
0 Unlicense
0
0
0
Updated Aug 12, 2026 handyscope
Public
Python interface to USB-oscilloscopes made by TiePie.
emtpb/handyscope's past year of commit activity Python
3
4
0
1
Updated Aug 3, 2026 tektronixsg
Public
Interface for Tektronix signal generators.
emtpb/tektronixsg's past year of commit activity Python
0
1
0
0
Updated May 16, 2026 proposal_dfg
Public
A LaTeX template for grant proposals to the DFG.
emtpb/proposal_dfg's past year of commit activity TeX
30 Unlicense
11
0
1
Updated Feb 26, 2026 plutho
Public
Python library for coupled thermo-piezoelectric simulations
emtpb/plutho's past year of commit activity Python
2 BSD-3-Clause
1
9
0
Updated Feb 13, 2026 keysightosc
Public
Interface for Keysight Oscilloscopes.
emtpb/keysightosc's past year of commit activity Python
0
3
0
0
Updated Oct 31, 2025 uniswag
Public
A student project for a GUI-based software for oscilloscopes and signal generators
emtpb/uniswag's past year of commit activity Python
2
1
0
0
Updated Oct 21, 2025 et-ruler-lauflicht
Public
PCB with a handy ruler, can be populated with a chasing light circuit
emtpb/et-ruler-lauflicht's past year of commit activity HTML
1
1
0
0
Updated May 23, 2025 et-ruler-litac
Public
PCB with a handy ruler, can be populated with a circuit that converts light to audio
emtpb/et-ruler-litac's past year of commit activity HTML
1
1
0
0
Updated May 23, 2025 emtpb/pmi-hw-bob2's past year of commit activity HTML
0
1
0
0
Updated May 22, 2025
You can’t perform that action at this time.