The Unclear Impact

Krist贸f Marussy ferdium馃巰 |

I'm a PhD candidate 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.

I may not be trans but transgender hating script kiddies are too incompetent to tell the difference. Donkey Kong says trans rights = human rights.

today is probably the first time tex told me Something's wrong--perhaps a missing \item. and indeed a \item was missing

how to clean your mouse (much less interesting than training your dragon)

the iFixit guide is essentially correct, but here are some other notes if the scroll wheel starts feeling gummy. for me, gently pulling the wheel up got rid of the gummyness until i pressed the wheel, but turns out this has nothing to do with the click spring below the wheel. i simply had to clean the lint and dust from the inside of the wheel:

  1. turn off the mouse
  2. peel off the 3 feet of the mouse (the front one can stay) and remove the screws underneath with a 00 philips bit. the ifixit guide say the feet aren鈥檛 reusable unless heated beforehand, but if you dig deep enough (i used the guitar pick-like ifixit opener thing) you can pull off all the adhesive together with the feet in one piece, which can be just stuck back later. also remove the exposed screw on the front with a T5 torx bit
  3. pull off the shell from the mouse. i used the guitar pick-like thing liberally. there are two challenges: there is a very stiff clip below the right button, so the base has to be slid forward to disengage it, but the scroll wheel and the lip of the base next to the horizontal scroll wheel will prevent the base from sliding forward. my tactic was to pull the base downwards while pushing it as forward as possible, and poking with the guitar pick-thing below the right button
  4. disconnect the ribbon cable from the base. make sure not to break both pegs of the clip holding the cable. the shell is free now
  5. clean around the wheel and especially the teeth of the internal gear on the while. i wrapped a microfibre cloth around the (closed) jaws of plastic tweezers to get between the teeth properly. compressed air would also help here, i believe, and maybe even some silicone oil for the axle
  6. reconnect the ribbon cable. this may require some maneuvering, because the shell obstructs the space for the fingers
  7. turn the mouse on and test whether it still works (it鈥檚 a pain to have to disassemble right after you have put it back together). make sure not to touch any PCB, then turn the mouse off again
  8. snap the shell back to the base. the challenges are the same as for the disassembly. i could get it to snap back fully together except for the stiff clip below the right button. a combination of pushing the clip itself back (using a piece of plastic) from the gap left at the front and pushing from the top helped
  9. put back the screws and stick the feet back

i also had some luck previously with rejuvenating the rubber coating eaten by skin oils with some isopropyl alcohol and cotton balls. i hope to use this mouse for a long time, despite it accumulating wear and tear quite readily

#logitech #mxmaster #repair #cleaning

the mx master 3 is such an annoying piece of gear to reassemble

why are there a myriad clips around the base that have to be pressed together at exactly the same to hold the shell? weren鈥檛 the screws on the back enough already?

it鈥檚 technically well repairable, one you figure out the puzzle that is its geomery

> my code is broken
> absolutely cake on layers and layers of workarounds
> it's working now
> move the workarounds one by one to see which one did it
> ...
> i removed all the workarounds
> it's still working

what is this sorcery? blobfoxlurkglare

shitpost, religion

sealing ceremony, but instead of doing mormon stuff they crimp tungsten wire into a glass stem via an intermediate layer of tungsten(VI) oxide

been experimenting with using #vite #vitejs vite-plugin-ssr and #javascript import.meta.glob as a headless CMS

it feels quite magical, but, in contrast with #nextjs, i think i understand what it鈥檚 doing blobfoxcomfycomputer


i鈥檓 not really familiar with this stuff, but isn鈥檛 state tv blasting stabat mater during a christmas opera recital kinda bad vibes? it鈥檚 like they just packed in whatever vaguely religious-sounding they could find

i mean, easter is still a quite fair bit away

Re: privacy, security, proprietary software

@fritjof for the few occasions when I have to, I run zoom inside firejail (I found virtual machines not so great with audio synchronization, and bad sound is quite annoying to people listening to me giving a talk). I run zoom with the private flag in firejail, so it runs in an overlay-mounted ramdisk, it has no read access to any of my files, and I also connected the sandbox to a bridge interface with a strict firewall

nevertheless, a VM is probably a better solution security-wise 鈥 especially considering that firejail is a setuid binary, and might be vulnerable to privesc from outside the sandbox (inside the sandbox capabilities are dropped), if you鈥檙e concerned about that sort of thing (I think on a single-user system, privesc to root is less serious than getting untrusted code running with full access to user files, anyways)

Re: social construction, geometry

@pigworker and we can construct them with a compass 鈥 no straightedge needed, phew! blobfoxaww


internal thesis defense done, i guess

now onwards to making fixes for the final version of the thesis


in hindsight, leaving the making of the slides for my internal defense to the night before the defense was a suboptimal decision blobfoxdeadinside


maybe I just don鈥檛 understand #qemu enough, but why did linux-firmware 20221214 make my windows vm get stuck with 100% cpu usage and not boot, while downgrading to 20221109 fixed the issue?

programming, java

is there a name for the #ExistentialType pattern in #java to avoid wildcards (especially to reduce confusion about where the quantifiers are when returning a #HeterogenousCollection like Set<Foo<?>>)? I鈥檓 thinking along the lines of

public sealed interface AnyFoo permits Foo {
    // Methods of Foo<T> that do not involve any T type variable

public non-sealed class Foo<T> implements AnyFoo {
    // Methods of Foo<T> that involve some T

I had students get very confused when the T type variable degrades to Object / Void based on the #covariant / #contravariant position, so enforcing the presence of an explicit cast might be beneficial. What is extra nice is that

AnyFoo anyFoo;
Foo<?> foo = (Foo<?>) anyFoo;

is permitted without an unsafe cast warning due to the sealed keyword (although, to be honest, something like

<T> void processFoo(Foo<T> foo);
processFoo((Foo<?>) anyFoo);

is much preferable 鈥 if you have a Skolem type variables lying around, the least you can do is naming them! blobfoxscience)


why are our students complaining about the assignment not working out of the box instead of just鈥 doing the assignment?

if the starter project was doing everything we requested out of the box, it wouldn鈥檛 have been the starter, it would have been the solution blobfoxconfused

type theory turned dark, coming up with weird math terminology, kinship terms

was playing around with some #StaticAnalysis for #ObjectOriented things blobfoxscience a somewhat challenging technical detail is that we can鈥檛 fully use recursive datalog queries to drive the analysis, because we sometimes have to take greatest fixed points instead of least fixed points. so we need clever ways to break the recursive knot in some places (and only tie it if an lfp sufficies)

by abuse of terminology, for a given type A, and ommer is a type B which is the direct subtype of a direct or indirect supertype of A, but is not itself a (direct or indirect) supertype of A. we call a direct subtype C of A a good child for the ommer B if squick it is a subtype of B or has a common (direct or indirect) subtype with it. we call ommers B with no corresponding good child are evil blobfoxrage

(this ended up completely backwards, because evil ommers can be handled without breaking the recursive knot, and good children gave us considerable problems)

android, development

it takes making my internal DNS resolve the development domain to and

-A OUTPUT -d -j DNAT --to-destination

but I can finally debug websites with TLS (to force a secure context) in the #android #emulator.

why can鈥檛 it just have normal bridged networking, like the rest of the VMs I run? blobfoxangry

and why does it fail to enable host GPU acceleration if I try to run the emulator from the command line (instead of android studio) to add -writable-system so I can add the internal domain to /etc/hosts? blobfoxconfused i guess it doesn鈥檛 like #swayvm much


the language where a dependency can transitively affect the types of completely unrelated global symbols:

I've been using in my recent papers. I think it really adds to the readability and understanding of the math.

Here are some examples. It uses in .

Let me know if you like it. Happy for any feedback.

An annotated equation in Latex. 

The equation: Pro[X(.) \in S] <= e^epsilon . Pr[X(.) \in S]

The first X(.) is in a red box and a red arrow points to it with the annotation, "system state" on top of the arrow.

The first S is in a blue box and a blue arrow points to it (from below) with the annotation, "S \subset Range (X)" on the arrow. Another annotated equation:

Pr[R(Tau_i, j) \in S] <= e^epsilon . Pr[R(Tau'_j, j') \in S]

Both Tau's are in red boxes and have a (bidirectional) red arrow pointing to each other and the annotation "Tau_i, Tau'_i \in Gamma, the set of Tasks" on top of the arrow.

Both j's are in blue boxes and have a blue bidirectional arrow pointing to each other (below the equation) with the annotation "j, j' \in N" under the arrow. An annotated equation surrounded by text. The equation:
Lap(x | mu, b) = (1/2b)exp(-|x-mu|/b)

The first "mu" is in a red box and a red arrow points to it from the top with the annotation, "location parameter, mean" on top of the arrow.

the first "b" is in a blue box with a blue arrow pointing to it from below with the annotation, "b>0, scale parameter" on the arrow.

We see an equation number (3) to the right of the equation. Two annotated equations side by side. 

Left equation: N_i = Q_p(t_{j+1} - t_j | for all j)

Q_p and for all j are in red boxes. t_{j+1} is in a blue box and t_j is in a brown box.

There is a long, red curly brace (sideways, pointing down) on top of the entire RHS of the equation with the annotation, "some annotation about the entire equation here". A blue arrow points to "t_{j+1}" from below with the annotation, "property of (j+1)^th item. A brown arrow points to "t_j" from the bottom right with the annotation, "j^th item" on the arrow.

The equation on the right:
X_i = 1/(Sigma{i=1}N Sigma{j=1}M_i(l^j_i/l^max))

N is in a purple box and we see a purple arrow pointing to it with the annotation, "number of objects" on top of the arrow. M_i is in a blue box with a blue arrow pointing to it with the annotation, "number of other objects" on the arrow. l^j_i is in a brown box with a brown arrow pointing to it and the annotation, "size of j^th service" on the arrow while l^max is in a green box and a green arrow pointing to it (from below) with the annotation, "maximum obj size" on the arrow.

Re: encyption

@juliank I think etebase solves this by encrypting everything client-side. the mains downsides are that

  1. calendars/contacts/other stuff cannot really be shared with other users (this should be theoretically possible, e2e file sharing services like Tresorit can solve it, but the etesync protocol doesn鈥檛 handle it nevertheless)
  2. it doesn鈥檛 really speak *DAV, but you need to run a bridge locally that actually handles the encryption. but afaik the Protonmail bridge for IMAP works similarly

orange site subtoot, finance, blockchain adjacent

the phrase 鈥楾uring-complete financial instruments鈥 should put horror into anyone who has studied computation, or ever had to debug a program blobfoxdisapprove

the phrase 鈥榝inancial instruments鈥 should probably also be terrifying, but for other reasons