Threads for zxtx

  1. 2

    I’m curious, do people have a workflow they like for nested tmux? I like to use it locally and remotely over ssh, but haven’t found a nice config that let’s me fluidly move between tabs on both the local and remote side.

    1. 2

      I’ve been wondering what to do about this as well. I’ve read that some terminals (e.g., WezTerm and Kitty) have built-in support for remote multiplexing without the use of a multiplexer, but I haven’t gotten around to trying any myself.

      Can anybody in this thread speak to whether it’s worth reimplementing my tmux config to migrate to such an alternative?

    1. 7

      Lots of infosec people recently came to https://infosec.exchange and https://defcon.social

      I’ve heard good things about https://hackers.town

      1. 2

        I quite like It, including the extra features of the glitch-soc friendly fork of mastodon.

        I’m eyeing that stack (and features) as the basis for a local community – the idea of longer messages and better image support hidden behind a CW may convince some folks that were previously averse to the small character limit, bad threading model for longer posts on Twitter.

        Does anyone have opinions on other fediverse software stacks? I like the architecture and resource footprint of plemora, but have been turned off by some of the political baggage with it and its forks. :(

        1. 2

          I really like glitch-soc. If you self-host, you should definitely fork whichever server implementation you use. Even basic stuff like changing character limits and re-theming is hard to really do without forking the code. I also think more people should know about Misskey. It introduces lots of the features you didn’t know you wanted and many you probably still don’t.

          I share your thoughts about pleroma.

        2. 2

          I’m on https://infosec.exchange and it’s been an enjoyable experience. I mostly chose it because a lot of the people I actually bother paying attention to on Twitter moved there and I have to say the admin is awesome. I’ve seen some good discussions bleeding over from ruby.social but haven’t had time to check it out yet.

        1. 6

          I’ve been searching for a mastadon alternative written in Go, so that I can contribute if need be. I’m total n00b to fediverse and activitypub and so all of my searches never found this. Thank you greatly for posting.

          1. 6

            Another option that fits the small and hackable criteria is honk. There are a handful of people that run their own forks I’ve discovered since running my own instance.

            1. 3

              I’d say that if you’re wanting high compatibility with the fediverse, honk is probably further away than gotosocial and with less inclination to fix the issues.

              1. 8

                High compatibility with Mastodon, you mean. honk is perfectly ActivityPub compliant. Can’t blame honk if Mastodon does things in a non-standard way.

              2. 1

                I have been considering honk for a while but haven’t made the switch yet. Do you have experience with moving an account using the account migration feature from Mastodon? (https://docs.joinmastodon.org/user/moving/#move)

                1. 3

                  Not sure about honk, but gotosocial doesn’t support the move activity yet, there’s an issue and the thing is on the roadmap for next year.

                  1. 2

                    Honk does have an import command for pulling in content from Mastodon and Twitter backups. I’ve never tried it before; I started with Honk and left my Twitter behind.

                  2. 1

                    One more question, do you maybe have some pointers to forks? I couldn’t find any and I’d like to remove the sqlite dependency and let honk serve tls itself instead of requiring relayd or a webserver in front of it.

                      1. 2

                        Thanks! Just added some patches myself: https://github.com/timkuijsten/honk

                  3. 4

                    GtS is still a young project, but definitely one that would benefit from those eager to help!

                    1. 3

                      There is also akkoma, which I’ve yet to have a good look at. Written in elexir i believe

                    1. 6

                      I saw a post on HN about an instance (Oulipo.social) that disallows the use of “e” in posts. Its a schtick, but an interesting way to force people to think about what they are trying to say, and it probably helps limit hateful interactions.

                      1. 10

                        And don’t forget dolphin.town where you can only use the letter “e”.

                        1. 2

                          Get one account on each for the full alphabet experience

                          1. 1

                            That’s incredibly funny. Oulipo and it’s legacy are well-represented by tech nerds. I wouldn’t join that instance though, lest it ends with me joining instances in order to find the instance I meant to join initially.

                          1. 4

                            This seems like a great idea at first, but for anything in production it’s much better to build a library of primitives and write scripts in something with better error checking than bash.

                            What ends up happening is you end up with hundreds of these tiny scripts like in Moses and it quickly becomes very cumbersome to refactor and debug.

                            1. 1

                              It’s a good point that command-line pipes won’t scale with training complexity. An escape hatch here is the fact that learn.ts is just a regular TypeScript file that can be used for more advanced logic (import model from './learn' will work with everything shown in the post).

                              The target use cases (for my work at least) are very much akin to the second example presented. Lots of simple data + small models that can be used for embedded heuristics. These certainly have their place in production!

                              1. 1

                                I think for prototyping it’s great, and definitely a slick alternative to using a notebook. Maybe the best of both worlds is writing libraries but if you must have commands make them amendable to piping like in your post.

                            1. 1

                              Why no underscore with “unreal engine” but underscore with other spaced terms?

                              1. 2

                                unreal engine giving better lighting is a property of the normal stable diffusion model underneath waifu diffusion. It’s complicated, but unreal_engine isn’t a tag that existed in the original stable diffusion dataset.

                                1. 1

                                  Is there a way to determine what tags are available in your model file or can you point to where the initial tag set might be found online? That would probably be helpful in my experimentation…

                                  1. 2

                                    This is something you just have to learn the hard way by messing with values. There’s prompt engineering guides out there for Stable Diffusion, but in general this is stuff you just learn by typing in random words and seeing what happens. You can type in excessively stupid things and get a decent result.

                                    1. 1

                                      You can actually browse a version of the dataset used for training at https://rom1504.github.io/clip-retrieval/?back=https%3A%2F%2Fknn5.laion.ai&index=laion5B&useMclip=false

                                      What I recommend is searching around there and seeing what some of the captions look like.

                                      1. 1

                                        I believe this doc has links to an index of images-text-pairs in the training set: https://github.com/LAION-AI/laion-datasets/blob/main/laion-aesthetic.md

                                    2. 1

                                      1 token vs 2 tokens?

                                    1. 2

                                      One other trick that can help reduce artefacts is try to generate a lower resolution image (256x256) and then run it through an upscaler several times.

                                      1. 2

                                        AUTOMATIC1111’s UI has a feature for this, bust still just using SD. Hi-res fix first generates at native resolution, then upscales (optionally even in latent space) and continues to add details with the prompt in mind.

                                      1. 8

                                        So what happened next?

                                        1. 15

                                          Next GHC2021 happened. https://downloads.haskell.org/~ghc/latest/docs/html/users_guide/exts/control.html#extension-GHC2021

                                          GHC2021 is a basket of language extensions which are useful and less controversial. New compilers could possibly target GHC2021 instead of falling prey to the author’s concern:

                                          As long as Haskell is defined implicitly by its implementation in GHC, no other implementation has a chance — they will always be forever playing catch-up.

                                          Again, whether it be Haskell98 or Haskell2010 or GHC2021, new compilers don’t have to implement every research extension explored by the GHC folks. I think the concern is overplayed.

                                          1. 10

                                            Lacking a written standard, whatever GHC does has become the de facto definition of Haskell.

                                            What that means depends on who you ask. Some people are happy with this situation. It allows them to make changes to the language that move it forward without a standard to get in the way.

                                            Others are very unhappy. Haskell has been making constant breaking changes lately.

                                            In my opinion the situation is disastrous and after using Haskell for over a decade, as of last year I no longer build any production system in Haskell. Keeping a system going is just a constant war against churn that wastes an incredible amount of time. Any time you might have saved by running Haskell, you will return because of the constant wastage.

                                            What’s worse is that the changes being made are minor improvements whose fix don’t address any of the issues people have with the language.

                                            It’s not just the core libraries that have this total disregard for the pain they inflict on users with large code bases. This message that breaking everything is a good idea has proliferated throughout the community. Libraries break APIs with a kind of wild abandon that I don’t see in any other language. The API of the compiler changes constantly to the point where tooling is 2+ years out of date. The Haskell Language Server still doesn’t have full 9.0 support 2 years later!

                                            Haskell is a great language, but it’s being driven into the ground by a core of contributors who just don’t care about the experience of a lot of users.

                                            1. 11

                                              HLS has supported 9.0 since July 2021, it recently gained support for 9.2.1 as well.

                                              Keeping a system going is just a constant war against churn that wastes an incredible amount of time.

                                              Are we really talking about the same language? I’m working full time on a >60k line Haskell codebase with dependencies on countless packages from Hackage, and none of the compiler version upgrades took me longer than half a day so far.

                                              Now, don’t get me wrong, the churn is real. Library authors particularly get hit the worst and I hope the situation gets better for them ASAP, but I really think the impression you’re giving is exaggerated for an application developer hopping from stackage lts to stackage lts.

                                              1. 9

                                                HLS has supported 9.0 since July 2021, it recently gained support for 9.2.1 as well.

                                                HLS had partial support for 9.0. And even that took more than half a year. The tactics plugin wasn’t supported until a few months ago. And stylish-haskell support still doesn’t exist for 9.0

                                                Support for 9.2 is flaky at best. https://github.com/haskell/haskell-language-server/issues/2179 Even the eval plugin didn’t work until 2 weeks ago!

                                                I’m working full time on a >60k line Haskell codebase with dependencies on countless packages from Hackage, and none of the compiler version upgrades took me longer than half a day so far.

                                                60k is small. That’s one package. I have an entire ecosystem for ML/AI/robotics/neuroscience that’s 10x bigger. Upgrades and breakage are extremely expensive, they take days to resolve.

                                                In Python, JS, or C++ I have no trouble maintaining large code bases. In Haskell, it’s an unmitigated disaster.

                                                1. 7

                                                  Saying you have “no trouble maintaining larger codebases” with Python or JS seems a bit suspicious to me….

                                                  I am personally also a bit in the “things shouldn’t break every time” (like half a day’s work for every compiler release seems like a lot!) but There are a lot of difficulties with Python and JS in particular because API changes can go completely unnoticed without proper testing. Though this is perhaps way less of an issue if you aren’t heavy dep users.

                                                  1. 3

                                                    py-redis released 2.0, Pipfile had “*” version, pipenv install auto-upgraded py-redis and bam, incompatible API. Larger the codebase, more frequently it happens.

                                                    Meanwhile, some C++/SDL code I committed to sf 20 years ago still compiles and runs fine.

                                                  2. 4

                                                    I’ve worked on quite large Haskell codebases too, and cannot say that I’ve had any of the experiences you have - I’m sure you have but it’s not something that the community is shouting from the rooftops as being a massive issue like you’re claiming, and it might have much more to do with the libraries you rely on than GHC itself. This just comes across as FUD to me, and if someone told me Join Harrop wrote it, I would believe it.

                                                    1. 7

                                                      it’s not something that the community is shouting from the rooftops as being a massive issue like you’re claiming …. This just comes across as FUD to me, and if someone told me Join Harrop wrote it, I would believe it.

                                                      Well, any amount of googling will show you many complaints about this. But I’ll pick the most extreme example. The person who runs stack (one of the two package managers) put his Haskell work on maintenance mode and is moving on to Rust because of the constant churn. https://twitter.com/snoyberg/status/1459118086909476879

                                                      “I’ve essentially switched my Haskell work into maintenance mode, since that’s all I can be bothered with now. Each new thing I develop has an immeasurable future cost of maintaining compatibility with the arbitrary changes coming down the pipeline from upstream.”

                                                      “Today, working on Haskell is like running on a treadmill. You can run as fast as you’d like, but the ground is always moving out from under you. Haskell’s an amazing language that could be doing greater things, and is being held back by this.”

                                                      I can’t imagine a worse sign for the language when these changes drive away the person who has likely done more than anyone to promote Haskell adoption in industry.

                                                      1. 3

                                                        Don’t forget the creation of a working group specifically on this topic. It still remains to be seen if they have the right temperament to make the necessary changes.

                                                        1. 3

                                                          The person who runs stack (one of the two package managers) put his Haskell work on maintenance mode and is moving on to Rust because of the constant churn. https://twitter.com/snoyberg/status/1459118086909476879

                                                          The person who runs stack has been a constant source of really great libraries but also really painful conflict in the Haskell community. His choice to vocally leave the community (or something) is another example of his habit of creating derision. Whether it’s reflective of anything in the community or not is kind of pointless to ask: It feels like running a treadmill to him because he maintains way too many libraries. That load would burn out any maintainer, regardless of the tools. I feel for him, and I’m grateful to him, but I’m also really tired of hearing him blame people in the Haskell community for not doing everything he says.

                                                          1. 1

                                                            Snoyman somewhat intentionally made a lot of people angry over many things, and chose not to work with the rest of the ecosystem. Stack had its place but cabal has reached a state where it’s as useful, baring the addition of LTS’, which have limited value if you are able to lock library versions in a project. While He may have done a lot to promote Haskell in industry, I know a lot of people using Haskell in industry, and very few of them actually use much of the Snoymanverse in production environments (conduit is probably the main exception, because http-conduit is the best package for working with streaming http data, and as such many other packages like Amazonka rely on it). I don’t know any people using Yesod, and many people have been burned by persistent’s magic leading to difficulties in maintenance down the road. I say all this as someone who recommended stack over cabal quite strongly because the workflow of developing apps (and not libraries) was much more pleasant with stack; but this is no longer true.

                                                            As someone who’s been using Haskell for well over a decade, the last few years have been fantastic in the pace of improvements in GHC. Yes some things are breaking, but this is the cost of paying off long held technical debt in the compiler. When GHC was stagnating, things were also not good, and I would prefer to see people attempting to fix important things while breaking some others than seeing no progress at all. The Haskell community is small, we don’t have large organisations providing financial backing to work on things like strong backwards compatibility, and this is the cost we have to pay because of that. It’s not ideal, but without others contributing resources, I’ll take positive progress in GHC over backwards compatibility any day (and even on that front, things have improved a lot, we used to never get point releases of previous compilers when a new major version had been released).

                                                    2. 6

                                                      I think the breaking changes in haskell aren’t significant. Usually they don’t actually break anything unless you’re using some deep hacks.

                                                      1. 9

                                                        Maybe for you. For me, and many other people who are trying to raise the alarm about this, changes like this cause an endless list of problems that are simply crushing.

                                                        It’s easy to say “Oh, removing this method from Eq doesn’t matter”. Well, when you depend on a huge number of libraries, it matters. Even fixing small things like this across a large code base takes time. But now I can’t downgrade compilers anymore unless I sprinkle ifdefs everywhere, so I need to CI against multiple compilers which makes everything far slower (it’s not unusual for large Haskell projects to have to CI against 4+ versions of GHC, that’s absurd). And do you know how annoying it is to have a commit and go through 3 different versions before you finally have the ifdefs right for all of the GHC variants you CI against?

                                                        Even basic things like git bisect are broken by these changes. I can’t easily look in the history of my project to figure out what’s going wrong. To top it all off I now need my own branches of other libraries I depend on who haven’t upgraded yet. This amounts to dozens of libraries. It also means that I need to upgrade in lockstep, because I can’t mix GHC versions. That makes deployments far harder. It’s also unpleasant to spend 10 hours upgrading, just to discover that somethings fundamental prevents you from switching, like a bug in GHC (I have never seen a buggier compiler of a mainstream language) or say, a tool like IHaskell not being updated or suffering from bugs on the latest GHC. I could go on.

                                                        Oh, and don’t forget how because of this disaster you need to perfectly match the version of your tools to your compiler. Have an HLS binary or IHaskell binary that wasn’t compiled with your particular compile version, you get an error. That’s an incredibly unfriendly UX.

                                                        Simply put, these breaking changes have ramifications well beyond just getting your code to compile each time.

                                                        Let’s be real though, that’s not the list of changes at all. The Haskell community decided to very narrowly define what a breaking change to the point of absurdity. Breaking changes to cabal? Don’t count. Breaking changes to the GHC API? Don’t count, even though they break a lot of tooling. Even changes to parts of the GHC API that you are supposed to use as a non-developer of the compiler, like the plugin API don’t count. Breaking changes to TH? Don’t count. etc.

                                                        Usually they don’t actually break anything unless you’re using some deep hacks.

                                                        Is having notebook support for Haskell a deep back? Because GHC has broken IHaskell and caused bugs in it countless times. Notebook support is like table stakes for any non-toy language.

                                                        If even the most basic tools you need to be a programming language mean you rely on “deep hacks” so apparently you deserve to be broken, well that’s a perfect reflection of how incredibly dysfunctional Haskell has become.

                                                        1. 10

                                                          Notebook support is like table stakes for any non-toy language

                                                          In a sciencey kind of context only. Systems, embedded, backend, GUI, game, etc. worlds generally do not care about notebooks.

                                                          I have never, not even once, thought about installing Jupyter again after finishing a statistics class.

                                                          1. 1

                                                            I have never, not even once, thought about installing Jupyter again after finishing a statistics class.

                                                            Interesting. May I ask why?

                                                            1. 3

                                                              Because I have no need for it. That concept doesn’t fit into any of my workflows. I generally just don’t do exploratory stuff that requires rerunning pieces of code in arbitrary order and seeing the results inline. Pretty much all the things I do require running some kind of “system” or “server” as a whole.

                                                              1. 1

                                                                Thank you for you answer. I always thought that work in a statistical setting (say, pharma, or epidemics), requires a bit of explorative process in order to understand the underlying case better. Tools like SAS kind of mirror the workflow in Jupyter.

                                                                What kind of statistical processes do you work with, and what tools do you use?

                                                                1. 2

                                                                  I don’t! I don’t do statistics! I hate numbers! :D

                                                                  I’m sorry if this wasn’t clear, but “finishing a statistics class” wasn’t meant to imply “going on to work with statistics”. It just was a mandatory class in university.

                                                                  The first thing I said,

                                                                  In a sciencey kind of context only. Systems, embedded, backend, GUI, game, etc. worlds generally do not care about notebooks.

                                                                  was very much a “not everybody does statistics and there’s much more of the other kinds of development” thing.

                                                                  1. 1

                                                                    Thanks!

                                                          2. 5

                                                            Is having notebook support for Haskell a deep back? Because GHC has broken IHaskell and caused bugs in it countless times. Notebook support is like table stakes for any non-toy language.

                                                            I’ve never used a notebook in my career, so…

                                                            In any case, I think you’ve got a set of expectations for what haskell is, and that set of expectations may or may not match what the community at large needs, and you’re getting frustrated that haskell isn’t meeting your expectations. I think the best place to work that out is in the mailing lists.

                                                            1. 1

                                                              I’ve never used a notebook in my career, so…

                                                              They are pretty nice. Kind of like a non-linear repl with great multi line input support. It can get messy (see also non-linear), but great for hacking all kinds of stuff together quickly.

                                                            2. 5

                                                              Is having notebook support for Haskell a deep back? Because GHC has broken IHaskell and caused bugs in it countless times.

                                                              The way that IHaskell is implemented, I would actually consider it a deep hack, since we poke at the internals of the GHC API in a way that amounts to a poor rewrite of ghci (source: am the current maintainer). I don’t know that it’s fair to point to this as some flaw in GHC. If we didn’t actually have to execute the code we might be able to get away with using ghc-lib or ghc-lib-parser which offers a smoother upgrade path with less C pre-processor travesties on our end.

                                                              1. 4

                                                                Sure! I’m very familiar as I’ve contributed to IHaskell, we’ve spoken through github issues.

                                                                I wasn’t making a technical point about IHaskell. That was a response to the idea that some projects need to suffer because they’re considered “deep hacks”. Whatever that is. As if those projects aren’t worthy in some way.

                                                                I really appreciate the maintenance of IHaskell. But if you take a step back and look at the logs, it’s shocking how much time is spent on churn. The vast majority of commits aren’t about adding features, more stability, etc. Making IHaskell as awesome as it can be. They’re about keeping up with arbitrary changes in GHC and the ecosystem. Frankly, upstream Haskell folks are just wasting the majority of the time of everyone below them.

                                                                1. 3

                                                                  I can definitely relate to the exhaustion brought on by the upgrade treadmill, but nobody is forcing folks to use the latest and greatest versions of packages in the Haskell ecosystem and I also don’t think the GHC developers owe it to me to maintain backwards compatibility in the GHC API (although that would certainly make my life a little easier). A lot of the API changes are related to improvements in the codebase and new features, and I personally think the project is moving in a positive direction so I don’t agree that the Haskell folks are wasting my time.

                                                                  At my current job we were quite happily using GHC 8.4 for several years until last month, when I finally merged my PR switching us over to GHC 8.10. If I hadn’t decided this was something I wanted to do we probably would have continued on 8.4 for quite a while longer. I barely had any issues with the upgrade, and most of my time was spent figuring out the correct version bounds and wrestling with cabal.

                                                                2. 2

                                                                  Could you not use something like the hint library which appears to abstract some of that GHC API into something a little more stable and less hacky?

                                                                  1. 3

                                                                    Great question! We wouldn’t be able to provide all the functionality that IHaskell does if we stuck to the hint API. To answer your question with another question: why doesn’t ghci use hint? As far as I can tell, it is because hint only provides minimal functionality around loading and executing code, whereas we want the ability to do things such as:

                                                                    • have common GHCi functionality like :type, :kind, :sprint, :load, etc., which are implemented in ghci but not exposed through the GHC API
                                                                    • transparently put code into a module, compile it, and load the compiled module for performance improvements
                                                                    • query Hoogle within a cell
                                                                    • lint the code using HLint
                                                                    • provide tab-completion

                                                                    Arguably there is room for another Haskell kernel that does use hint and omits these features (or implements them more simply), but that would be a different point on the design space.

                                                                    So far in practice updating IHaskell to support a newer version of GHC takes me about a weekend each time, which is fine by me. I even wrote a blog post about the process.

                                                                    1. 2

                                                                      Thanks for the thoughtful and detailed response! As someone who has used IHaskell in the past, I really want it to be as stable and easy to use as any other kernel is with Jupyter.

                                                                      1. 1

                                                                        Me too! From my perspective most of the issues I see are around installing IHaskell (since Python packaging can be challenging to navigate, and Haskell packaging can also be challenging to navigate, so doing together is especially frustrating) and after that is successfully accomplished not that many people have had problems with stability (that I am aware of from keeping an eye on the issue tracker).

                                                                        1. 3

                                                                          Python packaging is it’s own mess so no matter what happens on the Haskell side there is likely always going to be a little pain and frustration. I was struck by your blogpost how many of the changes you made that were due to churn. Things like functions being renamed. Why couldn’t GHC people put a deprecation pragma on the old name, change its definition to be equal to the new name and go from there? It would be nice if all you needed to get 9.0 support was update the cabal file.

                                                                          With the way churn happens now I wouldn’t be surprised if in a few months there is a proposal to just rename fmap to map. After all this change should save many of us a character and be simple for all maintainers to make.

                                                                          1. 1

                                                                            You’re right that it would be nice to just update the .cabal file, but when I think about the costs and benefits of having a bunch of compatibility shims (that probably aren’t tested and add bulk to the codebase without providing additional functionality) to save me a couple of hours of work every six months I don’t really think it makes sense. It’s rare that only the names change without any other functionality changing (and in that case it’s trivial for me to write the shims myself), so deprecating things really only has the effect of kicking the can down the road, since at some point the code will probably have to be deleted anyway.

                                                                            I think the larger issue here is that it’s not clear who the consumers of the GHC API are, and what their desires and requirements are as GHC continues to evolve. The GHC developers implicitly assume that only GHC consumes the API, and although that’s not true it’s close enough for me. I harbour no illusions that IHaskell is a particularly important project, and if it disappeared tomorrow I doubt it would have much impact on the vast majority of Haskell users. As someone who has made minor contributions to GHC, I’m impatient enough with the current pace of development that I would rather see even greater churn if it meant a more robust and powerful compiler with a cleaner codebase than for them to slow down to accommodate my needs as an IHaskell maintainer. It seems like they’re slowly beginning to have that conversation anyway as more valuable projects (e.g. haskell-language-server) begin to run up against the limitations of the current system.

                                                                            1. 2

                                                                              I agree that the GHC API is generally treated as an internal argument. I also think between template-haskell, IHaskell, and the inadequacies of hint that there is a need for a more stable public API. And I think having one is a great idea. Libraries to let you more easily manipulate the language, the compiler, and the runtime are things likely to be highly valued for programming language enthusiasts. Maybe more so than the average programmer.

                                                                3. 1

                                                                  I don’t really want to engage with your rant here. I’m sorry you’re having so many issues with haskell, but it doesn’t reflect my experience of the ecosystem and tooling.

                                                                  [Edit: Corrected a word which folks objected to.]

                                                                  1. 9

                                                                    I don’t know what to tell you. A person took the time to explain how the tooling and ecosystem make it very hard to keep packages functioning from version to version of the main compiler. And you just offer a curt dismissal. It’s an almost herculean effort to write libraries for Haskell that work for all 8.x/9.x releases. This combined with a culture of aggressive upper-bounds on package dependencies makes it very challenging to use any libraries that are not actively maintained.

                                                                    And this churn does lead to not just burnout of people in the ecosystem, but the sense that less Haskell code works every day that passes. Hell, you can’t even reliably get a binary install of the latest version of GHC which has been out for several months. The Ubuntu PPA page hasn’t been updated in a year.

                                                                    Many essential projects in the Haskell ecosystem have a bus-factor of one, and it’s hard to find people to maintain these projects. The churn is rough.

                                                                    1. 2

                                                                      I’m sorry for being dismissive. Abarbu’s response to my very short comment was overwhelming, and so I didn’t want to engage.

                                                                      For upper bounds on packages I typically use nix flakes to pin the world and doJailbreak to ignore version bounds. I believe you can do the same in stack.yaml with allow-newer:true. The ecosystem tools make dealing with many issues relatively painless.

                                                                      Getting a binary install of the latest version of GHC requires maintainers and people that care. But, if as abarbu says “I have never seen a buggier compiler of a mainstream language,” then I would recommend not upgrading to the latest GHC until your testing it shows that it works. If there aren’t packages released or the new version causes bugs, then why not stay on the current version?

                                                                      Breaking changes in the language haven’t ever burned me. If it’s causing people problems, writing about specific issues in the Haskell mailing lists is probably the best way to get help. It has the nice side effect of teaching the GHC developers how their practices might cause problems for the community.

                                                                      1. 3

                                                                        A lot of us are saying this stuff as people who have used the language for many years. That you need to use nix + assorted hacks for it to be usable reflects the sad state of the ecosystem. I’d go as far to say it’s inadvisable to compile any non-trivial Haskell program outside it’s own dedicated nix environment. This further complicates using programs written in Haskell, nevermind packaging them for external users. I have had ghci refuse to run because somehow I ended with a piece of code that depended on multiple versions of some core library.

                                                                        It’s a great language, but the culture has lead to an ecosystem that is rough to work with. An ecosystem that requires lots of external tooling to use productively. I could complain about the bugginess of GHC and how the compiler has been slower every release for as long as I can remember, but that misses the real pain point. The major pain point is that GHC team doesn’t value backwards compatibility, proper deprecation capabilities, or even tooling to make upgrading less painful. Their indifference negatively affects everyone downstream that has to waste time on pointless maintenance tasks instead of making new features.

                                                                        1. 1

                                                                          For context, I started learning haskell about 11 years ago and have been using it extensively for about 7 years. I started when cabal hell was a constant threat, and if you lost your development environment you’d never compile that code again.

                                                                          From my perspective, everything is much better now. Nix pinning + overrides and Stack resolvers + extra-deps are great tools to construct and remember build plans, and I’m sure Cabal has grown some feature along with “new-build” commands to save build plans.

                                                                          That you need to use nix + assorted hacks for it to be usable reflects the sad state of the ecosystem.

                                                                          I think having three great tools to choose from is pretty great. The underlying problem is allowing version upper-bounds in the cabal-project file-format.

                                                                          This further complicates using programs written in Haskell, nevermind packaging them for external users.

                                                                          After the binary is compiled none of compilation and dependency searching problems exist. Package the binary with its dynamic libs, or produce a statically linked binary.

                                                                          It’s a great language, but the culture has lead to an ecosystem that is rough to work with. An ecosystem that requires lots of external tooling to use productively.

                                                                          I worked with Go for four years. When you work with go you have go-tool, go-vet, counterfeiter, go-gen, go-mod, and at least two other dependency management tools (glide? glade? I can’t remember). Nobody is complaining about there being “too many external tools” in the go ecosystem. Don’t get me started on java tooling. Since when has the existence of multiple tools to deal with dependencies and compilation been a bad signal.

                                                                          The major pain point is that GHC team doesn’t value backwards compatibility, proper deprecation capabilities, or even tooling to make upgrading less painful. Their indifference negatively affects everyone downstream that has to waste time on pointless maintenance tasks instead of making new features.

                                                                          This is biting the hand that feeds, or looking the gift horse in the mouth or something. The voices in the community blaming their problems on the GHC team are not helping things, imo. Sorry. There’s a lot of work to be done, and the GHC team are doing a good job. That there also exists active research going on in the compiler is unusual, but that’s not the “GHC team doesn’t value backwards compatibility” or “their indifference”, that’s them being overloaded and saying “sure, you can add that feature, just put it behind an extension because it’s not standard” and going back to fixing bugs or optimizing things.

                                                                          1. 4

                                                                            This is an issue that has provoked the creation of a working group by the Haskell Foundation as well as this issue thread

                                                                            https://github.com/haskell/core-libraries-committee/issues/12

                                                                            Many of the people weighing in are not what I would call outsiders. I’ve contributed plenty to Haskell, and I complain out of a desire to see the language fix what is in my opinion one of it’s most glaring deficiencies. If I didn’t care, I’d just quietly leave the community like many already have. The thread linked above even offers some constructive solutions to the problem. Solutions like migration tools so packages can be upgraded more seamlessly. Perhaps some shim libraries full of CPP macros that lets old code keep working for more than two releases. Maybe a deprecation window for things like base that’s close to 2 years instead of one.

                                                                            Like how wonderful would it be if there was a language extension like GHC2015 or GHC2020 and I could rest assured the same code would still work in 10 years.

                                                                    2. 5

                                                                      Calling that Gish-gallop is pretty dismissive. It’s not like abarbu went off on random stuff. It’s all just about how breaking changes (or worse non breaking semantic changes) make for unpleasant churn that damages a language.

                                                                      1. 3

                                                                        I understand the churn can be unpleasant. Abarbu’s response to me was overwhelming and I didn’t want to engage. I am sorry for being dismissive.

                                                                      2. 3

                                                                        …do you know what a gish gallop is?

                                                                        1. 1

                                                                          No, guess I do not, and I need to be corrected by lots of people on the internet. Thanks.

                                                                          1. 1

                                                                            Ha, I didn’t know either, so I googled it, and it maybe sounded harsher than you meant. It was a gallop, for sure, if not a gish gallop.

                                                                  2. 2

                                                                    Ngl, that kind of sounds like Rust

                                                                    1. 7

                                                                      why exactly ? the rust editions stay stable and many crates settled on 1.0 versions

                                                                  3. 6

                                                                    Perhaps this[1] was a lighter-weight solution to some of the problems the author mentions.

                                                                    [1] - https://github.com/ghc-proposals/ghc-proposals/blob/master/proposals/0380-ghc2021.rst

                                                                    1. 4

                                                                      I’m thinking that the first result when DuckDuckGo’ing “haskell2020” being this article is not a good sign.

                                                                    1. 3

                                                                      Just as a minor nitpick, R actually does have something that’s functionally equivalent to macro support. It even includes things like quasiquotation.

                                                                      It’s actually heavily used by the core of the language and major libraries like ggplot2.

                                                                      Otherwise, this is a great article, especially as the Julia metaprogramming ecosystem with packages like Cassette and IRTools can be very intimidating.

                                                                      1. 5

                                                                        Are they monomorphizing generics (compiling SomeFunc[int] and SomeFunc[float] separately) rather than using dynamic dispatch here? The mentions of instantiation in commit logs make me think they’re doing that, but I don’t see much explicit from the authors about whether it’s static or dynamic, and haven’t dug deeply.

                                                                        From playing with the beta a little, a trivial function like Min[T constraints.Ordered](i, j T) T seems to take the same few cycles as the single-type version, but that doesn’t rule out that this only happens in simple-enough cases like inlineable functions. (I tested to update a Stack Overflow answer where folks complained about the non-generic solution.)

                                                                        1. 11

                                                                          Considering the design is based on the FeatherWeight Go paper, I think they make heavy use of monomorphisation.

                                                                          1. 8

                                                                            Ah, that fits, and this video also says it’s monomorphizing.

                                                                            I’m surprised the blog and draft release notes don’t mention that generics should have essentially no runtime performance cost; might make some people feel safer starting to use ’em. (Generic functions leaning on interface calls seemed to be in consideration earlier on in the process.)

                                                                          2. 8

                                                                            The current implementation is monomorphizing as far as I’ve been able to tell. One way to see this is on godbolt.org which will let you, with work, see the generated assembly code for code using generics on Go tip.

                                                                            I suspect that this isn’t going to be documented because the Go developers don’t want to commit to it. The generics design was (is) specifically intended to allow for other compilation strategies, such as code that look more like Go dicts (which internally dispatch specific dict types to general dict code with suitable parameters). Whether not documenting it will let them change it later in practice is an open question; I suspect that people would be unhappy if the performance of generic code regressed from Go 1.18’s level in future Go versions (as it might if they switched implementation strategies for some generic code).

                                                                            I don’t know if a monomorphizing initial implementation was planned from the start or if it fell out of how the early experimentation ‘try it out now’ implementation of Go generics, called ‘go2go’, worked by translating your Go with generics code to normal Go code, which obviously required monomorphizing it.

                                                                            1. 2

                                                                              I suspect monomorphisation will stick around. The main issue with that approach is it can lead to large binaries. Still considering how Go likes to generate static executables, I don’t think binary size is a major concern for the project. I think they are trying to be cautious since this is one of those design decisions where it’s there the team doesn’t have a strong conviction on the right call.

                                                                              1. 5

                                                                                Large binaries and long compile times. Fast build times has always been a major design goal & selling point for Go, so I would not be surprised if they fussed with this if it became clear that overuse was becoming a build-time footgun.

                                                                                A hybrid strategy is possible where the compiler tries to be smart about when to monomorphize, to get the performance benefits where it matters, while avoiding it in places where the boost isn’t worth it for the build time hit. Though obviously that makes the runtime performance harder to reason about, and it’s hard to know how well the compiler can be taught to make these decisions.

                                                                                1. 1

                                                                                  Don’t you have to monomorphize in the absence of something like a vtable implementation or dynamic dispatch? What I mean is, unless runtime dispatch is implemented, don’t you have to concretize all types at compile time? I hope I’m not missing something.

                                                                                  1. 2

                                                                                    I think it would be possible to use general techniques similar to how the Go runtime implements maps efficiently without generics, where under some circumstances you generate a more general chunk of code that only needs to be passed some basic type parameters of the specific types involved. Go always knows these specific types at compile time, so the question is whether it generates completely type-specific code for them (as it does currently) or if it can be clever enough to use a single parameterized version.

                                                                                    (We may see a certain amount of generics that are type-safe wrappers around maps. Since maps are already implemented this non-generics way, it might be tempting to recognize such generics and implement them similarly.)

                                                                                    1. 2

                                                                                      Right, the most obvious alternative to monomorphization is to, instead of erasing type parameters on functions, convert them into an extra argument that is the vtable. The constraints on the type parameter tell you what the vtable needs to contain, and you know the concrete type at the call site, so you just have the compiler insert that extra argument (unless the type is itself a type parameter, in which case you can just pass down the vtable that was passed to you).

                                                                                      The hybrid strategy is more or less what GHC does for Haskell’s type classes.

                                                                                  2. 1

                                                                                    That’s a really good point. I’m curious what was discussed and decided.

                                                                            1. 1

                                                                              I really wish there was the ability to have lexically-scoped type synonyms. So many gnarly type signatures would be way more comprehensible if I could use a name for parts of them. As it stands it feels almost like assembly where there are only global variables.

                                                                              1. 1

                                                                                Do any examples come to mind where you’d like to use this feature?

                                                                                1. 2

                                                                                  I think when using Servant (https://docs.servant.dev/en/stable/tutorial/Client.html) it would have come in handy. You can get pretty far with type synonyms, but it’s a global namespace which has all the classic problems that come with not being able to scope names

                                                                              1. 7

                                                                                What do people use for blocking ads on Nyxt? I don’t use many plugins but ublock origin is an important one.

                                                                                1. 5

                                                                                  I briefly tried out qutebrowser and luakit a while back and this was a big problem. They both had ad blockers but nothing nearly as good as ublock origin, so I’m back on Firefox.

                                                                                  1. 2

                                                                                    Same issue for me. blocker-mode on Nyxt is good enough for general use, but not for ad-heavy parts of the Web of Lies.The github issue on blocking talks about upcoming support for webextensions, aimed at running uBlock Origin. But I’d rather see a uBlock-compatible extension in Lisp.

                                                                                  2. 3

                                                                                    I use an /etc/hosts based blocklist and it suits me well. Although it’s not perfect it does the job good enough without interfering with my browser at all.

                                                                                    1. 1

                                                                                      If you want a more ready-to-go solution than pihole:

                                                                                      I use nextdns.io as a DNS provider and enabled all the builtin blocklists. I can then selectively add some domains to the Allowlist when i see something not working correctly. Eg Google photos CDN, then i toggle it off as well after done. This works pretty well, and across all devices, browsers etc., no addon needed per browser etc just change the DNS server on each device. You can also use their app, but i prefer the manual DNS server config.

                                                                                      The free plan allows upto 300K per month DNS queries i believe, and they also show you analytics. For eg. on my phone(android) roughly 53% are blocked(ads) versus only 7% on a laptop. It was pretty evident how much a spy device a phone is! So i don’t mind paying a few dollars when i exceed 300K, which doesn’t seem anytime soon.

                                                                                      1. 1

                                                                                        This solution isn’t too bad, but I also like ublock origin for being about to do things like remove ads from Youtube videos. I also have some custom filter lists that I need to occasionally turn off to use websites, and that really needs to be a one-click operation for me.

                                                                                        Still a great idea for my phone, so I’ll give it a shot!

                                                                                    1. 2

                                                                                      Honest question, how much of a community is there around F#? I have trouble finding active communities or standout projects written in the language. Many of the git repos for what look like core projects only have mild activity. We can compare F# to something like Clojure or Scala but those all have thriving communities that are distinct and really help propel the language forward. Where are those communities for F#?

                                                                                      1. 74

                                                                                        Thanks for all the work you and many others have done over the years! This is a much better online community than many others and much of that is due to the often invisible work all y’all do!

                                                                                        1. 18

                                                                                          Agreed! Thank you to @pushcx! (Next to Christine I haven’t seen any new mods, yet?)

                                                                                        1. 3

                                                                                          This raises a lot of questions. How are they able to verify correctness with these snippets? Do people need to manually verify them? How do invalid/incorrect snippets get pruned? If a person utilizes a snippet are they more likely to create errors? (I.e., since they are using generated code they might not be familiar with the edge cases and be more likely to use it incorrectly.)

                                                                                          Interesting concept nonetheless.

                                                                                          1. 5

                                                                                            From the faq at the bottom of the page, they make no guarantees around correctness. Like any other autocomplete you should verify the code before moving on.

                                                                                            1. 1

                                                                                              They make no guarantees, but surely they aren’t just throwing stuff out into the world, right?

                                                                                            2. 2

                                                                                              It’s hard to say until they talk more about it (and I’ll bet some sort of paper is forthcoming). I’ll bet they have some sort of AST parser (or perhaps they use the language runtime itself directly) offering a “syntactically valid” check, and they use that to guide training. A pure deep learning approach to enforcing a constraint like syntactic validity would be to create a Generative Adversarial Network and use an AST parser or runtime as an oracle. But there’s multiple ways to skin the cat here, so it’s hard to say without more information about the methodology.

                                                                                              1. 1

                                                                                                I want to believe they have this, but I suspect they might have something closer to a filter where some text is generated and then shrunk into a code block. I would really like to know more details about how it works.

                                                                                                1. 1

                                                                                                  I would have no doubts about them using a GAN with an oracle if it was a useful way to construct a model. GitHub partnered with OpenAI, and OpenAI did make GPT-3, so I don’t see why they wouldn’t reach for something as “basic” as a GAN. I mean, you can setup a basic GAN in almost all of the common tensor libraries in Python or ML libraries in Julia pretty simply.

                                                                                            1. 14

                                                                                              Some of these aren’t weird. Like some are literally what IEEE 754 spec says to do with floating point numbers. One thing that’s only obvious in retrospect is that programming languages are also pieces of software with their own engineering trade-offs. When you decide what “+” means you really have to decide that for all the possible ways it can be used in the language. Javascript decided “+” is well-defined for strings and numbers along with everything that can be coerced into a string or number. The rest is a consequence of that decision.

                                                                                              1. 47

                                                                                                Matthias Felleisen is in many ways a missing stair of the Racket community. I have memories of giving a seminar talk in my department when he was visiting and he grilled me fairly harshly. It was decidedly weird since most of his questions were off-topic and some of the related work he referenced had nothing to do with the topic. Later when he was giving generic research advice I found him more pleasant. If you don’t know Matthias, he has an attitude to him very much like a stern high-school principal. Like the article says, none of this a giant secret. Students were warned about Matthias before they were suppose to meet with him. You can watch online talks by him and see for yourself.

                                                                                                Now let me get back to my Scheme workshop submission :)

                                                                                                1. 61

                                                                                                  If you need to warn students about a professor’s behaviour, it sounds to me as if he isn’t fit for the job.

                                                                                                  1. 10

                                                                                                    I disagree. It is very easy to make the above statement. There is an impulse within all of us to put down a smart asshole.

                                                                                                    Speaking as a former student of his, I have seen both sides of the man. He can be mean, surely. I would prefer if he were not, and I don’t condone the behavior. But the fact is, his temper flares.

                                                                                                    His temper is a hazard I (personally) am willing to weather in exchange for learning from someone with his level of passion, dedication to teaching, dedication to research, experience both in academia and industry, breadth and depth of knowledge, first-hand history, et cetera.

                                                                                                    I think a warning is in fact proper. Let the students decide for themselves on an individual basis, what they are willing to put up with in exchange for what. There must be a place in society where an abrasive yet competent personality can flourish, without causing undue harm to others.

                                                                                                    1. 11

                                                                                                      That’s fine right up until someone can’t avoid his class because of scheduling or degree requirements.

                                                                                                  2. 1

                                                                                                    You can watch online talks by him and see for yourself.

                                                                                                    It’d be great to see some examples.

                                                                                                    1. 1

                                                                                                      I didn’t do much digging since I have no interest in hunting down some 2 minute clip of Matthias being rude to a student. But these two were the first two links for his name on YouTube and I think give a fair impression of what he can be like in person. I don’t think it’s hard to imagine this guy telling people off.

                                                                                                      1. https://www.youtube.com/watch?v=XTl7Jn_kmio
                                                                                                      2. https://www.youtube.com/watch?v=cq5m9Ve9ZYs
                                                                                                  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. 58

                                                                                                      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. 26

                                                                                                        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. 9

                                                                                                          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. 28

                                                                                                            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. 19

                                                                                                              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. 8

                                                                                                                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. 15

                                                                                                                    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. 20

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

                                                                                                                        1. 17

                                                                                                                          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. 9

                                                                                                                              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. 8

                                                                                                                                  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. 8

                                                                                                                            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. 6

                                                                                                                                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. 5

                                                                                                                                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. 8

                                                                                                                          I kind of want a new tag for urbit just so I don’t need to see the political fight every single time it comes up.

                                                                                                                          1. 15

                                                                                                                            It’d be cool if we had a community notm to avoid politics when discussing tech, but there is a sizable contingent of Lobsters here who cannot function that way and prioritize their desire to talk about politics over talking about the tech.

                                                                                                                            1. 13

                                                                                                                              Lots of projects have creators with shitty opinions, but few of those projects represent and implement those opinions. Urbit is tech that implements a political view, and to consider the tech separately from the politics is as inane as considering the politics separately from the tech.

                                                                                                                              1. 12

                                                                                                                                The politics of Urbit have been discussed many times over. There’s literally nothing new to talk about there. The tech, however, is ever evolving. Why not talk about that instead? Surely technical perspectives should be prioritized, at least here on Lobsters.

                                                                                                                                1. 12

                                                                                                                                  The tech is “ever-evolving” I guess, but this article is a survey of the Urbit landscape, not a changelog.

                                                                                                                                  Anyway: go ahead, talk about the tech. But in this project’s case, the tech and the politics are deliberately tangled, so don’t be surprised or disappointed when the politics of the project come up for discussion too.

                                                                                                                                2. 11

                                                                                                                                  An interesting and enlightening discussion around Urbit’s politics would talk about what those politics are, how they have influenced the tech behind Urbit, and finally to what degree Urbit represents a successful realization of those politics. This is similar to how we evaluate deeply political technology projects like Project Cybersyn.

                                                                                                                                  This is emphatically not the style of discussion we get here. Instead, people do the shallow (and perhaps even lazy) thing and make uninteresting (and often unsubstantiated and incoherent) moral claims, and then you just get a bunch of Lobsters clacking angrily at each other while high on self-righteousness. It’s all so tiresome.

                                                                                                                                  1. 5

                                                                                                                                    Such a discussion would be granting the project a legitimacy that it hasn’t earned and doesn’t deserve.

                                                                                                                                    1. 3

                                                                                                                                      When was the last time Lobsters talked about Cybersyn? When I searched I see a handful of posts with a handful of comments. That’s not really a discussion. So I don’t know where this deep evaluation is happening.

                                                                                                                                      1. 5

                                                                                                                                        I found this in my DB of all submissions to lobste.rs, it got 6 upvotes and 1 comment:

                                                                                                                                        https://www.jacobinmag.com/2015/04/allende-chile-beer-medina-cybersyn/

                                                                                                                                        Interestingly it’s one of six submissions from Jacobin, the last one was in Nov 2018.

                                                                                                                                        Including this one, 23 submissions have “urbit” in their title.

                                                                                                                                        1. 3

                                                                                                                                          So I don’t know where this deep evaluation is happening.

                                                                                                                                          That would be my point–it ain’t happening here, because in the vast majority of lobsters (quite probably myself included) are incapable of objective, dispassionate policy discussion.

                                                                                                                                          1. 9

                                                                                                                                            because in the vast majority of lobsters (quite probably myself included) are incapable of objective, dispassionate policy discussion.

                                                                                                                                            “Objective, dispassionate policy discussion” isn’t some Platonic ideal that’s fit for all subject matter. When the topic is an elaborate prank schemed up by some Neoreactionary narcissist, the appropriate response is manifestly not a contemplative survey of its politics or positions.

                                                                                                                                            1. 5

                                                                                                                                              I’m also reasonably sure political discussion is somewhat off-topic here. Further, if a technical topic is sufficiently politicised I think the technical discussion itself becomes off-topic since no one can reliably talk about it in a neutral way that doesn’t in some ways refer back to the political context of the work.

                                                                                                                                          2. 2

                                                                                                                                            I don’t disagree that some (lots) of the political disussion that ensues after an Urbit posting is shallow, lazy, tiresome, content-free drivel. But the reason it doesn’t belong here isn’t because politics don’t belong in Lobste.rs discussions.

                                                                                                                                            1. 3

                                                                                                                                              The politics of urbit itself match your descriptors. Pointing that out as an FYI may be a simple observation, but that doesn’t make it unimportant.

                                                                                                                                              People can still ignore those threads and discuss urbits’s whacky-ass tech as is currently the top post. Nobody is preventing that discussion from occurring.

                                                                                                                                          3. 3

                                                                                                                                            I never understood the “He’s right wing so these are the choices he made” argument. (oversimplified? Yes. But I’m OK with that.) The first time I read it, sure, interesting, engaging. The second time, I tried again, and again it seemed there was a massive cultural gap between what people thought and what I could understand. Third time, similar… and then I stopped caring. Urbit seemed to not be going anywhere, and caring about a random person’s political opinions because he happened to be a tech author seemed like a waste of time.

                                                                                                                                            An 18 second sketch that illustrates what this all seems like to me: https://www.youtube.com/watch?v=79GNnfDrgWM

                                                                                                                                          4. 5

                                                                                                                                            You’re active on all political discussion I’ve seen here in recent memory, including sharing your own politics opinions. I chime in on this stuff too because it interests me. Why pretend to be above it? Clearly people want to discuss the tech implications of politically-adjacent stuff like this. It’s not virtuous to remove extra-technical context from the forum, it just makes the discussion less informed.

                                                                                                                                            1. 1

                                                                                                                                              I don’t understand your point. People want to flame about politics, not talk about the tech related aspects, or I’d have fewer problems with the chatter.

                                                                                                                                              1. 3

                                                                                                                                                I’m not understanding how your pushback here relates to my point. But to respond - there’s plenty of tech discussion here by the people who want to be having it. I don’t see the political threads preventing people from engaging. The top two threads are about technical details. I don’t suppose that anyone extra would have jumped into the techy bits had nobody commented on the extra-techy bits. The site is designed to accommodate multiple threads of discussion. So the whole ‘politics distracts from the technical discussion’ is not something I’m buying in this case.

                                                                                                                                        1. 7

                                                                                                                                          If one thing from urbit could escape that project and be used elsewhere, I’d like it to be their monosyllabic pronunciation for ASCII symbols: https://urbit.org/docs/hoon/hoon-school/hoon-syntax/#reading-hoon-aloud

                                                                                                                                          I think this would be really nice to have as a shared language with other programmers, though there are some symbols that already have short names in no need of replacement.

                                                                                                                                          1. 6

                                                                                                                                            I think Talon voice is a better precedent as highlighted in speaking code