Open-sourced Implementation of the DEBRA Algorithm

ringsaturn/shachen The DEBRA algorithm (Miller et al. 2017, doi:10.1002/2017JD027365) is a method I have been following for a long time for identifying dust from satellite data. The unique aspect of this algorithm is its background estimation method, which avoids interference from special ground backgrounds such as deserts and lakebeds. Furthermore, the algorithm is designed for highly targeted engineering applications, aiming to be an all-weather recognition algorithm that provides users with fast, high-contrast output, bypassing the traditional need to introduce aerosol optical thickness.

 · 1 min · 82 words · ringsaturn
Pre-event baseline, 2026-08-24 path 19 descending Sentinel-1D RTC dual-pol composite (R=VV, G=VH, B=VV−VH)

Satellite Observation of the China–Nepal Border Debris Flow

Note The satellite data in this post (Sentinel-1, NISAR and the optical scenes) was retrieved, processed and composited by the author. Claude compiled the text from those processed results and from public news reporting. Processing parameters and acquisition times are taken from the data itself; the event description and casualty figures come from the public sources linked in the text. At 02:52:10 UTC on 2026-08-26 (08:37 Nepal time, 10:52 China time), an ice and rock cliff on the north side of Langtang Lirung collapsed inside Langtang National Park. USGS located the source from seismic waves, on the north face of a peak roughly 7,200 m high; the main event released energy equivalent to M5.2, followed about 3 hours later by a secondary collapse equivalent to M4.2. AntarcticGlaciers gives the detachment coordinates as 28.2853°N, 85.5252°E and states that the present evidence does not support a glacial lake outburst flood (GLOF); the proposed mechanism is a multi-hazard cascade of ice and bedrock failure, rock/ice avalanche and debris flow, temporary river blockage, then outburst flooding. The author describes all of these as preliminary. The debris flow travelled about 100 km down the Bhote Koshi and Trishuli rivers and destroyed the customs facilities at the Rasuwagadhi border crossing along with the China–Nepal highway. The Wikipedia article records, as of 28 August, 547 dead and 977 missing on the Nepali side and 5 dead and 558 missing on the Chinese side; the search is ongoing, sources differ in what they count and when they were updated, and the figures are still changing. The same area saw a large ice and rock avalanche during the 2015 Gorkha earthquake that buried villages in the Langtang valley and killed more than 350 people. This post records the data work done in the two weeks after the event: building the Sentinel-1 pre-event baseline, processing the first obtainable post-event SAR data (NISAR, L-band) and the first post-event Sentinel-1 scene, and then the four viewing geometries that followed. ...

 ·  · 26 min · 5342 words · ringsaturn

tzf Spring 2026 Update

It has been a few years since the tzf project family was started. The last systematic look back at its development history was History of package tzf in early 2023. Since then, there have been various updates and maintenance work, mostly focused on non-core optimizations and supplementary features. In spring 2026, several long-pending important changes were finally completed: Introducing topology-aware processing to eliminate gaps and overlaps introduced during polygon simplification; Based on topology-aware processing, developing a more efficient data distribution format — ~17 MB for full-precision data and ~5.4 MB for simplified data; Introducing YStripes index acceleration, inspired by the tg project. Topology-Aware Processing The raw data is essentially a collection of polygons. Because the raw boundaries are highly detailed, the data volume is large, so polygon simplification is necessary. Many of these polygons share boundaries, but in the previous approach, each polygon was simplified independently using RDP. This caused a known issue that existed since the project’s early days: gaps appearing in areas that should be fully covered, and unwanted polygon overlaps introduced by simplification: ...

 ·  · 8 min · 1665 words · ringsaturn

Notes on Open Meteo's UV Index

There is no built-in UV index in the original’s NOAA’s GFS data. However, Open Meteo provides UV index forecast in GFS’s data API and other weather models. That’s very interesting because it means that Open Meteo is doing some additional processing on top of the raw GFS data to derive the UV index. So I dig into it’s source code to see how they are calculating the UV index: 1 2 3 4 5 6 7 8 9 10 11 // https://github.com/open-meteo/open-meteo/blob/bf9577492dde460f9428d5d892b43bab9faa93ef/Sources/App/Gfs/GfsVariableDownloadable.swift#L473-L477 func multiplyAdd(domain: GfsDomain) -> (multiply: Float, add: Float)? { switch self { // ... case .uv_index, .uv_index_clear_sky: // UVB to etyhemally UV factor 18.9 https://link.springer.com/article/10.1039/b312985c // 0.025 m2/W to get the uv index // compared to https://www.aemet.es/es/eltiempo/prediccion/radiacionuv return (18.9 * 0.025, 0) // ... That make things simple. Just use existing GFS UVB data and apply a simple linear transformation to get the UV index.

 · 1 min · 147 words · ringsaturn

Hosting LaTeX-compiled PDFs on GitHub Pages

A few days ago, I wanted to organize my resume information. Following my usual habit, I wrote it in LaTeX. However, when I wanted to publish it online to share the resume link, I needed to upload the PDF somewhere. The PDF file of the resume is a binary file, and I didn’t want to store it directly in the repository. So I decided to use GitHub Actions to automatically compile the LaTeX file and publish the generated PDF to GitHub Pages. ...

 · 2 min · 273 words · ringsaturn
Precipitation Comparison of Beijing/Shanghai/Tokyo

Historical Weather Statistics Using GHCNd Dataset

The full name of the GHCNd dataset is the Global Historical Climatology Network daily. It is a global observation dataset publicly released by NOAA, with data starting from 1763, containing daily meteorological observation data from a total of 120,000 weather stations worldwide. The monthly summary version of the GHCNd dataset is the Global Historical Climatology Network monthly. During the weekend, I performed some statistical analysis on this dataset, and I’d like to record the general processing workflow. ...

 · 2 min · 287 words · ringsaturn

Reverse Geocoding of Japanese Administrative Divisions

A few months ago, I wanted to map Japanese coordinate data to administrative division levels. To achieve this, I developed a reverse geocoding tool reversejp using administrative boundary data from the Japan Meteorological Agency (JMA). The core functionality is implemented in Rust, and I packaged it as a Python library using PyO3 and Maturin. Although Japan’s land area is not very large, the JMA dataset subdivides the country into over 3,000 administrative units at its finest level. Considering Japan’s total land area, this results in extremely fine-grained coverage. ...

 · 2 min · 231 words · ringsaturn

A Local Debugging MongoDB Proxy

A local debugging MongoDB proxy

 · 1 min · 122 words · ringsaturn

Group world cities by timezone

A simple example of how to group world cities by timezone

 · 4 min · 725 words · ringsaturn

Released pg-tzf: High-Performance Lat/Lon → Time Zone PostgreSQL Extension

Developed and released pg-tzf, a PostgreSQL extension providing microsecond-level latitude/longitude to time zone conversion, based on the Rust library tzf-rs and the pgrx framework.

 · 1 min · 145 words · ringsaturn