Threads for novalis

    1. 10

      Yow, the xor code is nonsense. You can’t fix it by refactoring the internals or parameters of the code, because the function doesn’t have the right return type. It should return a boolean: whether the target hash matches the combined input hashes. If it had the correct return type, the next refactoring would be to replace the int hashes with an opaque hash type, like jgit’s, allowing a hash of a size that one would actually use (unless one is using this to manipulate the hashes from Java’s hashCode function, in which case, one probably shouldn’t have this function at all).

      One simply never wants the Hamming distance between hashes, because the whole point of hashes is that that distance will be around k/2 unless the inputs are exactly equal. If this were about some other flavor of hash, like a locality-sensitive hash, then the proposed hash-combining code would be buggy.

      1. 1

        Agree with all of your points, but IMO the more fundamental issue with the code is that XOR (as used) doesn’t produce digests/hashes that are comparable.

        1. 2

          I don’t know what you mean by “comparable”. It’s a common technique for combining hashes for hashCode, but otherwise not usually a good technique for combining hashes. But to solve that problem, you don’t add another layer of abstraction. You just solve the problem.

          If your “fundamental” issue is that it’s a bad way to spell ==, I agree that that is bad. But compareHashes() is also bad.

    2. 6

      Is this from a Googler? The whole thing reads like pro-google propaganda at times of desperation, as Google search is noticeably degrading in quality and utility.

      In #1, he never really negates what he is tryouts Ng to debunk. “It was always just to ignore synonyms”. Well, what it that equates exactly to always match that word as is? That claim was never negated. It did do what people expected and it did it well. To reason about what the official communication from Google was, which mind you, was always scarce to put it kindly, is irrelevant. This also makes subsequent points not true.

      As for the last point, it limits the whole search query to a single string match. That’s a far cry from what Google search once offered.

      1. 12

        I don’t read this as propaganda at all. Just a value-neutral history of how Google search has changed along one specific axis. I like history, so I enjoyed reading it.

        I too have noticed the steep decline in the utility of Google search, but I think that’s mostly a separate topic from “the myth of the + operator”.

        My hypothesis is that Google now ranks pages based on how well they can monetize visits to those pages.

        • For example, I’ve noticed that if I search for a local business (using the exact name of the business, which appears in the title of the business’s home page), then often the home page does not appear in the first page of results, if the page doesn’t contain google ads and google analytics. Instead, parasitic junk from web page farms that specialize in business listings dominates the search results, and of course these pages are full of google ads.
        • For example, I notice that Google video search no longer returns results from competing video archives. It’s mostly just Youtube results now, sometimes with additional results from a few Google partners.
      2. 3

        Unless something has changed recently, no, he is not a Googler. Zarf is a luminary of the interactive fiction community, and has worked in narrative games for years.

    3. 2

      I ran through the website but I couldn’t exactly understand what it’s supposed to do. Is it some kind of a CMS?

      1. 11

        Imagine if Mastodon were not six processes written in three programming languages, but were instead a single binary written in golang using SQLite for storage. That’s honk.

        It works quite well for me; I have a cheapo DigitalOcean server and I never have to do any maintenance, or worry about defederation drama making it hard to follow interesting weirdos.

        1. 6

          GoToSocial matches that description even better since it provides Mastodon-compatible client APIs.

          1. 1

            which part of the description does it match better?

            1. 2

              Single golang binary using SQLite for storage?

              Although, GoToSocial only provides the backend, you have to bring your own UI.

              Edit: it doesn’t match the description better. (Just realized what you said, sorry.)

              I assume donio meant to say GTS may be better since it’s API is mastodon-compatible so you can just use any available UI, like or any of the mobile clients directly.

              1. 2

                you can just use any available UI

                Well, mostly. Because it’s not 100% masto-compatible (IDs are strings, not ints; rate limit headers are epoch seconds, not ISO8601, etc.[1]) a whole bunch of stuff doesn’t work (Ivory, Mammoth, without tweaks, etc.)

                [1] Which are compliant to the API spec but it seems a whole bunch of clients have (stupidly) ignored the spec in favour of copying what Mastodon does.

        2. 1

          I think to @donio’s point, you’re missing a bit with this - it’s not just about the actual server infra being lightweight, it’s the interface as well.

          No stars, no bells or whistles, just a spartan interface to read and post to your fedi feeds :)

    4. 1

      My savings would buy 30 times as much, so I would retire. Then I guess off to be a Freedom Rider.

      It would actually be hard to make money in the market, since I have no idea how individual stocks did in the 60s. And a prop bet on 11/22/63 would certainly look suspicious. I guess you could bet on presidential elections, but it might be hard to find takers, and it would be hard to more than double your money. Wait until just before the Challenger launch and short Morton Thiokol, but that is a long way out (and, arguably, one case where a well-aimed letter could avert a catastrophe, although the foam problem turns out to be harder to avoid, so the shuttle program was doomed anyway).

      Rescue Samuel Delany’s lost novel?

      It might be easier to revolutionize cognitive psychology than CS. The whole heuristics and biases program hadn’t been invented yet. And research is entirely survey-based, so you don’t need access to a machine.

      I wish I were musical enough to do a Yesterday, but I am not.

      Too bad it’s so hard to do anything about the really stupid stuff: leaded gasoline, parking minimums and single family zoning, killings elephants to prevent desertification, totalitarian communism, hydrogenized fats, Vietnam, Afghanistan (and everything else CIA), the war on drugs, the ban on new med schools, overfishing, DDT for crops. Even unsafe pointers would be hard to fight against, given the efficiency constraints of the day.

    5. 3

      Wow, this blog post cannot be unseen. Now I feel my rooms IRL are full of turds.

      1. 12

        Your real room has impossible shadows and vague shapes?

        1. 7

          And interior roofing shingles

        2. 4

          vague shapes

          Looks at the pile’o clothes.

          Yes, it does.

        3. 3

          I think they might be contacting us from within the Matrix.

        4. 2

          Etsy, search, wall decals

          And, try your hand at pottery for fun and vague shapes.

          1. 2

            I actually make pottery. I have more vague shapes these days, but I have been bad about updating the album. I also made a couple of nudes, which are handy when explaining to a toddler exactly where on her butt still needs wiping.

            And I could totally accept one or two of the AI turds as art pottery. That’s the blue circle category. But that’s a lot of oddly -located weird pottery.

        5. 1

          Impossible shadows and vague shapes on such a pointy roof? How do they even stay up there?

    6. 3

      The linked gist is an attempt at solving cryptic crosswords, not American-style crosswords. They are very different.

      1. 4

        You would think, but surprisingly, the linked Guardian crossword is American in cluing (but British in layout).

        I wonder if a better ChatGPT API would allow for token filtering to match the givens. Like, if you have H????, the answer might be HATER, or it might be HOBBY, by it’s not BLART. So any token that doesn’t start with H can be rejected. ChatGPT has a temperature parameter which affects whether it picks the most likely token or one further down the list. We actually want the most likely that matches the givens. Or, actually, a list of the N most likely that match the givens.

        1. 1

          This is a task that token based LLMs are fundamentally bad at.

          A work around may be to ask if it HATER satifies the clue, and how certain it is about that. Then do another inference asking if HOBBY satisfies the cule, and how certain it is.

          I think I understand your idea now. That is really good idea too, we could use reLLM to implement this. My free $18 have expired and I don’t want to give them money for ethical reasons so I wont be experimenting with this further.

          My interest now is whether byte based LLMs can solve this task better, but I don’t know if there any around that I can try out.

      2. 1

        I have never done a crossword before this project.

        I initially started working on a cryptic crossword and I realized this would never work. It had a whole system of dropping letters and things I didn’t understand.

        So I switched to a simpler crossword puzzle.

    7. 4

      I know Godot is a game engine, not a generic GUI framework, but those text system improvements really make me want to use it for whatever my next GUI project is.

      1. 5

        I would strongly recommend against this. Unless 4.0 is dramatically improved (and I bet it isn’t), getting a layout that works at arbitrary resolutions is a nightmare. This is especially true if you want anything at all custom visually.

        Swing is better. HTML/CSS is better. Qt, from what I recall, is better.

        To be fair, I haven’t really tried custom look-and-feel in Swing or Qt, but starting from a solid base where responsive layout just works seems dramatically easier than having to constantly tweak things to be in the right place at various resolutions.

        I have probably spent more time on the GUI of my latest game than on all the rest of it combined. It’s entirely possible that I would have been happier learning Cordova, just so that I could have reasonable layout tooling.

        That said, Godot does have a really nice workflow – your app launches instantly right from the editor. But if you don’t need game stuff, it’s not worth it.

        1. 2

          I don’t know how you used it - from my experience containers work pretty well, even in Godot 3.x. Anchors are ok too for simple stuff, though they are mostly designed for simple HUD (which is fine for a game engine).

          1. 2

            I use containers. And to be fair, one of the issues I hit reportedly is fixed in 4.0. Of course, when I make a test project to try to demonstrate some of the issues that I see, I can’t reproduce them. So maybe I am somehow overcomplicating things in my real project. But I definitely feel like I have been fighting with the layout system in a way that I never do with other GUI toolkits.

      2. 5

        The only missing feature to use it for serious GUI apps is a11y, like support for screen reader. It doesn’t matter in some kind of applications, though.

      3. 4

        Actually it is a GUI framework, Godot is made using Godot.

        1. 10

          Pixelorama is another application created in Godot.

        2. 1

          Does that mean you can run and edit Godot inside of Godot inside of Godot?

          1. 1

            I think as long as you write the abstraction for the layers after the first, then yes.

          2. 1

            Not quite, since the editor is all written in C++, and editing it requires recompiling, but you can extend it in the ways you would usually write Godot games/apps.

    8. 11

      I love honk. If you find you have a spare half-hour, go read through the honk source code—it’s a gift that keeps on giving.

      I maintain a honk fork with added support for avatars and fancy @\user profiles, and a reskin. Another cool fork is @ols’s yeet which sports a full-fledged UI overhaul and has been largely de-honked.

      There are a bunch of other honk users with their own forks. And that is the beauty of the honk: super easy to run, super easy to hack on and make your fedi presence truly your own. Long live the #honkiverse (#honkverse?).

      1. 7

        Ahahahaha the commit log has a few gems too:

        got a case of the what just happened

        bonks should inherit format from xonks, obviously.

        Add support for gif emus

        make sure all the logging goes in the log

        see what happens if we start saving badonks

        A golden case of writing commits without ever expecting someone else to have to understand them. XD

      2. 1

        oh no, let’s keep the “fedithing” for the other guys xD

      3. 1

        Here’s a patch that handles informal id specifications, such as “” (instead of

        Can’t wait to try your fork!

    9. 1

      I’ve been making games lately – Semantle was a big success, Surfwords … wasn’t (it’s cool, but not making any money). I’ve got two more in the works.

      What I really want to make is a game along the lines of Myst or The Witness: a graphical puzzle game. I have been collecting individual puzzle concepts for years, and I have almost as many as Myst had (depending on how you count). I also have an obviously doable idea for a flavor of puzzle that’s straightforward to make a fair number of of (like The Witness, but very different in style), enjoyable to solve, and flexible.

      What I need is art. Well, art and a story, but if I had a genie that would make art, I would probably be able to put together a story. The problem is that a game of that scale has a lot of art. Myst had 2,500 images. It’s just way more than I can afford to hire someone to do, and I don’t have enough of a track record yet to find a collaborator.

      I thought about using Stable Diffusion, but it’s not quite there yet – even if I ignore the very weak animation support, it’s just bad at making physically plausible objects. People (excluding hands) are fine, because there’s so much input data. But things, especially things that don’t exist, are too often too surreal. Also, image generation is slow enough to be a bottleneck.

      I think the modern version of this sort of thing is “escape the room”, which, since they take place in a small space, reduce the amount of art needed. But probably they don’t reduce it to a feasible scale, and anyway I have never seen one that had the level of atmosphere that Myst had. And it’s not just the quality of graphics: Monkey Island had worse graphics, but it had a sense of space.

      1. 23

        In point of fact, she does share that she has bipolar depression, which is a mental illness (though disorder is a more appropriate term).

        Or maybe you meant it in a derogatory way, which, I’ll admit, would give the post more of a purpose. However, that’d also be a pretty shitty and mean-spirited, destructive thing to say.

        Please clarify.

        1. 8

          Ehmke seems obsessed… It’s not healthy.

          That’s not your call to make though, right? What is and isn’t helpful or healthy for her life? And even if it were, this thread certainly isn’t the place to talk about it. The article is clearly about Githhub having made promises and then breaking them.

          Think about it this way: how many of Github’s actions would a recruiter told the author when she initially reached out, had she known?

          Which is to say, if how Github acted were Github policy, then of course a recruiter would talk about it. It is the company policy of how they treat employees and Github should be proud of it, especially given how proud they are of their values.

          Is it’s Github’s policy to be strict and unhelpful accommodating any mental health needs of their employees, including when family members die? Is their policy, “sorry, need you at your best regardless of your mental health provider’s advice, so you definitely need to go home.”

          So really this article is about how Github acted, in light of how they lead the author to believe they would act, and how it runs contrary to their professed goals of inclusivity.

          Which is all to say, why are so many people focusing on the often irrelevant supposed faults of the author, instead of the actual content and arguments she is providing? Especially for such a clearly structured and functional post. Say what you want about her points, they are clearly made and have well presented evidence and anecdote.

          1. 7

            the article is about a lot of things. the inability to have perspective on a situation and petty retaliation for small grievances seem the prominent ones to me as well, unfortunately.

            I’ve seen my fair share of office politics, and it sounds like at the very least her manager could use some 360° review, but providing this kind of feedback publicly and after leaving a company is so obviously not the time nor the place to do so that I’m really unclear on what her motivations are aside from vengefully smearing a company.

            certainly she doesn’t think this will cause any kind of change internally? if she does, that seems a bit unrealistic and grandiose. had she left of her own accord while sending sent this to a sympathetic person in HR she would have had a significantly greater impact and significantly less attention.

            1. 6


              “So I lost a bunch of money posting that story. I had to turn down the severance offer because it contained a hush clause.”

            2. 2

              not that much, and you don’t get it if you quit. most SWE make enough that it’s really not in their interests to take a month’s salary unless they have nothing but nice things to say about their time employed somewhere.

              personally, I think the best exit one can make out of a shitty situation that they don’t want to see through getting fixed is to document it and quit w/o signing anything.

          2. 9

            This is what I’m betting: this gender identity politics stuff was all Ehmke talked about while they were at Github.

            …That’s why she was hired.

          3. 3

            The core question seems to be, “Do a person’s personal views regarding certain minority groups always result in interpersonal issues?” If so, all people who are not fully tolerant must be fired (at least according to militant supporters of this ideology—see here for an example); and if they are not fired, some projects might risk alienating minority contributors, depending on the personal views of their existing contributors. If this is not true, however, then all existing projects go on smoothly regardless of their contributors’ views about each others’ member groups.

        2. 3

          That’s not your call to make though, right?

          What does that even mean?

          If somebody was injecting heroin into his bloodstream, am I allowed to comment that it is unhealthy? Or is it not “my call to make’?

          You can not divorce the fact that Caroline xirself has always pushed identity politics and been extremely toxic to every person that doesn’t kowtow to schmer ideological agenda from the fact that now paxer is complaining about supposed ‘injustice’ that occurred during xomer time at github, and the fact that it is likely that it is not injustice at all, but that the people at github didn’t want to completely kowtow to all of xober demands.

          1. 6

            Whether or not someone is an asshole, it’s rude to deliberately misgender them. Caroline apparently prefers “she/her” pronouns, and you know this. So why are you using the wrong pronouns?

            If your problem is with her actions, then her gender doesn’t matter. So why not be polite? But the pronouns in your comment make it read to me like your problem is in fact with her gender identity. And if that’s the case, then you’re doing a good job of making her case for codes of conduct, so that folks don’t have to deal with being randomly attacked for who they are.

  1. 4

    You don’t even need to kill everything in the namespace manually. Starting a process in a new PID namespace means that process acts like init in that namespace; killing it automatically kills everything in the namespace. You can use unshare(2) as a wrapper to run a process in a new PID namespace, to avoid writing new code.

    (I am in the middle of implementing a version of this at $DAYJOB to isolate tests from each other)

    1. 1

      However it would be nice to send SIGTERM first. Can such an “init” send signals to processes with different UID?

      Other than that it should be enough for most cases.

  2. 1

    Unix has had it a lot longer than since kernel 3.8: They’re called process groups.

    1. 1

      You said it yourself: setpgid. It can be called by descendant process and it’s no longer in parent’s process group. For session there is setsid.

      As stated earlier: if you have a bit more complicated script you will have processes that:

      • double fork
      • setpgid
      • setsid
      • ignore signals that can be ignored

      Then the only robust way to kill them all by unprivileged ancestor process seem to be pid namespaces on Linux.

      1. 1

        Sorry, I really misunderstand what you’re trying to do then.

        Why exactly do you want to kill -9 a process that you did not start and don’t know what it’s doing?

        1. 1

          I want to leave clean state after I finish. No background processes left-behind. I might have not started a certain process directly, but it is a descendant of my process. It would not be there if not for my process so in a way I did start it.

          I want to ask it politely first with SIGTERM and give it a bit time. But when it will not listen in reasonable time I want to have an option to SIGKILL it.

          System services should probably be spawned by a daemon that was started earlier by the init. Then whatever I’m doing can’t harm the system. If descendant of my process starts a system service it probably should not be touchable by my process (but it depends).

          1. 1

            I’ve been using unix for over 30 years; I’ve managed mail clusters handling 100mm emails a month, and ad servers handling 10bn impressions a day. I’ve never wanted this.

            I’d really suggest trying to figure out why you think you want it – what problem you’re actually trying to solve. A program that tries to create its' own process group either has a bug (that something like fghack or another hotpatch can fix) or has a good reason (in which case, are you sure you want to kill it?)

  • 3

    A couple of related code search tools include and

    Last time I looked, ag didn’t have proper support for gitignores (except on my fork, which is a bit slower and now out-of-date). But it’s does have a lot of other neat features, and it is fast. On reflection, I have no idea why ag’s strstr would be faster than the one in the C standard library, which at least on glibc uses SSE instructions. So that strikes me as weird.

    Codesearch is almost always fastest, because it preindexes your source code. But I’m a bit wary of using it, because I worry that I’ll miss some code that I added since the last indexing. It doesn’t support backreferences, although I only use those once in a blue moon. Also, it’s a bit stupid – searching for “memory link” in the Linux kernel takes almost a second even though the phrase only appears once; that’s because both words are very common and it uses a trigram index instead of a FREE index.

    What I really want is the best of all worlds: codesearch-style preindexing, with the varied options that ag and ack have (particularly search-by-language), and automatic reindexing on code changes.

    One day, I’ll probably write it.

    1. 2

      I don’t know if you’d checked out the search engine I’m wroting for 500lines but it is meant to support that kind of use case — eventually. I don’t know what FREE indexes are, though! Maybe I should learn about them.

    2. 1

      One of the things I toyed with a few months ago in ack was the idea of having an index of digraphs for each directory that would get rebuilt on the fly. Premise is that 99% of the time when you’re acking you’re acking unchanged files in a code base. If I ack the word “sales” and I know that only two files in the directory contain “sa” anywhere in them, then I only need to search those two files. Also, it would index first and last line number in the file, so that if you know that the last place digraph “sa” shows up is on line 7 of foo.c, then ack can stop searching at line 7.

      But then other side projects that pay money took priority. :-/