The Unclear Impact

Kristóf Marussy ferdi |

I'm a PhD student working on the extra-functional requirements and formal verification of cyber-physical system architectures.
I also like free (as in liberty) software, privacy enhancing technologies, and cryptography.

@trysdyn @IceWolf You can try something like Firefox Multi-Account Containers to isolate two Discord tabs with two different sets of cookies. Alternatively, messaging browsers like ferdi Ferdi or Hamsket do the same thing with Electron (unfortunately, vanilla Chromium doesn’t have such cookie isolation feature exposed by default). That’d help if the 3 GB mostly comes from having another browser instance. Although if a render thread for a single Discord tab consumes that much memory… oh goodness why! blobfoxshocked

Building my personal accounting workflow around a single, quite unstable commit of beancount (both earlier and later commits break my scripts) might have been a poor choice.

@Talkless @daniels Thanks, those are some very interesting pointers for me.

@Talkless @daniels Whoah, all this faff, and Google still refuses to consider your mail server legitimate? blobfoxangry

@jamesvasile In both cases, let acts as a pattern matching operator, although in a bit roundabout way. The key concept is pattern refutability.

Basically, if you’re writing let <identifier> = <expr>, <identifier> acts as the (trivial) pattern that bind the entire rhs to <identifier>. You could also have, say let Some(x) = <expr>, but (outside of an if or a while condition) that would only compile if <expr> is always a Some value. Otherwise the compiler could refute the pattern. So there are two, closely related meanings of let, I guess: as a statement, the pattern must not be refuted at compile time, while in a condition, refutation at runtime causes the conditional to not execute.

This is useful when you want to deconstruct a struct (i.e., product type), because such patterns are never refutable. Example from the Structures chapter of Rust by Example:

struct Point {
    x: f32,
    y: f32,

let Point { x: top_edge, y: left_edge } = point;

will assign point.x to top_edge and point.y to left_edge.

This is also very similar to how the pattern matching operator works in Elixir (although Elixir has no let keyword for it and the = operator is always a pattern match, because Elixir has no mutable variables). There, a failed match outside a condition throws a MatchError, since Elixir has no static type checking to validate the pattern at compile time.

Is there some secret way to search about javascript app development (not something I’d pick if it was up to me, but if that’s what I have to fix a few bugs in…) and find actually useful results instead of blogspam?

@hazel Who’d have thunk CSS overloading / as the pair operator would have unintended consequences.

Wrote a bunch of systemd timers to periodically take btrfs snapshots. Hopefully this won’t go horribly wrong. blobfoxastronout

TIL the galois LaTeX package was actually written by Patrick Cousot. blobfoxnerd

Image of a rubber duck with a purple wizard's hat and an association football. Left pointing arrow with a small Greek letter gamma above and a right pointing arrow with a small Greek letter alpha underneath. Image of a rubber duck with long brown hair and a hockey stick.

@malin Also a good motto for debugging. But in that case, often it’s you who’s out to get you.

Looks pretty supported (or at least working) to me.

Firefox 89 user interface customization menu with Density menu open. Menu items: Compact (not supported), Normal, Touch. Compact (not supported) is selected.


Standard (X11 display server) on Xorg

feels like a bit of redundant naming, but this is still a very nice list of choices out-of-the-box.

@daniels @Talkless Yeah, I’m also, and their service is quite nice. But their function to GPG-encrypt incoming mail (à la protonmail, but using standard IMAP and GPG) acts a bit weird sometimes, and overall having more control over mail handling would be nice, so I’m thinking about moving to a self hosted setup. But all this talk about other servers rejecting mail even with all the proper DNS records set up sounds frightening. I might keep around my account (but without the domain alias) to communicate with people on gmail when I have to, I guess.


I am reviewing a paper a despite the 1/2 page abstract and 1 page introduction, I still don’t understand what on Earth they are trying to do. no , but I still want to write something more concrete for the rejection.

@Talkless @daniels What kind of DNS entries did you have to fiddle with? I thinking about making a similar setup, but don’t really know what to expect w.r.t. getting mail accepted by others.

is harmful to e-mail ecosystem; its antispam blocking policy matches too many valid messages as spam.

It blocked LastPass email leak warning email, because it contained "a link" to a leaked site.

It blocked an e-mail from goverment agency addressed directly to me.

It discriminates all non-gmail servers, and it's pretty much impossible to own a private SMTP server these days, because GMail will classify everything as spam.

It's not how e-mail should work.

Consider dropping GMail.

Snap store is labeling open-source software as proprietary. That’s hilarious… but also sad. blobfoxangrylaugh

@theruran LED based open source optical transceivers, ( ) they have implemented a custom 10BASE-T PHY with discrete analog components that works perfectly and garantees no backdoors.

Doing so, they kept up with their goals of full user control over the hardware, and extrem simplicity.

Such approach is way much harder for 100BASE-T* links, and I think to be considered impossible for 1000BASE-TX.

@vertigo @yaaps @float13

@robby @qorg11 @EZsnake At uni we start teaching programming to computer engineering undergrads with C. It’s brutally hard, and I secretly believe the best predictor of student performance in the class is prior exposure to programming (i.e., it’s not a very gentle introduction). They do have a digital design course in parallel, so the idea is the learn how to program the hardware and how to design it at the same time. blobfoxupsidedown

That said, C skills are still indispensable for low-level software (and even if we rewrote the world in Rust, lots of problems that Rust fixes only make sense with some C or C++ experience). Just make sure you do everything “properly”, and do not ignore any compiler warnings. Due to how C works, it’s easy to make a mess that somewhat works without understanding stuff sufficiently well (this often bites my students). Unfortunately, tools for “checking your own work” like valgrind rely on relatively advanced concepts, so it’s hard to verify whether your program actually does what you think it does, or only works by accident (and will be broken next time you modify something – loud cursing frequently ensues).

For associates degree students, we actually start with Python as a much gentler introduction. It has the advantage that you only have to learn basic programming concepts, and low-level computer engineering stuff may come later (C forces you to do the two at the same time). On the other hand, the syntax differences between Python and other programming languages may trip you up later a bit.