1. 4

    Part of me got quite excited, two of my favourite computing words in a sentence functional and embedded.

    Surely someone could use the gifts that are given by true hard core no side effects FP language to create a simplified instruction set and implement as microcode like Ye Olde LispMachines or maybe even straight to fpga ….

    Except they stop at having a bytecode interpretor on a vanilla stm32.

    Not quite sure what the functional and embedded part is…. the board looks like a vanilla stm32

    https://lambdachip.com/articles/docs/9
    

    ie. What about it is better about it than say an arduino or rpi? Apart from the fact that someone has gone to the effort of making a slick scheme implementation to run on it.

    Ahh well, Scheme macros could truly clean up some of the horrors of interfacing to h/w registers where individual bits have meaning.

    1. 2

      Ahh well, Scheme macros could truly clean up some of the horrors of interfacing to h/w registers where individual bits have meaning.

      There’s microscheme which is a subset of scheme that compiles to native code for some Amtels.

    1. 10

      Another Discord clone that, sadly, misses out on what made Discord successful. I don’t want to create an account, I want to click and, at most, have to enter an username. When you click a Discord link, you’re instantly in voice chat (assuming you’re not IP or HWID blocked).

      Self-hosting is nice, but why not allow federation? Do you really expect people to keep 10 tabs open, one for each Revolt server they’re in, considering how resource heavy those webapps are?

      1. 4

        When you click a Discord link, you’re instantly in voice chat (assuming you’re not IP or HWID blocked).

        My experience is somewhat different. I clicked on a Discord link and it told me I needed to agree to their T&Cs and privacy policy. I read them, said ‘nope, no way’ and didn’t click ‘I agree’. Discourse was much better, I didn’t find anything I objected to there, even in their hosted offerings.

        That said, I would be willing to bet that your experience is significantly more representative than mine. I hope that the next few years will include a lot of GDPR lawsuits where companies will discover that ‘it says I can do this on page 342 of the T&Cs’ does not constitute informed consent.

        1. 1

          Oh, I’m completely banned from Discord. My phone number is “invalid”. And my HWID & IP are flagged and I get phone walled as soon as I click a Discord link. That should be illegal considering the network effects… Good luck explaining to your employer that no, you just can’t join the company chat because someone at sillicon valley said so.

        2. 3

          That last part. People apparently don’t mind having a bajillion Slack workspaces, or Discord whatever-they’re-called. I think a solution to the network effect and hosting stuff in the wild (Mastodon/Pleroma/Fediverse stuff) is a client that accepts to be connected to many services “at once”, like Slack and Discord do.

          1. 8

            is a client that accepts to be connected to many services “at once”, like Slack and Discord do.

            I think you are describing matrix…

            1. 1

              Ah, you can use Matrix for microblogging/social networking? Was not aware

              1. 1

                I don’t think I said that? But, you probably can. It seems to be quite flexible!

            2. 4

              That last part. People apparently don’t mind having a bajillion Slack workspaces, or Discord whatever-they’re-called. I think a solution to the network effect and hosting stuff in the wild (Mastodon/Pleroma/Fediverse stuff) is a client that accepts to be connected to many services “at once”, like Slack and Discord do.

              For Discord, you only need one account, and Slack aggregates it all into a single client.

              1. 1

                I meant more the UI construct of a simple account-switcher-thing.

                If I can convince most of my family to join on my “fediverse thing”, and they can somehow do that without having to pull in the other side of the family, that’s good. And it’s okay that those circles don’t intersect. I am part of a few non-intersecting circles. Anyway. I ramble.

          1. 18

            Neat idea. I’m not sure this is a captcha, but rather just a rate limiter.

            1. 13

              So much this. A proof-of-work scheme will up the ante, but not the way you think. People need to be able to do the work on the cheap (unless you want to put mobile users at a significant disadvantage) and malware/spammers can outscale you significantly.

              Ever heard of parasitic computing? TLDR: It’s what kickstarted monero. Any website (or an ad in that website) can run arbitrary code on the device of every visitor. You can even shard the work, do it relatively low-profile if you have the scale. Even if pre-computing is hard, with ad networks and live-action during page views an attacker can get challenges solved just-in-time.

              1. 9

                The way I look at it, it’s meant to defeat crawlers and spam bots; they attempt to cover the whole internet, they want to spend 99% of their time parsing and/or spamming, but if this got popular enough to prompt bot authors to take the time to actually implement WASM/WebWorkers or a custom Scrypt shim for it, they might still end up spending 99% of their time hashing instead.

                Something tells me they will probably give up and start knocking on the next door down the lane. And if I can force bot authors to invest in a $1M USD+ /year black hat “distributed computing” project so they can more effectively spam Cialis and Micheal Kors Handbags ads, maybe that’s a good thing? I never made $1M a year in my life, probably never will, I would be glad to be able to generate that much value tho.

                If it comes down to a targeted attack on a specific site, captchas can already be defeated by captcha farm services or various other exploits (https://twitter.com/FGRibreau/status/1080810518493966337). Defeating that kind of targeted attack is a whole different problem domain.

                This is just an alternate approach to put the thumb screws on the bot authors in a different way, without requiring the user to read, stop and think, submit to surveillance, or even click on anything.

                1. 9

                  This sounds very much like greytrapping. I first saw this in OpenBSD’s spamd: the first time you got an SMTP connection from an IP address, it would reply with a TCP window size of 1, one byte per second, with a temporary failure error message. The process doing this reply consumed almost no resources. If the connecting application tried again in a sensible amount of time then it would be allowed to talk to the real mail server.

                  When this was first introduced, it blocked around 95% of spam. Spammers were using single-threaded processes to send mail and so it also tied each one up for a minute or so, reducing the total amount of spam in the world. Then two things happened. The first was that spammers moved to non-blocking spam-sending things so that their sending load was as small as the server’s. The second was that they started retrying failed addresses. These days, greytrapping does almost nothing.

                  The problem with any proof-of-work CAPTCHA system is that it’s asymmetric. CPU time on botnets is vastly cheaper than CPU time purchased legitimately. Last time I looked, it was a few cents per compromised machine and then as many cycles as you can spend before you get caught and the victim removes your malware. A machine in a botnet (especially one with an otherwise-idle GPU) can do a lot of hash calculations or whatever in the background.

                  Something tells me they will probably give up and start knocking on the next door down the lane. And if I can force bot authors to invest in a $1M USD+ /year black hat “distributed computing” project so they can more effectively spam Cialis and Micheal Kors Handbags ads, maybe that’s a good thing?

                  It’s a lot less than $1M/year that they spend. All you’re really doing is pushing up the electricity consumption of folks with compromised computers. You’re also pushing up the energy consumption of legitimate users as well. It’s pretty easy to show that this will result in a net increase in greenhouse gas emissions, it’s much harder to show that it will result in a net decrease in spam.

                  1. 2

                    These days, greytrapping does almost nothing.

                    postgrey easily kills at least half the SPAM coming to my box and saves me tonnes of CPU time

                    1. 1

                      The problem with any proof-of-work CAPTCHA system is that it’s asymmetric. [botnets hash at least 1000x faster than the legitimate user]

                      Asymmetry is also the reason why it does work! Users probably have at least 1000x more patience than a typical spambot.

                      I have no idea what the numbers shake out to / which is the dominant factor, and I don’t really care; the point is that I can still make the spammers lives hell & get the results I want right now (humans only past this point) even though I’m not willing to let Google/CloudFlare fingerprint all my users.

                      If botnets solving captchas ever becomes a problem, wouldn’t that be kind of a good sign? It would mean the centralized “big tech” panopticons are losing traction. Folks are moving to a more distributed internet again. I’d be happy to step into that world and work forward from there 😊.

                    2. 5

                      captchas can already be defeated by […] or various other exploits (https://twitter.com/FGRibreau/status/1080810518493966337)

                      An earlier version of google’s captcha was automated in a similar fashion: they scraped the images and did a google reverse image search on them!

                      1. 3

                        I can’t find a link to a reference, but I recall a conversation with my advisor in grad school about the idea of “postage” on email where for each message sent to a server a proof of work would need to be done. Similar idea of reducing spam. It might be something in the literature worth looking into.

                        1. 3

                          There’s Hashcash, but there are probably other systems as well. The idea is that you add a X-Hashcash header with a comparatively expensive hash of the content and some headers, making bulk emails computationally expensive.

                          It never really caught on; I used it for a while years ago, but I’ve never received an email with this header since 2007 (I just checked). It seems used in Bitcoin nowadays according to the Wikipedia page, but it started out as an email thing. Kind of ironic really.

                          1. 1

                            “Internet Mail 2000” from Daniel J. Bernstein? https://en.m.wikipedia.org/wiki/Internet_Mail_2000

                        2. 2

                          That is why we can’t have nice things… It is really heartbreaking how almost all technology advance can and will be turned for something evil.

                          1. 1

                            The downsides of a global economy for everything :-(

                        3. 3

                          Captchas are essentially rate limiters too, given enough determination from abusers.

                          1. 4

                            Maybe. The difference I would make is that a captcha attempts to assert that the user is human where this scheme does not.

                            1. 2

                              I mean, objectively, yes. But, since spammers are automating passing the “human test” captchas, what is the value of that assertion? Our “human test” captchas come at the cost of impeding actual humans, and are failing to protect us from the sophisticated spammers, anyway. This proposed solution is better for humans, and will still prevent less sophisticated attackers.

                              If it can keep me from being frustrated that there are 4 pixels on the top left tile that happen to actually be part of the traffic light than by all means, sign me the hell up!

                        1. 2

                          Used gorm in the past and it was a bit rough to be honest… gorm v2 was a little better but I didn’t have a very pleasant experience. This looks very nice, thanks for sharing, will give it a try.

                          1. 3

                            We have a saying when someone is obviously annoyed at work: “Gorm?”

                            It’s surprisingly effective at getting to the RCA of someone’s frustration!

                          1. 3

                            Printf is actually perfectly type-safe if you’re using the right language :-)

                            1. 3

                              I think you meant this language.

                              1. 1

                                How type-safe is it? I only looked at it briefly without knowing rust, and it seems to me they sidestep the issue by making it possible to plug in any other type in a printf? Or am I mistaken?

                                1. 3

                                  Not a rust programmer, but I know that format! is a macro. What could be happening is that at compile time the fmt string is parsed, and display specifc functions for the specifier take the positional argument. If that argument isn’t the right type for the specifier, it’s a compile time type error.

                                  My guess is that Rust doesn’t allow dynamic format strings, or if it does, it’s a runtime error, no different than OCaml, when the format is incompatible.

                                  Would love to be corrected.

                                  1. 3

                                    What could be happening is that at compile time the fmt string is parsed, and display specifc functions for the specifier take the positional argument.

                                    Good guess, this is exactly what happens!

                                    My guess is that Rust doesn’t allow dynamic format strings

                                    2/2, format strings must be static, and they’re checked at compile time.

                            1. 7

                              The quote from the C standard is not quite the right one. %d is a perfectly valid conversion specification. The problem arises with the sentence afterward:

                              If any argument is not the correct type for the corresponding conversion specification, the behavior is undefined.

                              Also note that the cast syntax in this example is only valid in C++. If you try to compile that code as C, you’ll get an error. It’s a bit strange to me that the author used some ambiguous looking C++-specific syntax to argue against writing C.

                              That said, I agree that variadic functions can be very error-prone. You miss out on type-checking for the variadic arguments, so they should be only used sparingly and with extra caution.

                              1. 11

                                the code, as presented, won’t compile under any actual C compiler. The line:

                                printf("%d\n",double(42));
                                

                                is not valid C syntax. Given that he use #include <cstdio> tells me he used a C++ compiler, which may very well allow such dubious syntax (I don’t know, I don’t program in C++). This blog post to me reads as an anti-C screed by someone who doesn’t program in C.

                                1. 3

                                  double(1) is a call to the double primitive type’s instrinsic constructor. It’s not really a type cast, though that’s effectively what happens (at least as I understand it).

                                  1. 1

                                    It’s completely legit syntax in C++.

                                    The principle behind it is that user-defined types should generally be able to everything primitive types can do, and to some extent vice-versa. This is why C++ supports operator overloading, for example.

                                    In this case allowing primitive types to use constructor-like syntax means you can write something like T(42) in a template and it will compile and do the expected thing whether T is a user-defined class or the primitive double type.

                                    1. 3

                                      Nobody said it was legitimate syntax in C++. They said it was illegitimate syntax in C

                                1. 18

                                  Emacs in Guile.

                                  I know there was the work in ~2014, but being able to run things that were multi-threaded, have a much simpler language, and support the guile ecosystem where emacs libraries would just be guile libraries makes my heart happy.

                                  Doesn’t make a lot of sense to actually do, and I understand the limitations.. but whoooo boy have I been lusting for this for years and years.

                                  1. 5

                                    Why Guile instead of Common Lisp? Elisp is far closer to Lisp than to Scheme; Lisp has multiple compatible implementations while Guile (and every other useful Scheme) is practically incompatible with any other useful Scheme, because the RnRS series, even R6RS, tend to underspecify.

                                    GNU’s focus on Scheme rather than Common Lisp for the last 20 years has badly held it back. Scheme is great for teaching and implementation: it is simple and clean and pure. But it is to small, and consequently different implementations have to come up with their own incompatible ways of doing things.

                                    While the Common Lisp standard is not as large as I would like in 2021, it was considered huge when it came out. Code from one implementation is compatible with that of others. There are well-defined places to isolate implementation-specific code, and compatibility layers for, e.g., sockets and threading, exist.

                                    1. 3

                                      I’d also love to see a Common Lisp Emacs. One day, I’m hoping that CLOS-OS will be usable, and using it without Emacs is kind of unthinkable.

                                      1. 1

                                        Why Guile instead of Common Lisp?

                                        Because it’s my favorite flavor of scheme, and I enjoy programming in scheme much more than common lisp. I do not like lisp-2’s, but I do like defmacro (gasp) so who knows.

                                        Emacs being rewritten in common lisp would also be awesome.

                                      2. 2

                                        Multiple times I’ve considered, and then abandoned, taking microemacs and embedding a Scheme in it. The reality is that it’s basically a complete rewrite, which just doesn’t seem worth it…. And you lose all compatibility with the code I use today.

                                        Guile-emacs, though, having multiple language support, seems to have a fighting chance at a successful future, if only it was “staffed” sustainably.

                                        1. 2

                                          Multiple times I’ve considered, and then abandoned, taking microemacs and embedding a Scheme in it.

                                          Isn’t that basically edwin?

                                          1. 2

                                            I mean, by the reductivist’s view, yes. Edwin serves a single purpose of editing scheme code with an integrated REPL. You could, of course, use it beyond that, but that’s not really the goal of it, so practically no one does (I am sure there are some edwin purists out there).

                                            My interest in this as a project is more as a lean, start from scratch standpoint. I wonder what concepts I’d bring from emacs over. I wonder if I’d get used to using something like tig, instead of magit. I wonder if the lack of syntax highlighting would actually be a problem… The reason I’ve never made a dent in this is because I don’t view reflection of how I use things like this as deeply important. They’re tools…

                                        2. 1

                                          I’m going to go more heretical: emacs with the core in Rust and Typescript as the extension language. More tooling support, more libraries, more effort into optimizing the VM.

                                          Lisps are alright but honestly I just don’t enjoy them. That maxim about how you have to be twice as clever to debug code as you do to write it, so any code that’s as clever as you can make it is undebuggable.

                                          1. 1

                                            this exists doesn’t it?

                                            1. 2

                                              The last implementation work was ~2015 according to git.

                                              If you know of this existing, let me know!

                                          1. 7

                                            Ahhh, .plan. Nature’s original, asynchronous, standup.

                                            1. 3

                                              Can anyone explain the benefits of highly accurate timekeeping in a datacenter since the article mostly glossed over it? I’m interested in finding out why Facebook wanted to make this.

                                              1. 7

                                                Highly accurate time makes distributed systems easier to make. You can now (better) rely on time as a “happens before” instead of inventing a scheme like vector clocks. See the Spanner Paper from Google which talks about the TrueTime API. Of course, even with TrueTime, you end up with a window of time the event happened in because you can’t have clocks synchronized so precisely to rely on it alone.

                                                I am sure others could add a ton more to this…

                                                1. 4

                                                  Two events are recorded in two datacenters one millisecond apart. How do you tell which one happened first? What if the datacenter clocks have a five millisecond error bar?

                                                  1. 2

                                                    More accurate time keeping enables more advanced infrastructure management across our data centers, as well as faster performance of distributed databases.

                                                  1. 31

                                                    I prefer to see this type of project that builds upon what it considers the good parts of systemd, instead of systemic refusal and dismissal that I’ve seen mostly.

                                                    1. 15

                                                      Same. Too often I see “critiques” of systemd that essentially boil down to personal antipathy against its creator.

                                                      1. 22

                                                        I think it makes sense to take in to account how a project is maintained. It’s not too dissimilar to how one might judge a company by the quality of their support department: will they really try to help you out if you have a problem, or will they just apathetically shrug it off and do nothing?

                                                        In the case of systemd, real problems have been caused by the way it’s maintained. It’s not very good IMO. Of course, some people go (way) to far in this with an almost visceral hate, but you can say that about anything: there are always some nutjobs that go way too far.

                                                        1. 3

                                                          Disclaimer: I have not paid close attention to how systemd has been run and what kind of communication has happened around it.

                                                          But based on observing software projects both open and closed, I’m willing to give the authors of any project (including systemd) the benefit of the doubt. It’s very probable that any offensive behaviour they might have is merely a reaction to suffering way too many hours of abuse from the users. Some people have an uncanny ability to crawl under the skin of other people just by writing things.

                                                          1. 6

                                                            There’s absolutely a feedback loop going on which doesn’t serve anyone’s interests. I don’t know “who started it” – I don’t think it’s a very interesting question at this point – but that doesn’t really change the outcome at the end of the day, nor does it really explain things like the casual dismissal of reasonable bug reports after incompatible changes and the like.

                                                            1. 4

                                                              I think that statements like “casual dismissal” and “reasonable bug reports” require some kind of example.

                                                            2. 3

                                                              tbf, Lennart Poettering, the person people are talking about here is a very controversial personality. He can come across as an absolutely terrible know-it-all. I don’t know if he is like this in private, but I have seen him hijacking a conference talk by someone else. He was in the audience and basically got himself a mic and challenged anything that was said. The person giving the talk did not back down, but it was really quite something to see. This was either at Fosdem or at a CCC event, I can’t remember. I think it was the latter. It was really intense and over the top to see. There are many articles and controversies around him, so I think it is fair that people take that into account, when they look at systemd.

                                                              People are also salty because he basically broke their sound on linux so many years ago, when he made pulseaudio. ;-) Yes, that guy.

                                                              Personally I think systemd is fine, what I don’t like about it is the eternal growth of it. I use unit files all the time, but I really don’t need a new dhcp client or ntp client or resolv.conf handler or whatever else they came up with.

                                                              1. 4

                                                                tbf, Lennart Poettering, the person people are talking about here is a very controversial personality.

                                                                In my experience, most people who hate systemd also lionize and excuse “difficult” personalities like RMS, Linus pre-intervention, and Theo de Raadt.

                                                                I think it’s fine to call out abrasive personalities. I also appreciate consistency in criticism.

                                                        2. 4

                                                          Why?

                                                          1. 7

                                                            At least because it’s statistically improbable that there are no good ideas in systemd.

                                                            1. 1

                                                              Seems illogical to say projects that use parts of systemd are categorically better than those that don’t, considering that there are plenty of bad ideas in systemd, and they wouldn’t be there unless some people thought they were good.

                                                              1. 2

                                                                Seems illogical to say projects that use parts of systemd are categorically better than those that don’t

                                                                Where did I say that though?

                                                                1. 2

                                                                  I prefer to see this type of project that builds upon what it considers the good parts of systemd

                                                                  Obviously any project that builds on a part of system will consider that part to be good. So I read this as a categorical preference for projects that use parts of systemd.

                                                          2. 2

                                                            There have been other attempts at this. uselessd (which is now abandoned) and s6 (which still seems to be maintained)

                                                            1. 4

                                                              I believe s6 is more styled after daemontools rather than systemd. I never looked at it too deeply, but that’s the impression I have from a quick overview, and also what the homepage says: “s6 is a process supervision suite, like its ancestor daemontools and its close cousin runit.”

                                                              A number of key concepts are shared, but it’s not like systemd invented those.

                                                              1. 1

                                                                s6 I saw bunch of folks using s6 in docker, but afaik that’s one of most not user friendly software i’ve been used.

                                                          1. 19

                                                            rclone - you could call it a modern rsync or scp.

                                                            It seems to be well known in some circles and relatively unknown in others so I figured I’d post it since it’s a great tool with responsive developers. It’s an rsync-like tool that supports many other backends besides rsync or ssh. What I like about it is how highly configurable it is, especially w.r.t. the controls over parallelism and how much more performant over rsync it is in situations where you have many tiny files.

                                                            1. 3

                                                              Strongly seconded. rclone is rsync for cloud storage services. S3. Dropbox. Box. Google Drive. Tons more.

                                                              1. 1

                                                                I got excited about rclone until I saw it didn’t support iCloud (to be fair, nothing does)

                                                                1. 1

                                                                  Would local file syncing to mounted iCloud folders not handle that need?

                                                                  1. 1

                                                                    Not if you don’t use a Mac?

                                                              1. 11

                                                                I can’t wait to say “acktually it’s Rust/Linux”.

                                                                1. 15

                                                                  “Acktually,” I don’t think it works that way, or we’d call it C/Linux, right? :)

                                                                1. 3

                                                                  I’d like to hear a response from the other side about the situation. Assuming the blog post is true, then it’s a sad situation and should be somehow addressed. It reminds me somehow of the behavior of Linus Torvalds, which I don’t support at all. But often times there’s this case of a bad perspective of a person. Feelings can skew the portrait painted by the perception, and even if the person is really sincere in trying to tell the truth, a different outcome – not entirely fair – can be produced. I have no idea about Matthias Felleisen, nor Racket in general (other than I know it exists), and that puts me in the right spot to remind people who are like me (outside of the context), that creating an opinion about something based on one version of the story is not a great thing to do.

                                                                    1. 3

                                                                      Thanks.

                                                                      The author has replied to this reply: https://beautifulracket.com/appendix/why-i-no-longer-contribute-to-racket.html

                                                                      After reading the reply to the reply, I see this as a “cancel culture” event. I wish Felleisen good luck.

                                                                      1. 4

                                                                        Felleisen has tenure so he’s set.

                                                                        1. 3

                                                                          After reading the reply to the reply, I see this as a “cancel culture” event.

                                                                          Can I ask why? I’ve read the apology, and even the apology from Sam on the mailing list yesterday, and it all seems somewhat inadequate.

                                                                          “Saying I’m sorry is the first step; then, how can I help?” is what Daniel Tiger teaches my toddler. I am not an expert in the psychology of apology, but the “how can I make things right?” is certainly missing from all that I’ve read, even an actual acknowledgment, really, from MF.

                                                                          But I am genuinely interested in the cancel culture comment, because that implies to me “Butterick is acting in bad faith.” Care to elaborate? (If not, that’s also fine)

                                                                    1. 6

                                                                      I’m glad this was said. And I appreciate the nuance and difficulty separating the band from the music. The art from the artist. I took a deep dive into racket and love it, but the leadership made me uncomfortable. Now I’m putting that energy into common lisp. To be fair I compulsively learn and re-visit languages constantly.

                                                                      1. 5

                                                                        Early in my “lisp adventure,” I settled on PLT Scheme, and got really turned off by the community. I never did fully retrospect on it, but I am pretty sure “academic elitism” is a fair assessment. As an industry practitioner… From there, I jumped from Scheme to Scheme, to Clojure at one point, etc. I tried to get into Common Lisp, but it never really stuck. I ended up going back to Racket for a while (PLT became Racket), even made a few contributions, spoke at a RacketCon, etc. But somehow, I found myself retreating from the community again, and I don’t know exactly why. I can point at one specific case that frustrated me, around a proposed change I made to json handling that was met with a very negative, dismissive response, but I don’t think, by itself, that was it…

                                                                        Anyway, I find myself jumping a bit between schemes again, mostly settling on Chibi, the R7RS reference implementation, with a fairly large and practical standard library, but it’s nowhere near as polished as Racket, because the project is a million times smaller. I wish I had more time to help… :(

                                                                        1. 5

                                                                          Have you given CHICKEN a try? It has a lot of useful add-on libraries, good standards support and a welcoming community (at least, we do our best to make it so)

                                                                          1. 1

                                                                            I have! I occasionally end up using Chicken. And, in fact, the last Scheme based play project I did used it, but without embracing any Chickenisms, because I wasn’t sure which implementation I wanted to go with for good. It was a hack week, and I had it installed already. I got a basic demo working and then did nothing more…. which was great in that I didn’t have to make an actual decision…

                                                                            Thanks for your contributions to the Chicken project!

                                                                          2. 3

                                                                            Pull request management in Racket is definitely one of the things I think should be improved. Recently, I have been going through unmerged PRs and try to get them merged if they are in a good state.

                                                                            It looks like the PR that you are talking about is https://github.com/racket/racket/pull/1878?

                                                                            I’m not sure if I would characterize the responses as “very negative, dismissive”. Two people apparently think that this is a good idea (heart emoji react). Many comments politely discussed about what is the best way to implement the feature. The only comment that I think could be perceived as negative is the last one, which says the change should not be included in the standard library (because it’s too opinionated in their opinion), but rather you should make a separate library instead. But in any case the comment itself seems polite and was made in good faith to me.

                                                                            1. 1

                                                                              Yeah, this is the bulk of the json thing I mentioned. I remember it being worse somehow, and wonder if there is additional discussion / events not reflected there, or if I am remembering a feeling and reacting negatively to that.

                                                                              I remember that I definitely started another library that handled json differently, and I am pretty sure I threw my hands up at some point and decided it was not worth doing. This all came up, incidentally, because I was writing some API consuming code and the default json stuff was woefully inadequate for dealing with it. I gave up on that and used a different language (I know this for sure, but am fuzzy on the details). In other words, I was unable to use racket for a practical task I was doing, because the official json handling makes impractical choices because it’s more sound, academically. Something like that. (Again, projecting a feeling here, rooted in opinion, and building off of other feelings)

                                                                              1. 2

                                                                                There is a real risk with this kind of PR to get stuck, if there is no “owner” of the original code. In that case no-one feels entitled to take a decision. It sometimes helps to ping such an issue to bring back some attention to the issue.

                                                                        1. 26

                                                                          I know Matthias F. I know Matthew B. I know RMS. And other people. I respect their accomplishments. I also know that people can be very difficult. As one friend puts it, some people have a user interface that is broken. I also know that the greater one’s distance from a person, the more likely the depiction of a person can be distorted, showing for example one dimension but not others. As with everything in society these days, I yearn for a way for people to work things out. I don’t want anyone to be ostracized. I don’t want anyone to not feel welcome. This is a very difficult problem, but we must work on it. It is good to talk about these issues, but I want the discussion to be fair. I’m all for inclusiveness, but not at the cost of exclusion.

                                                                          1. 57

                                                                            This is a classic response to someone calling out people that misbehave. “Bob is not that bad, once you get to know him”. But that’s beside the point!

                                                                            If Bob is pushing other people down through his behavior, it is right to criticize his behavior, and maybe also remove responsibility from Bob, no matter how nice he “really” is.

                                                                            1. 25

                                                                              This is a classic response to someone calling out people that misbehave

                                                                              Not to mention that “I’m all for inclusiveness, but not at the cost of exclusion” is an impossible situation to begin with: https://en.wikipedia.org/wiki/Paradox_of_tolerance

                                                                              That shit just does not work, as proven time and time again. People looking the other way and making excuses for abusive behavior is how we got to this situation of people being driven out in the first place.

                                                                              1. 8

                                                                                1000% agreed. This is part and parcel of the technology community having gone mainstream a while ago. The fallacies we used to indulge in to excuse bad behavior are showing themselves to be more and more ugly as we bring them into the light.

                                                                                1. 4

                                                                                  Diversity tends to shine light where it needs it the most.

                                                                              2. 8

                                                                                I am ranting a bit, and I hope it does not come across as directed at you. I do not mean it that way. I’m a couple of levels down in this thread and it seems like somehow we’ve gone off the rails regarding what the topic is.

                                                                                I don’t care if Bob is a good person or not. I care if we’re all being invited to judge him publicly and decide whether he’s good or not. I don’t participate in these activities and I don’t tolerate others that do. Of course, other people are free to do whatever they’d like. My point is that the one unyielding rule I’ve found regardless of context is that productive teams cannot carry on this way with the public story-telling back-and-forth. It’s corrosive. That observation is completely orthogonal to what kinds of behavior I’d tolerate in a team, which, frankly, is nobody’s business but mine and the teams I join. (They also tend to change from situation-to-situation. People aren’t statues, and standards aren’t the Ten Commandments. Situation matters.)

                                                                                1. 27

                                                                                  You speak as though Butterick’s comments are taking place in a vacuum, or worse, are arising unprompted. But please remember that the only reason he feels it necessary to write this piece is that his life has been disrupted, he has suffered poor behavior, and now he has had to withdraw from a community that he had dedicated significant resources to.

                                                                                  I know you haven’t raised the specter of ‘cancel culture’, but phrasing like ‘we are all being invited to judge him publicly’ speak to a similar enough view of the proceedings; and the fallacy operating with both this critique as well as larger complaints about ‘cancel culture’ is this: you and I come to this post from a null position. This is understandable; we, and the vast majority of readers, are not members of this particular community and have no experience with its members. And from our position of no experience, it seems we are being invited to judge someone we don’t know. That feels icky and unnecessary.

                                                                                  But Butterick is not asking us to judge someone. I don’t think he cares particularly that we, who have no stake in this, walk away with a solid negative judgment of the personal qualities of another person. What he cares is to provide an account of his experience, because: in light of a widespread taboo against airing dirty laundry, if you didn’t know about his experience, his conduct is confusing and probably not very flattering. Here’s someone who dedicated themselves to a language and a community: wrote code, wrote books about it. And ‘suddenly’ (to an observer), he drops off the map. This represents a loss of social capital, probably a loss of real livelihood, and raises questions about him and his fitness to this kind of work.

                                                                                  In light of that experience (again, one that is centered around Matthew Butterick and his desire to manage his own reputation and professional prospects, as opposed to a desire to manage your view of a third party), you can hopefully understand why he feels the need to give an account of what he has actually been experiencing, even though that includes the unpleasant work of publicizing the shittiness of another person.

                                                                                  I will wager with you that, oh, 95 out of 100 of those folks who have publicized the toxicity of leaders, bosses and executives over the last little while have been motivated similarly. In other words, I wager that they too definitely would have preferred to conduct themselves exactly as you prefer: to keep their personal experience private, to settle things through private channels, and to negotiate via their existing personal relationships. Unfortunately, toxic people (abusers, whatever you want to call them) are usually toxic because they have a position, personality, and skill set that neutralizes exactly that approach.

                                                                                  In conclusion: I invite you to reread that article from the perspective of its author. From the perspective of the uninitiated reader, it would seem to be about some other figure who we don’t know from Adam. But I don’t think it is.

                                                                                  1. 18

                                                                                    I don’t care if Bob is a good person or not.

                                                                                    If he’s in your team, you should. The whole problem here exists because people are going out of their way to ‘not participate’ in judging a bad person as bad. If you don’t root out assholes, you’re complicit to their behaviour.

                                                                                    Come on, there’s a few witness statements in this thread, in this small corner of the internet, that corroborate the story. People are being warned against his antics. No one that goes “I’m surprised and have only had positive experiences with him”. Even the positive ones are hedging. That’s damning evidence.

                                                                                    1. 3

                                                                                      I want to add here that we’re talking about good/bad along some specific axis. People have many traits and can be good in many ways, while bad in others. The context here is that someone is e.g. bad for the community.

                                                                                    2. 7

                                                                                      If this had been a team in an organization or business, I would agree with you. Airing private laundry publicly is not constructive.

                                                                                      But this is an open source project, where transparency and being public are important factors.

                                                                                      If someone is pushing other people down through their behavior, repeatedly, it’s balanced that they also receive criticism and possibly removal of responsibility, publicly, IMO.

                                                                                      1. 5

                                                                                        Perhaps I’m wrong when it comes to FOSS. I don’t know. I’ve been wrong many times before :)

                                                                                        I know that open source is much more like running a charity or a minimum-wage restaurant: each person’s spirit and morale have to be very high for them to stay dedicated over any length of time.

                                                                                        I’m happy to see various open source teams publicly announce their team norms. Folks can then either select in or out depending on how those standards make them feel.

                                                                                        But trying to take interpersonal human communication, an emergent behavior involving perhaps millions of years of evolution, and digitizing it? That doesn’t sound workable to me.

                                                                                        As a personal example, I’ve been online since the net came up. I try as hard as I can to be a nice person online and understand other people’s viewpoints. But I don’t doubt for a moment that either through chance encounters or cherry-picking I could be made out to be a horrible monster. People change, and little slices here and there of printed text can tell us but very little.

                                                                                        This doesn’t work for me, even in an open source environment. Even with clear and written boundaries, too much here is random, subjective, and prone to personality conflicts. For some people, their personalities just don’t mesh with one another. I’m trying, but I just can’t see this as a useful thing for people who actually care about writing good code that helps others. I’m trying, and I’m open to being wrong, but so far I’m not getting anywhere near changing my mind on this. Apologies.

                                                                                        1. 14

                                                                                          But I don’t doubt for a moment that either through chance encounters or cherry-picking I could be made out to be a horrible monster.

                                                                                          Read thru this whole thread. Of the five people (so far) recounting first-hand experience with this person, 100% of them say that their experience is consistent with the story in the post. I have a hard time to believe that’s due to cherry-picking.

                                                                                          1. 3

                                                                                            Read thru this whole thread. Of the five people (so far) recounting first-hand experience with this person, 100% of them say that their experience is consistent with the story in the post.

                                                                                            Also read through the HN thread which contains first-hand reports (neilv, rebelshrug, …) saying otherwise.

                                                                                            1. 19

                                                                                              Toxic people aren’t toxic to everybody all the time.

                                                                                              1. 16

                                                                                                My childhood bully wasn’t a bully to everyone, either. He had great friends who supported him, and his behavior. There is literally an example of this, right now, in US Politics; but the example is as old as humanity.

                                                                                                This doesn’t make the bullying behavior right, and it doesn’t make the person speaking up about the bullying wrong. The bully, however, is almost always in the wrong.

                                                                                                1. 1

                                                                                                  With childhood bullies (which by the way no one in education cares to fully address), there is generally no ambiguity as to the harmfulness of the aggressor’s intent. Thus, that analogy breaks down here, where it is not clear as to where exactly lies this anecdotal accusation in the spectrum from it being a subjective taking-offense to being an intended harm (giving-offense). Some people, for instance, would interpret the below stern behavior (and it is possible to be stern without being offensive), as reviewed by someone from ratemyprofessors.com, to be “bullying”,

                                                                                                  I hated [Matthias’s] guts while in his class, but in retrospect he’s almost certainly the best teacher I’ve ever had. As somebody said above, this guy is absolutely brilliant. He will kick your butt, but it’s all for your own good in the end. He seems to really care about teaching, and it shows.

                                                                                                  (Have you ever seen a victim describe their childhood bully this way?)

                                                                                                  Besides, bullying behaviour is not uncommon among people who are not normally characterized as ‘bullies’ - inasmuch as they are covert. Example here. I used to work for a company (based on San Francisco, incidentally) where this sort of behaviour was not uncommon.

                                                                                                  The Racket core team, and people who closely work with Matthias, would be in a better position than us passerby’s (who know nothing but a few anecdotes) to fairly assess the facts of the matter.

                                                                                                  1. 8

                                                                                                    The Racket core team, and people who closely work with Matthias, would be in a better position than us passerby’s (who know nothing but a few anecdotes) to fairly assess the facts of the matter.

                                                                                                    What facts are you disputing, exactly? In nearly every case of human-to-human problem it boils down to a proverbial “he-said, she-said” type argument. The “facts” here are, for sure, a one sided account of how Matthias’ actions made people feel. I’m certainly not in a position to assess this. But, I can acknowledge that there are many people who feel this way after interactions with Matthias and decide for myself whether or not I want to risk seeing this behavior first hand, or avoid it. (FWIW, I stopped contributing to Racket. Not because of Matthias directly, but there is definitely something in the air in that community, that I’ve never been able to articulate)

                                                                                                    Butterick did not write a hit piece. People are, and will interpret it as that. His piece answered the question “Why did I leave the Racket Community?” and I think he fairly presented his side of things. I also trust him based on previous knowledge of him from years past. Matthias, if he feels so inclined, or other members of the Racket community should certainly present their side of the “argument” here, but that should never discount Butterick’s feelings, or reasoning for this. Butterick feels he was wronged, presented reasons for why he feels that way, and took actions he deemed necessary, resulting in him no longer contributing to the community (a great loss, honestly). Any interpretation beyond that, or other anecdotes are your responsibility to consider if you feel like it, or ignore if you don’t.

                                                                                                    As a community, I hope that the discussion being had here is a wake up call. People are actively being discouraged from collaborating on the Racket project as a result of behavior stemming from it (I don’t think it’s only Matthias’ fault, fwiw). My guess is that nothing will change, and Racket will never ever meet its full potential outside of academia. This has never seemed to be a goal anyway, though, there has been mention of it, and it is certainly the case that members of the community would like this to change.

                                                                                                    1. 0

                                                                                                      Matthias, if he feels so inclined, or other members of the Racket community should certainly present their side of the “argument” here, but that should never discount Butterick’s feelings, or reasoning for this. Butterick feels he was wronged, presented reasons for why he feels that way, and took actions he deemed necessary, resulting in him no longer contributing to the community (a great loss, honestly). Any interpretation beyond that, or other anecdotes are your responsibility to consider if you feel like it, or ignore if you don’t.

                                                                                                      Exactly my point. Butterick feels he was wronged; this much we know as facts of the matter (and there is no need to put the word in scare-quotes; I’m using it in its dictionary definition sense). What we don’t know, as facts, is whether Matthias is a ‘bully’ (your word) or, whether how Butterick feels is a result of “Matthias’ fault” (also, your words). The feelings of Butterick, you or me alone do not automatically establish Matthias to be ‘bully’ (as opposed to merely being stern, for instance). You are entitled to your opinion, of course … but whether that is in line with the facts of the matter or not (so as to use as a basis to make any genuinely positive changes in the Racket community) is a different thing entirely.

                                                                                                      1. 7

                                                                                                        Matthias is a ‘bully’ (your word) or, whether how Butterick feels is a result of “Matthias’ fault” (also, your words).

                                                                                                        The actions of Matthias, and the inactions of the Racket Core Team (“Everyone just shrugged and moved on. I was encour­aged to do the same.”) are literally the reasons cited for Butterick’s moving on.

                                                                                                        The feelings of Butterick, you or me alone do not automatically establish Matthias to be ‘bully’ (as opposed to merely being stern, for instance).

                                                                                                        Right. But, the collective feelings of others, can certainly establish a pattern that we can look at. An Elementary school administrator might look past one isolated incident, of kid A pushing around kid B as almost hearsay. But, if kid B, kid C, kid D, kid E, kid F, and then a number of anonymous comment cards talk about being pushed around by kid A, it’s a bit harder to ignore, don’t you think? Even if that kid is top in his class, and in retrospect, “great at helping their fellow students succeed” – is the behavior somehow more excusable?

                                                                                                        Anyway, as kid Z in this fictional Elementary school, if I hear of all of these accounts, I’m going to be cautious about interacting with kid A.

                                                                                                        Incidentally, this is why a prosecution in a court system attempts to establish “patterns” of abuse in crimes against other humans. It’s a lot easier for a jury to believe an accuser’s side of the events when there’s a pattern of the same / similar behavior.

                                                                                                        1. 6

                                                                                                          The feelings of Butterick, you or me alone do not automatically establish Matthias to be ‘bully’ (as opposed to merely being stern, for instance). You are entitled to your opinion, of course … but whether that is in line with the facts of the matter or not

                                                                                                          Felleisen has published an apology where he basically admitted to the bullying (as much as bullies ever do, anyway), so the facts aren’t in dispute.

                                                                                                      2. 2

                                                                                                        (Have you ever seen a victim describe their childhood bully this way?)

                                                                                                        I didn’t address this before, but have you heard of Stockholm Syndrome?

                                                                                                        1. 2

                                                                                                          I didn’t address this before, but have you heard of Stockholm Syndrome?

                                                                                                          At that link

                                                                                                          1. 2

                                                                                                            There’s no consensus on what “Stockholm Syndrome” is, but I bet you knew exactly what I was referring to when I wrote it…

                                                                                                          2. 2

                                                                                                            Your own link immediately notes that the research on Stockholm syndrome existing is severely lacking— and that the situation for which it is named does not match up with the purported effects.

                                                                                                            I know of several educators that made me react similarly to the reviewer: I honestly believe compassion is a better way to teach 100% of the time, but the ‘tough on students’ facade is effective for them too, so what do I know.

                                                                                                            1. 3

                                                                                                              No. Stockholm Syndrome does not directly apply to the situation, in so much as students are not being held captive by their teachers (under most circumstances!). The reason for bringing this up is that it is a related phenomenon (victim is apologetic / empathetic after trauma), however dubious it actually is.

                                                                                                              Relatedly: do you dismiss the cycle of domestic abuse, too?

                                                                                                              1. 3

                                                                                                                I don’t think it’s even a related phenomenon. I think the simplest solution is most likely. The student didn’t like his teaching style at the time, but when he looked back he saw that it was effective for him. There’s no trauma or brainwashing involved. This has happened to me many times before in many different contexts, some interpersonal, some personal.

                                                                                                                I’m not dismissing the existence of trauma bonding and PTSD, which I think is what you might have meant by Stockholm Syndrome. These are both serious, real things. I just thought that Stockholm Syndrome was a poor choice of armchair diagnosis, considering its dubious origins.

                                                                                                                1. 3

                                                                                                                  Keep in mind that the original discussion was about bullying, and that the answer to @srid’s direct question of “have you seen a victim describe their childhood bully this way?” Is what I was replying to, directly.

                                                                                                                  The answer, is yes. Yes I have. Childhood bullies are great examples of situations in which there is often an eventual “the bully toughened me up,” in retrospect, and “I respect them, have empathy, etc, etc, etc.”

                                                                                                                  This entire pattern of having empathy for abusers, and reminded me of “Stockholm Syndrome,” in which a similar pattern is purported.

                                                                                                                  1. 1

                                                                                                                    Oh I see, sorry. I thought you were saying the student was displaying signs of Stockholm syndrome. I haven’t really heard that line about bullies in real life ever, although I have seen it a lot in media (there was a whole anti-bullying craze, which might be where some of the ‘have empathy for bullies!’ rhetoric comes from). It’s a hazy line between ‘tough but wants the best out of you’ and ‘just an inconsiderate asshole’ that I think a lot of people cross without knowing. It’s probably better to not do the whole ‘tough but fair’ thing in the first place.

                                                                                                            2. 1

                                                                                                              This was exactly what leapt into my head when I read that paragraph.

                                                                                                2. 7

                                                                                                  This is a very prominent figure in a public community. I just don’t want when people meet one of the authors of the Little Schemer to find a gigantic asshole. It makes the community look bad, and Matthias is more than capable of acting better. The other author, Dan Friedman, I should stress is one of the kindest, sweetest, thoughtful researchers I have ever met.

                                                                                                  1. 7

                                                                                                    This is a very prominent figure in a public community. I just don’t want when people meet one of the authors of the Little Schemer to find a gigantic asshole.

                                                                                                    I’m not really a Scheme person; I played around with it for a bit several years ago and found it fun in insightful, but ultimate also found it hard to build actual actual programs in, so not really practical for me.

                                                                                                    The Little Schemer, however, is easily my favourite programming book. It’s just fun, almost cheerful, and also quite good at actually teaching Scheme. A lot of books that try to be “fun” usually aren’t very good at actually teaching stuff, and books that are good at teaching stuff are usually a bit of a dry affair. Combing both effectively (and in such an unique way) is rare.

                                                                                                    Programming books are not the best way to gauge the author’s personality, but it’s just so contrary to the impression I got from the book that I had to triple-check that this was really the same Matthias Felleisen and wasn’t somehow a confusing two people with similar names.

                                                                                                    People are complex I guess 🤷

                                                                                                    1. 5

                                                                                                      I think the style of presentation of the Little books is Friedman’s, as he’s written several other books in the series with other people like The Little Prover, The Reasoned Schemer and The Little Typer.

                                                                                                    2. 4

                                                                                                      The other author, Dan Friedman, I should stress is one of the kindest, sweetest, thoughtful researchers I have ever met.

                                                                                                      I never met him personally, but he must be quite the guy. They held a conference in honor of him on his sixtieth birthday. Fun fact: the conference was colloquially known as DanFest.

                                                                                              1. 17

                                                                                                Over the years, I’ve been nothing but impressed with Butterick’s community support, advocacy, contributions, and all out integrity. The Racket community will be worse off without him. There’s an interesting irony in that such a vocal advocate of Racket is likely to bring it down. But, this is exactly what needs to happen; not speaking out about it helps no one.

                                                                                                Thanks, Butterick, for all of your contributions to the community, including your most important—this last one! I don’t wish to see this community brought down for good; I hope it will rebuild better. (note: I consider myself a former racket community member, though for other reasons)

                                                                                                1. 4

                                                                                                  I do not understand linkers, but the post reminded me of this book Linkers and Loaders

                                                                                                  1. 3

                                                                                                    And it reminds me of John Levine mentioning in this book that the number of linker authors on this planet are just a handful (or something similar to that). No wonder, we just have this one book on the guts of linkers and loaders!

                                                                                                    1. 3

                                                                                                      I treat them as a black box and don’t understand them either, but this comment on the same article gave me a bunch of insight into it:

                                                                                                      https://news.ycombinator.com/item?id=27446341

                                                                                                      The analogy is that a linker (and an OS loader of shared libraries!) is like a compacting garbage collector – which I just wrote and spent awhile debugging, so it’s burned into my brain. My way of digesting this:

                                                                                                      • A garbage collector walks a graph of objects in memory starting from a live set / stack roots; a linker walks a function call graph, starting from main()
                                                                                                      • A compacting garbage collector produces a contiguous block of objects; A linker produces the contiguous executable (well at least the “text” portion of it).
                                                                                                      • GCs are conerned with data pages; linkers are concerned with code pages.
                                                                                                      • A garbage collector has to find edges within objects (there are several ways to do this); a linker has to find calls within functions
                                                                                                      • A leaf object has no pointers (e.g. Point {int x, int y}); a leaf function calls no others (abs() or something)
                                                                                                      • The Cheney GC algorithm is clever about the order in which objects are moved, so it can modify pointers correctly. The linker has the same issue with regard to adjusting code offsets
                                                                                                      1. 3

                                                                                                        I don’t think it’s fair to say a linker is like a garbage collector. A linker may have a garbage collector (and that is probably a good thing for linker to have), but its purpose is to resolve symbol references.

                                                                                                        1. 2

                                                                                                          It’s not about the linker having a garbage collector, but about the similarities in what a compacting gc and linker do. They both walk from a set of roots, trace, fix up, and move things around. The linker could also yeet dead code, but doesn’t have to. The isomorphism is the traversal.

                                                                                                    1. 4

                                                                                                      I became obsessed, last week, with the idea that PreScheme is the language I want all the time. So, I’ll spend sometime this week trying to work through that. I’ve already recognized a few downfalls, and have ideas for how to fix… but I am not entirely sure PreScheme is necessary for what I really want. Also, a random observation, I saw terra come up again, and was really surprised that the PreScheme paper was not cited by them.

                                                                                                      1. 2

                                                                                                        I’d be interested in learning how the compiler is bootstrapped. This says it is self-hosted, and so I’m curious to see how it is accomplished. I see there is a bootstrap directory with some C files with content that appears machine generated.

                                                                                                        1. 2

                                                                                                          The compiler has a C backend. Those C files are most likely output from the compiler compiling itself to the C backend to bootstrap on machines without a cowgol compiler.

                                                                                                          1. 1

                                                                                                            Ah, that makes sense! I missed the C backend part when I was skimming the docs. Very cool.

                                                                                                        1. 4

                                                                                                          I think litestream is extremely interesting tech, but I’ve been bothered (and admittedly too lazy to test or read more) by this possibility:

                                                                                                          1. Users PUTs logs.
                                                                                                          2. App generates id, writes to SQLite, commits
                                                                                                          3. Plug gets pulled (or, in cloud terms, indtanace/dyno/container) and machine goes away.
                                                                                                          4. Litestream doesn’t stream the WAL segment to s3.

                                                                                                          On Heroku this would be bad, and the write completely gone when the app comes up again. So, I guess the assumption that needs to be made is that the disk is persisted across container runs?

                                                                                                          1. 3

                                                                                                            Yes, you need persistent volumes to ensure the last few seconds of committed data are fsynced to disk, which is the case on Fly, but not on Heroku.

                                                                                                            1. 4

                                                                                                              I agree with everything ngrilly said but I’ll also add that you can use Litestream as a library in a Go app if you want to selectively confirm that certain writes are sync’d to a replica before returning to the client. The API needs to be cleaned up some but there’s an example in this repo: https://github.com/benbjohnson/litestream-library-example