Activity
-
Cleanup old data with a pattern based on latest file 💬 by Caio 2 months ago
Ensemble dataset has (obviously) a different name. Filled up the disk, couldn't download newer data. First outage 🎉🎉
-
info: expose current head as version by Caio 2 months ago
-
Remove leftover file 💬 by Caio 2 months ago
Got copy-renamed to moros.rs and I forgot to git-rm
-
Record lastTick after content swap 💬 by Caio 2 months ago
Just to that I updates correctly when I switch tabs like a madman
-
No need to `use ndarray::` here by Caio 2 months ago
-
Add chuva/bin/check to verify loading 💬 by Caio 2 months ago
Load a given dataset using code with manual offsets and compare vs using ndarray.
-
Fix ensemble dataset loading 💬 by Caio 2 months ago
It's row-major, not column-major (i.e. the LAST dimension is contiguous, not the first). RIP muh cpu cache
-
Add a little helper to diff datasets by Caio 2 months ago
-
Make download-dataset a bit smarter 💬 by Caio 2 months ago
Take dataset from args. Figures out which PID to terminate through systemd so I can make multiple instances of the same binary without worry Now https://beta.chuva.caio.co is running with the ensemble model
-
No need for load feature anymore 💬 by Caio 2 months ago
Fewer moving pieces. Finally.
Chuva
Rain prediction for The Netherlands
- Live: https://chuva.caio.co
- Demo: https://chuva.caio.co/demo
- Git Repository: https://caio.co/de/chuva/
History
Earlier this year (2025) I got fed up with how slow and full of ads the service I used before got, then I found out that KNMI publishes precipitation predictions so I quickly hacked something that dumped what wanted to the terminal
For months, this is all that chuva was: a script downloading the most recent dataset and me ssh'ing into the server to call the program. Then came October with a lot of random rain that barely gets you wet which prompted me to make it easier to access it.
I kept the support for plain-text predictions since I like to avoid
going to the browser to prevent distractions. You can use it too if
you like, either via the accept header or a txt=1 query string:
$ curl -H accept:text/plain https://chuva.caio.co/demo
It's 10:48
▃▄ ▄▆▆▅▁ ▁▄▅▄▂
^
- Rain ends in 36 minutes
- Rain from 12:15 until 12:40
Project Layout
In alphabetical order:
caveman: Ahyper-based,serde-less http1 thing that can answer traditional web requests and knows to shutdown gracefullychuva: An API for interacting with the KNMI dataset. It loads the dataset to RAM in a format that makes it super easy to answer the "what's the forecast for a given coordinate" questiondownload-dataset: The "cron job" that retrieves the most recent datasetetc/systemd: A skeleton of the systemd unit files that drive the servicemoros: The web server, front-end for chuva.caio.co. Designed to be killed/restarted periodically to pick up the most recent data
License
This software is licensed under the European Union Public License (EUPL) v. 1.2 only