After figuring out how to use cargo build with makefiles to test elisp dynamic modules, and replacing it in my other project, I replaced the build system from a configure script + makefiles to makefiles + cargo to run tests.
After figuring out how to use cargo build with makefiles to test elisp dynamic modules, and replacing it in my other project, I replaced the build system from a configure script + makefiles to makefiles + cargo to run tests.
I made the test runner work with cargo test and removed all the old autoconf stuff. This makes things easier for other people to work on the project who don’t know how to use autoconf and only know how to use the rust based tools.
I made parsing happen inside of a thread pool in order to have parallelism to not block the main thread. Everything now happens much faster and is more responsive now.
I updated the documentation to include changes from the new version, and made the documentation code blocks get tested under the rustdoc documentation testing harness.
I changed the build system to one that uses autoconf + autoconf configured makefiles (not automake) so the build system went from a hacky shell around cargo to an extra hacky configure.ac script.
I removed static items from the initialization code. Basically in upstream they want to have good developer experience so they want to have macros that both declare functions and register them into the runtime by running code at dynamic linking time that modifies statics with things like mutexes even though the code will be ran single-threaded at load time. My fork of the project removes those features so that the code is simpler and performant by requiring the user code to register the things they need themself.
I added handling ttl caches to prevent spamming rss feeds and added building shared libraries for musl libc users on linux.
The dublin core, syndication, content and media namespace parsers are now complete and all feed types are able to support them. Now you view feeds that don’t use most of their native elements.
I added support for the Dublin Core (dc) and Media RSS (media) namespaces in feeds. My favorite part of this was handling date and time because it is always just so fun. In Dublin Core, not only do the specs say that you can have incomplete ISO-8601 timestamps like (2000), (2000-01) but you could also specify time ranges like (2000/2000-02-01) https://www.dublincore.org/specifications/dublin-core/dcmi-terms/#date meaning the publishing date is somewhere between 2000-01-01 and 2000-02-01 leading to this amazing function. The best part of all this is that there is going to be more complicated date time handling when I write the syndication (sy) namespace handler.
I wrote a README that describes the project and its goals that doubles for my ship description.
I added a github actions workflow that builds release artifacts for windows, mac, and linux in x86_64 and aarch64 + a bunch of obscure linux architectures. I also added a installation guide at https://github.com/butterfingres/rag/blob/master/README.org so now I can finally ship this.
The entries that are parsed from the feeds now get inserted into the buffer using binary search to incrementally you new entries. All that would be left is to create a guide for non-Emacs users so that people can tests it and also CI builds for releases for a bunch of different architectures then I could ship.
I added an entry viewer so now you can look see the description of feeds. The ui is “inspired” by elfeed. The only thing left before shipping would be a configuration interface for feeds to add your rss feeds followed by a scheduler for downloading them.
Made the feed reader put the parsed entries & feeds into a sqlite database. I also added a basic frontend to the database that currently only shows feed titles.
finished parsing all the feed xml formats (rss, rdf, atom) will start working on the front-end soon. there’s not much to show bc its backend stuff.