While I appreciate that you are spreading the word, I have objections regarding the presentation.

    It shouldn’t be marked 2018. It isn’t complete, but neither it’s abandoned (see the commit history). It’s open to contributions too.

    If other people participate, it will be completed sooner.

    Note that there’s also live version at https://ocaml-book.baturin.org


      srv is way, way simpler than caddy, but they’re trying to solve different problems. As you mentioned: a simple server focused on one-off interactive runs. Caddy’s like, a full-blown nginx competitor.

      You can quite literally just type srv:

      $ srv
      2020-06-06 11:52:59     Serving . over HTTP on

        I couldn’t have put it better, thanks for sharing your thoughts. I always like to consider the example of Chemistry: In the 19th and 20th century, German scientists were leading in chemistry and most papers were published in German. Chemistry students were more or less forced to learn German to understand these papers, and German became the lingua franca of Chemistry, which has changed to English though.

        In computer science, English is the lingua franca. I don’t think it’s exclusionary to only offer software documentation and code comments in English.


          Shoutout to @dmbaturin, the author of the series.


            relinquishing control over your understanding of where data lives, its owners, and its lifetimes

            Probably part of the problem is I’m wrapping a library that already owns and manages data, with some tricky lifetimes (interior pointers and such.) Part of the appeal of Rust is to make this API safer — in C++ you have to keep track of some of the dependencies by hand and be aware that releasing X will invalidate Y. I know I can teach the borrow checker about this, it’s what it was made to do, but it’s a more difficult task than what most people probably start out with in Rust.


              I might’ve been a bit unclear. A don’t-ask-don’t-tell approach can be taken by members, if they prefer (many communities don’t provide that luxury and e.g. require clear-name-contributions), but doesn’t have to be. We just don’t care about genders or other aspects other than your coding skills. I see that you have a different opinion on this, which is cool, but the suckless philosophy does not extend beyond software aspects and I personally (not speaking for the group) don’t see a reason to extend that.


                Oh this is real nice, didn’t know about this one. It feels very similar to me in spirit. Reminder to self to match darkhttpd in logging info.


                  Yup, everything you’re saying is what I want to get out of Rust — the goal is to port some complex, finicky, concurrent networking code that uses this API I’m wrapping, because it’s too complicated, messy and hard to maintain in C++. And I’ve really enjoyed parts of Rust like Cargo and the wonderfully informative compiler error messages, which feel like a TA helping teach me. (Until the point where I get the same error over and over no matter how I tweak the code…)

                  I think I need to find a forum where I can post some snippets that don’t work and ask for help. I’m not really sure where to go, though, as Rust is so big there isn’t a single obvious place (like the Nim forum, for Nim.) Do I just go directly to SO?

                  (And yeah, my C++ style leans heavily on unique_pointer, moves, and on homemade RefCounted and Ref<> classes. I’ve been kind of writing Rust-like code for years, especially after I read about Rust in 2014(?) and began envying it.)


                    It definitely comes at a cost. Still, as I could see from my own experience, after a few years one gets more careful with culture-relative judgements. There are still many things Americans do that I don’t quite understand or find interesting.

                    To give an example, I found out a few years ago that the German “mhm” (i.e. the expression to acknowledge you are listening to someone while he speaks) is often interpreted by Americans as a “huh?”. You could imagine how much confusion that caused.

                    Cultural differences are valuable, though, and I would not want to miss them, even if they become troublesome. I can imagine an American coming to Germany to experience a torch hike and liking it.


                      I love their explicit endorsement of Open Source toolchains. Just one question:

                      Could they actually forbid reverse engineering of their bitstream? Isn’t such reverse engineering explicitly allowed by law in most countries? Can we really waive this right just by agreeing to a EULA, which if I recall correctly, does not even have the full force of contract law behind it?


                          This is great news! I was just starting to get into the Yosys/SymbiFlow projects.

                          1. 5

                            not taking an explicit political stance, translates to implicitly supporting the status quo

                            No no no, I cannot agree with that. Let’s take an example. I’m working on a crypto library, that on many aspects is very close to the Suckless ideals: it’s in C, it’s small, it’s easy to integrate into other projects… One of the motivations for it was to fight unnecessary complexity. A fairly political goal if you ask me: if software becomes as simple as I think it can (and should) be, the changes could be felt throughout the global economy itself.

                            My project also has an implicit endorsement of the status quo: it is written in English, and I have no intention to translate the documentation, or even the web site to other languages. Not even French, my native language. Sorry, you need to learn English to use my project. That’s kind of an implicit endorsement of US hegemony. Not that I’m very happy about that, but not fighting that fight does make me reinforce the ubiquity of the English language.

                            But there’s no way my project can have a stance on everything. Its stance on many many subjects is really neutral. It does not fight nor reinforce the status quo. Veganism? Patriarchy? White supremacy? I hardly have a community to speak of, there’s just not enough people to warrant something like a code of conduct. That does not mean my project implicitly rejects vegan transgender black women. In fact, I do hope they’ll feel as welcome as anyone else. And right now, I believe being nice to whoever contacts me is enough.


                              It allows for most compatibility in terms of code. It would run on ksh (and I use openBSD a lot in my setups) and on zsh and on bash.


                                FYI, mimtypes.types_map in the standard library is a dict mapping common file extensions to their MIME type values. On my system it already knows .js and .wasm and has the right mappings for them, so setting extensions_map to that would probably do what you want:

                                Python 3.8.0 (default, Nov 23 2019, 00:30:22)
                                Type 'copyright', 'credits' or 'license' for more information
                                IPython 7.13.0 -- An enhanced Interactive Python. Type '?' for help.
                                In [1]: import mimetypes
                                In [2]: mimetypes.types_map['.wasm']
                                Out[2]: 'application/wasm'
                                In [3]: mimetypes.types_map['.js']
                                Out[3]: 'application/javascript'

                                (or if yours is missing types you want, I guess .copy() the base one and update it for one-off use, or register the new types through mimetypes.add_type())


                                  What I found really interesting is the fact that some specialized database systems (or the ones operating at really huge scales) are starting to skip the filesystem layer completely and work directly with the underlying devices. Or systems that are supposed to be used with specific type of hardware, like exclusively on nvme disks or tailored to nfs or similar concepts. And even traditional systems start to expect very specific things from the filesystems you put them on.

                                  I think these things are happening because everybody wants to be a platform for every type of workload - so as to not lose marketshare or something.


                                    Unfortunately there is simply no solution: positive discrimination is opposed to meritocracy.

                                    This is not necessarily the case. One’s skills are strongly a result of the opportunities available to them, and meritocracy as it is commonly interpreted (“whoever has the best skills right now”) is basically just a proxy metric for who had the most privilege growing up. This is an obviously unreasonable metric if your goal is good software.

                                    There’s a different interpretation of “meritocracy”, however; that is, you ensure that the same opportunities are available to everyone, and then look at who comes out most competent. This interpretation of meritocracy requires positive discrimination, as it means active outreach to underprivileged demographics and giving them the same opportunity to learn and grow that privileged demographics got automatically.

                                    Another way to look at that, is that you are massively increasing the pool of people who have the opportunity to manifest their competence, by lifting up those who are societally disadvantaged. Even just from a “building good software” perspective, ignoring the ethical side, this is a great approach.

                                    1. 7

                                      Arguably having one connector that is not actually interoperable is worse than having multiple connectors whose lack of interoperability is apparent at a glance.


                                        On the other hand, I don’t think it’s realistic to expect every project to look in depth at difficult social problems and form some sort of consensus on how to best deal with it.

                                        I think that’s entirely reasonable. This is pretty much the basis of community management in general. It doesn’t even need to be done by the core developers, but someone in the community needs to do it, if you want a healthy community.

                                        Why would that be the case?

                                        Because they know that their safety is not assured in communities that refuse to take an active stance against bigotry of various kinds. I’ve gone into more detail about this in this other subthread.


                                          So why hamstring yourself to dash? To guarantee compatibility with a random /bin/sh should you ever port to a long dead platform? (Except Solaris of course, where /bin/sh wasn’t posix compatible anyway). Bash has been a de facto standard and available almost everywhere for decades.