Our local parks department has several annual events where they ask for volunteers to help perform benthic macroinvertebrate surveys. It basically amounts to meeting up at a local park with a couple people in waders dragging special nets along the bottom, dumping scoops of material into buckets and large, shallow, white trays, and others sitting at picnic tables with spoons, magnifying glasses, and muffin tins sorting out the critters that get caught in the nets.
The cool part is that at the end, you can score the creek based on the quantity and types of larvae that you find: Caddisfly, mayfly, and stonefly larvae are very sensitive to factors like runoff from agriculture and road salt, sediment, water oxygenation, and other factors, beetles, crayfish, dragonflies, and scuds are moderately tolerant, while leeches, worms, midges, and flies will grow in anything. Thousands of these surveys happen every year, so you can compare the relative frequency and quantity of various species and determine the relative health of the stream.
I don't know how many tardigrades you'll find just scooping 4-8mm nymphs and larvae by eye, but I've brought my microscope to a couple and put random droplets of water under a cover and slide: there are an astonishing number of tiny critters swimming around at any zoom level.
Nymphs are larger (that's why they call them "macro" invertebrates), but it's always good to have at least a magnifying glass if not a loupe or microscope on site.
> [Loupes] generally have higher magnification than a magnifying glass, and are designed to be held or worn close to the eye.
I did a side project that helps with comparisons, but in a rather different way (e.g. how many African elephants does something weigh). Not as slick as this site, but someone might find it useful:
(function() {
let direction = 'right'; // Start by going right
let intervalId;
function getCurrentAnimalName() {
const animalDiv = document.querySelector('.animal-name');
return animalDiv ? animalDiv.textContent.trim() : '';
}
function pressKey(keyCode) {
const event = new KeyboardEvent('keydown', {
key: keyCode === 37 ? 'ArrowLeft' : 'ArrowRight',
keyCode: keyCode,
code: keyCode === 37 ? 'ArrowLeft' : 'ArrowRight',
which: keyCode,
bubbles: true
});
document.dispatchEvent(event);
}
function autoScroll() {
const currentName = getCurrentAnimalName();
if (direction === 'right') {
pressKey(39); // Right arrow
if (currentName === 'Pando Clone') {
console.log('Reached Pando Clone, switching to left');
direction = 'left';
}
} else {
pressKey(37); // Left arrow
if (currentName === 'DNA') {
console.log('Reached DNA, switching to right');
direction = 'right';
}
}
}
// Start the interval
intervalId = setInterval(autoScroll, 3000);
// Log start message and provide stop function
console.log('Auto-scroll started! To stop, call: stopAutoScroll()');
// Expose stop function globally
window.stopAutoScroll = function() {
clearInterval(intervalId);
console.log('Auto-scroll stopped');
};
})(); {
const s = window.scroller = {}
const press = (key, code) => () =>
document.dispatchEvent(new KeyboardEvent('keydown', {
key: key, keyCode: code,
which: key, code: code, bubbles: true
}));
const step = () => {
const div = document.querySelector('.animal-name')
const name = div?.textContent.trim()
if (name === 'Pando Clone') s.dir = s.left
if (name === 'DNA') s.dir = s.right
s.dir()
}
s.left = press(37, 'ArrowLeft')
s.right = s.dir = press(39, 'ArrowRight')
s.start = (ms) => s.ival = setInterval(step, ms)
s.stop = () => clearInterval(s.ival)
}
scroller.start(5000)1. https://healthland.time.com/2013/06/21/theyre-alive-harveste... 2. https://agriculture.institute/food-chemistry-and-physiology/...