Threads for balrogboogie

    1. 10

      looks like C with slightly different syntax, tbh. I mean, sure, it has defer like golang, but it’s also got manual memory management, null pointers, arbitrary casts, all of which make me not want to use it.

      EDIT: and that’s fine, a lot of stuff about C’s syntax is wonky, so I totally understand wanting to update it. But given the number of lower-level languages being developed now that tackle some of C’s thornier problems, it seems odd to stop at the syntax level, instead of going further and fixing some of C’s semantics issues

      1. 2

        No kidding. It’s even got sprintf(), and presumably the buffer overflow hazards that go with it.

      2. 1

        Yes, that’s pretty much the impression I had, but if you look at Tangent, which is a game developed in Adept, it does actually feel more like a lower level JavaScript. It has a scripting language feel to it.

        1. 3

          yea, looking at that and it seems very, very golang-like. Which, again, fine if you like that. But “Looks like Go and (maybe) still has all of C’s security issues” isn’t something I’m super interested in trying ¯\_(ツ)_/¯

    2. 11

      Really nice new frontend, but I might be biased.

      1. 2

        why biased? nvm, just looked at your posting history

    3. 8

      Their Mastodon instance is apparently pretty shady: they opted to remove all abuse reporting functionality, so the Mastodon instance blocked them.

      1. 5

        They’re pretty widely blocked. They grudgingly restored reporting, but they have indicated that they will specifically allow hate speech on the platform as long as it isn’t harassment targeted at an individual or illegal in the US.

        There’s a well-known process where if you allow unlimited freedom of speech on your platform, it attracts bad actors like racists and misogynists who want to be able to take advantage of that freedom. If this were as far as it went, that wouldn’t be so bad. But the presence of the bad actors drives away everyone else, so your platform becomes dedicated to hosting bad actors, and no one else has any reason to use or listen to your platform.

        1. 3

          I don’t understand why the pro-hate-speech crowd is so “oh, well, hate speech is so hard to define that we have to allow everything”.

          Why are they unable to tell good apart from bad? It’s not so hard to define:

          Hate speech is a statement intended to demean and brutalize another, or the use of cruel and derogatory language or gestures on the basis of real or alleged membership in a social group. Hate speech is speech that attacks a person or a group on the basis of protected attributes such as race, religion, ethnic origin, national origin, sex, disability, sexual orientation, or gender identity.

          There’s no benefit to hosting hate speech, to let it boost towards other instances, or to calmly and rationally try to debate the people who are espousing it. There’s a difference between having an opinion we might disagree with but seeing how other people might see merit in it and therefore the idea should be allowed on our servers, as opposed to accusations, fear-mongering, and threats that cannot possibly have any merit from any point of view and can only cause strife.

          Don’t be so wishy-washy, pro-hate-speechers! Just take a stance and take the right one! Get rid of hate speech!

          1. 2

            Apart from the ethical concerns, allowing hate speech is bad marketing.

            I was more-or-less neutral on Purism as a company/project/concept before, but if what I hear is true, they have lost me as a customer.

          2. 2

            I don’t support hate speech; I support free speech.

            1. 3

              That’s great, then get rid of hate speech whenever you see it, since you can easily recognise it as something different than free speech.

          3. 1

            Your definition of hate speech, at my first few reasons, includes jokes, like “A priest, imam, and Rabbi walk into a bar”. They may not be clever, but are they really enough reason to ban someone?

            1. 4

              So your objection is that those jokes typically aren’t hateful, right? I agree, that’s an important distinction to make. Luckily, we can add that as a required element. Here is the Maltese criminal code, which does so quite neatly. Non-hateful priest-imam-rabbi jokes are safe; hateful ones still get the chop.

              82A. (1) Whosoever uses any threatening, abusive or insulting words or behaviour, or displays any written or printed material which is threatening, abusive or insulting, or otherwise conducts himself in such a manner, with intent thereby to stir up violence or racial or religious hatred against another person or group on the grounds of gender, gender identity, sexual orientation, race, colour, language, ethnic origin, religion or belief or political or other opinion or whereby such violence or racial or religious hatred is likely, having regard to all the circumstances, to be stirred up shall, on conviction, be liable to imprisonment for a term from six to eighteen months.

              1. 1

                And if a terrorist tells a joke featuring a liberal, it probably has different intentions than a liberal telling the same joke. I’d rather not criminalize words based on who says them.

            2. 4

              Are you intending to demean and brutalise Christians, Muslim, and Jews with your joke and attack them based on their membership in a group? Religious humour is well-known. The Jews themselves are quite famous for cracking lots of jokes about themselves.

              Otherwise, the slope isn’t that slippery; the definitions are not that ambiguous; good and bad are not that hard to define. You don’t have to be a pro-hate-speecher!

      2. 2

        they’ve since put the reporting feature back in, but many instances still have them blocked due to their attitudes toward moderation and hate speech

    4. 2

      At the beginning of the article there is an edit that says that the original author has reposted the work here, maybe it would be better to change the link to point there?

    5. 7

      nice, this was interesting to read since I’m currently building a rust TUI client for the fediverse that looks & acts a bit like a chat client. I’m currently in the middle of a big refactor since I’ve written it using an actor pattern, but by hand & with OS threads instead of bringing in a proper actor framework like Actix. Thankfully, moving it to Actix has been pretty straightforward so far. Source is at, though note that it isn’t really ready for regular use yet.

      1. 4

        I also have one of those: :)

        I’m finding working with curses in Python to be a bit of a pain though.

          1. 2

            I did not, I’ll have a look, thanks.

            I did try urwid and npyscreen but didn’t hit it off with either so fell back to plain curses.

    6. 13

      gave me the worst kind of goosebumps: ‘Boeing’s solution to its hardware problem was software.’

      1. 13

        In my head I immediately completed that sentence to “and now they have 2 problems”

    7. 0

      I wonder why author choose xml over json or yaml. Does xml make for good examples of this concept?

      1. 5

        I obviously can only guess, but my guess is that it’s because the author is the developer of typed-html, a proc macro rust crate that lets you write “html” that gets parsed into rust data types: (it’s a fantastic crate though)

      2. 2

        I don’t see why XML is any better or worse as an example. All of XML, JSON and YAML are types of structured text you might want to parse.

    8. 7

      In case anyone else was wondering, there is already an issue from 2017 for it but it looks like the project may be unmaintained and the last release was 3 years ago.

      1. 9

        Sounds like some aspiring malware authorproject maintainer should step up and take over!

    9. 1

      SSL error :-/

      1. 1

        Weird. I’m using CloudFlare SSL. What is the exact error you’re getting?

        1. 1

          Here’s the error + cert details:

          Apparently my browser doesn’t trust “Cisco Umbrella Secondary SubCA chi-SG”?

          1. 4


            $ curl -v
            * Rebuilt URL to:
            *   Trying 2606:4700:30::681c:a33...
            * TCP_NODELAY set
            * Connected to (2606:4700:30::681c:a33) port 443 (#0)
            * TLS 1.2 connection using TLS_ECDHE_ECDSA_WITH_AES_128_GCM_SHA256
            * Server certificate:
            * Server certificate: COMODO ECC Domain Validation Secure Server CA 2
            * Server certificate: COMODO ECC Certification Authority
            > GET / HTTP/1.1
            > Host:
            > User-Agent: curl/7.54.0
            > Accept: */*
            < HTTP/1.1 200 OK
            < Date: Wed, 10 Apr 2019 15:36:21 GMT
            < Content-Type: text/html; charset=utf-8
            < Transfer-Encoding: chunked
            < Connection: keep-alive
            < Set-Cookie: __cfduid=da886babdf3f59507ccfd8adafe8a9aaa1554910581; expires=Thu, 09-Apr-20 15:36:21 GMT; path=/;; HttpOnly; Secure
            < Last-Modified: Wed, 10 Apr 2019 14:10:10 GMT
            < Expect-CT: max-age=604800, report-uri=""
            < Server: cloudflare
            < CF-RAY: 4c55cbbc6dd4c997-SEA

            You sure your network is okay? It should be served by CloudFlare/Comodo, not Cisco. I think your network might have a TLS man in the middle on it.

          2. 1

            Looks like some Cisco VPN trickery.

    10. 1

      I’m curious if the author used C++11 and later since this was written and if their opinion changed.

      1. 2

        Well they haven’t exactly removed much from the language, have they?

        1. 3

          That’s why the article should be at least 2x longer ;)

          OTOH, adding some new features can deprecate old ones, i.e. adding an std::expected<T, E> can actually produce code that doesn’t use exceptions (not that I’m saying exceptions should be deprecated; they have their uses, just don’t use them as a substitute for return false). So adding stuff can make things better.

          1. 1

            Of course adding stuff can make things better. Nobody on the C++ standards committee added features to make things worse. It’s however undeniable that the additions have made a large language even more gigantic and harder to learn.

      2. 1

        As someone who is not too familiar with the details of C++11 and C++17, did they address any of the issues that the author raised?

        1. 2


          Every serious C++ project I’ve worked on has banned or heavily frowned upon the STL and most language features, and C++11/14/17 didn’t change that. Each version brings a few nice things but most of it is unusable.

      3. 1

        Looks like they wrote a post about what they would like to see in a new C++ replacement and C++11 and over hit some of the points.

        However, they think templates are awful and they should bad about that.

    11. 2

      Does anyone have uBlock Origin filters or UserStyle to decrapify Medium?

      If not I will make one.

      1. 4

        as much as I hate the name, really helps with this

      2. 1

        I use Stylus to apply custom CSS.

        .postMeterBar {
            display: none;
        .avatar-image {
            border-radius: 4px !important;
        1. 1

          needs to cover the fullscreen popup as well

    12. 2

      “As you can see, by going with the ‘technical debt by default’ approach, we ended up in a scenario whereby if you create a brand-new webpage today, run it in the local intranet zone, and don’t add any additional markup, you will end up using a 1999 implementation of web standards by default. Yikes.”

      Yikes, indeed o.0

    13. 1

      The article was good, can’t say I’m a fan of the clickbait-y headline though

      1. 2

        It appears it has been hugged to death.

    14. 8

      I strongly disagree with this article. If these big tech companies can figure ways of detecting stage 0-1 cancer, that would go a long way in basically “curing” cancer and I’m pretty sure that’s what Microsoft was claiming they could accomplish by 2026.

      1. 13

        I think this article fails at highlighting its central point, which is unfortunate because the proper concern feels legitimate. I’m going to quote some snippets and then try to reword what I think it’s trying to say.

        But the theory of cancer as a logic problem, rather than an evolving entity in the space and time of ecology, persists.

        But the problem of cancer may even go beyond the cancer cell, its circuitry and shapeshifting tricks. Cancer cells can make ad hoc use of environmental cues. Caloric restriction reduces recurrence, for example, and cytokine IL6 works to block apoptosis, which explains why aspirin can reduce cancer risk.

        Problematically, a shift in understanding cancer as a three-dimensional problem has risen of late, as we are finding that walls, which separate genetic neighborhoods, can break down, resulting in interplay between growth signals and hundreds of genes that turn on cell growth and its energy use. Cancer cells can use various shapeshifting tricks to turn into metastatic forms that travel to other sites in the body, miraculous alterations that can have nothing to do with alterations in the genetic code.

        Basically we’re classifying “cancer” as a singular thing that is around some sort of corruption of the cells causing this massive growth, leading to an idea that cancer as a whole can be attacked with similar things. But in fact “cancer” describes a whole class of processes, and even now we’re finding new vectors for cancer growth that are totally unlike the basic idea of how this stuff works.

        So research is going into solutions around re-engineering cells in specific ways to prevent runaway growth, but cancer ends up working through he coordination of various parts of the ecosystem (” the problem of cancer is ecological”), and attacking the problem at such a microscopic level misses the forest for the trees.

        (I don’t think I fully got the point and I kinda disagree about the relative utility of jumping in front of at least one of he cancer-causing processes)

        1. 13

          One analogy that occured to me is that cancer is a policing problem of cells in a multicellular organism.

          Curing cancer is akin to “solving crime”. Which crime? What causes crime? What causes people to commit crime? What causes cells to go cancerous? What causes cells to flip the table and unilaterally withdraw from the pact that is living in a multicellular organism?

          1. 7

            This is the best analogy for cancer I’ve ever encountered!

            Makes me think of this snippet from The Atlantic

            The reality is, cancer is hundreds of different diseases, and it’s still deeply complex and far from fully understood. So since there’s no clear solution to stopping cancer, therapy is the next best answer, since patients are suffering now.

          2. 1

            Agreed, this is a great analogy and I will be stealing it!

      2. 6

        Detection is different from a cure. Diagnostics has been improving for a long time now but fundamental understanding remains illusive and any cure will require a breakthrough in understanding and not detection or diagnostics.

        1. 2

          I mostly agree with you, though I’d argue that detection and diagnostics are necessary in order to achieve understanding

        2. 2

          You are right, but early warning can help to increase the survival rates and the quality of life of the patients by applying more targeted, more limited treatements.

    15. 2

      I have to wonder why unstage isn’t defined as unstage = reset HEAD. That would save keystrokes and would mean you could just type git unstage FILE.txt. Is there a situation where you want to unstage to something other than HEAD?

      1. 3

        HEAD is actually the default <tree-ish>/<commit> argument, so git reset FILE.txt and git reset HEAD FILE.txt should produce the same results.

        To your question, there might be a situation in which one might want to unstage something other than HEAD, but I’ve never encountered it.

      2. 2

        (misclick, sorry)

    16. 4

      I’m 110% in favor of joke repositories full of e’s (reminds me of that meme from like 10 years ago with the endless stream of AAAAAAAAAA’s actually - anyone remember that?)

      I confess I’m not sure what to make of “Our industry teaches a lot of people that there is nothing they cannot learn, and we have a critical mass of arrogant people in tech and on GitHub. It’s incredibly toxic and I never want to maintain a real repository this large on GitHub, paid or not.”. It’s good to have an attitude that there is nothing you cannot learn. I’m fine with telling people that they have not actually learned the thing they claim to, but not with telling them that they shouldn’t even make the attempt.

      1. 6

        My takeaway from that sentence wasn’t “don’t try to understand things” but rather “if you don’t understand something, don’t go into the comments and be an asshole”

      2. 4

        aaaaaaaaah you mean this one?

        I love OP’s blog colour scheme and this story a lot <3 hopefully next time, some of the people acting like jerks will feel in on the joke and create more gems like the one mentioned at the end.

    17. 3

      This looks really interesting but whooo I bet confluent is not happy about this

      1. 4

        They’re apparently publicly upset about this.

        “They’re profiting from our use of resources,” Kreps said. “We’re charging our customers for the service, paying for compute and network resources that we use.”

        Unfortunately I can’t find the original source.

    18. 26

      I love it.

      Low-level programming is so often filled with arrogance: Stuff like “I work on hard low level things, only above-average programmers like me can do it”. Don’t believe me? This is literally one of the first pages you read on the Os dev wiki:

      In fact, writing an OS is usually considered the most difficult programming task. You will need above-average programming skills before even considering a project like this. Failure to comply will make you look silly.

      ugh. “Failure to comply will make you look silly” Did a 7 year old write this? We don’t want to be taunting beginners or making them feel stupid, we want to be empowering them.

      And that’s the position Rust is taking: Rust helps anyone be a systems programmer. Maybe systems programing isn’t particularly well defined, but many people reading this will think “scary part of programming” and then “oh wait, Rust let’s me do that”. That’s awesome: A clear path forward to doing something scary.

      Lastly, I really do like the design. That’s obviously personal preference though, what I really like is that there is design at all. Again low level programming is littered with bad design or lack thereof: having put work into their design is another way of being more inclusive.

      1. 12

        Low-level programming is so often filled with arrogance: Stuff like “I work on hard low level things, only above-average programmers like me can do it”.

        At a previous workplace, there was a cohort of strong systems programmers who would emphasize the difficulty and attainability of systems programming skills. It was out in the open - this is hard, you can do it, with practice, let’s work on it together.

        This was accompanied with a culture of regular talks, sharing of projects, ideas, workshops to get all devs interested in systems ideas - building a shell, using flamegraphs, writing data structures, cache locality. Frontend, SRE, sysadmins, everybody was welcome. That was real great stuff, the opposite of the more common “hey, Joe Frontend, get out of here and go bang some legos together.”

        Anyway, not sure where I’m going with this - I guess my point is:

        “Systems programming is hard - if you’re willing, you can do it. Here’s some resources” is a more welcome attitude vs. “Let’s scare off these morons”.

        Who knows, one of those morons might get motivated, do some learning, and become a good systems programmer some day.

        1. 22

          Writing an operating system is an enormously difficult task.

          Writing an operating system is an enormously large task. It’s not obvious the problems posed by OSs are substantially harder than those posed by distributed systems, compilers, machine learning, UI design, game development, sys ops, etc. Certainly there is much worse tooling for os development! (Rust is one foray into making this better!) Part of the reason, I think, the tooling is bad is because there’s this notion that writing an operating system should be hard: it’s a self-fulfilling prophecy.

          Scaring off people that are not ready to even begin, that so lack the fundamentally required skills that they can’t even follow basic tutorials? That’s a service to the community.

          I am all for giving people basic tutorials! Scaring people, on the other hand, seems like the community is trying to weed out the weak and let only the best programmers in. That’s certainly a possible goal for a community, just not a community I want to be a part of.

          Rust is an extremely complicated language, and if someone can’t do systems programming in C they certainly won’t be able to do it in the much more complex language Rust.

          I guess we’ll see about that! Rust is making the claim that it’s easier to do systems programming in Rust than it is in C.

          Certainly we do not want to be ‘empowering’ people.

          I do :)

        2. 18

          Multiple universities offer a “write an operating system” class in the CS1XX level.

        3. 4

          I couldn’t disagree more, and one of my favorite things about the rust community is how we reject gatekeeping like this. Portraying it as a binary choice a la “either we deter people or they will write bad systems code” is intellectually dishonest at best. As @sevagh noted, it’s possible to both acknowledge the difficulty of writing good low-level code AND encourage people to learn how to do it. Providing good tools, good documentation, good learning resources, and good mentorship is, in my opinion, the best way to accomplish this, and that’s what I see the rust community pursuing

    19. 17

      I’m one of the maintainers of Conjure, happy to answer questions about this project!

      1. 12
        1. How does this compare to gRPC and friends (e.g. Thrift), especially now that gRPC-Web is in GA? When would I pick Conjure over them?
        2. Are there plans for additional language support? I’m interested in Go in particular.
        1. 9
          1. We’re big fans of gRPC! One downside is that it does require HTTP/2 trailers, which means if you want to make requests from browsers or curl, you’d need to deploy a proxy like envoy to rewrite the traffic. I think Conjure makes sense if you’re already relying on HTTP/JSON in production or care about browsers. It’s very much designed with simplicity in mind, and doesn’t actually prescribe any particular client or server, so allows you to get the upside of strong types for your JSON, without requiring big changes to your existing stack or API.

          2. Definitely! Internally, we use go extensively so I think conjure-go is next in the open-sourcing pipeline. One interesting feature of Conjure is that since the IR is a stable format, you can develop new language-generators independently without needing any involvement from the core maintainers!

        2. 4

          I have the same question as 1. but with OpenAPI.

          1. 6

            They’re conceptually pretty similar, but we found the Java code that Swagger generates pretty hard to read. While Swagger has to add many annotations ( to deal with any conceivable API you might define, Conjure is intentionally more restrictive in terms of what you can define and tries to focus on doing a small number of things very well.

            This results in code that is as readable as a human would write (, with all the benefits of modern best practices like immutability, NonNull everywhere etc.

      2. 60

        How do you feel about your work being used to enable human rights violations?

        1. 14

          This is actually an interesting question.

        2. 6

          Probably terrible but also aware of the unlikelihood of escaping it. Sometimes you have an action and it has good and bad consequences and the good consequences are avoidable, but the bad aren’t. In that specific scenario it’s not wise to give up the good consequences just so you aren’t “getting your hands dirty”. Sure if you can find some way to escape the evils then you should try all available options but sometimes things are bad.

          Oh I’m realizing this is specifically Palantir’s stack lmao. Nevermind yeah don’t work on that on your free time y’all, no hard feelings intended towards @iamdanfox .

        3. 2

          As it seems I’m living under a rock, could you paste some link to provide the context for your question?

          Edit: never mind, found it; “Palantir provides the engine for Donald Trump’s deportation machine”

          1. 1

            Which is the same machine as previously used, right?

      3. 3

        How does it compare to Twirp? (

        Update after a quick search: Conjure uses JSON whereas Twirp uses ProtocolBuffer.

        1. 2

          I think Twirp has a lot of similar motivations to Conjure - the blog post even mentions an emphasis on simplicity and it works over HTTP1.1 (unlike gRPC).

          One key difference I see is that many API definition tools are essentially monoliths, pretty much completely controlled by the originating company. We’ve gone for a different approach with Conjure and tried to decouple things so that significant additions (e.g. adding a new language) happen without blocking on the core maintainers at all.

          For example, if you wanted to add Swift support, you’d make a brand new conjure-swift repo and write a CLI that turns the stable IR format into Swift source code. We have a standardised test harness (written in Rust) that you can use to prove that your new conjure-swift code will be compatible with other Conjure clients/servers. Once your CLI works, you can package it up in a standard way and it should slot nicely into existing build tools.

      4. 3

        How is unionization in Palantir? Is there a reason why you’re still working there? Do you need support? I’m not from USA but I can point you to people willing to support workers like yourself.

      5. 2

        Hey I am really interested in the project, but I’m getting errors when going through the tutorial on the GitHub repo, specfically ./gradlew tasks was giving me an error fetching the com.palantir repos. I copy pasted the exact instructions and I’m unsure where to ask for help on this. I figured I’d at least let you know to see if you experience the same issues.

        1. 2

          Hey! Glad to hear you’re interested in the project and sorry about the issue with the getting started guide. i’ve gone ahead and updated the guide to fix the problem you encountered. Thanks for pointing out the issue. Hope you enjoy using the project and feel free to reach out with any questions, comments or concerns