• 0 Posts
  • 50 Comments
Joined 4 months ago
cake
Cake day: May 7th, 2024

help-circle



  • The latter has been taken over by ElMu and his shenanigans, the former was originally a Twitter-internal project for a decentralised social media interfacing protocol, got forked out from Twitter in 2021 (the year before Musk took over Twitter), has a lot of Ex-Twitter people on it and promises to do a lot of things a lot better than either Twitter (now X) and offer a little more resilience against things like moderator abuse.

    Curiously, that last bit is the first time I’ve seen a reasonable use case for Blockchain: Your content can be stored on arbitrary servers and migrated to others. Your identity is tied to keys that can be used to verify your content is actually yours. The info where the public half of the key and all your content are stored is recorded in a public, distributed, append-only ledger, where each entry verifies the integrity of the previous one. Thus, once you’re registered on that, no single moderator can arbitrarily ban you anymore. (Pretty sure there’s a hole in that logic, but I’m not versed enough to confidently assert as much.)

    Of course, there’s a caveat: To discover content, you need an index (“relay”) of all the content feeds. That takes some of the content aggregation load off your individual content servers and makes hosting them easier. However, it shifts the content moderation / federation power from the individual instances to the shared index: If a given index blocks your content, people using it won’t see your content.

    In theory anyone can host their own relay and everyone can choose which relay they want their content feed to use. In practice, hosting a relay is resource-intensive, bsky have a solid headstart and probably more resources, and their app also obviously uses their own index by default, so if you do want to create a “competitor”/alternative index, you’ll have a lot of catching up to do. They even state that expectation: “In all likelihood, there may be a few large full-network providers” src

    Which is basically a small-scale version of Google and Bing (and the AT Protocol Overview explicitly uses that comparison): Sure, you can make your own search engine, but if Google is the default everywhere, has a lot of storage and computing power to serve more requests and has way more indexed content, why would people use yours instead? Thus, if you want your content to be seen by many people, you have to play by the big relays’ rules.

    Much decentral. Very open.


    (I’m being snarky here, but I will give them the benefit of the doubt: They probably do mean to make self-hosting your personal data and content easier, and it’s easier for custom feeds to use single, big relays to draw from rather than doing the indexing and collation themselves. However, it provides them with a lot of leverage and just because they call themselves a “public benefit corporation” doesn’t mean I trust them not to start enshittifying for profit at some point.)




  • If you have no idea how long it may take and if the issue will return - and particularly if upper management has no idea - swapping to alternate solutions may seem like a safer bet. Non-Tech people tend to treat computers with superstition, so “this software has produced an issue once” can quickly become “I don’t trust anything using this - what if it happens again? We can’t risk another outage!”

    The tech fix may be easy, but the manglement issue can be harder. I probably don’t need to tell you about the type of obstinate manager that’s scared of things they don’t understand and need a nice slideshow with simple words and pretty pictures to explain why this one-off issue is fixed now and probably won’t happen again.

    As for the question of scale: From a quick glance we currently have something on the order of 40k “active” Office installations, which mostly map to active devices. Our client management semi-recently finished rolling out a new, uniform client configuration standard across the organisation (“special” cases aside). If we’d had CrowdStrike, I’d conservatively estimate that to be at least 30k affected devices.

    Thankfully, we don’t, but I know some amounts of bullets were being sweated until it was confirmed to only be CrowdStrike. We’re in Central Europe, so the window between the first issues and the confirmation was the prime “people starting work” time.










  • [The list concatenation function] ++ is an infix function i.e. [1,2,3] ++ [3,4,5] = [1,2,3,3,4,5] (which will be equivalent to doing (++) [1,2,3] [3,4,5] by virtue of how infix functions work in Haskell).

    I think that’s the part I was most confused by. I’m coming mostly from Java and C, where ++ would be the unary operator to increment a number. I would have expected that symbol in a functional language context to be a shorthand for + 1. The idea of it being an infix function didn’t occur to me.

    Partial applications I remember from a class on Clojure I took years ago, but as far as I remember, the functions always had to come first in any given expression. Also, I believe partial fills the arguments from the left, so to add a suffix, I’d have to use a reversed str function. At that point, it would probably be more idiomatic to just create an inline function to suffix it. So if my distant recollection doesn’t fail me, the Clojure equivalent of that partial function would be #(str % " Is Not an Emulator").

    iterate works the same though, I think, so the whole expression would be (def wine (iterate #(str % " Is Not an Emulator") "WINE") )

    This code was typed on a mobile phone in a quick break based off of years-old memories, so there might be errors, and given it was a single class without ever actually applying it to any problems, I have no real sense for how idiomatic it really is. I’ll gladly take any corrections.

    NGL though, that last, readable version is sexy as hell.


  • Game Conqueror also works, but is missing a lot of features too from what I can tell. Don’t know how it holds up against PINCE.

    I’ve had success getting CE to run with Proton though, specifically by using SteamTinkerLaunch to run it as additional custom command with the game. There are other ways too, like protontricks. In my experience, it has been mostly stable, with the occasional freeze, but generally usable for pointer scanning and such.


  • I’ve never worked with Haskell, but I’ve been meaning to expand my programming repertoire (particularly since I don’t get to do much coding at work, let alone learn new languages) and this makes for a nice opportunity, so I wanna try to parse this / guess at the syntax.

    I assume iterate function arg applies some function to arg repeatedly, presumably until some exit condition is met? Or does it simply create an infinite, lazily evaluated sequence?

    ( ) would be an inline function definition then, in this case returning the result of applying ++suffix to its argument (which other languages might phrase something like arg += suffix), thereby appending " Is Not an Emulator" to the function argument, which is initially “WINE”.

    So as a result, the code would produce an infinite recurring “WINE Is Not an Emulator Is Not an Emulator…” string. If evaluated eagerly, it would result in an OOM error (with tail recursion) or a stack overflow (without). If evaluated lazily, it would produce a lazy string, evaluated only as far as it is queried (by some equivalent of a head function reading the first X characters from it).

    How far off am I? What pieces am I missing?