Threads for kevinc

  1. 7

    Compare with Swift, also a modern language that’s first class for mobile development, and the amount of discussion it gets here under the swift tag. I think Kotlin discussion is on a similar level of activity.

    1. 1

      Interactive programs also exist outside of web pages and game engines! A couple of developers are building native apps and having some success.

      Apple’s recent SwiftUI framework (for apps on all its platforms) operates on similar principles to React et al, but I’m not well-enough versed in it or web frameworks to be able to say how it compares.

      Apple does have a lower-level data/state management framework called Combine that’s based on FRP, though again I don’t have the expertise to state how strictly it adheres to FRP principles.

      1. 1

        SwiftUI is a whole lot like React. Many concepts map one-to-one. By itself, Combine is mainly Rx Observables (“Publishers”) with some extensions to use them to subscribe to things like NSNotification. But SwiftUI can then subscribe to Publishers and use them as sources of truth for view updates.

        1. 1

          Combine enables backpressure, which IIRC the traditional Rx model doesn’t. That stood out to me because backpressure is important when working with network data.

        2. 1

          Definitely! Most of my experience has been in web apps, and a cursory understanding of games. I know less about native app architecture.

          If you know of any posts or framework documentation that can elucidate its design decisions, let me know, as I’m curious what other ecosystems do. I’ll check out Combine.

        1. 2

          Computers were cool when I was a kid, and the same computers from when I was a kid are still cool.

          1. 14

            It turns out one of the jankiest UIs on the system is a webview, I am shocked :D

            1. 1

              I suppose you can get away with it in System Preferences where the menu bar isn’t responsible for much. Maybe this is code reuse from

              1. 1

                That would be the obvious reason (its a reasonable excuse to do it that way, but in that case I give it 50/50 that they break system preferences with a website update at some point :) )

            1. 3

              Ok, at this point I’m just waiting which major game studio releases an AAA title with full M1 / MacOs support on day 1. I feel like with the powerful hardware is just a matter of time till EA or someone else tries to enter the market.

              1. 2

                M1 isn’t a contender for high-end gaming due to lack of RTX and DLSS. Due to lack of existing games nobody will buy a Mac primarily for gaming, which makes macOS userbase boxed as “casual”, and this market is already served well by iOS, consoles, and Switch.

                On top of that due to Apple not caring about GPU support for anything except their proprietary Metal APIs, I don’t see macOS gaming happening beyond half-assed ports from iOS.

                1. 2

                  On top of that due to Apple not caring about GPU support for anything except their proprietary Metal APIs, I don’t see macOS gaming happening beyond half-assed ports from iOS.

                  I think Metal is a red herring as to why Macs don’t have games - outside AAA stuff, most games aren’t rawdogging the 3D API, but either using a commodity engine like Unreal or Unity, or are simple 2D or OpenGL stuff.

                2. 1

                  A few good AAA games, if the developers and players each bought in, could make the platform look like it works for gaming, which might open the floodgates. But I still don’t see the economics working out for that at present, for any party. Gaming PCs have grown very expensive, so even if software permitted the chip’s benchmarks to be realized in game performance, Apple wouldn’t yet have a way to enter the market at the high end. And they’re not attempting to beat consoles at the low end except in casual iOS games. At best, a player gets a Mac because they like Macs and then it’s great if it can play games too. The difference we’d look for is if players start buying a Mac first and foremost for high end games.

                  Apple could attempt to kickstart the high end by directly engaging developers of the most popular and benchmark-worthy PC games and engines. A few of them have their own app stores, though, which could be another obstacle.

                  1. 2

                    That’s why I was thinking of EA. It doesn’t have to be “core gamer” crowd. The target could be the standard Mac crowd who gets access to FIFA/Madden/whatever. Not quite the extreme requirements stuff.

                1. 1

                  It looked like there were fans in the display. Surely not?

                  1. 2

                    There are fans in the pro display, so it’s possible there are fans in the studio display, or maybe the grilles are really just for the speakers.

                    1. 1

                      They did look like impeller fans rather than grilles (it was the video of the internal view) - video here at 49:46

                      I don’t think I’ll be buying one but it’s just a surprise to see fans in a monitor!

                  1. 3

                    I completely missed asserts and have still been using Boolean type guard functions for this. You gotta read those release notes every time; TypeScript moves fast.

                    1. 3

                      Wouldn’t it be better just to change how you represent time? If you set it to be integer milliseconds since program start you will always have perfect precision on the time, and if you need to convert it to a floating point number for a calculation you an deal with precision at each calculation as necessary.

                      1. 3

                        Yes, but this is for contexts where you can’t do that, e.g. calling trigonometric functions on the GPU.

                        1. 2

                          GPUs optimize for 32-bit floats, and many kinds of floating point data may get involved in drawing (time, orientation, color, hit points…). I’ve never gotten as far as shipping a game, but it’s natural to default to 32-bit floats for just about everything that’s not an integer, and then you don’t have to convert, whether per drawcall, per vertex, or per pixel. With VRR you can’t even depend on the display interval staying uniform anymore. So I see the benefit in having a general solution even if it is a “trick.”

                        1. 5

                          I wonder which could happen faster: Rust becoming as easy to use as other modern languages while retaining the wild goodwill it’s earned, or Swift satisfying its memory ownership goals and earning goodwill outside its core user group of Apple platforms. Although I think Swift nailed async and has the ergonomics down, I worry about the mass appeal aspect.

                          1. 24

                            Swift so far has proven that it’s Apple’s language for Apple’s requirements, and everything else is an afterthought. Other platforms are second-class citizens. IBM’s attempt to use Swift has failed. Swift for Tensorflow looks mothballed too. It would take effort for Apple to fix these issues, and fix the perception, but I don’t think Apple is interested. Swift is already unusually open for an Apple project.

                            1. 6

                              And this is really no different than Apple’s Objective-C ecosystem before Swift. It was always possible to use Obj-C outside of Apple’s ecosystem (even before it was Apple’s ecosystem), but it was annoying and there were a lot of nice things that you just didn’t get to use in that case. In fairness to Apple, though, .NET has only recently become (reasonably) pleasant to use outside of Windows, and then only because Microsoft felt vulnerable.

                            2. 5

                              One problem with Swift on Linux is Swift’s LLVM fork. You can’t build Swift against released versions of LLVM, hence Linux system LLVM. I really understand why it is the way it is, but they just need to bite the bullet. It took a year or so of effort for Rust to build against LLVM releases (I helped), but before that no Linux distributions packaged Rust. Until Swift’s LLVM fork problem is fixed, no Linux distributions will package Swift.

                              1. 1

                                Rusts reasonably well-developed backend system and ability to use multiple code generators (including multiple LLVMs) is actually a strengths too often ignored.

                                Sure, it needs an expert to use it, but it sees a ton of use out in the open if you know where to look.

                              2. 3

                                I think the biggest problem with Swift expanding is the half-assedness of non Apple platform support, specifically Windows.

                              1. 1

                                If you’re looking for the answer to the headline question, scroll about halfway down until you see the term in a section heading. Yeesh.

                                1. 8

                                  It’s not a very good explanation. For example, it starts with:

                                  Before getting into futex, we need to know which problem it solves: race condition

                                  Futexes do nothing to prevent race conditions. They are a performance optimisation. You could remove every futex call in a program and replace it with a spin loop. It would then get a lot slower because threads would wait until their quantum is exhausted before yielding and so the thread that could make progress would not get CPU time until later.

                                  You can build a lot of synchronisation primitives on top of futex. Anything that uses a compare-and-swap in its spin path can be converted into a sleeping lock with futex, so it can implement semaphores, mutexes, condition variables, and barriers quite easily. For example, you can use a word to represent the value of a counting semaphore. On the fast path, you read the value, if it’s greater than zero, compare-and-swap to decrement it and a simple atomic increment to increment it. You need to sleep if the value is already 0, so on that path you do a futex call with the wait operation. The kernel will internally acquire a lock, check that the value is still 0, and sleep the calling thread if it is, until there’s a corresponding wake call on the same address. When you increment, if you increment from 0 then there may be sleepers and so you do the futex wake operation to wake one or more of them up. You can optimise this by tracking waiters.

                                  Similarly, you can implement a barrier by using two words. One that is a counter of threads that haven’t yet arrived at the barrier, the other that is the number of times the barrier has been triggered. When you reach the barrier, you first read the second word and then atomically decrement the first word. If it the first word isn’t zero, then you do a futex-wait on the second word and wake up when it changes. If the first word has reached zero then you are the last thread to reach the barrier, so you increment the second word do a futex wake op on it to wake everyone else up. It doesn’t matter if the second word overflows, as long as the value changes every time all threads rendezvous at the barrier.

                                  The futex call supports a whole bunch of exciting things, for example bitfield operations allowing you to treat a 32-bit words as 32 separate mutexes and acquire or release any subset in a single atomic op on the fast path and block waiting for up to 32 of them.

                                  I prefer the FreeBSD version, _umtx_op in general because it has a richer set of data structures to operate on, each optimised for a common concurrency primitive. In particular, it has a much better way of handling timeouts (at least for the _sem2 variant). Both futex and _umtx_op are allowed to spuriously wake and if you need to retry then you need to know how much of your timeout has elapsed. _umtx_op helpfully provides the remaining time as an output so that you can just use that on your next loop iteration.

                                  1. 1

                                    Slight nitpick, but for the semaphore example, it would need to wake all the waiters on post observing zero unless it risks deadlocking:

                                    • 3 threads see 0 and wait
                                    • a post happens, observed 0, wakes one thread
                                    • two more post happen and don’t observe 0
                                    • 1 of the 3 waiting threads wakes up and decrements the value to 2 since it’s now 3
                                    • the value is now 2 (non zero) but the other 2 threads are still waiting with nothing to wake them up.
                                    1. 1

                                      Yes, sorry, I was lax in my language to the point of incomprehensibility. This is what I meant by ‘wake one or more up’ (FUTEX_OP_WAKE with INT_MAX) but reading it again I would have interpreted it as FUTEX_OP_WAKE with 1 or some other arbitrary number. Note that this is not intended to be a good implementation of a semaphore (all of the waiting threads will wake up and then all except one will immediately sleep), it’s just the simplest.

                                1. 3

                                  This aesthetic hits me right in the childhood. I love it and I wish I could bring back that look in my 2021 macbook

                                  1. 2

                                    In the meantime, there’s Poolsuite / FM and Macintosh.js.

                                  1. 7

                                    I’ll add: Pronouns like “it” are a common source of ambiguity in technical discussions. Avoid shortcuts in speech about a complex subject. Your audiences will more reliably understand you.

                                    Don’t take this to mean that a wall of text is good. You want high signal and low noise.

                                    1. 2

                                      I’m a bit mystified as to the motivation for the “no dynamic allocation” selling point – I can see that being desirable for something that’s actually going to be used at runtime on a production system (perhaps an embedded system with very limited memory and/or strict timing constraints), but for a testing library, that I’d expect is only going to run on developer machines with plentiful memory and a general-purpose OS, is there a particular reason to be concerned about it using malloc(3)?

                                      1. 3

                                        I can’t speak for the author (@silentbicycle, who I don’t think is active here anymore), but I know that he often worked with and in embedded environments. So that may be exactly the reason that it mattered to him.

                                        1. 3

                                          Just a hunch: In many languages, memory is safe enough to make us confident that a new source of dynamic allocation won’t interfere with the behavior you’re trying to test. But C has a lot of unsafe code and applications in constrained environments, so maybe the heap is best viewed as yet another hunk of shared mutable state. If a test left that state alone, the subject would be tested in better isolation.

                                          1. 1

                                            That’s a good point – though at the same time, if you’re looking to flush out bugs, it seems like it could be useful to sprinkle in other bits of heap usage to reduce the likelihood of something like a use-after-free going undetected (though maybe that’s something you want to leave to your test harness to do explicitly in whatever way you choose rather than leaving it up to the testing library).

                                          2. 2

                                            What do you do when malloc() fails in the testing code?

                                            1. 1

                                              Then I’m probably boned in some bigger or more obvious way.

                                              1. 1

                                                pkill -9 (firefox|chrom(e|ium)) and run it again?

                                            1. 10

                                              I’m learning Nix lately, and I don’t (yet?) hate the configuration syntax. But I do find the user experience to be on the unfamiliar side, particularly when it comes to terminology. For instance, derivations are Nix’s packages, and everyone calls them packages, but the software doesn’t, so new users can get hung up on that. Better to cut down the learning curve by calling them packages, then teach that Nix packages are different in such and such way.

                                              Regarding the configuration language, I wonder if there have been any attempts to translate code in another, more palatable language to Nix? I’m not suggesting a new language like TypeScript. I mean a library in a common language for emitting Nix configuration, the way imperative CDK code yields the CloudFormation YAML that’s so clumsy to write by hand.

                                              1. 9

                                                If you might like parens more than an MLish DSL (or if you want a full language and not a DSL) come check out Guix :)

                                                  1. 6

                                                    If I had a Nickel for every new config language I came across…

                                                  2. 6

                                                    For instance, derivations are Nix’s packages, and everyone calls them packages, but the software doesn’t, so new users can get hung up on that.

                                                    There’s a subtle difference, in that what people usually call “packages” (see e.g. nixpkgs) are higher level expression which get translated to derivations (by nix-instantiate). So the word package is actually quite ambiguous.

                                                    1. 5

                                                      I think generating Nix is a bad idea, because Nix already generates shell code, and invokes many subprocesses. So then you’re going to have a leaky abstraction on top of a leaky abstraction.

                                                      It would be better just to build something directly on top of shell, which is fundamental since all packages themselves use it .

                                                      And all distros use it, even Nix does. Nix somewhat covers it up, but this long debate shows how central shell is to Nix:


                                                      From my understanding every package build basically depends on this, and then in the Nix package defs you’ll also see templated shell to fix up specific issues, just like any other package manager:


                                                      1. 6

                                                        So then you’re going to have a leaky abstraction on top of a leaky abstraction.

                                                        I still have scars from this. Nix has some cool functionality that basically reimplements Rust’s Cargo in Nix + shell scripts (buildRustCrate). Since Cargo actually supports features with spaces in them (which I hope no crate will ever use), I once worked on a patch that added support for features with spaces to buildRustCrate. IIIRC I eventually got it working, but it was a terrible quotation hell.

                                                        1. 11

                                                          Yup exactly, this is the “rewriting upstream” problem, which I mentioned with Bazel here:


                                                          Both Bazel and Nix have strong models of the world and assume it’s more homogeneous than it actually is. On the other hand, shell embraces heterogeneity and you can always find a solution without rewriting, and containers add to that flexibility.

                                                          They should enable correct parallelism, incremental builds, and distribution. (It looks like is pointing in this direction, though I’ve only read about it and not used it.)

                                                          Just like Nix prefers rewriting in its expression language; Bazel prefers rewriting with Starklark. You generally throw out all the autoconf and write Starlark instead, which is a lot of work.

                                                          Many years I reviewed the R build rules for Bazel which my coworker wrote, which is analogous to the Rust problem in Nix (thanks for the example).

                                                          There is some argument that rewriting is “good”, but simply from spinning our wheels on that work, I no longer have any appetite for it. I’ll concede that upstream doesn’t have all the nice properties of Nix or Bazel, but I also want to spend less time messing with build systems, and I don’t want to clear this hurdle whenever trying out ANY new language (Zig, etc.) I think language-specific package managers are something of a anti-pattern, but that’s the world we live in.

                                                          We need a “meta-build” system that solves the reproducibility/parallelism/distribution/incrementality problem for everything at once without requiring O(N) rewrites of upstream build systems. I don’t really have any doubt that this will be based on containers.

                                                          Nix and Bazel have something else in common which I mentioned here – they have a static notion of dependencies that has to be evaluated up front, which can be slow.


                                                      2. 3

                                                        The solution some friends and I were kicking around was similar to this. At this point, we’ve got a relatively strong sense of how we like to build our servers and appliances, and we figured it’d be nice just to focus in on the parts we care about (mainly, the ease of specifying packages and users and keys and whatnot) in a JSON blob and then have a script barf out the relevant Nix files and flakes.

                                                        Sure, we give up like 90% of the bizarre shit Nix gives you, but I honestly don’t need most of that.

                                                        1. 15

                                                          While this is an interesting post, I’m not sure how the content here is relevant to this website.

                                                          1. 19

                                                            wut. It’s about configuring a variety of software and hardware components to enable streaming an avatar over the internet. That seems pretty par for the course to me…

                                                            1. 12

                                                              What config though? I don’t see a single line of config. I don’t see much more than a line or two on the justification for picking any of those options. Don’t get me wrong, these sorts of explorations are important, but important in the way that organizing my house is important; important but not necessarily useful to share to a programming audience. The tag chosen, “programming”, also doesn’t really apply to the content of the post which is another Yellow Flag in my mind.

                                                              Once content like this becomes relevant, what’s stopping us from sharing personal productivity tips (explicitly called out in the rules), Twitch streaming setups, DVR setups, Usenet downloading chains, etc, etc. This feels more like “nerd lifestyle” than it does coding which I’m seeing more and more of in Lobsters in recent years.

                                                              1. 5

                                                                I’m interested in doing the exact same kind of vtuber-style streaming as the OP, and would definitely appreciate a technical writeup of exactly how they got their hardware+software setup working and their overall impression of the quality of it. I recall seeing other articles on @cadey ‘s blog about this sort of thing a while ago (about setups which, disappointingly, didn’t seem to work all that well). I haven’t gotten to reading the post in detail yet; I would hope that it has enough technical detail that someone else can replicate the setup. But even so I think it’s topical on the grounds of being an example of what one can in principle achieve with modern video streaming and VR tech.

                                                                1. 4

                                                                  The hardware bit that I missed in the post and will edit in soon:

                                                                  CPU: AMD Ryzen 5 3600

                                                                  RAM: 48GB DDR4

                                                                  GPU: AMD RX6700XT

                                                                  Webcam: Logitech Logi Stream (it’s impossible to get a solid model number on this, sorry)

                                                                  VR headset: Valve Index / Oculus Quest 2

                                                                  Other tools (not mentioned in the article): Steam Controller (with OBS keybinds), Xbox Series X controller (for games), NAS to store stream recordings offline

                                                                  1. 1

                                                                    Also, this stuff only really works on Windows. I haven’t tried running it on Linux, mostly because VSeeFace pretends to be a webcam and that doesn’t work on Linux.

                                                                2. 3

                                                                  The “programming” tag’s description is,

                                                                  Use when every tag or no specific tag applies

                                                                  So I’ll hazard a guess it was chosen in its role as the default fallback. We don’t have a VR tag or a system setup tag, though those topics are of interest to many of us.

                                                                  1. 5

                                                                    though those topics are of interest to many of us

                                                                    That doesn’t matter. There are many here that are interested in personal productivity, yet it is off topic. Same with the vague definition of “business news” (anything with products, except Apple it seems).

                                                                    This site has a set of things that are on topic, otherwise they are not. If you can’t find a fitting tag, don’t use “programming”, just don’t submit, because it is off topic.

                                                                    1. 3

                                                                      If you can’t find a fitting tag, don’t use “programming”, just don’t submit, because it is off topic.

                                                                      The definition of the “programming” tag literally is “Use when every tag or no specific tag applies” though.

                                                                      1. 4

                                                                        If it is not about programming and you use that tag, it is very likely off-topic.

                                                                        1. 2

                                                                          I agree :).

                                                                          Since there is a backlog of tags that the community wants (= thinks is on-topic for but that haven’t been created yet, the absence of a tag isn’t a perfect heuristic for whether something is on-topic or not (otherwise nix wouldn’t have been on-topic until last month ;) ).

                                                                          1. 4

                                                                            For me there is a difference: I think that nix was always on-topic, since Unixy systems are on-topic. The new tag represents a specialization. It is as if we did not have a python tag here and programming was flooded with python related articles. The python tag is a specialization of programming,

                                                                            The above article however has nothing to do with programming, so when we add a tag that captures “tech setups” the site broadens its topical landscape. That is different to me. I am not against it, but I think they are not comparable.

                                                                      2. 2

                                                                        I don’t think personal productivity is an equivalent point of comparison. This is specifically a technical puzzle. I think it’s surely in the spirit of the site’s topic law if not also the letter. The best evidence I can give is the vote count on this thread. There are many naysayers, but it’s still an overwhelmingly positive score.

                                                                        1. 3

                                                                          This is specifically a technical puzzle.

                                                                          This site isn’t just about technical things. For example, we don’t talk about civil engineering or automotive engineering here despite both of these fields being deeply technical. From the rules: “Some rules of thumb for great stories to submit: Will this improve the reader’s next program? Will it deepen their understanding of their last program? Will it be more interesting in five or ten years?” I don’t think stories about personal setups do any of these things. Nor does discussing viaduct construction or catalytic converters.

                                                                          The best evidence I can give is the vote count on this thread. There are many naysayers, but it’s still an overwhelmingly positive score.

                                                                          This gets to the heart of the question. Should Lobsters be a site foremost driven by its community and only slightly driven by its rules, or should it be bound by rules with the community acting as a guide around these rules? When I joined Lobsters ~7 years ago I had finished my graduate studies a couple years back. I was looking for a site that offered me what academic conferences used to offer me. The strong topicality on Lobsters made it feel like a good fit. From what I’ve been seeing, many Lobsters who have joined over the last 3-4 or so years (N.B. this may just be recency bias and I’m not feeling motivated enough to make a Bayesian CI around my hypothesis to check, though I may at some point, so take this with a large dose of salt) seem to be more interested in creating a community than sticking to a topic. You can actually see the differences in the topics being posted and the discussions being had though. To me the topicality of Lobsters is what makes it unique, not just Yet Another Tech Forum.

                                                                          There are many other technical sites with a focus on community. Off the top of my head, there’s HackerNews, Slashdot, Reddit, Twitter, Tildes, Yarn/twtxt, Usenet newsgroups, and the hundreds of Mastodon instances that discuss tech. What makes Lobsters unique is its strong focus on topicality. Ideally, I can come here and be guaranteed to read a story that would “improve my next program.” If I wanted a community, I could go onto any of the many other community sites that are out there. Moreover I’m definitely not a fan of building closed communities around invite only systems because they almost always lead to predictable clique dynamics (for that matter, I have pretty negative thoughts on closed general communities as a whole but this is off-topic). For me, losing the topicality of the site would probably cause me to want to leave the site, truth be told.

                                                                        2. 2

                                                                          lol I love that “except Apple it seems” - why is it that they can maintain such a good brand and be so hostile to open source? I just don’t get it. I’m not sure microsoft has ever been as bad as apple when it comes to FOSS but still they have somehow a bit worse optics fwict. Absurd.

                                                                          Anyway, that was off-topic… I don’t really care about trying to find the infinitely thin line that separates “acceptable on” from “unacceptable on” … the question itself only exists because we have to coordinate this aggregate entity “” and while we try to be a bit decentralized with the voting and the discussing I think the definition will always be “whatever the mods think” - so right now I guess I am making a risky comment if this whole discussion ends up in some purge like has happened a couple of times (where I only arrived to see the aftermath but could have been baited into it if I had arrived sooner).

                                                                        3. 2

                                                                          Good desserts are interesting to many of us, but sadly off-topic. I’ve always been a bit concerned about Lobsters getting overrun with consumer product trip reports, which in some ways this is. Still a neat article though–I’m just a little torn on its topicality.

                                                                          1. -4

                                                                            What is your favorite dessert? I like chocolate-y things :)

                                                                    2. 5

                                                                      Well for what it is worth, some of the information in this article was extremely interesting and potentially useful to me in my job as a professional programmer. I agree it is niche and I can see how it might be irrelevant to 99.99% of programmers but for me, well lets just say I will look into building this functionality directly into the application I my company is building.

                                                                      Having said that, more technical details would be useful. On the other hand I probably can’t use the exact software the author was using anyway so I will have to do my own research.

                                                                    1. 4

                                                                      This is great! I’ve been working around the lack of this feature for years.

                                                                      1. 18

                                                                        The author must feel very spiteful, to retroactively turn his gift into not only a transaction but a trap. I think it’d be better to learn a lesson about setting healthy boundaries when you decide to give of yourself so you don’t feel that others took advantage of you.

                                                                        1. 4

                                                                          This. So much this. Also, it is quite possible the author is letting themselves be influenced too much by others’ whinging about companies using their free software for free.

                                                                          On the one hand, it’s true that FLOSS is “under-sponsored” for the critical role some of it plays (and a color library and random value generator probably doesn’t fall in that category to begin with), but on the other hand all the attention this is getting lately is creating a lot of sour grapes and feelings of being wronged by corporations among developers. But these same developers are forgetting they originally created their software out of love/intellectual curiosity/boredom/whatever, yet they expect to get paid by people who never asked for the software in the first place. Of course, businesses now they are more than happy to use it while it’s there. Why wouldn’t they?

                                                                          1. 5

                                                                            I wonder how a free software author defines success. Just making the contribution and feeling good about that? Seeing it used in a lot of places? Recognition? Patreon subscribers? It must be different for everybody, but I suspect there is some missing link here by which the author’s real goals were left unfulfilled.

                                                                            1. 2

                                                                              But these same developers are forgetting they originally created their software out of love/intellectual curiosity/boredom/whatever, yet they expect to get paid by people who never asked for the software in the first place.

                                                                              They didn’t ask for it, but they sure feel free to unilaterally prop a critical piece of their infrastructure solely on top of it, and then make millions, without paying a dime back.

                                                                              Why wouldn’t they?

                                                                              Well exactly, and that’s a fundamental flaw in “Open Source” as opposed to Free Software (Which to be honest, I also can’t fully agree with). Open Source was created from the start to exploit developers who were making things for other developers. It said, in big letters, “You can make money off people’s hard labour, and not have to pay them anything!”. How is that not exploitation? In any capitalist system it’s the sole definition of it! We have hundreds of thousands of pages and millions, perhaps billions, of words in our legal framework stating explicitly that people should get paid for their labour when they do work. It is, very literally, the only reason why copyright and patents exist in the first place – from the idea that, when people do work, the deserve compensation so that they can continue to exist.

                                                                              Now, you can claim that they get paid through popularity, but how does that help the person tangibly? I can create a huge 1k, 10, 100k starred repo on Github, but I still have to go through the same interview process as anyone else. Except now I am (apparently) bound to maintain and document and correctly deploy my own personal projects, just because some fool at Microsoft decided it was a good idea to rest a chunk of their software stack on it?

                                                                              But no, you are right, people should start choosing LICENSE files that deliberately do not give rights to companies unless there is financial exchange. It’s the only way that they will learn.

                                                                            2. 3

                                                                              It’s more the fault of the downstream developers and companies, though, isn’t it? They decided to take someone’s code, use it to make money, and not throw a penny in their direction. It was the ‘Open Source’ philosophy that decide to turn “Here is a gift to my fellow developers” into “Here is a project I put my sweat and labour into, feel free to exploit it with no regard for the cost”, and people bought into it wholesale.

                                                                              This repo was owned solely by the person who wrote it, and there’s no reason they have to consider downstream projects that they might not even be aware of, when they make changes to their code. I am not arguing for the guy, but I absolutely think his act here was justified, and a positive thing in the long run. There’s a reason for a liability waiver in the LICENSE file and if you’re just going to take code and ignore that liability waiver, then that’s up to you, buddy. Doubly so if you’re a tech lead and you’re evaluating the dependencies your company is going to use to build stuff, right at the start.

                                                                              Hopefully, rather than blaming this on one erratic individual, companies will start paying money upstream to the projects that they make money off of. But I doubt it.

                                                                              1. 6

                                                                                I don’t disagree that the license makes no guarantees, but that’s an unconvincing technicality when it comes to relating to one another as humans. The libraries were offered because they were useful, they were accepted in good faith, and then they were sabotaged in bad faith. To the author it may have felt like a righteous protest, but from the outside it just looks like taking your ball and going home.

                                                                                I’ll add, Snyk flagged at least one of these libraries as vulnerable to DDOS today because of its deliberate infinite loop. That’s malware in my book, and that’s crossing a line.

                                                                                1. 3

                                                                                  I feel like if you’re going to impose an unstated and explicitly disclaimed responsibility (attempting to release only useful software) on the developer as a condition of good faith bargaining, it’s only fair to expect some compensation in consideration, particularly given the developer asked as much a year ago from what I recall. It’s still reasonable, in that good faith universe, to leave it under the MIT license to allow users to pay what they feel is fair.

                                                                                  But the reality is this is exactly why businesses use contract and licensing language to expressly indicate what parties can count on one another for. Good faith, in that world, means adhering to the spirit of that language, and in this case that language clearly indicated the developer could do whatever they wanted with the library and that anyone consuming it should be on notice to verify that it did what they wanted. For what it’s worth, that cuts both ways - GitHub is also acting in the spirit of the MIT license by continuing to distribute the older version, despite the developer’s wishes.

                                                                                  The malware thing is a good point though - I was under the impression this was breaking deployments and potentially causing downtime, both of which are in my opinion reasonable consequences of using something unreliable. But if the infinite loop introduced the ability for remote users to trigger downtime that’s subtly different in a way I agree crosses some kind of line.

                                                                            1. 1

                                                                              I don’t suppose anyone can link to some material about the community’s inclination away from Leiningen and toward the core language tools?

                                                                              1. 3

                                                                                A few prominent people in the community have been strongly advocating for using deps. Sean Corfield has written a lot about switching to deps. David Nolen and Alex Miller have been big proponents of it as well. I also notice that projects are starting to use deps. For example, Metosin is using deps for Malli now. While I personally like Leiningen, I do see the value of using the official tooling, and I think deps now reached feature parity with what Leiningen offers.

                                                                                1. 1

                                                                                  Remember the Clojure mindset: once it works, it always works.

                                                                                  Lein isn’t going away. I would consider lein going away to be a bad sign for the ecosystem as a whole. Just people are making more modern choices on NEW code, providing no pressure to update OLD code.

                                                                                1. 15

                                                                                  The emerging centralization is exactly what happened on “traditional” web, and is human nature. The web IS decentralized, its just that nobody wants the burden of constant upkeep and baseline of knowledge/skills necessary to host their own stuff. Its 0% surprising to see that in the crypto world because its even more complicated and has an added feature that mistakes can live forever and be technically irreversible. Thinking about people who have gotten wallets stolen or scammed or irretrievable for other reasons - or how the adidas smart contract meant to limit purchases was not well-designed-enough and there is zero recourse BY DESIGN.

                                                                                  Theres this belief in the crypto community that these are all things that can be ironed out and that there is a technical crypto-based solution to all of this, but it seems to me like they are banging their heads against a wall trying to recreate something that exists and functionally works a lot better for 99.9999% of cases with something new with tons of baggage and unsolved problems for a benefit to 0.0001% of cases. Theres a huge UX gap, and it’s going to get bridged (if at-all) by a centralized company - this whole thing feels like a play for usurpation rather than changing the game.

                                                                                  Knowing that there’s major problems with crypto “to be solved” it’s frustrating to see the hype at this level. Its 100% in gold rush / prospecting mode and so many people are going to lose big even if it emerges as a longterm technology.

                                                                                  My own perspective on crypto/blockchain hasn’t changed much in the last 5 years - its a solution looking for a problem. Lately it’s being touted as “the solution to everything”, and I don’t see that. Even more-problematic is that theres an emerging phenomenon where if you don’t play, you get scammed - lots of noise about people minting NFTs on Openseas for content they don’t own, and theres no recourse for creators outside the system.

                                                                                  More writing along these lines:

                                                                                  Is it technically neat? Yes. Time will tell if it pans out anywhere near the hype, and there is a lot of reason to believe it won’t.

                                                                                  1. 10

                                                                                    a solution looking for a problem

                                                                                    Ain’t that the truth. I think there’s also an assumption that “decentralized” is automatically good, as if fiat currency must be bad because SVN was bad. When the central currency authority is a democracy of citizens, decentralization throws away “one person, one vote” with regard to what money is, in favor of “one node owned, one vote”. That should only be a benefit in places where people didn’t get to vote in the first place.

                                                                                    1. 4

                                                                                      When the central currency authority is a democracy of citizens, decentralization throws away “one person, one vote” with regard to what money is, in favor of “one node owned, one vote”.

                                                                                      Can’t agree more. One of the fundamental supposed advantages of cryptocurrency is that unlike centralized banking, it’s democratic, right? You have to convince 51% of the network to adopt your change in order to make it, instead of the bank unilaterally changing the rules. But the problem with this in practice is that the ability to do this is imbalanced and heavily favors people who are able to run nodes and especially people who know how to code.

                                                                                      The exact same power structures exist, except instead of banks - which are at least somewhat accountable to the government and therefore citizens - being in charge, crypto people are creating a future where they are the ones in charge, with no real accountability or oversight because the ability to code is a prerequisite for active participation in the system. I find this idea terrifying. The US Congress (feel free to mentally change this to your country’s legislature or whatever) is dysfunctional, but I would still rather they were in charge of the entire financial system than the comments section of the Orange Site.

                                                                                    2. 5

                                                                                      Knowing that there’s major problems with crypto “to be solved” it’s frustrating to see the hype at this level.

                                                                                      personally the must frustrating/exhausting aspect of the current crypto hype cycle is the unbridled optimism and lack of foresight i see from users. these systems are supposed to be trustless and magical, except “they’re not fleshed out yet, but we’ll fix it in the future by adding trusted third parties to the system in a way that somehow doesn’t undermine its value proposition”.

                                                                                      imagine if someone advertised DNS V2 today as completely trustless but glossed over the fact that root servers are still going to exist.

                                                                                      1. 1

                                                                                        Even more-problematic is that theres an emerging phenomenon where if you don’t play, you get scammed - lots of noise about people minting NFTs on Openseas for content they don’t own, and theres no recourse for creators outside the system.

                                                                                        From the sidelines, I’ve heard this practice described as scamming or even “theft” or couple of times and I’m really not seeing it. It’s as if I looked at this submission and thought “wow this is a great post by Moxie. I wish I owned the submission; maybe I could buy it off faitswulff?” Suppose faitswulff agreed and for $50 I became the official submitter. Has anyone of Moxie, me or faitswulff been ripped off? Not at all. It’s totally bonkers but I’m hard pressed to see the scamming element.

                                                                                        1. 7

                                                                                          Except that NFTs are always advertised as real, indisputable, true, verified-on-the-blockchain, no-pesky-government-can-ever-confiscate-it ownership. If you go far enough down the rabbit hole you end up in the cliché that the only thing you “own” is a receipt that says “you own this receipt”, but that’s not how people actually talk about or advertise the amazing incredible unbelievable future of “web3” and NFTs and such.

                                                                                          1. 1

                                                                                            Leaving aside many artists’ emotional view of copyright, which does tend to veer mostly towards the “theft” part of the spectrum, it’s a fact that being seen as involved in NFTs is a reputational black mark. Some minter creating NFTs without the artists consent can direct a ton of ire onto the artist, simply because many, many people view NFTs as money-grabbing scams, and hate that their favorite artists and projects are “selling out”.

                                                                                          2. 0

                                                                                            a solution looking for a problem

                                                                                            Have to disagree. This new era of finance brings a lot of possibilities not available in the old bureaucratic system with all its guardians. Not talking about dog coins and outright scams, but the legit projects.

                                                                                            There’s so much composeability and innovation happening. One system plugs into the other, and suddenly you have an ecosystem of financial products miles ahead of what’s available to the average pleb “in the normal world”.

                                                                                            Imagine if we only had closed-source software from old giants like IBM, Oracle, Microsoft and Apple instead of the wild-west of creativity and innovation that is open-source. Same idea.

                                                                                            1. 15

                                                                                              “An ecosystem of financial products” that burn copious amounts of energy, are susceptible to rug-pulls, have no actual technical innovation behind any of them, have their users go through shady leaps and bounds to realize their immaterial wealth, were centralized from the start, and only grow in value if there’s enough committed exchange of actual currencies.

                                                                                              Ponzi scheme enthusiasts/grifters can keep spouting this “everything is great” rhetoric, it is not true and never will be. You are part of the problem.

                                                                                              1. 3

                                                                                                What possibilities? There’s a lot of rhetoric and hopes here, but I don’t see much substance.

                                                                                                1. 1

                                                                                                  There’s a bunch depending on how deep you wanna go. But starting from the top, you can:

                                                                                                  • Borrow dollars against your portfolio and have a line of credit not available to you in legacy finance

                                                                                                  • Deposit dollars and earn a pretty good interest rate not available to you in legacy finance (

                                                                                                  • Buy stock derivatives, enabling people in for example Thailand to invest in American stocks like Apple or Tesla (

                                                                                                  • Pay online or in real life with your digital assets using something like Chai, Alice, Kash etc. Chai is used by millions of unsuspecting users in South Korea, and thousands of merchants connected:


                                                                                                  Alice and Kash goes even further than Chai I think. They are basically neo banks.

                                                                                                  Then, there are some more advanced features which might not be for everyone, but you can also:

                                                                                                  • Help secure the ledger/network by staking assets with a validator node, and get rewarded a portion of the transaction fees. It’s like if Visa or Chase Bank would partner with you and give you a small portion of the revenue.

                                                                                                  • Provide liquidity to various projects and get paid for doing so, for example on exchanges. A little bit of passive income with assets that might otherwise only be speculative.

                                                                                                  Personally I think it’s pretty cool with the composeability of a lot of projects. It’s like Lego or functional programming. The output of one project plugs into the input of another, and you can build some pretty sophisticated products/services using the basic building blocks.

                                                                                                  1. 2

                                                                                                    I can’t tell if you’re just really really enthusiastic about cryptocurrencies to a naive degree or just trying to advance an agenda. But referring to fiat currency as “legacy finance” and linking cryptocurrencies to the idea of functional programming seems to me as cheap attempts at gaining more mindshare among the folks here. Either that, or you’re living in a bubble which is sure to burst at some point.

                                                                                                    In any case, maybe you should relax and stop commenting so much here trying to win people over that don’t want to be won over.

                                                                                                    1. 1

                                                                                                      Yeah ofc I’m just here to corrupt your virtuous souls

                                                                                                      But referring to fiat currency as “legacy finance”

                                                                                                      I didn’t. There’s plenty of fiat (stable coins) in crypto as well. I was talking about old banks & their old tech stacks.

                                                                                                      linking cryptocurrencies to the idea of functional programming seems to me as cheap attempts at gaining more mindshare among the folks here

                                                                                                      I’m just writing about aspects that interests me, one of which is FP. There are even a few projects written in Haskell.

                                                                                                      stop commenting so much here trying to win people over that don’t want to be won over.

                                                                                                      A.k.a you want to maintain the echo chamber? There must be room for other views as well.

                                                                                                      bubble which is sure to burst at some point

                                                                                                      There’s booms and busts everywhere. Same in the stock market & tech startups. The long game matters more.

                                                                                                2. 2

                                                                                                  Mandrean, I think it is great that you showed up in the discussion since you’ve done a very polite job of representing a naive crypto-influenced hopeful.

                                                                                                  A few things I’d like to point out:

                                                                                                  • Proof of Stake is not decentralized and in fact cannot be decentralized. It is a permissionsed system where the only way to get voting rights is an out-of-band transaction (buying tokens) there’s also a convincing argument that you can force these platforms to recentralize if they become decentralized via coordinated bribery offers (but only if you have an oracle).
                                                                                                  • The oracle problem is the elephant in the room and addressing that requires social networking technology not verifiable runtimes (blockchains).
                                                                                                  • Proof of Work and also probably Chia’s Proof of Space+Time are things that work but /just barely/, with chia we may have a energy friendly settlement layer to build a p2p digital society on top of but they decided to premine as much as will be mined over the next 20 years.
                                                                                                  • The fundamental coordination problem is not byzantine fault tolerance but rather the tragedy of the commons (sybil resistance is implied by resistance to TotC). Proof of Space+Time is still a resource wasting race so it’s not an improvement over bitcoin until we have the social layer to regulate the competition.
                                                                                                  • NFTs can eventually become deeds to content but only once we have a legitimate platform, which people believe the combination of twitter and ethereum to be. However the legitimate platform (for the time being) is called government.

                                                                                                  Basically, what someone said about the crypo-world programmers not needing to do their jobs to get paid is not only correct but I also think it is the other way around, if you want to get paid you need to do a scam; the problems are hard to solve, require large investment to make a noticable change in the state of tooling to address the problems and finally there is no way our current economic system will value charitable work. Sorry I have to run to lecture now I’d be willing to go deeper into these points.

                                                                                                  1. 1

                                                                                                    Proof of Stake is not decentralized and in fact cannot be decentralized.

                                                                                                    Disagree; PoS can be decentralized not only in terms of geographic location & jurisdiction, but by voting power as well (and maintained that way).

                                                                                                    For example, see study from Leeds University:

                                                                                                    Our results based on simulated paths of the dynamics of nodes’ coins at stake suggest that decentralization of PoS blockchains can be largely maintained with moderate constant or dynamically adjusted coin inflation while decreasing inflation yields a large loss in active staking nodes over time when coin prices are static. Target node participation rates are not only fairer in terms of coin distribution but also yield higher value-weighted returns for participants.

                                                                                                    The oracle problem is the elephant in the room

                                                                                                    There are already decentralized oracle networks, for example Chainlink and Witnet

                                                                                                    sybil resistance / ToTC

                                                                                                    It’s an interesting space to follow. Witnet’s whitepaper proposes algorithmic reputation:

                                                                                                    I’m sure researchers will come up with other interesting approaches in the coming years as well.

                                                                                                    if you want to get paid you need to do a scam; the problems are hard to solve

                                                                                                    Same applies to being an engineer at Netflix, Spotify, Tesla etc. as well then. Also scams!

                                                                                                    1. 1

                                                                                                      Disagree; …

                                                                                                      Not a matter of opinion if mathematics is to be trusted. Democracy suffers from the same unsustainability problem (via totc).

                                                                                                      chainlink … witnet..

                                                                                                      I am aware of them, they don’t solve the incentive problem. Chainlink seems more bad-faith than witnet but neither works.

                                                                                                      Netflix, Spotify, Tesla, …

                                                                                                      Yes, this is a very good point. Our economic system systematically undermines non-scams so it’s no surprise that you can name many big companies, this is infact what prompted me to comment in the first place. People like to jump on a “solution” whenever there is a hard scary problem and some con man with a rationalization but the problem of “pollution” needs to be managed no matter whether or not we have a proper solution to it in the abstract, however, what we are actually seeing is that the problem is being ignored or made worse by people following the advice of those who claim to have a solution. COVID is being run on the same dynamic.