Write things. Estivate. Acclimate. Repeat.
Write things. Estivate. Acclimate. Repeat.
Image of HAL 9000 shamelessly stolen from someone who stole it from someone ad nauseum who stole it from Kubrick, as well as the silly meme, whose seminal idea came from Dawkins. Is that enough glazing and attribution for now?
Me: "iNaturalist, record the negative occurrence data for this locality."
iNaturalist: "I'm sorry, nickdwaters. I'm afraid I can't do that."
https://forum.inaturalist.org/t/my-not-at-all-controversial-thought-on-negative-data/86649
October 20, 2026.
I've been working with Google Gemini to extract Darwin Core compliant fields to create an offline ready app fully capable of uploading to gbif.org when requested. This data will include positive detection data, negative detection data, and citations. This is a living document.
Imaginary criticism: "Oh my gawd, you are using AI? Doesn't that mean you are intellectually weak and morally compromised? Think about the children!"
Smug rebuttal: No, it means I recognize that I can leverage the technology to take care of the fiddly stuff, and if it can't do that, at least I can get into internals to improve it, or train Gemini to improve while also taking care of the bigger problem I'm trying to solve in the first place. When people invented the club, they realized it could be used for other things besides conking women on the head and dragging them into caves to fulfill their lustful desires. Data centers be damned, that's fearmongering. See the big picture with me. It's not that bad.
The app will operate in the field. If the network is unavailable, data that is entered will be stored and uploaded when the network is back in range. Photos will be uploaded to my Google Drive and serve as evidence for basisofrecord.
I can enter whether a particular species was present or absent. I can then provide evidence for this and descriptive fields for the types of habitat sought and searched. I can provide greater detail over the geographic area covered, in addition to defining the centroid and area of uncertainty, I can define a shape that can be overlain on a map, and from that calculate an area.
occurrenceID and localityID can be programmatically generated so that I don't get bogged down in the field with keeping track of these identifiers. That is a significant improvement over current affairs, and has been a source of concern for years.
The following is the input Google Gemini and I worked on to create the Google Sheet and then an App usable on any device for use in the field.
Copy and paste these Requirements into your nearest AI for your very own custom Darwin Core and GBIF compliant datasheet with all the fixings. I chose Google Gemini. It can create a Google App for you as well. You may need to tweak and iterate until satisfied.
"There there, Google Gemini AI. That's a good girl. You're so good. Yes you are."
GBIF Direct Upload Compliance: Standardize all data entry columns strictly to the Darwin Core (DwC) standard to guarantee error-free ingestion into the GBIF Integrated Publishing Toolkit (IPT).
Provide class fields to record species occurrence data, including observer(s) event date, effort expended, basis of record, search method, species, habitat, and geospatial data.
Positive and Negative Observation Tracking: The schema must support both presence and absence records within the same sheet profile. For negative (absence) data, the sheet must enforce explicit biological zero metrics (occurrenceStatus = absent, individualCount = 0, and organismQuantity = 0).
Multi-Source Support: The tracking schema must cleanly distinguish between record types using basisOfRecord definitions (HumanObservation for sightings/photos, PreservedSpecimen for museum records, and MaterialCitation for published literature citations).
Multi-Photo Ingestion Delimitation: Enable support for submitting multiple photographs per individual occurrence event within the associatedMedia field, utilizing the official GBIF pipe-separated format (URL1 | URL2).
General Area Documentation: Include granular structural columns for overarching regional geography and aquatic basins.
Geospatial Boundaries & Footprints: Provide dedicated space for polygon geometries using Well-Known Text (footprintWKT) alongside point centroids (decimalLatitude, decimalLongitude).
Sampling Protocol Documentation: Incorporate specific search method capture rules—specifically supporting your randomwalk methodology—paired with explicit text fields for samplingEffort (e.g., duration, distance) to contextualize tracking intensity.
eventDateTime is ISO complete.
Habitat Form Logging: Include a dynamicProperties column designed to hold structured JSON blocks (key-value pairs) to capture custom structural habitat configurations (e.g., canopy cover, soil structure, microhabitat variables), serving as direct proof of search effort for negative data points.
Custom occurrenceID Formula: Auto-generate identifiers dynamically down column A using your initials NDW followed by a timestamp derived straight from your data's event start date and time (NDW:YYYYMMDD:HHMM) followed by an incrementing counter
Two-Letter Country Codes: Standardize the country column to use strict ISO 3166-1 alpha-2 codes (e.g., US instead of "United States") to avoid geographic validation failures.
Two-Letter StateProvince Codes following ISO or USPS standard
Two-Letter County Codes by StateProvince - create a lookup table called StateCounty so there is a unique county abbreviation for each county in the State of Arizona and California, e.g. MA for United States, Arizona, Maricopa, or HU for United States, California, Humboldt.
Two letter locality abbreviation look up table, based on the geographic area acronym.
Custom locationID Hierarchy Formula: Auto-generate unique locality identifiers dynamically following a specific text pattern: [Country].[State].[County].[GeographicAreaAcronym][Counter] (e.g., US.AZ.MA.PP01).
Collision Prevention & Counter Progression: Integrate a secondary lookup tab named PreExistingLocalities containing your historical site prefix codes and counters. The data sheet formula must actively query this history, identify the maximum ceiling integer previously used for an area, cross-reference it against active workspace duplicates, and automatically increment the site codes sequentially (e.g., jumping from PP02 to PP03).
Rule 1: Controlled Vocabulary Dropdowns: Automate column restrictions across the sheet to force clean string inputs matching restricted vocabularies for basisOfRecord, occurrenceStatus, and your samplingProtocol selections.
Rule 2: Drive Multi-Photo Batch Linker: Build an interactive pop-up prompt window that requests a Google Drive Folder ID, parses all valid images within that directory, and outputs their public direct-viewing URLs directly into your active cell using the required vertical pipe (|) string divider.
Rule 3: Automated Spatial Validation Checklist: Execute structural data-parsing checks when triggered. The script must halt processing and alert the user if a polygon loop path is left unclosed, if syntax parentheses are unbalanced, if standalone coordinates fall outside earth coordinate bounds, or if an absent record is missing its critical coordinateUncertaintyInMeters radius.
Axis Inversion Guard: Embed an explicit rule within the parser that validates coordinate order inside the WKT text block, catching common formatting errors where latitude values are placed before longitudes (WKT requires Longitude first: X Y).
WKT Map Sandbox Previewer: After passing validation checks, open a custom browser modal hosting a direct clickable link to push your active raw WKT string into a visual map viewer for spatial accuracy evaluation before final export.
Web-Ready Export Utility: Include a data packager script that translates the active, multi-formula spreadsheet layout into a clean, comma-separated standalone file format (gbif_occurrence_export.csv) ready for direct ingestion by the IPT validator tool.
AppSheet Integration: Configure the sheet to seamlessly port into a mobile interface using AppSheet to handle remote data collection.
True Offline Accessibility: The mobile setup must operate fully offline without cellular signal or access to live Google scripts, caching photo captures and form fields locally until web service is restored.
Automated Device GPS Capture: Configure the smartphone app interface to automatically read and parse direct internal satellite GPS coordinates via the HERE() function, auto-populating separate decimalLatitude and decimalLongitude Darwin Core fields on form initialization.