-
#FREETECHNORADIO
A radio first. A Raspberry Pi 5 in Los Angeles keeps the mix on the air around the clock. The picture is the Mont Serein webcam (Beaumont-du-Ventoux), with the Cannes beach camera as backup or on-screen duplex, and it goes to YouTube when that live is up.
Motion detection runs on one frame per second, shrunk to 640 px wide. An OpenCV MOG2 background model (120-frame memory, variance threshold 24, shadows off) holds a statistical picture of the empty scene, and every new frame is compared with it. Pixels that differ clearly form a mask. Fixed lights such as the summit beacon are blanked by exclusion circles, and a small morphological opening removes isolated specks. If more than 35% of the frame changes at once, it is a change of light (cloud, dusk, exposure), not a passage, and the frame is skipped. The remaining patches are linked from one frame to the next by distance; a patch followed over at least three frames becomes a passage. Its best view is cropped and handed to YOLO11s, which names it (car, truck, bus, pedestrian, cyclist, animal), and the box is drawn on the full-size picture.
One bug was kept. The cartoon sun drawn in the sky on grey mornings ended up in the image the detector reads. Its breathing rays are, for MOG2, something that moves, so OpenCV now and then chases the little sun: here the red boxes sit on the tips of its rays. The station is that mix: Dogmazic, voices, and the effects, published as HTTPS HLS at
https://freetechnoradio.tech/index.m3u8(also indata/radio.jsonwhen the Pi is on air). ffmpeg also encodes the picture in 720p and sends it to YouTube. If the Mont Serein feed stops, the Cannes beach camera takes over without cutting the live. -
Charles de Gaulle Map (1940–1945)
Where was General de Gaulle, day by day? A sourced map of his geography from 1940 to 1945.
A day is attested when a source gives a precise place on that date; inferred when there is no such source, but the location can still be assigned with reasonable confidence. About seventy days remain otherwise, mostly likely travel between distant known stops, not undocumented residence.
-
Limpide
View the EXIF of a photo, strip it, or turn a HEIC into a JPEG. The work runs in the browser. The file is never uploaded: there is no endpoint waiting for it, and nothing is stored.
Viewing reads the camera, the GPS and the dates. Stripping removes the camera EXIF, the GPS, the ICC profile and the JFIF block from JPEG, PNG and WebP. HEIC to JPEG keeps the EXIF and the GPS, because a conversion is not a clean-up. The code is the page itself, public in
web/app.js, so the claim can be checked rather than trusted.That local step is the project. A site that offers to read an administrative PDF, or to resize a personal photo, receives the file. Limpide is the opposite arrangement for images: the work happens on the machine that already has them. The same arrangement is the one I want for PDF handling. It is not built yet.
-
Last letters, NLP analysis (Maitron 1940–1944)
Letters written on the eve of execution in France, 1940–1944, read with NLP: about 300 letters, some 115,000 words, taken from the Maitron, each tied to the biographical entry of its author.
The entries follow an almost regular pattern (born on… in…, shot on… at…; trade; affiliation), so dates, age, place of execution and engagement (PCF, FTP, Gaullist networks, hostages, Catholics) come out with regular expressions. spaCy (
fr_core_news_lg) lemmatises, tags and finds named entities; TF-IDF with K-means splits the corpus into an intimate farewell and a patriotic one, and LDA brings out latent themes. The site lays out the timeline of executions, a map, vocabulary by engagement, a concordance, and every letter next to its entry.Written in 2024 as the capstone, chapter 13, of my ENI book Traitement automatique du langage naturel avec Python, then refreshed and extended. The corpus is not new to me: between 2019 and 2022 I wrote 273 entries for the Maitron, most of them for the Maitron des Fusillés 1940–1944 (see Society).
-
QRUNAP2
A small subset of the QNAP2 queueing language, in Rust. The same interpreter runs as a command and in the browser.
Five examples: one server, constant durations, two servers, overload, and a reconstruction of a closed network from an INRIA note of 1995. What the subset does not know, it refuses. It is not a stand-in for QNAP2 9.3.
-
Sismo-LA
An $80 seismograph in the San Fernando Valley: an Arduino UNO Q and a MEMS accelerometer, checked against the USGS earthquake catalog rather than trusted. The question: can a station at that price detect an earthquake unattended, and say when it was wrong?
The microcontroller samples the sensor at 100 Hz and runs an STA/LTA trigger; the Linux side keeps a 1 Hz envelope of the ground motion, fits magnitude and distance against USGS, and publishes a snapshot every 20 minutes. When the catalog names an earthquake, the station re-reads its envelope at the predicted arrival: one magnitude unit deeper than the blind trigger, and never counted as a detection.
Built for Hackster’s Invent the Future with Arduino UNO Q and App Lab contest, then written up as a preprint on Zenodo. The sensor turned out to be as quiet as its datasheet allows, and five real Los Angeles earthquakes were found afterwards in its recordings, all around M2–3, far below the M4.5 or so that people actually feel. One station gives a distance, a ring on the map; three would triangulate the epicentre.
The board is still live: it keeps listening to the ground and asking USGS what just happened.
-
dataroads-FR84 (Inforoute 084)
Web map to read the Vaucluse departmental road network in a single interface: road hierarchy, municipalities, traffic counts, accident data, OpenStreetMap quality, and operational signals (weather, traffic, events). Co-work with Jean-Louis Zimmermann, designer of the demonstrator and digital road tools officer at CD84 (2026), following several geomatics projects we have done together. He handles product and business; I handle all engineering and development.
Jean-Louis presented the underlying architecture at State of the Map 2026 (Paris): Structuring Road Information in Open Data: A Nested Wikidata – OSM – BD TOPO (IGN) Architecture Co-produced by Territorial Authorities. dataroads-FR84 is the Vaucluse web map along that line: territorial scales shared in the URL, a multi-year BAAC cloud, CD84 counts, OSM quality checks, and operational layers.
The browser reads local GeoJSON only (Overpass runs in Python, not in the client). Scheduled jobs refresh OSM extracts, data.gouv.fr sources, and hourly highway edits; GitHub Actions publishes static files to
dataroads-fr84.info. Front end: Leaflet on the IGN Plan (Géoplateforme, masked to the department), plus Waze, Open-Meteo, and a static OpenEventDatabase feed where configured. -
Quantum-backed integrity for industrial blockchain events
A conference paper given at QUEST-IS 2025 (EDF Lab Paris-Saclay) and published in its proceedings, Springer Nature’s Communications in Computer and Information Science (vol. 2744, pp. 346–351): each industrial event is logged on an Ethereum ledger with a fingerprint that mixes in a quantum-drawn number, so a record cannot be rewritten after the fact without it showing.
An eight-qubit circuit, one Hadamard gate per qubit and one measurement, draws the number with Qiskit Aer. The event’s SHA-256 fingerprint binds that number to its timestamp and metadata, and a Solidity contract on Hardhat stores it and checks it. Honest about its limits: the circuit is simulated, not a physical quantum source, and the chain is local, not a public Ethereum network.
The repository is a companion to the paper: its Qiskit and Hardhat code, untouched, plus a deliberately minimal demo that runs the same circuit in the browser with RustQIP compiled to WebAssembly and draws a fresh event on every visit.
-
StatsWiki
The most-read articles on the English Wikipedia, ranked every day from 1 July 2015, the first day the Wikimedia Pageviews API keeps, through yesterday. One request per day lands in Parquet; views of titles that point at the same Wikidata item are added together before the ranking; the site, a Vue 3 app on GitHub Pages, reads only the static JSON that comes out of that.
A day, a month, a year and the whole span each keep a top 50. A month or a year is the sum of its daily rows, never a second query. What the daily job posts to X and to Bluesky is the top five: every day, the week just closed when yesterday was a Sunday, the month on its last day, and the year on 31 December.
A second Wikipedia language is a fork, not a switch: the language code, the Pages base path, the user agent, and the Wikidata calls that still ask for English labels. A project that is not Wikipedia, such as a Wiktionary or Commons, means changing the fetcher, the enrichment and the namespace filters. The Pageviews API only covers Wikimedia projects, so there is no path from here to an arbitrary wiki.
Wikirace, on the same site, is the related instrument: a closed group of articles over a chosen range, and Race%, each article’s share of the group’s cumulative views, read live from the Pageviews API. The preprint From Events to Encyclopedic Attention (Zenodo, 11 June 2026) writes that down as a pipeline, from an event to a perimeter of articles, then to the distribution and an editorial audit, and argues for the pipeline, not for a universal ranking.