diff --git a/TODO.md b/TODO.md new file mode 100644 index 0000000..9b62be9 --- /dev/null +++ b/TODO.md @@ -0,0 +1 @@ +- SvarBox 26/10/25 \ No newline at end of file diff --git a/web/content/blog/dopecarpet.md b/web/content/blog/dopecarpet.md new file mode 100644 index 0000000..385f50a --- /dev/null +++ b/web/content/blog/dopecarpet.md @@ -0,0 +1,16 @@ +Title: Dopecarpet & Rugreefer +Date: 2025-03-05 23:00 +Category: code +Slug: dopecarpet +Summary: Geospatial metadata API to package OpenStreetMap data into geohash-based tiles and a Dart library to efficiently fetch, parse, and cache that spatial information. + +Working for [Randonautica]({filename}../blog/randonautica.md) I had the idea to develop an API to allow requesting geographic information about coordinates, like whether they are in or near water, within a nature reserve, residential area, or in a forest, or any other geocoded metadata. + +Based on publicly available OpenStreetMap data I develpped [Dopecarpet](https://codeberg.org/randogoth/dopecarpet), a toolset to generate 4 digit GeoHash tile sized Parquet/GeoJSON/CBOR files from OSM PBF files. It comes with a custom tag filter and a minimal GET API to download the data in different formats. + +To retrieve data from the API I also built the Dart library [Rugreefer](https://codeberg.org/randogoth/rugreefer). It converts coordinates into a geohash, fetches a gzipped GeoJSON file from the API, and extracts relevant spatial data such as polygons and lines. The library also supports caching with optional expiration to improve performance. + +## Repositories + +* [Dopecarpet](https://codeberg.org/randogoth/dopecarpet) +* [Rugreefer](https://codeberg.org/randogoth/rugreefer) \ No newline at end of file diff --git a/web/content/blog/lyagushka.md b/web/content/blog/lyagushka.md new file mode 100644 index 0000000..b0d181a --- /dev/null +++ b/web/content/blog/lyagushka.md @@ -0,0 +1,15 @@ +Title: Lyagushka +Date: 2025-01-09 23:00 +Category: code +Slug: lyagushka +Summary: Rust-based command-line tool that detects statistically significant attractor clusters and void gaps in one-dimensional integer datasets. + +(Russian лягушка [lʲɪˈɡuʂkə]: frog) + +Lyagushka is a Rust command-line tool inspired by *Fatum Project*'s '[Zhaba](https://gist.github.com/randogoth/ab5ab9e8665303be176f16241e7b26b5)' algorithm (Russian 'жаба': toad) and expands upon it for more versatility. + +It is an algorithm that analyzes a one-dimensional dataset of integers to identify clusters of closely grouped "attractor" points and significant "void" gaps between these clusters. It calculates z-scores for each cluster or gap to measure their statistical significance relative to the dataset's mean density and distance between points. The analysis results, including attractors, voids, and their z-scores, are output as a JSON string. + +## Repository + +* [lyagushka](https://codeberg.org/randogoth/lyagushka) \ No newline at end of file diff --git a/web/content/blog/map3terms.md b/web/content/blog/map3terms.md new file mode 100644 index 0000000..a453ee1 --- /dev/null +++ b/web/content/blog/map3terms.md @@ -0,0 +1,15 @@ +Title: map3terms +Date: 2025-02-02 23:00 +Category: code +Slug: map3terms +Summary: Open-source Feistel-cipher–based three-word generator for geographic coordinates, ported from JavaScript to Dart. + +In its first inception as a Telegram chatbot in 2019 [Randonautica]({filename}../blog/randonautica.md) had implemented *What3Words* for each of the coordinates, a commercial service that assigns a three-word identifier to each 3m x 3m square on Earth. The reason for using their words was to provide randonauts with an extra layer of memetic information that might give rise to synchronicities. Indeed some explorers found correlations between some of the words and the location itself. + +The [problematic company behind the service](https://wiki.openstreetmap.org/wiki/What3words) has questionable marketing strategies, ridiculous price models, and aggressive intellectual property policies, so Randonautica did not want to continue using their service. + +Since there was no need to use a service for navigation purposes but merely to provide three random words for each Randonaut point I was looking for an alternative solution based on a completely different wordlist and algorithm and found one based on the ingenious idea of a simplified symmetric encryption method called *Feistel cipher*, implemented in JavaScript. Unfortunately the original repository does not exist anymore but I ported it to Dart and published it under the *Do What The Fuck You Want to* Public License. + +## Repository + +* [map3terms](https://codeberg.org/randogoth/map3terms) \ No newline at end of file diff --git a/web/content/blog/md2txt.md b/web/content/blog/md2txt.md new file mode 100644 index 0000000..7e52d62 --- /dev/null +++ b/web/content/blog/md2txt.md @@ -0,0 +1,13 @@ +Title: md2txt +Date: 2025-10-20 23:00 +Category: code +Slug: md2txt +Summary: Driven by my interest in retro, text-based systems, I built md2txt, a standalone CLI that converts Markdown into Micron and other niche formats such as Ancient Machine Book and Gemini’s gemtext. + +As you might have guessed already I am a fan of retro technology and text based operating systems. + +Expanding on my previous work on a converter from Markdown to Micron, the markup used by [NomadNet]({filename}../blog/reticulum.md), I created a standalone CLI called [md2txt](https://codeberg.org/randogoth/md2txt) that can also convert Markdown into other arcane text formats, like [Ancient Machine Book](https://web.archive.org/web/20231031005104/http://amb.osdn.io/) markup for DOS and also for the [Gemini Protocol](https://geminiprotocol.net/)'s *gemtext* format. + +## Repository + +* [md2txt](https://codeberg.org/randogoth/md2txt) \ No newline at end of file diff --git a/web/content/blog/onod3000.md b/web/content/blog/onod3000.md new file mode 100644 index 0000000..407f2cf --- /dev/null +++ b/web/content/blog/onod3000.md @@ -0,0 +1,29 @@ +Title: onod 3000 +Date: 2025-01-18 23:00 +Category: code +Slug: onod3000 +Summary: Rust port of the ent 3000 randomness testing suite for TRNG Makers. + +Rust port of Paul Uszak's new randomness testing suite for TRNG Makers generating in the sub 1 MB space. Successor to John Walker’s venerable *ent*. + +*Onod3000* provides multiple randomness tests, each outputting a statistic, a z-score andd a p-value to assess the conformity of the data to random behavior. + +## Testing Methodology + +All tests have been carefully ported from [Paul Uszak's Java code](http://www.reallyreallyrandom.com/gitbucketlabhub/) (ent3000-0.6.0-beta). Java libraries were substituted with Rust crate equivalents when possible. The suite includes the following tests: + +- **Monobit Test**: Evaluates the balance of 0s and 1s. +- **Chi-Square Tests**: Tests the uniformity of bits and bytes. +- **MeanByte Test**: Checks if the mean byte value aligns with expected randomness. +- **Kolmogorov-Smirnov (KS) Test**: Assesses uniformity of data distribution. +- **Pi Test**: Uses Monte Carlo methods to approximate π. +- **Shells Test**: Analyzes distances in 3D space. +- **Gaps Test**: Measures gaps between occurrences of a specific value. +- **Avalanche Test**: Analyzes bit-level changes in data chunks. +- **Runs and RunUps Tests**: Checks for sequential patterns in data. +- **Prediction Test**: Assesses the predictability of next bits. +- **UnCorrelation Test**: Evaluates correlation between shifted data. + +## Repository + +* [onod3000](https://codeberg.org/randogoth/onod3000) \ No newline at end of file diff --git a/web/content/blog/reticulum.md b/web/content/blog/reticulum.md new file mode 100644 index 0000000..eb93444 --- /dev/null +++ b/web/content/blog/reticulum.md @@ -0,0 +1,30 @@ +Title: CLI Tools for Reticulum & Nomad Network +Date: 2023-05-28 23:00 +Category: code +Slug: reticulum +Summary: Contributed several low-bandwidth tools and content systems to the Reticulum Network ecosystem, focused on resilient, minimal-infrastructure communication. + +In spring 2023 I was fascinated by the ecosystem of projects around the *Reticulum Network*. + +> Reticulum is the cryptography-based networking stack for building local and wide-area networks with readily available hardware. Reticulum can continue to operate even in adverse conditions with very high latency and extremely low bandwidth. + +> Reticulum can be used over practically any medium that can support at least a half-duplex channel with 500 bits per second throughput, and an MTU of 500 bytes. Data radios, modems, LoRa radios, serial lines, AX.25 TNCs, amateur radio digital modes, WiFi and Ethernet devices, free-space optical links, and similar systems + +I contributed a simple raw LoRa packet transmitter commandline tool for the [RNode](https://unsigned.io/rnode/) hardware called [LoRaTransmit](https://codeberg.org/randogoth/lora-transmit). + +For the Reticulum Netork's [LXMF](https://unsigned.io/website/lxmf/) protocol I built a simple Telethon inspired chatbot class called [LXMFBot](https://codeberg.org/randogoth/lxmf-bot). + +![LXMF](https://codeberg.org/randogoth/lxmf-bot/media/branch/main/screenshot.png) + +The most popular service that runs on Reticulum is the low bandwidth [Nomad Network](https://unsigned.io/website/nomadnet/) reminiscent of 1990s BBS systems. I built [micron-blog](https://codeberg.org/randogoth/micron-blog), a plugin for the Python based static website generator Pelican to generate Micron markup formatted files that are the building blocks of a Nomad Network node. + +[md2mu](https://github.com/randogoth/md2mu), the core of this plugin later evolved into a standalone CLI called [md2txt]({filename}../blog/md2txt.md) that can convert Markdown also into other arcane text formats. + +![NomadNet](https://codeberg.org/randogoth/micron-blog/media/branch/main/screenshot.png) + +## Repositories + +* [LoRaTransmit](https://codeberg.org/randogoth/lora-transmit) +* [LXMFBot](https://codeberg.org/randogoth/lxmf-bot) +* [micron-blog](https://codeberg.org/randogoth/micron-blog) +* [md2mu](https://github.com/randogoth/md2mu) \ No newline at end of file diff --git a/web/content/blog/voidcat.md b/web/content/blog/voidcat.md new file mode 100644 index 0000000..1174cd4 --- /dev/null +++ b/web/content/blog/voidcat.md @@ -0,0 +1,19 @@ +Title: Voidcat Algorithm +Date: 2024-04-10 23:00 +Category: code +Slug: voidcat +Summary: A new Rust-based spatial anomaly detection algorithm for Randonautica with open-sourced core geometric analysis components. + +The underlying algorithm for [Randonautica]({filename}../blog/randonautica.md)'s anomaly coordinate search is a proprietary library by the *Fatum Project* written in C++ called *libAttract*. It does its job but has its limitations and quirks. + +Based on the same mathematical and statistical principles as *libAttract* I engineered a novel algorithm in the fast, robust and modern Rust programming language. Inspired by the memetic recurrence of cats in void areas of Randonaut trips I called it *VOIDCAT*, short for *Void Objects Identification in Delaunay Complexes with Attractor Tracking*. + +To implement the Attractor and Void anomaly search I focused on geometric spatial analysis algorithms, particularly utilizing a technique called Delaunay triangulation. The algorithms utilized are primarily the *DELFIN* algorithm developed in the field of astronomy to map void areas in space and the efficient graph-based spatial clustering algorithm *DTSCAN* that looks at adjacencies of vertices in a triangulation graph to find clusters in multidimensional point distributions. + +While *VOIDCAT* itself remains proprietary and for [Randonautica]({filename}../blog/randonautica.md)'s exclusive use, I open sourced the Rust implementations of the underlying spatial analysis algorithms in a package called [Xenobalanus](https://codeberg.org/randogoth/xenobalanus) + +## Repository + +* [Xenobalanus](https://codeberg.org/randogoth/xenobalanus) + +![delaunay](/images/delaunay.png) \ No newline at end of file diff --git a/web/content/images/delaunay.png b/web/content/images/delaunay.png new file mode 100644 index 0000000..d28cd3a Binary files /dev/null and b/web/content/images/delaunay.png differ