=========================
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, <
https://codeberg.org/defanor/rv.el>. 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