This job I applied for had a little chat widget in the corner of the page called “job bot” that offered “AI application assistance”. I feel like I can use all the help I could get so I clicked it. It asked for my name and email address, then provided a link to the page I was already on. 

Bonus points: It was for an environmental conservation position 



No I will not welcome our new AI overlords.
Bonus points: It was for an environmental conservation position
I had a climatology professor who was in his 50s or 60s. He was obsessed with LLMs and thought they were the greatest boon to research because he no longer had to create a spreadsheet of environmental conditions over time. Granted we’re talking hourly readings of half a dozen variables for 10-20 years across multiple weather stations, but it’s literally just exporting that data as a .CSV and importing it into Excel.
He tried to demonstrate this to us, spending an entire class period showing how ChatGPT will read the file and generate the same spreadsheet instantly. It kept fucking up and hallucinating huge chunks of it. Sometimes entire years would be missing, sometimes the data and graphs were nonsensical. There was no way I could trust any of it without manually verifying every line, which is over 100k lines and all of the different categories.
That week our assignment was to ask ChatGPT to code an import tool and have it process a different, much simpler dataset. The answers it should have returned were listed below the input boxes. I couldn’t get over how lazy that class was for what should have been one of my most intense interdisciplinary ones. Using it in any other class was considered cheating.
Oh, and we were specifically looking at climate change’s impact on this region making it significantly hotter over that time period. The whole point was to demonstrate climate change exists. He had 50+ students use ChatGPT and make it parse 100k+ lines in 50+ spreadsheets to prove that climate change is happening, without ever mentioning the inputs going into LLMs and data centres.
The rapid pace of technological development seems to have broken the brains of otherwise smart people and given rocket fuel to hucksters.
I recently attended a webinar on “Claude Code for Climate Risks.” It was by a consultant selling a $2,500 course to learn how to make Claude Code take a preformatted spreadsheet and turn it into an HTML dashboard, something that can be done with Tableau (or even within Excel, the aesthetics were nothing to write home about!). He bragged that this was saving him weeks of work.
idk, I got nothing

You owe me $2500 for these three sentences, minus the intro which I give for free, and uploading a .CSV.
Hi ChatGPT! Could you please code something for me? I need to take a preformatted .CSV spreadsheet and turn it into an HTML dashboard.
Absolutely — I’d be happy to help. Before I start coding, I need just a bit more detail so I build exactly what you want: [list of UI elements, features, coding languages, and options to run locally or host online]. Send me the CSV structure and your goal — I’ll build it.
[a spreadsheet with some weather data] This is an example of the spreadsheet format. I would like it to look clean but have filters, summary metrics, and tables. It will be run locally on my computer, but I would also like to publish it on a website.
Perfect — I’ve looked at your CSV structure. It contains [variables]. Below is a complete, clean, modern HTML dashboard that: ✅ Loads your CSV file (via file upload — works locally) ✅ Displays summary metrics (Avg Max, Avg Min, Date Range, Record High/Low) ✅ Provides date range filtering ✅ Shows interactive charts (Chart.js) ✅ Displays a sortable data table ✅ Works locally AND when published to a website
Super long-ass code that looks formatted correctly on ChatGPT’s website:
spoiler
`<!DOCTYPE html> <html> <head> <meta charset=“UTF-8”> <title>Temperature Dashboard</title>
<!-- Chart.js --> <script src=“https://cdn.jsdelivr.net/npm/chart.js”></script>
<!-- PapaParse for CSV parsing --> <script src=“https://cdn.jsdelivr.net/npm/papaparse@5.4.1/papaparse.min.js”></script>
<style> body { font-family: Arial, sans-serif; margin: 20px; background: #f5f7fa; }
h1 { text-align: center; }
.dashboard { max-width: 1200px; margin: auto; }
.metrics { display: flex; gap: 20px; margin-bottom: 20px; }
.metric-card { flex: 1; background: white; padding: 15px; border-radius: 8px; box-shadow: 0 2px 5px rgba(0,0,0,0.1); text-align: center; }
.metric-card h2 { margin: 0; font-size: 18px; color: #555; }
.metric-card p { font-size: 22px; font-weight: bold; margin: 5px 0 0; }
.filters { margin-bottom: 20px; }
table { width: 100%; border-collapse: collapse; background: white; margin-top: 20px; }
th, td { padding: 8px; border-bottom: 1px solid #ddd; text-align: center; }
th { cursor: pointer; background: #e9ecef; }
canvas { background: white; padding: 15px; border-radius: 8px; box-shadow: 0 2px 5px rgba(0,0,0,0.1); } </style> </head>
<body>
<div class=“dashboard”> <h1>Temperature Dashboard</h1>
<input type=“file” id=“csvFile” accept=“.csv”>
<div class=“filters”> Start Date: <input type=“date” id=“startDate”> End Date: <input type=“date” id=“endDate”> <button onclick=“applyFilter()”>Apply Filter</button> </div>
<div class=“metrics”> <div class=“metric-card”> <h2>Average Max Temp</h2> <p id=“avgMax”>-</p> </div> <div class=“metric-card”> <h2>Average Min Temp</h2> <p id=“avgMin”>-</p> </div> <div class=“metric-card”> <h2>Record High</h2> <p id=“recordHigh”>-</p> </div> <div class=“metric-card”> <h2>Record Low</h2> <p id=“recordLow”>-</p> </div> </div>
<canvas id=“tempChart”></canvas>
<table id=“dataTable”> <thead> <tr> <th onclick=“sortTable(0)”>Date</th> <th onclick=“sortTable(1)”>Avg Max Temp</th> <th onclick=“sortTable(2)”>Avg Min Temp</th> </tr> </thead> <tbody></tbody> </table>
</div>
<script> let rawData = []; let filteredData = []; let chart;
document.getElementById(‘csvFile’).addEventListener(‘change’, function(e) { Papa.parse(e.target.files[0], { header: true, dynamicTyping: true, complete: function(results) { rawData = results.data.map(row => ({ Date: new Date(row[“Date”]), Max: row[“Average of Max Temp”], Min: row[“Average of Min Temp”] })).filter(row => row.Date && row.Max && row.Min);
filteredData = rawData; initializeDateInputs(); updateDashboard(); } });});
function initializeDateInputs() { const dates = rawData.map(d => d.Date); const minDate = new Date(Math.min(…dates)); const maxDate = new Date(Math.max(…dates));
document.getElementById("startDate").valueAsDate = minDate; document.getElementById("endDate").valueAsDate = maxDate;}
function applyFilter() { const start = new Date(document.getElementById(“startDate”).value); const end = new Date(document.getElementById(“endDate”).value);
filteredData = rawData.filter(d => d.Date >= start && d.Date <= end); updateDashboard();}
function updateDashboard() { if (filteredData.length === 0) return;
const avgMax = average(filteredData.map(d => d.Max)); const avgMin = average(filteredData.map(d => d.Min)); const recordHigh = Math.max(...filteredData.map(d => d.Max)); const recordLow = Math.min(...filteredData.map(d => d.Min)); document.getElementById("avgMax").innerText = avgMax.toFixed(2); document.getElementById("avgMin").innerText = avgMin.toFixed(2); document.getElementById("recordHigh").innerText = recordHigh.toFixed(2); document.getElementById("recordLow").innerText = recordLow.toFixed(2); renderChart(); renderTable();}
function average(arr) { return arr.reduce((a,b) => a+b, 0) / arr.length; }
function renderChart() { const ctx = document.getElementById(‘tempChart’).getContext(‘2d’); if (chart) chart.destroy();
chart = new Chart(ctx, { type: 'line', data: { labels: filteredData.map(d => d.Date.toLocaleDateString()), datasets: [ { label: 'Average Max Temp', data: filteredData.map(d => d.Max), borderColor: 'red', fill: false }, { label: 'Average Min Temp', data: filteredData.map(d => d.Min), borderColor: 'blue', fill: false } ] }, options: { responsive: true, interaction: { mode: 'index', intersect: false }, plugins: { legend: { position: 'top' } } } });}
function renderTable() { const tbody = document.querySelector(“#dataTable tbody”); tbody.innerHTML = “”;
filteredData.forEach(d => { const row = tbody.insertRow(); row.insertCell(0).innerText = d.Date.toLocaleDateString(); row.insertCell(1).innerText = d.Max.toFixed(2); row.insertCell(2).innerText = d.Min.toFixed(2); });}
function sortTable(columnIndex) { const keys = [“Date”, “Max”, “Min”]; const key = keys[columnIndex];
filteredData.sort((a, b) => { if (a[key] < b[key]) return -1; if (a[key] > b[key]) return 1; return 0; }); updateDashboard();} </script>
</body> </html> `
It legitimately seems like you could make good money doing that if you know how to market yourself and don’t experience cognitive dissonance.
Like selling MAGA and Jesus Slop or starting a meme coin for every breaking news story, it’s the cognitive dissonance that stops me. Even maintaining grass lawns at a landscaper made me feel like I was making a deal with the devil. Morally I could never justify selling someone their own alienation to the degree that AI creates.
Yeah, I feel the exact same way. I want there to be less bullshit too much to consider adding to it.
The rapid pace of technological development seems to have broken the brains of otherwise smart people and given rocket fuel to hucksters.
I think it’s almost the opposite. Technological development has stalled, utterly, on the promise of “making life more humane” in the way that has been promised for decades. The LLM stuff pretends it cares, that it will finally offer freedom from drudgery.
In the case of an environmentalist, it also offers a fleeting hope of an impossible solution to climate change. Though the only result is that when the geoengineering scams get into full swing they’ll be full of promises about their “AI” enabled drone swarms offering intelligent cloudseeding to optimise B2BSAAS (Shade As A Service).
Though the only result is that when the geoengineering scams get into full swing they’ll be full of promises about their “AI” enabled drone swarms offering intelligent cloudseeding to optimise B2BSAAS (Shade As A Service).

Bonus points: It was for an environmental conservation position
The planet’s dyin’, Cloud.When it turns out the

were right all along and the only genuine career path in this space is 
.We need a Poison Ivy version of

There are many times that I engage the AI just to see if I can get something mildly useful out if it, and so often (50%?) My mildest expectations can’t be met.
Applied for a job at a local grocery chain yesterday. They used AI to autofill their bullshit forms from an uploaded resume. It was honestly incredibly handy, saved me at least half an hour of stress and typing and required only minimal manual adjustment.






