1. 2

    I’m away from my computer right now so I can’t make a PR, but I’d also like to nominate the beautiful concurrency paper.

    https://www.microsoft.com/en-us/research/wp-content/uploads/2016/02/beautiful.pdf

    1. 1

      It almost seems too good to be true! What’s the catch? (as in what’s stopping us all from doing it this way?)

      Edit: Just found Duffy 2004, “A (brief) retrospective on transactional memory”

    1. 1

      Way cool! Thanks for posting!

      1. 2

        Hey super cool! I’ve been looking at doing something like this for fun. This was perfect for me to poke around on and learn about the internals. Thanks for the submission.

        1. 21

          These statements annoy me:

          Heck, if you ask some people, Rust is less secure than a GC’ed language for web apps if you use any crates that have unsafe code - which includes Actix, the most popular web framework, because unsafe code allows things like deferencing raw pointers.

          I can’t help but think calling the unsafe keyword unsafe was a potential marketing error. Actually, within the rust community it helps to keep the portions of unsafe -marked code lower.

          But many people short circuit to the conclusion that code with the unsafe keyword must be, indeed, unsafe. Maybe, they should think of it as expert or free code that relaxes some constraints (and by far not all, you have still more checks than in normal C++).

          In terms of Rust unsafe, Java/ruby is full of unsafe code since some crucial safety guarantees in these languages are weaker. Obviously, there is a lot of unsafe rust code in the Rust std lib and especially in low level libraries. If this code is carefully vetted, this is all good. Rust allows you to focus extra attention on the small blocks of unsafe code.

          Will I avoid unsafe code when I can? Yes. Should popular libraries make prudent use of unsafe if it results in large benefits? Absolutely. Is that dangerous? Not more than in other languages without these restrictions but yeah, it requires great care that you can avoid if you avoid unsafe.

          1. 8

            It’s an especially annoying considering that performance-critical parts can always be written in unsafe ways, GC’d language or not. A prime example is uwsgi for Python.

            1. 5

              @matklad Thank you for pointing out weak parts in my post. I wanted to post this as a separate reply to your reply but lobste.rs prevents me from multiple replies in short succession??

              Having to mark certain snippets of code as unsafe is a great tool – that not all languages have. The less unsafe you use, the easier it is to achieve the security, of course, without being a genius or having lots of people helping out.

              We agree that unsafe code should be avoided and carefully weight against advantages. I personally thing that well-reviewed libraries are a good place for unsafe code with huge performace benefits: crossbeam, …

              To quote from async-std security:

              Writing a highly perfomant async core library is a task involving some instances of unsafe code.

              To clarify my remarks on the comparison to “GC’d languages”:

              A) The quote compares safety of Rust to “GC’d” languages and says that Rust is maybe less unsafe because it uses “unsafe” code in its libraries.

              I’d argue that there is no completely “safe” web app stack in any language that I am aware of. (and then you’d have to deal with compiler errors, operating systems, …)

              If you look at NodeJS or Ruby on Rails, the interpreters and the HTTPS stacks contain lots of native code that isn’t verified by a smart compiler for safety guarantees. Correct me if my assumptions are wrong. I’d not be surprised if a Rust web app with actix contained a lot less “unsafe” code (in the Rust meaning) than an app built with these other stacks.

              Of course, maybe more importantly, counting unsafe code lines is only a proxy argument because we cannot measure security: One line of unsafe code can destroy the safety of the whole application in crucial ways as can a compiler or std library bug. And a library like actix with six usages of unsafe could be completely secure. Or not.

              B) I didn’t say what I meant with “crucial safety guarantees”, it was misleading. What I had in mind was more than only basic memory safety. The initial quote was about security. The argument was that Rust was less secure than “GC’d’ languages. I don’t believe that Rust code is usually less secure than that of GC’d languages and the expressive type system and guarantees that go beyond basic memory safety contribute to that.

              I hope that makes sense. I wish I could make my point clearer in less words ;)

              1. 5

                Thanks for the clarification! I think we are in a broad agreement here. In a narrow sense, unsafe is a sharp tool, easily misused, and dangerous even in the hands of an expert. However, it does improve the overall system’s security.

                I violently agree with your point about full-stack safety of web apps. On the one hand, Rust’s unsafe (unlike Python’s ctypes) is available to “application programmer”, and pulls in the less safe direction. On the other hand, safe Rust is available to “systems programmer” (which again is unlike ctypes), and this massively improves the safety of lower levels of the stack, which feels like a bigger deal.

                I also agree that Rust’s other type-system niceties improve application level correctness (and hence security) in comparison to current crop of popular static or dynamic languages.

                That being said, I expect in the web domain specifically, application-level security (csrf tokens, protection against SQL injection, not storing passwords in plain text, etc) is a relatively bigger issue than execution-environment security. And here I expect a lot depends on maturity. I am not an expert in web dev, and, at this point I think I’ll be able to develop overall more secure web app with Django, as that should be much more hardened against misuse by web-security-naive programmers.

                1. 1

                  Interesting point about what is “available” to the “application programmer.” I guess the “available” is in terms of convenience and just writing unsafe somewhere is very convenient.

                  I, for myself, was never tempted to use unsafe but I neither wrote a low-level lib nor should I assume that I am the standard… I might be overcareful. And I can already shoot myself in the foot with misunderstanding atomic variables in safe code already ;)

              2. 4

                But many people short circuit to the conclusion that code with the unsafe keyword must be, indeed, unsafe.

                The short-circuiting might be wrong, but I personally don’t disagree with the conclusion. Unsafe code is hard, even widely battle tested things like SmallVec get CVEs. So, in practice, rust with unsafe does have memory safety issues due to bugs (although it’s important to keep in mind that Rust CVE have a somewhat lower bar, as theoretical, and not only practical, unsoundness counts).

                In terms of Rust unsafe, Java/ruby is full of unsafe code since some crucial safety guarantees in these languages are weaker.

                I am not sure I exactly understand what you are saying here. I think I agree with the general idea, but I disagree with the specific wording. In the context of Rust, unqualified safe/unsafe refers to memory safety, and, in terms of memory safety, Rust, Ruby, and Java are roughly equivalent (roughly because there’s extensions/ffi/native runtime angle). Things like iterator invalidation are not covered by the safety terminology.

                1. 9

                  Frankly, if we hadn’t had years of the Rust Evangelion Strike Force shitting on C and C++ for their use of unsafe pointers and whatnot, this might fly.

                  This charity wasn’t extended to references and some of the nice pointer types in C++ that solve memory safety issues, so why should we give unsafe a pass now?

                  Sorry your language doesn’t actually match its marketing.

                  1. 24

                    Your ax grinding is absurd. It is possible to entertain two different problems simultaneously:

                    • People get too excited about new technology like Rust and oversell its benefits by stating misleading things like “Rust can’t have memory safety bugs.” (I personally have been pretty consistent and vocal about clarifying this particular point.)
                    • People get too curmudgeony and undersell Rust’s benefits by pointing to existence of unsafe as proof positive that Rust is no better than [insert other language here].

                    Really, it’s not difficult to see how both of these problems can exist simultaneously. Just because the first exists doesn’t mean we can’t also talk about the second.

                    Your consistent anti-RESF ax grinding is really just as bad as RESF zealots, if not worse. And yours has been going on for years too.

                    1. 7

                      You didn’t say a damn thing when the user I replied to said “oh ho ho Rust is no less safe than Java or Ruby, if you just vet the code”. This is the same argument as neckbeards going “C is safe if you just write the code carefully!”. It’s pretty obvious when you give a pass to one but not the other.

                      Again, for context:

                      In terms of Rust unsafe, Java/ruby is full of unsafe code since some crucial safety guarantees in these languages are weaker. Obviously, there is a lot of unsafe rust code in the Rust std lib and especially in low level libraries. If this code is carefully vetted, this is all good.

                      Kettle meet pot, and you’re experienced enough (grats on ripgrep) that you should know when shilling is happening.

                      Anyways: my grinding has been consistent, for years, because the RESF has been obnoxious, for years.

                      I have observed no patterns of this behavior behind other C/C++ replacements. The D folks are underappreciated and chill. The Zig people don’t spam message boards and bug trackers asking to rewrite things in Zig. The Nim community, to my observation, don’t show up in every comment section to talk about how impossible is is to write safe software in C and how Nim is the answer, every time C shows up. Go people seemingly are too busy shipping useful utilities to even talk very much about Go being better than C–even at the height of Google’s shilling of it.

                      And every time this gets brought up, people like you show up to motte-and-bailey it and go “oh no no, who are those other ruffians, we’re just a kind and inclusive and loving community, oh we’d never say anything bad about another language, perish the thought!” This is a real problem, and just because y’all either can’t or won’t acknowledge it doesn’t mean the damage hasn’t been done to people outside your blessed tribe.

                      ~

                      The hell of it is, I think Rust is a neat language with some neat features. I think it has some cool things going for it, even though the Rust talking-point bingo is predictable (almost as much as Elixir bingo). I can list the ideas I like from it, and if my workflow looked like it needed Rust more than what I’m already doing, I’d be excited to switch.

                      I just don’t like a community whose evangelism seemingly requires pervasive and persistent propaganda and, at times, lying. It shows a lack of moral character and engineering rigor that makes me concerned for the long-term health of the ecosystem.

                      1. 12

                        You didn’t say a damn thing when the user I replied to said “oh ho ho Rust is no less safe than Java or Ruby, if you just vet the code”.

                        Because that isn’t a sensational thing to say? It’s nowhere near the same as the “neckbeard C programmer” you alluded to.

                        Kettle meet pot, and you’re experienced enough (grats on ripgrep) that you should know when shilling is happening.

                        Anyways: my grinding has been consistent, for years, because the RESF has been obnoxious, for years.

                        Is this some kind of joke? And you aren’t obnoxious? If that isn’t the kettle calling the pot black, then I don’t know what it is.

                        It’s one thing to respond and clarify things said by the “RESF” (and other claims made by zealots), but you go far beyond that and consistently engage in this meta flame war.

                        I have observed no patterns of this behavior behind other C/C++ replacements.

                        Well, what patterns of behavior have you observed among C/C++ programmers? The D, Nim and Zig communities aren’t nearly as big as Rust’s. And Go doesn’t really bring any new big ideas to the mainstream, so I really wouldn’t expect people to get that excited about it. That’s a feature of Go IMO. You also have immense pressure against talking about Go anyway, lest you be shouted down by PL zealots. (Zealots zealots everywhere, yet you seem to love to grind against one particular group in particular. How… obnoxious?)

                        And every time this gets brought up, people like you show up to motte-and-bailey it and go “oh no no, who are those other ruffians, we’re just a kind and inclusive and loving community, oh we’d never say anything bad about another language, perish the thought!” This is a real problem, and just because y’all either can’t or won’t acknowledge it doesn’t mean the damage hasn’t been done to people outside your blessed tribe.

                        Given that I’m a moderator in the Rust community and that I have shut down PL flame war discussions in official Rust spaces, it would be pretty weird of me to say that we never say anything bad about another language, now wouldn’t it?

                        And it has been acknowledged. That’s why I always do my best to clarify claims that are too bold. Do I get every single one? No. But then again, I don’t spend my time responding to every single one of your ridiculous comments either.

                        I just don’t like a community whose evangelism seemingly requires pervasive and persistent propaganda and, at times, lying. It shows a lack of moral character and engineering rigor that makes me concerned for the long-term health of the ecosystem.

                        This is a giant load of conspiracy-like bullshit. For someone who is so keen to call out bullshit and shilling, you sure do like to sling a lot of it yourself.

                        1. 8

                          I’m not sure the community is actively funded to evangelize. Could it just be that using rust makes people want to share their enthusiasm?

                          1. 2

                            It’s certainly possible. Maybe people just really liked Java, C#, and Go too.

                          2. 6

                            You didn’t say a damn thing when the user I replied to said “oh ho ho Rust is no less safe than Java or Ruby, if you just vet the code”. This is the same argument as neckbeards going “C is safe if you just write the code carefully!”. It’s pretty obvious when you give a pass to one but not the other.

                            I mean, yes? @burntsushi is a member of the Rust community, of course it’s going to bother him a bit more when someone like you is attacking that community vs someone in that community (politely!) making a debatable claim. That’s basic human social skills, not him being a hippocrite.

                            Kettle meet pot, and you’re experienced enough (grats on ripgrep) that you should know when shilling is happening. […] And every time this gets brought up, people like you show up to motte-and-bailey it and go “oh no no, who are those other ruffians, we’re just a kind and inclusive and loving community, oh we’d never say anything bad about another language, perish the thought!” This is a real problem, and just because y’all either can’t or won’t acknowledge it doesn’t mean the damage hasn’t been done to people outside your blessed tribe.

                            I know you’ve been trying to be less angersock and more friendlysock, so I’m just going to say this straight: you’re being an obnoxious jerk right now.

                            1. 4

                              Agreed. This is like mom and dad fighting. Both are respected members of the community. Obviously it’s okay to disagree, but I expect both to be examples of what it means to be a good citizen.

                              I have a bias here. However my commentary should be applied broadly. Let’s demonstrate an eagerness to give each other the benefit of the doubt. Our community is known for being effective and compassionate regardless of disagreements. I’m committed to that because of lobster leaders like you have both demonstrated that it works here.

                              Thank you both for being candid. I look forward to the constructive conversation this exchange will lead to.

                              1. 2

                                Yeah, again, sorry for setting a bad example. :(

                              2. 2

                                I know you’ve been trying to be less angersock and more friendlysock, so I’m just going to say this straight: you’re being an obnoxious jerk right now.

                                Yeah, you got me there–fair point. I’ll go cool off.

                          3. 1

                            I totally agree. There’s more than a little bit of trying to have it both ways here, and observers are too smart for that.

                          4. 1

                            I can’t help but think calling the unsafe keyword unsafe was a potential marketing error.

                            Isn’t there a comparison to unsafe in C#? The same arguments were made back in the early 2000s about that and it made for many tirades and comments.

                            I think Rust user’s domain requirements might provide longevity to the use of unsafe, it has disappeared from discussions in the C# space. It’s to the point where many C# programmers would give you a puzzled look if you mentioned unsafe existed.

                          1. 16

                            I’m a big fan/user of Rust I think this is a fairly accurate assessment. There is a lot of interest in building web applications with Rust and I’ve built a couple myself but there’s still a ways to go. Coming from Rails, some of things I’ve missed are:

                            • built in csrf protection on forms
                            • an equivalent to devise
                            • sophisticated form handling (array attributes, nested attributes)
                            • form validation and presentation of errors back to the user, preserving form input

                            Actually… maybe it’s mostly form handling that’s immature. Seems many people build back ends in Rust for JS SPAs where this isn’t such an issue but I’m not interested in building that type of web application.

                            On the other hand some things are delightfully easy:

                            • JSON responses/request parsing — often a single line thanks to serde
                            • Microsecond response times, low memory use, instant start up time.
                            1. 5

                              Serde is so amazing. It’s actually something I miss in higher-level language frameworks, but that’s because it ties in with the type system in Rust to also do validation.

                              In general, the type system in Rust takes a way a great deal of ‘what-ifs’ about corner cases in code. I feel like we often cut corners when working in higher-level languages, causing confusing error messages to the user or straight up security issues.

                              I guess it’s a double edged sword that also causes some of the difficulty highlighted by OP.

                              1. 3

                                Well, and async is complicated if you use it.

                                1. 5

                                  Yeah; I’d like to underscore this sentiment. This has been a massive pain point for me lately.

                                  I really appreciate the Rust approach to async (library based). However, I still find myself frustrated by dependency lock-in and lack of up to date documentation. If I want to leverage the larger async ecosystem, in almost every case, I need to commit to tokio and ensure that it’s version is consistent across any other dependency that leverages tokio under the hood. Eventually, I realized that I was spending more time juggling dependencies and troubleshooting async runtime shenanigans than I was writing business logic. Much of the async ecosystem still has incomplete documentation and requires spelunking source code. This is good and bad. It’s a sign that the ecosystem is growing rapidly, but unfortunately it quickly makes google/stackoverflow queries out of date. I’ll admit that it’s possible that some of the pain I’ve experienced already has a solution in the form of a compat style lib.

                                  I generally try to avoid being to critical in comments as it’s easy to just leave low-energy feedback/complaints. I know a lot of hard work and thought has been put into Rust’s async effort. However, I’m concerned that if my pain tolerance is being hit, what kind of impression is left on users with less experience?

                                  In spite of all of this, I’m still optimistic that Rust is headed in the right direction.

                                2. 1

                                  an equivalent to devise

                                  The original author of Devise went on to create Elixir, and he has decided to take a different approach to authentication this time around. So a strict equivalent to Devise might not be the best thing.

                                  1. 5

                                    By equivalent I meant more generally: a solution to common authentication patterns in web applications so you don’t have to roll your own.

                                1. 11

                                  Murilo, I just wanted to thank you for such excellent write-ups. I really enjoy your writing and learn something useful every time I read one of your articles. Thanks for taking the time to put these together.

                                  1. 7

                                    Your reply warms my heart, thank you. I’m glad it was useful :)

                                    1. 4

                                      Good to know. Guess I won’t be using wayland anytime soon.

                                      1. 2

                                        There has recently been some work on implementing a “pure GTK3” Emacs: https://github.com/masm11/emacs

                                        But other than that, I’m currently using Wayland and haven’t had any real issues with Emacs.

                                    1. 2

                                      As a newcomer to Rust, I just learned about these distinctions over the weekend. So this was a timely article for me. However, it was written in mid 2018. Can a more experienced Rustacean point me to more up to date infomation? Have there been any meaningful changes?

                                      1. 6

                                        Can a more experienced Rustacean point me to more up to date infomation? Have there been any meaningful changes?

                                        No substantial changes, just one extension. impl Trait is used in the async syntax (it roughly desugars async fn foo() -> i32 => fn foo() -> impl Future<Output=i32>).

                                      1. 4

                                        I’d love to go back to just IRC. Why couldn’t IRC as a protocol be good enough and then just design specialized clients around it to include features as desired? Slack, Hipchat, discord, etc don’t actually convince me that the IRC protocol + client specific “add-ons” wouldn’t be enough.

                                        1. 5

                                          IRC has problems, starting with a fundamental lack of multiline message support.

                                          That’s not where you want to go if you’re trying to convince developers to use basically anything else. (I mean, I like IRC too, but only despite some of those major flaws.)

                                          1. 4

                                            I’d love to go back to just IRC.

                                            me too, but slack has blown up because they took (some of) what’s good about IRC and made it pretty, and made it accessible for normal people. that doesn’t mean it’s good - there’s so much that’s bad, including but not limited to the ‘always available’ expectation that asshats^H^H^H^H^H^H^H some people use to evaluate whether you’re a ‘team player’.

                                            i think my biggest gripe with slack actually (apart from ‘always available’) is how they implemented discussion threads. it’s my opinion that the model sucks terribly, because threads live ‘outside’ of their channel, and it requires me to use a trackpad/mouse to access the threads rather than keeping them in the channel and providing shortcuts to open/collapse them.

                                            that said, if slack the company built native desktop apps (i don’t care so much about mobile), i might complain about it less. they certainly have the wherewithal to do it.

                                            1. 2

                                              I don’t want to use IRC. There are a lot of times where I remember asking another developer how to do something and I’ll go back to search for it in the chat history.

                                              1. 2

                                                Understandable, but in my mind that could easily be a client side feature. Admittedly, most users won’t want to grep logs, but if the platform is open there could be solutions for search locally and server side. I think the most meaningful thing is that the protocol is open so developers can continue to grow the ecosystem in a way that suits their needs.

                                            1. 2

                                              This is really neat. Thanks for putting this together. I might be using this in the near future. In your opinion, are there any pain points around documentation or other limiting factors?

                                              1. 2

                                                Thanks for the kind words!

                                                The pyO3 docs are excellent, overall1. If I had to pick something to complain about: #[pyproto] is slightly underdocumented, causing the hiccup I ran into with the “in” (__contains__) protocol. But that’s minor compared to how painless the experience was as a whole.

                                              1. 1
                                                1. 2

                                                  Maybe it sounded like a good idea in 2019?

                                                  Also I know so many people that got on the Swift bandwagon and thought it was the best possible hammer for all possible nail-like objects. (And I’ve seen that theme for so long that I remember when Turbo Pascal was the best language for everything,)

                                                  1. 2

                                                    I like Swift. It’s got a lot of really good design baked in, but I can’t honestly imagine why anyone would choose it over anything else unless Mac or IOS are primary targets.

                                                  2. 2

                                                    Why not?

                                                    1. 1

                                                      As I mentioned above, I don’t understand why anyone would choose Swift who isn’t planning on developing a native IOS or MacOS application.

                                                      1. 1

                                                        Why not?

                                                    2. 1

                                                      Ian (author) mentioned that he nominated Swift because of it’s TensorFlow bindings. Fits @notagoodidea’s observation neatly.

                                                    1. 2

                                                      It seems like the majority of the arguments here are about having a Tensorflow wrapper library in your language. O an not in the AI domain space but I find it intriguing.

                                                      1. 2

                                                        Yeah, unfortunately symbolic AI is completely overlooked by many of these kinds of articles. It’s a shame because there are interesting concepts in that space that I’m afraid modern ML research is overlooking in preference for continued development of deep learning techniques. I would have loved to have seen a LISP mentioned in this list somewhere.

                                                        1. 3

                                                          Or logic programming! Expert systems count as AI too.

                                                          1. 1

                                                            I’m curious: does symbolic AI subsume logic programming? Or do they just intersect? From my (limited) understanding, symbolic AI leans on propositional logic to develop higher order systems of logic (First-Order Logic, Temporal Logic, etc).

                                                            1. 1

                                                              Here are some Datalog DSLs. Or, maybe you want Bayesian inference? Try a probabilistic programming language.

                                                        1. 5

                                                          It struck me as funny that the author (presumably human) is manually curating a list of recommended reading for recommendation systems on a site that uses recommendation systems to curate a list of articles for humans.

                                                          curate :: human -> articles
                                                          recommend :: articles -> human
                                                          
                                                          Identity = recommend . curate
                                                          

                                                          There’s probably a recursive element that I haven’t put my finger on yet.

                                                          … Maybe I really just need to get out of the house.

                                                          1. 3

                                                            I am indeed a human! Unfortunately, we haven’t reached recsys singularity yet. :)

                                                            These are usually some of the links I usually send out to new-hires and interns at my work, and I figured someone else may find it useful as well!

                                                          1. 3

                                                            Cool! Thanks for the recommendation. I’m going to go through this over the holiday.

                                                            1. 4

                                                              Thanks for putting this together Cliff! Just finished going through this and it was extremely well written and informative. As someone who has lived in high level languages, this was a great introduction to some of the finer points of low level Rust. Looking forward to the bonus section that shows how to accomplish this in a more idomatic way.

                                                            1. 2

                                                              This was a super cool read. Thanks for sharing.

                                                              1. 2

                                                                You may enjoy these: https://lobste.rs/search?order=newest&q=domain:theorangeduck.com

                                                                As you can see, I have been of the opinion that several of his previous blog posts have been worth sharing. :)

                                                              1. 46

                                                                This isn’t my oldest code, but it’s code that I’m the most surprised that is still working:

                                                                I once built a small web form that automated some accounting processes for a small business. The accounting lady was nice and would always talk to me about The Big Bang Theory. I didn’t like the show, but I think she assumed I did so I went along with it. As a fun little personal touch, I included an endpoint in my API to scrape a random BBT quote from a generic “TV Quotes” website. I then would display that above the simple little form.

                                                                She loved it, and 6 1/2 years later, that silly little scraper is still working. She makes sure to tell me about how much she loves it every time our paths cross.

                                                                Probably my favorite code I’ve ever written.

                                                                1. 1

                                                                  A python script live plotting stock market trend lines and flashing prices and scrolling tickers.

                                                                  1. 1

                                                                    Do you have a preferred source of live stock data?

                                                                  1. 3

                                                                    The link to the article published in The Royal Society seems to be worth reading.

                                                                    1. 13

                                                                      I also suggest this reading to anybody interested in this topic: https://papers.ssrn.com/sol3/papers.cfm?abstract_id=3078224

                                                                      It tracks the history of this narrative and explains who profits from it.

                                                                      This phenomenon has a clear political and ideological root and both journalists, politicians and engineers should fight against it together.

                                                                      If you want to explore more related topics there’s plenty of related content in a reading list I’ve been developing in the last few months: https://github.com/chobeat/awesome-critical-tech-reading-list

                                                                      1. 4

                                                                        I really enjoyed that paper. It’s a shame that AI is being dishonestly advertised. Researchers and companies paving the way have a responsibility to set reasonable expectations. We could have more productive dialog if we were able to discard the buzzword and pop-sci explanations. This most recent “AI” phase (like the past) has yielded advances that we should be proud of and unfortunately most of them will be under appreciated.

                                                                        Instead of preaching “AI” why not take this opportunity to impress the effectiveness of math to a broader audience?

                                                                        1. 1

                                                                          atm I don’t have time to fiddle with finding good/short examples and shooting them a p.r. but I think Evgeny Morozov and Mark Fisher could be added to that list (with Fisher being tangentially related as in whoever would be interested in this list sort of list would almost certainly be interested in Capitalist Realism for a broader picture)

                                                                          1. 2

                                                                            Mark Fisher is next in line in my backlog, but I want to read it first. There’s already Inventing the Future in the reading list, that is clearly influenced by Mark Fisher’s work.

                                                                            What do you suggest by Morozov?

                                                                            1. 2

                                                                              Inventing the Future

                                                                              that’s almost certainly relevant as well, but I haven’t read it sadly. I wanted to get into accelerationism but got so derailed once I started. which is awesome. been a very long journey so far but I do plan to circle back eventually. kind of ironic for lobste.rs to be so full of people drawing on Deleuze:D I know @steveklabnik likes him

                                                                              btw, one word of advice, I have always found it useful to read leftcom critiques of whichever political bent catches my attention. it’s great for a dose of soberness, although ymmv and I might just be reflecting my preexisting sympathies. https://libcom.org/blog/back-future-rebranding-social-democracy-12042018

                                                                              but I want to read it first

                                                                              what were you referring to here? inventing the future?

                                                                              1. 1

                                                                                No, I was referring to Capitalist Realism

                                                                      1. 4

                                                                        I really enjoy using docopt when putting together my command line interfaces. I hadn’t heard of tqdm though. I’ll be trying that out this week.

                                                                        1. 1

                                                                          I had no idea this existed, thanks for sharing docopt with us!