========================= AoC, RISC-V, Z3, ginger ========================= Another news digest here. I keep logging things on Mastodon regularly, but its awkward and laggy UI keeps reminding me of Gopher, which does not suffer from that. I think it must be possible to do something about those lags, and actually I started writing an FF extension to remove the bloat at some point, but with the way Mastodon authentication and Firefox extensions work, it was basically an alternative in-browser client, so it did not make much sense to keep developing as an extension. I would consider working on and/or self-hosting another Mastodon client or ActivityPub server (and maybe a client to go along with it), but Mastodon is the one federated thing I decided to try without hosting it myself, and already working on an XMPP client library, so it seems more useful to focus the effort on that. Anyway, some of the personal news highlights from the past three months: - I played AoC this year again, which was fun, but quite challenging and a little stressful towards the end; mostly solved puzzles on the days when they were published, but one puzzle I only solved on the next day. It was particularly tricky to combine with daily exercises, chores, and work. Once again thought to use Rust for practice, but then went with the much more familiar Haskell. - As another useless but fun project in Emacs Lisp, started writing a RISC-V (RV64GC) emulator, . It is still missing many of the floating-point operations, and only emulates a few Linux syscalls. The syscalls would be tricky to implement extensively enough to run more or less arbitrary programs, so I am thinking of focusing on running whole operating systems instead of individual programs on it next, or perhaps pretending that it is a microcontroller, implementing just a little memory-mapped I/O. But for now it is capable of running statically linked dash (the shell), doing basic arithmetic in it, as well as running basic C programs with main() (as opposed to mere _start()) and statically linked with glibc. - One of the AoC puzzles involved solving a system of non-linear equations, for which I used SymPy (after failing that with Octave), but Z3 was an alternative, and then I ran into it yet again. I used to avoid SMT solvers while poking formal verification with Idris and others in the past, viewing them as mostly bruteforce, but for actually solving things (rather than proving them) they seem quite useful. Used the Python API, since the Python interpreter provides a nicer interactive environment than Z3's plain interface for SMT-LIB. - In other Python-related news, preparing some anomaly detection in time series data at work these days (between the other randomly appearing tasks), and tried a bunch of statistics-related Python libraries for that (since Python has quite a few of those; back in 2014 I tried to do something similar and implemented everything from scratch, but that was awkward). As usual, the more specialized a library is, the lower are chances that it is available from system repositories, or even builds in a sandbox while circumventing those. But after reading a few papers on the topic and poking the seemingly relevant algorithms from common libraries, I am inclined to use just z-score and linear regression, which can be implemented easily in PostgreSQL itself, along with some basic interpolation to fill in missing data (particularly for regression, when it is needed). I hoped that time series decomposition would be useful, or that there are some algorithms better dealing with missing data, but the decomposition usually requires to set a period explicitly, as a number of data points, so it is preferable to have that same number of data points, filling in the missing data. But once you have such neat interpolated data, and know the period, at least for anomaly detection in this case it becomes much easier to just compare that to the previous value at that position inside the season, or the average of a few previous ones. - The recent cooking adventures revolve around spices from the ginger family: ginger itself, turmeric, cardamom. Learned that they are from the same family, too. Tried gingersnap cookies, adding ginger into hot chocolate, into a hot beverage (along with lemon, honey, turmeric, cinnamon, water). Tried turmeric and curry mixes in another curry dish (with turkey pieces), in a pumpkin soup. Tried cardamom in hot chocolate, in panna cotta, in those gingersnap cookies. Those are nice spices. Also tried baking more bread (baguettes), made chili con carne a few times, tried buckwheat "tea" and Dianhong tea, probably will try others soon. - I keep doing exercises daily, today is a year of doing the same aerobic routine (and almost half a year of adding 15 minutes of in place jogging to it, and various other durations for stretching/yoga routines and anaerobic exercises). Physical exercises seem to work as advertised so far. - Have set Debian 12 on my old EeePC netbook, but not using it. - Gave up on cargo pants, to avoid anything resembling military style these days; trying out some chinos, and even a pair of jeans. Those are nicer than I expected, although often it is tricky to fit a passport into their pockets (which one basically has to carry all the time around here, to reduce chances of a random detention). Some pockets can be enlarged though, and buttons can be attached to pockets that miss those. - Have read the first book of "Hyperion" by Dan Simmons, did not like it much. Now resumed slowly reading another Discworld novel. - Tried using Rust at work for a basic program, ran into some awkwardness with relevant libraries. Just as I did with Haskell before that. While a similar program in PHP worked fine, having a more polished library, and I suspect it would be the case with Python as well, and maybe even in Perl. Odd to observe those seemingly less reliable languages leading to more reliable software. Actually something similar happened with rexmpp's Rust modules (which duplicate C ones): I think there is a memory leak somewhere, either in those or between C and Rust. But it is better to build without Rust to avoid the leak for now. ---- :Date: 2024-01-20