1. 4

    I use the now-discontinued Keyboardio Model 01 that I love and have done a bunch of firmware customization on. I use a Dvorak layout, tweaked for this particular setup; my firmware setup is here

    1. 5

      Prolog has both nth0/3 and nth1/3 so you can use both zero- and one-based indexing. I find having both actually pretty nice - in different circumstances, different ones seem more natural, so one can just use whatever makes sense at the time.

      1. 2

        I find the sentence

        The form itself was unit tested, but not all edge cases were.

        somewhat confusing…if the “edge cases” aren’t covered, is it really being tested at all?

        1. 5

          You have to weigh costs and benefits. Having 100% coverage is exponentially harder to do than having 80% coverage.

          If you spend too much effort on preventing bugs, it may turn out that the cost of writing bug-free code is higher than the loss from the bugs.

          1. 3

            That’s very true in general. In this case though, if the tests don’t cover a clearly pretty common user flow, I question their value.

          2. 4

            Unit testing for compliance instead of enlightenment.

            1. 3


            1. 14

              I’ve been using Dvorak for years and for vim & similiar (emacs evil, tridactyl, etc) I just use normal hjkl. j and k are next to each other on Dvorak, which is easy enough and I tend to use w,b, f/t, incremental search, or semantic jumping methods more than h/l movements anyway.

              I do also have a layer on my keyboard with arrow keys, which I have on what would be ijkl on QWERTY (i.e. right-side WASD).

              1. 9

                As a Dvorak user I’ve found that, while it wasn’t designed with computers in mind, it’s actually still very convenient for computer/programming use (egs. dash/underscore is on the home row, +/= is also easier to access, brackets make sense since they’re put next to parentheses (next to 9/0), and so on). j/k is no exception, as they’re conveniently right next to each other on the left hand (c/v in QWERTY). h/l are also opposite each other on the right hand in the same orientation as they are in QWERTY (h/l in Dvorak = j/p in QWERTY). I find having j/k on the left hand is actually really convenient, because I can scroll (eg. a webpage with Vimium) while keeping my right hand on my mouse.

                1. 7

                  I do the exact same thing, i.e. nothing. Having the hl and jk pairs on opposite hands feels good; j and k being next to each other in the right order helps, and h is on the left of l so there’s no feeling of it being backward in any sense.

                  I also have cursor keys on the QWERTY ijkl/Dvorak chtn on separate layer when I need them! Seems like we’re using a very similar layout. :)

                  1. 1

                    Add one more to the list. Type hjkl in their normal positions in the dvorak layout.

                    But I also have a keyboard nav layer with arrow keys arranged in a T shape that almost nothing else uses but I think is ideal:

                    left    up     right

                    I like this because it keeps my pinkie free for a hyper modifier and I find curling a finger downward easier than stretching up.

                1. 9

                  I don’t think blatant piracy is really appropriate for Lobsters…

                  1. 2

                    I don’t like that the application is named (and the note of it being too expensive) - but I still think it’s an interesting thing.

                    I had to create something like this last year and we thought about it for a while. How hard to break should it be? (In the end we decided it was fine to be circumventable even easier than this). So if you ever need to build something like this it absolutely helps to see how people break it.

                  1. 32

                    The main content of this post does not seem, to me, to support the primary claim.

                    The framing of this primary claim, is whether (or not) people can collectively can use Firefox “for the sake of the web”. Put differently: whether the collective choices of users can provide a marketshare-derived bulwark against a complete Google monopoly (on standards, on the web experience, etc.). The article then complains that using Firefox has become burdensome, and that Mozilla behaves poorly in their opinion.

                    Those complaints are fine enough to be an article on their own. Certainly there is nothing wrong with expressing how one feels. However, neither the individual pain points, nor disingenuous behavior by Mozilla, actually speak to the premise: whether or not the collective choices of users can provide a marketshare-derived bulwark against a complete Google monopoly. As an overall framing question, the article leaves it unaddressed, except a few moments of unsupported nihilism.

                    I should be clear: I do not think the complaints listed are invalid. An actual consequence of these complaints, is that the people who are part of that bulwark are probably subjected to a worse web browsing experience than they otherwise could be (e.g. if Mozilla acted differently). That is not good.

                    A conclusion the article does not draw, but which follows from the previous, is that having a worse experience will likely erode that marketshare over time. This will lead it to be a less effective barrier against Google doing whatever-they-please. That is also not good.

                    Ultimately, while I understand the criticisms (and agree with some), they don’t actually critique the idea of collective action. Instead there are just appeals to despair and powerlessness. “Nothing here is new”, “we are past the point of no return”, “we are entering a dark age”, and then the sentence that bothered me the most:

                    And does anyone actually believe, that that sub-segment of all web users, that believe in browser engine diversity, can save anything?


                    And nothing in this article seems to refute that.

                    1. 7

                      The framing of this primary claim, is whether (or not) people can collectively can use Firefox “for the sake of the web”.

                      My intention was to ask whether people should individually use Firefox, “for the sake of the web”, at the expense of accepting anything Mozilla decides. Sorry if that wasn’t clear.

                      Considering the current trends, the increasing popularity of Chrome and of mobile platforms (ie. Android and iOS), I dismiss the possibility of a collective effort to turn the tides, a priori. You’re right that I don’t argue the point why it’s not possible, it just seems like such a pointless debate, that depends on entirely contingent factors. I just wanted to offer a pessimistic response to all the “Use Firefox to save the web” articles I have been seeing over the last few months.

                      1. 10

                        Fair enough, in so far as you acknowledge the a priori dismissal. If we sat here and ran through all those contingent factors, I would probably agree with you more often than not.

                        FWIW I do not use Firefox as some civic duty on behalf of the web, and I have not found myself arguing that people should (thus far). But nor do I find the “anti-monopoly bulwark” angle implausible. I use Firefox almost entirely because of the Multi-Account Containers add-on. I legitimately do not know how I would use the web without it. Or at least do not know how I could use it as effectively as I am used to.

                        I did stubbornly use Firefox mobile for a two year span, despite it feeling like a worse experience. But as of some time this year, it has been markedly better, in that way that goes unnoticed–so much so that I had not reflected on it until typing this paragraph. It’s that natural tendency to take tools/systems for granted, once they have been working smoothly for long enough.

                        1. 13

                          FWIW, I do use Firefox as some civic duty on behalf of the web, and it’s becoming a more miserable experience with almost every release.

                          I’ll definitely have a look at Edge when the Linux version ships with vertical tabs, because I really had enough of the abusive relationship with Mozilla.

                          1. 6

                            Seeing as it is roughly on-topic, what are the changes that have made you miserable?

                            In my text editors, terminal, file manager, and some others, when a sub-option-of-a-sub-option changes, I notice immediately. This article and thread have caused me to realize browsers are an odd exception: I am not that sensitive to little changes in options or details.

                            I use Firefox primarily (90-95% of browsing), but I do use Chrome partially for work. Aside from (a) Chrome lacking a plugin akin to Multi-Account Containers, and (b) Google blatantly not caring that G Suite runs poorly in Firefox, my experience on web pages feels basically comparable.

                            1. 6
                              • Extension system can’t support vertical tabs.
                              • User styles being on their way out.
                              • Extensions not working on “special” domains.
                              • Constantly having to fix styling (e. g. dickbar).
                              • “Restart Firefox” button doesn’t restart Firefox, broken for years.

                              It’s a death by thousand cuts.

                              1. 5

                                For your first point, I use “Tree Style Tabs”, which I’ve been happy enough with. It’s not quite as seamless as the pre-webextentions version, but it does give vertical tabs.

                                1. 2

                                  I’m aware of all options, and they are all crap. (TST is worse than other options though.)

                                  Sure we can hack tabs into a sidebar, but the extension can’t even disable the “real tab bar”.

                                  1. 2

                                    A bit of css removes the real tab bar for me. What other options do you think are better thank TST?

                                    1. 2

                                      A bit of css removes the real tab bar for me.

                                      That “bit” of CSS has grown to 100 lines at my machine. Plus, userChrome.css is on Mozilla’s kill list anyway, so it’s not something that can be relied upon.

                                      What other options do you think are better thank TST?

                                      Sidebery is better.

                                      1. 1

                                        100 lines? I have this:

                                        #TabsToolbar, #sidebar-header {
                                            visibility: collapse !important;
                                        #TabsToolbar {
                                            margin-bottom: -21px !important;

                                        Now, if mozilla does kill userChrome.css and it stops working, I’ll have to move to another browser. It isn’t any love for mozilla, at this point, that keeps me with it, just that I’m used to TST and containers. I’ll check out Sidebery (though I am perfectly happy with TST as it is).

                                      2. 1

                                        This bit of CSS needs to be updated once every couple releases, because they keep breaking it. And it’s going to stop working anyway, as @soc wrote in a sibling comment.

                                      3. 1

                                        I’m OK with Tab Center Redux’s vertical tabs in the sidebar. I have no horizontal tab bar. I also have my bookmarks bar in the same horizontal space next to the URL bar. For added usability, I have the normal toolbar (File/Edit/View/…) in the titlebar.

                                    2. 4

                                      For comparison: Out of all of them only the restart option bothers me. And that’s broken only on my linux box.

                                      1. 1

                                        I rather like All Tabs Helper’s vertical tabs functionality. https://addons.mozilla.org/en-US/firefox/addon/all-tabs-helper/

                            2. 3

                              many of these changes are in line with Google’s vision for the web, and reflect Mozilla’s reliance on Google. while Mozilla may be the lesser of two evils, it is still evil, and only voting for the lesser evil won’t be enough to improve things.

                              not to mention that using Firefox is much less significant even than a vote. it helps Mozilla charge more for partnerships where they show their users ads, but if you don’t click on these ads then you aren’t actually helping Firefox because you are reducing the per-user effectiveness of their ad space. rambling now…

                            1. 5

                              This is also a very welcoming project to contribute to, @munen is an excellent maintainer.

                              1. 4

                                Thank you for your kind words Master JamesNVC🙏🏻

                                James is a great FOSS contributor, too! For example, he implemented Org mode clocking commands[1] for organice - a feature that’s daily used by professionals to track their time and bill clients.

                                1. https://orgmode.org/manual/Clocking-commands.html
                              1. 12

                                The web is one of the best cross platform development frameworks available. I absolutely want to see it get as close to native parity as possible. WebUSB, WebBT, WebMidi, sensors etc.

                                There is a huge problem with memory usage, but I don’t think it’s native APIs that are causing that problem.

                                1. 34

                                  So you basically want your Chrome monopoly running as a walled garden OS on your machine’s real (but now useless) operating system?

                                  1. 4

                                    it’s not a walled garden, it’s a sandbox. there’s a huge difference.

                                    1. 1

                                      It can be both.

                                      It is in Google’s best interests to make it a walled garden.

                                      They’ve already changed the Chrome APIs to make it impossible to implement a good adblocker. There’s nothing stopping them from modifying Chrome such that you can’t install extensions that aren’t approved by the Chrome app store.

                                  2. 9

                                    This is the fault of everybody who has made learning native development more difficult than necessary.

                                    1. 2

                                      What do you mean? Who’s making learning native dev more difficult than necessary? Platform vendors?

                                      1. 4

                                        For proprietary systems, vendors for not taking documentation and backwards-compatibility seriously enough.

                                        For community-driven systems like Linux, developers not settling around sane architectures (looking at you, desktop Linux) and really just polishing up the on-ramp for other folks. Like, the two best options for rich desktop experiences on Linux are either using the Windows APIs through Proton/Wine or using Electon.

                                        For just programmer culture, de-emphasizing writing cross-platform software in favor of living in ’nix/Apple/Windows monocultures and also treating targeting multiple systems like some herculean task instead of just a collection of shims over common logic. So much FUD.

                                        (oh, also, fuck Android dev. Just figured that’s worth mentioning.)

                                        For all of the talk of freedom and libre software and choice and all of that, we’ve failed our developers.

                                    2. 6

                                      I would dispute that it’s cross-platform. What it is, is a platform that can be bootstrapped on top of other, better platforms.

                                      1. 9

                                        That’s pretty much what all cross platform frameworks are.

                                        1. 2

                                          Fair enough.

                                      2. 6

                                        or, I dunno, and hear me out: what if cross-platform desktop app development in Go and Rust were actually good? Go has fyne, but … have you ever tried to actually use that? It’s … not good. Qt still exists, and Qt … is good, actually. Even if Qt had a very permissive license, the problem with Qt would still be that it’s very closely tied to C++’s type system, and adapting Qt to Go is deeply awkward (dunno about Rust). I have built a non-trivial desktop/systray app in Go+Qt and shipped a commercial product with it, it was a very awkward toolchain to work with (weird conversion semantics, made the compile times much longer, made cross-compilation a nightmare, much harder to set up a dev environment) but allowed us to do things that would be impossible to do in the browser (watch processes and tail local files).

                                        If you think the only difference between a single-page app in a browser and a native app is performance … I really don’t know what to say. That’s just fundamentally untrue. “But electron…” still makes it so that you have to wait until a browser manufacturer decides to allow you to use a part of the operating system, instead of just … using it yourself.

                                        1. 7

                                          I think the biggest difference is distribution. It’s just so easy to type in a URL and be using a webapp, close the tab & it’s “uninstalled”, versus having to find a download link, install, let it run arbitrary code on my computer, then if I want to get rid of it, figure out how to remove whatever traces it left behind.

                                        2. 5

                                          I totally agree with this. And not just because it’s cross platform, there are many other benefits.

                                          As a user I don’t want to have to install some random company’s app to use their service, that I’m probably going to use only once and will uninstall an hour later. I also don’t want to have to trust that their app isn’t doing anything nasty TikTok-style. And I’m always sad when I’m sat at my computer but I’m forced to use my phone because some service requires you to use their app.

                                          As a web developer, I can publish whatever I want without having to work/pay to get included in the app stores. I also don’t need to worry about it being pulled sometime in the future for some reason. Maybe this doesn’t happen that often but I’ve read so many stories where this has happened to people.

                                          For sure there’s always going to be use cases for native apps, but I think the the web is a much better option in many cases, and all these API’s are helping that happen.

                                          1. 3

                                            Why not Java?

                                            1. 6

                                              I don’t have anything much against java-the-platform, but I think its been on a downward trajectory for end user applications for quite a long time now. My sense is its getting increasingly unlikely that a random end user has a jvm already installed. They lost the default apple install, the installation and update story is miserable ux. It shares some of the downsides of the Web (non native ui, memory usage, start up time) but doesn’t share the benefits (discoverability, insane level of preinstalled users, built in update mechanism). It continues to be a decent choice in corporate environments, but for end user apps?

                                              1. 3

                                                I can’t run Java apps on my iPad

                                                1. 3

                                                  Sounds like a device problem, not a Java problem.

                                                  Best to talk to the device manufacturer about it.

                                                  1. 3

                                                    Absolutely not. If I’m looking for a platform to deploy my next app to, going ahead with something that doesn’t run on the device my target users want to run it on and then pretending it’s the manufacturers fault is just a horrible idea.

                                                    1. 1

                                                      But you won’t be able to use any of the apis not supported by Safari anyway. Who’s to blame then?

                                            1. 4

                                              Interesting! I hope this can facilitate open-sourcing Datomic, since they presumably would be less reliant on that revenue stream. I suppose it’s just as possible this could make them want to open source less though, since now it’s a competitive advantage for NuBank to control the development…

                                              1. 27

                                                Software is complicated. The world is complicated. The tools we use to interact with the world are complicated. We are complicated. Though it’s generally good to get rid of inessential complexity, getting rid of essential complexity is counterproductive, and this is not something I see addressed by the suckless methodology.

                                                I use fvwm, which is a relatively simple X window manager (if a bit more complicated/flexible than dwm), and screen, which is a composable (and, again, relatively simple) terminal multiplexer. I also use linux, which is an enormous monolith. Ditto zfs, zsh, gcc, clang, firefox…

                                                Then again, for some purposes I use tcc, lynx, fat

                                                I do not see a huge amount of intrinsic value in my tools being simply made. They might be better if they had been written that way from the start, but that doesn’t matter very much. The question I ask is, what value do these tools bring to me now? Even if all my tools were simple and composable (as per the suckless philosophy), the computing environment would still be too complex for me to hack on all of it. Insofar as I do find my tools inadequate, it’s generally easier to configure the more complicated ones than to modify the simple ones. I use tcc because it has good compile times. But I also use gcc because, inside of all the inessential and redundant complexity, there are high-quality diagnostics and optimizations. That is essential complexity. You can’t hack tcc to add that (I actually took a look at tcc internals to see what that would take. It would require a big re-architecture.) That doesn’t mean gcc is well-made, but it does mean that, as a user, I derive value from gcc that I don’t from the hobbyist compilers.

                                                Minimalism is definitely something we should try to instill in the software we create. But that doesn’t mean we should attempt to use software because it’s minimalistic, nor that we should shy away from (essential) complexity in the software we write.

                                                1. 20

                                                  We are complicated.

                                                  To expand on that, we don’t all have the same abilities. That’s why accessibility is important, though it adds complexity. So I get frustrated whenever I see a developer write their own simple, lean GUI toolkit because mainstream GUIs are too bloated. These simple, lean toolkits invariably don’t support their host platforms’ accessibility APIs, meaning that they can’t be used by blind people with screen readers, or people with mobility impairments who require alternate input methods. That’s why, whenever I encounter a thread about such a toolkit, I bring up the lack of accessibility support and plead with developers to not use that toolkit in any application that might be required in someone’s job or education, unless the task itself inherently requires sight and keyboard or mouse input. Unfortunately, this problem is big enough that I can’t solve it by casually sending patches on nights and weekends; I wouldn’t even know which project to start with.

                                                  To be sure, mainstream software does have some accidental complexity, which translates to bloat. But not all of the complexity is bloat. Accessibility is one instance of necessary complexity. For many applications, internationalization is another.

                                                  1. 6

                                                    To be sure, mainstream software does have some accidental complexity, which translates to bloat. But not all of the complexity is bloat.

                                                    Indeed. I think it is unfair to say GNOME (or KDE) are bloated, suckless is lean and has fewer bugs, GNOME is doing it all wrong. They have vastly different target audiences. GNOME addresses a general audience, it is an environment that one could install on a non-techie’s desktop and they [sw]hould be able to manage themselves. This means deep integrated support for power management, disk/network mounts, setting up networking/VPNs, accessibility, fingerprint login, a uniform look & feel between applications, notifications, easy management of various display setups, integration of file dialogs with sandboxing (portals), graphical printer configuration, etc. You cannot ask this audience to compile a C file to do their configuration. Supporting such a wide variety of deep integrations just make the problem vastly more complex. You need a lot of communicating parts (IPC), a framework for configuration, etc.

                                                    While I primarily used simple window managers (primarily WindowMaker and fluxbox) ~2 decades ago. I have made the conscious choice to use desktop environments (GNOME in my case), to save a large amount of time around managing VPNs, displays, etc. I am pretty happy with GNOME’s default settings and barely change anything (and the few extensions that I add are defined declarative with Nix).

                                                    I can fully understand why someone would go the Sway, i3, dwm, etc. path. But I think we should avoid calling one or the other approach inferior.

                                                    1. 2

                                                      You can install XFCE on the laptop of a general audience too, though. It’s much less bloated than GNOME or KDE but it has all the things you talk about, as far as I am aware.

                                                      The problem with GNOME is not that it’s bloated with features or functionality but that the way in which it is implemented makes it incredibly slow, sloppy and.. bloated. There’s really no other word for it. It uses enormous resources, it runs a million background processes and daemons doing unknowable things, it doesn’t work at all on older laptops, it requires systemd, etc.

                                                      There’s nothing inherently ‘bloated’ about floating window managers or accessibility. What’s bloated is how they’ve gone about all of it.

                                                      1. 3

                                                        You can install XFCE on the laptop of a general audience too, though.

                                                        Can’t say, I haven’t used Xfce in years. For me the most important missing feature would be Wayland support, which drastically simplifies mixed DPI support.

                                                        The problem with GNOME is not that it’s bloated with features or functionality but that the way in which it is implemented makes it incredibly slow, sloppy and.. bloated.

                                                        I use a fairly modest Intel NUC as may daily driver and GNOME is very fast, I never encounter any slowless. Our daughter has a baseline Intel NUC that cost ~120 Euro excluding RAM and SSD, same story, I never saw any delays in GNOME.

                                                        It uses enormous resources,

                                                        My current GNOME session, which has been running for several days is using 400MB RAM with a HiDPI screen, which is merely a blip compared to Firefox with several tabs open. Won’t be a problem with a machine >= 2GB RAM. Oh, and gnome-shell and mutter have its own Wayland compositor, so that 400MB RAM includes more or less what would be the overhead of X11 itself on Xfce or whatever.

                                                        it runs a million background processes

                                                        ~30 on my machine. yay

                                                        1. 1

                                                          Can’t say, I haven’t used Xfce in years. For me the most important missing feature would be Wayland support, which drastically simplifies mixed DPI support.

                                                          Wayland seems to me like a big step in the wrong direction, optimised for DEs that are going to implement everything themselves anyway, but horrible for the ecosystem of small window managers because they need to become much bigger and cover a much bigger range of functionality. I believe ddevault’s wlroots stuff helps here but surely doesn’t fix everything. At least initially, every Wayland compositor needed to implement things like screenshots themselves.

                                                          It’s not clear to me why the problems with X couldn’t have been solved without moving huge amounts of functionality into the compositor.

                                                          I use a fairly modest Intel NUC as may daily driver and GNOME is very fast, I never encounter any slowless. Our daughter has a baseline Intel NUC that cost ~120 Euro excluding RAM and SSD, same story, I never saw any delays in GNOME.

                                                          My current GNOME session, which has been running for several days is using 400MB RAM with a HiDPI screen, which is merely a blip compared to Firefox with several tabs open. Won’t be a problem with a machine >= 2GB RAM. Oh, and gnome-shell and mutter have its own Wayland compositor, so that 400MB RAM includes more or less what would be the overhead of X11 itself on Xfce or whatever.

                                                          I’ve tried using GNOME vs XFCE on older laptops and the battery drain on GNOME was much higher than on XFCE, and GNOME always had this lagginess and clunkiness that XFCE didn’t have. I don’t know why, it just seems to.

                                                          I don’t see why desktop environments shouldn’t be able to run fine on 10-year-old laptops. People shouldn’t need to update their computers with gigabytes upon gigabytes of RAM to run basic stuff like web browsers and desktop environments.

                                                          ~30 on my machine. yay

                                                          Including all of GNOME’s dependencies?

                                                          1. 1

                                                            Wayland seems to me like a big step in the wrong direction,

                                                            Well at least not every process can read my keystrokes or do screen grabs anymore, without resorting to nested X servers and whatnot.

                                                            Including all of GNOME’s dependencies?

                                                            My whole user session currently has 71 processes, which includes the 11 processes that Firefox creates, a bunch of terminals, mosh, gpg-agent, scdaemon, Xwayland for those legacy X11 applications, etc.

                                                            Again, on my system GNOME is never the problem, it is fast and takes a reasonably amount of memory. Moreover, most processes that it spawns have descriptive names such as gsd-power (there are very few processes where I don’t know from first sight what it’d do).

                                                            The problems are the browser, which takes more memory per tab than GNOME itself for some web sites, the Slack client which again takes more than a whole desktop environment and gets terrible latencies over time, Skype, etc. Unfortunately, I need those programs for work. (Though at least for Slack there is Discord, which is a nice and fast Qt application.)

                                                    2. 8

                                                      Indeed; I have come to feel a little uncomfortable with some of advocates of “the suckless philosophy” (Christine excluded, of course) for the reasons you mention. I wrote up my thoughts on the matter a while ago and have become more gun-shy of even the use of the term “bloat” since then.

                                                      1. 8

                                                        I downvoted your comment as ‘troll’ because I don’t think I’ve ever seen a better example of someone assuming bad faith in the discourse on this website ever. There are good arguments for the use of some of the software commonly described as ‘bloated’. They do not include that everyone that advocates for non-bloated is just a neo-Nazi that wants to subjugate women. These bogeymen probably exist somewhere but they’re not arguing on lobsters they’re on Stormfront or something.

                                                        Rather than opening yourself up to the possibility of actually being wrong about something by having a proper discussion around a thorny technical issue on which there are no right answers, you just dismiss anyone that favours simple software as being alt-right men who have had stockholm syndrome because of suffering through tools with bad user interfaces.

                                                        I’m not going to go into the details of why your post is filled with incorrect ideas and offensive stereotypes for the same reason none of us would go into detail explaining why a racist is wrong: they’re not going to respond in good faith, and I’m sure you won’t respond in good faith either.

                                                        The irony that you end your bad faith post with a snide aside dismissing a genuine concern raised as just an ‘unfounded assertion’ that’s ‘made in bad faith’.

                                                        1. 3

                                                          They do not include that everyone that advocates for non-bloated is just a neo-Nazi that wants to subjugate women

                                                          From my post:

                                                          While I think this is a big part of the impetus for the more virulent misogynists and “alt-right” members, it’s not the whole picture.

                                                          The other aspect is the one that I think is more important to talk about, because it’s less obviously wrong, more subtle, and much more widespread.

                                                          So no, that’s not my assertion; I’m just saying that places that harbour those sorts of people – I’m thinking more of 4chan than Lobsters here – also tend to be places that are most vocal opponents of “bloat”. The rest of what I wrote about there is a more subtle cognitive bias that doesn’t assume ill will on behalf of the minimalism proponents, just a very human sort of loss aversion.

                                                          But sure, I’m also a troll that wrote my thoughts down more than a year ago and didn’t link them anywhere until now for the sole purpose of offending Lobsters.

                                                        2. 5

                                                          The sibling comment put it very well, but it is missing some data that puts things into perspective

                                                          You write:

                                                          both of those organization are also frequently seen railing against “political correctness” and “SJWs”, What is it about the seemingly-reasonable desire for software to not be “bloated” that seems to have this correlation with anti-social-justice view points?

                                                          You are going to see this correlation to anti-PC and anti “Social Justice” in just about any group you care to look at, because the vast majority of people reject PC and the capital-letter Social Justice of the SJWs.

                                                          Americans Strongly Dislike PC Culture (The Atlantic)

                                                          a full 80 percent believe that “political correctness is a problem in our country.”

                                                          80%. That’s about as close to unanimous you’re going to get on any issue.

                                                          Heck, if xkcd is to be believed, that’s more than “feel positively about kittens” and only 1 point below “enjoy apple pie’

                                                          And no, this isn’t “old white men” either, subtitle: Youth isn’t a good proxy for support of political correctness, and race isn’t either.

                                                          Even young people are uncomfortable with it, including 74 percent ages 24 to 29, and 79 percent under age 24. On this particular issue, the woke are in a clear minority across all ages.

                                                          Race? Nope.

                                                          Whites are ever so slightly less likely than average to believe that political correctness is a problem in the country: 79 percent of them share this sentiment. Instead, it is Asians (82 percent), Hispanics (87 percent), and American Indians (88 percent) who are most likely to oppose political correctness.

                                                          In fact:

                                                          Progressive activists are the only group that strongly backs political correctness: Only 30 percent see it as a problem. [..] progressive activists are much more likely to be rich, highly educated—and white.

                                                          1. 2

                                                            That’s a very good point! I will think about that.

                                                            My immediate thoughts on that would be:

                                                            1. I’m not American, I wonder what those numbers would look like in my country?

                                                            2. I wonder what those numbers would be like if you asked people about more granular, actionable topics, instead of blanket “political correctness” or “social justice”. I will definitely admit that there are many that just like to use those concepts as cudgels against people they don’t like, so they absolutely have pretty negative connotations. However, I wonder what the numbers would look like if asked, for example, “people should be addressed in they manner of their choosing”?

                                                            In any case, in my above-linked diatribe, it really was the latter half that I was more interested in, wondering what the other reasons are for people to promote that “minimalist” code aesthetic.

                                                            The other aspect is the one that I think is more important to talk about, because it’s less obviously wrong, more subtle, and much more widespread.

                                                            1. 1

                                                              I am not American either, but lived in the US for close to a decade. As far as I know, other countries are similar:


                                                              New polling suggests Britain is “less PC” than Trump’s America

                                                              2 out of 3 people believe others are too offended by language use, while nearly half say they’re not allowed to say what they think about key issues


                                                              Political Correctness und Sprachtabus “gehen der Mehrheit auf die Nerven”.

                                                              Why people promote non-bloated code aesthetic: as a counter to the overwhelming trends in our industry? Wirth’s Law: Software gets slower faster than hardware gets faster.

                                                              Or Alan Kay:

                                                              A twentieth century problem is that technology has become too “easy”. When it was hard to do anything whether good or bad, enough time was taken so that the result was usually good. Now we can make things almost trivially, especially in software, but most of the designs are trivial as well. This is inverse vandalism: the making of things because you can. Couple this to even less sophisticated buyers and you have generated an exploitation marketplace similar to that set up for teenagers. A counter to this is to generate enormous dissatisfaction with one’s designs using the entire history of human art as a standard and goal. Then the trick is to decouple the dissatisfaction from self worth—otherwise it is either too depressing or one stops too soon with trivial results.

                                                              The Early History of Smalltalk

                                                          2. 4

                                                            Thank you for writing that up; it’s something I’ve felt myself for a while but never really put into words.

                                                            I’ve been thinking about some of the things Bryan Cantrill has said about values in software projects — fore example, “minimalism” and “usefulness” are both positive things, and anytime a project can choose both, it should. But if the project must choose between them, its values (or rather, the values of its maintainers, and hence the values of its community) determine which direction it chooses.

                                                            Minimalism is a positive thing, but when I read about suckless I get the impression they regard it as a moral imperative that everyone should follow, not just a personal choice. I think it’s that unwillingness to engage with other view-points of view that really pushes me away.

                                                            1. 2

                                                              Thanks, I appreciate that!

                                                              I think it’s that unwillingness to engage with other view-points of view that really pushes me away.

                                                              Exactly, it’s the moralizing around the issues of minimalism vs “bloat” that bother me. Really, if they just said “featureful” vs “minimalist” and used less value-laden terminology, I think it would be a lot less contentious.

                                                              1. 1

                                                                It’s not like they came up with the term software bloat.

                                                                Software Bloat

                                                                You recasting it as only minimalism vs. featurefulness is not accurate, they say that minimalism is a way they feel they can achieve higher quality.

                                                                And I wouldn’t agree with your recasting either. Most software is horrendously bloated, even if it is not particularly featureful, and the bloat appears to increase superlinearly with features.

                                                                A “small” example: Xerox PARC in the 70s had their “Interim Dynabooks”, the Altos, with a version of what we now call “personal computing”. WIMP interface, word-processing, e-mail, networking, laser-printers, IDE. 20KLOC. One of today’s incarnations of “personal computing” is MS Office. This does more. Lots more. Let’s say it’s 100 times better at “personal computing”, which I personally find generous. However, it is in the vicinity of 400MLOC, which 20,000 times more code. That’s a lot of code. In fact the increase in code bulk s 200x the increase in “better personal computing”. In other words, what’s 99.5% of the code doing?

                                                                And for a craftsman, the quality of their work should be something that its a value to aspire to.

                                                                Workmanship Software Craftmanship

                                                                Now you may disagree with that, but I find it not just defensible but commendable.

                                                            2. 1

                                                              Your thoughts on the matter sound very much like a rehash of the age-old vi vs emacs debate to me, put in more modern and somewhat more overtly political terms with appeals to humane interfaces instead of everything-but-the-kitchen-sink (upon which someone made a kitchen-sink package) and as such seems to run on the same circuits as that discussion did - and does, with a whole host of Electron-based editors thrown in. By now I’d assume someone has proven vi vs emacs to be NP-hard and as such unsolvable, only approximated.

                                                              (By the way, vi. Non-bloated interfaces)

                                                            3. 2

                                                              There’s nothing inherent to accessibility that makes software bloated. People are sick of incidental, inessential complexity or complexity that exists only to allow minute configuration options that would be better offered in a different way (like composing with other tools). That’s the complexity that is being railed again.

                                                            4. 6

                                                              I think exactly because all those things are complex you want to avoid adding more complexity on top, causing more headaches and less understanding.

                                                              Also there are some non-inherent benefits of simple software. It usually takes good understanding of a subject to create something simple. One can see that when programming, first solving some problem, maybe making a prototype usually leads to being able to flesh out the mental picture and once that is more clear allows for a pass where things can be - sometimes significantly - simplified.

                                                              Of course depending on the complexity of a problem there is bound to be limits to how simple a solution can be, but I think simplicity of software is not some fixed value of lines of code or something along that, but that the presented solution is simple in regards to the problem you face.

                                                              Metrics, such as lines of code an be indicators, especially when comparing multiple solutions to the same problem, but it does not necessarily mean a solution is also easy to comprehend.

                                                              The problem at hand I think is also usually not “software of category X”, but a set of goals that one wants to achieve. That’s something that sometimes is very much missing in software projects resulting in them implementing everything a developer feels like adding on a given day. While I don’t think there’s something wrong with this a set of goals can help ensuring to keep in mind what your goals are and thereby keeping the direction in which a project is heading focused, by making it easier to see when something is out of scope or might only be related to the topic, but doesn’t really fit the project for other reasons.

                                                              Another benefit here is that simplicity then usually allows for reaching maturity faster. If goals are clearly defined and there’s a limit to what you want to achieve you can go over to get rid of bugs and rough edges earlier, then when you are busy implementing features bringing new bugs and rough edges. Now of course that doesn’t mean that you will actually use that time for this, after all adding a new feature usually feels more fun, but you could.

                                                              So in short: I think essential complexity is not something that goes against complexity. After all people writing minimalist software don’t completely abstain from writing software and one could argue that every line of code and every bit of logic adds complexity.

                                                              1. 6

                                                                I also use linux, which is an enormous monolith

                                                                That one actually solves an avoidable problem: the insane diversity of hardware interfaces. While diverse hardware interfaces might be needed for exploration at first, there comes a point where we more or less understand the goals of limitation of said hardware, and can settle on a fixed, relatively simple interface. Imagine a world where you’d have one graphics driver, one printer driver, one webcam driver, one spinning hard drive driver, one SSD driver, one network card driver…

                                                                That would simplify things quite a bit. To the point that maybe we’d be less willing to tolerate sprawling complexity at every level.

                                                                1. 2

                                                                  I believe he’s contrasting linux against (e.g.) a microkernel. Microkernels tend to be much simpler (inside the kernel), and to allow for more composable drivers.

                                                              1. 2

                                                                The URL to your config seems to not be a link – URL still is valid, just have to copy-paste it. Just so you know, thanks for sharing!

                                                                1. 1

                                                                  Thank you for pointing it out! 🙏

                                                                  My mistake - I used a MD file instead of an Org file for the post. In Org, URLs will automatically be exported as a link, in MD (at least with pandoc) I have to make an explicit link from it. I didn’t remember that.

                                                                1. 1

                                                                  Very neat! I’d love to try taking a crack at making your predicate work in other modes, but I’m afraid I don’t know the problem domain well enough. Have you looked at the SWI-Prolog Discourse? There are lots of very helpful folks there.

                                                                  1. 1

                                                                    Awesome, thanks for the link!

                                                                  1. 2

                                                                    Factor was the first open-source project I ever contributed to and still a language I find fascinating. Always nice to encounter it again - like meeting an old friend! (Speaking of, hi doublec - I remember that username from #concatenative in ~2007)

                                                                    1. 1

                                                                      Hi jamesvnc, I remember you from #concatenative too. “like meeting an old friend” is exactly how I feel when I fire up Factor too. The mid 2000s was a flurry of activity in Factor - so many good things came out of it.

                                                                    1. 5

                                                                      We’ve been using Clojure as our main development language for several years now. Much of it isn’t open sourced yet, but we have released Braid, our chat platform that we use for our internal communication.

                                                                      As munen said, Clojure’s live integration with the editor is really fantastic; it makes just having a plain repl seem like having to go back to an edit-compile-run cycle.

                                                                      1. 6

                                                                        I was curious about xmake architecture so I looked into the source code.

                                                                        xmake doesn’t “require” or “depend upon” Lua. Instead, xmake embeds Lua. Specifically it embeds LuaJIT 2.1, based on what I could tell in their repo source.

                                                                        So, when you run xmake, you’re actually running a a full-blown Lua implementation that is self-contained in the xmake binary, that has some automatic imports for the xmake embedded build DSL. If you want to run arbitrary Lua using xmake, there is a built-in “lua” plugin, shorthand “xmake l”, described here: https://github.com/xmake-io/xmake/blob/master/README.md#run-

                                                                        So, it would be a bit like if you built a build language atop Python, but rather than depending on Python, you made your whole build tool embed the entire CPython interpreter, pinned to some version. Lua is used in this way more commonly than Python is, of course.

                                                                        This means xmake itself is just a C program with large submodules written in Lua, running inside that embedded Lua context. The upside here is that xmake’s releases are just plain platform-specific native binaries that bundle everything you need, and that make no assumptions about your base system. This is a nice benefit in a build tool, as it aids in reproducible builds.

                                                                        Seems like a pretty fun, fascinating, and practical project. Especially given the confusion around builds and the plethora of language-specific build tools – there are 10 or so popular build tools for JavaScript alone!

                                                                        1. 3

                                                                          Instead, xmake embeds Lua.

                                                                          Isn’t that sort of the main purpose of Lua, to be embedded like this?

                                                                          1. 2

                                                                            Yes, it is completely independent.

                                                                            1. 1

                                                                              Out of interest. Could it run with different (non-C) Lua implementation? Because I find it interesting to check out if this would work with luerl for using as a “semi-native” build tool in Erlang.

                                                                          1. 5

                                                                            I bought a Planck EZ Glow and I love it! My typing speed increased by like 20 wpm over the shitty Macbook Pro keyboard, although I realize that’s a low bar.

                                                                            Now I want an ergonomic keyboard, but for portability + fitting onto small desks, the Planck EZ is hard to beat. I’ll probably end up buying either Keyboard.io’s Model 01 refresh (the apparently upcoming Model 100) if it’s good, or an Ergodox EZ refresh. I want USB-C.

                                                                            I also am backing the Keyboardio Atreus Kickstarter for funsies, even though it kind of fills the same role as the Planck EZ… I’ll see which one I like better, and give away or sell the other most likely.

                                                                            1. 2

                                                                              Second this, I’m also using a Planck-EZ as my daily driver. I customized it, put in some lubed Holy Pandas and a nicer keycap set. Take a look at my layout!

                                                                              1. 3

                                                                                Nice, I like the spacebar as a layer toggle when held! Very clever, I’m going to have to steal that.

                                                                                If we’re sharing layouts, here’s mine: https://configure.ergodox-ez.com/planck-ez/layouts/9wqxW/latest/0

                                                                              2. 1

                                                                                I was just looking at a Planck EZ the other day. A few questions:

                                                                                • Does the case build quality feel good? It looks like the ones straight from OLKB are aluminum and the EZs are plastic.
                                                                                • Do you like the MIT layout (2U space bar)?
                                                                                • Did you get an older one that didn’t have USB-C? It looks like all the ones today have it.

                                                                                As a no-longer-insecure-about-it Vim user (I tried Emacs three times and it’s not for me), I’m beginning to think that a 40% might be just what I’m looking for (coming from a mechanical 100%).

                                                                                1. 3
                                                                                  • It feels pretty solid to me. I wouldn’t use it as a battering ram, but I don’t feel insecure about throwing it in my backpack and carrying it around. When I wrote to the company asking about carrying cases, they said that the main concern was keeping debris out of the keyboard, not really protecting it from bumping against things, it’s pretty sturdy. (I was annoyed they didn’t have any official carrying cases, but I bought a Nintendo Switch case and that fit the keyboard very well once I cut out the irrelevant stand for propping up the Switch inside the case.)
                                                                                  • The space bar works pretty well for me. I actually held off on buying a Keyboardio Model 01 because of the strange “space button” configuration where there’s only a single little Space key on the right hand, I was like “I want to be able to hit the spacebar with either hand!” The Planck EZ’s 2U spacebar definitely works in that regard. But I found that when I’m touch-typing at speed, I never hit the spacebar with my left hand, so I probably would be fine with a 1U space button only for my right hand.
                                                                                  • No, the Planck EZ I have has USB-C, but that was a reason I bought it over the current Ergodox EZ or the Keyboardio Model 01, neither of which have USB-C.
                                                                                  1. 2

                                                                                    … or the Keyboardio Model 01, neither of which have USB-C

                                                                                    Just fyi, the Model 01 does actually have a USB C port

                                                                                    1. 2

                                                                                      Whoops, you’re totally right! Maybe I should just buy one after all.

                                                                                    2. 1

                                                                                      Awesome, thanks! I think I might buy one.

                                                                                1. 3

                                                                                  Great introduction! I’ve been really enjoying using SWI-Prolog for web programming, among other things. For even more, I found Anne Ogborn’s tutorials very useful; her web programming tutorial is what got me started with Prolog.

                                                                                  1. 9

                                                                                    My cofounder made a neat thing to address the first point, finding where the weather is nice, a little while ago when he was also traveling a lot: https://www.bestweather.in/map. It also lets you find when a particular place is nice and explains the rationale for what it considers “nice weather” here.

                                                                                    1. -10

                                                                                      Money quote:

                                                                                      Why are you leaving? Little bored. Not learning as much as I used to. I’ve been doing the same thing too long and need a change. […] I want to build something new again. I don’t want to get stuck in a comfortable rut.

                                                                                      I hope the author, who has so far worked on Go at Google, reignites his learning through something relatively more sophisticated like Rust or Haskell.

                                                                                      1. 61

                                                                                        This is an incredibly patronizing thing to say.

                                                                                        1. 27

                                                                                          Agreed, I usually downvote and ignore such comments, but I can’t help but point this out in light of the recent “Lobsters Is Better than Hacker News thread” [1] (which I also found to be “low effort”)

                                                                                          The comments on this same article on HN are significantly more enjoyable and positive to read than this thread:


                                                                                          It reminds me of the “low effort” framing here regarding open source participation.


                                                                                          Leaving aside the fact that the comment is patronizing (and IMO should just be deleted), it just has so little effort behind it that it contributes nothing.

                                                                                          I try to ignore the many low effort / tribal comments on lobste.rs, but sometimes the noise overwhelms the signal. I think the relatively aggressive HN moderators have done a good job. I understand why people dislike the site, but that’s because it’s big and the bad stuff jumps out at you.


                                                                                          Anyway I write this in hopes that people will put some more effort into their comments. I didn’t submit my last 7 blog posts here and it wasn’t a loss. One post was submitted to HN yesterday and that was plenty of feedback – at least 80% of it not “low effort”.

                                                                                          [1] https://news.ycombinator.com/item?id=22146746


                                                                                          1. -1

                                                                                            I didn’t submit my last 7 blog posts here

                                                                                            With all due respect, personally I havent missed it. I admire what youre trying to do with the Oil project, but its not of personal interest to me and I havent found a way to filter it out. To be candid it feels as if you use Lobster as a advertising platform sometimes. I think it would be better if you posted more non-Oil topics. Looks like 12 of last 15 were Oil Shell:


                                                                                            Good luck to you.

                                                                                            1. 37

                                                                                              I hate advertising as much as the next guy, but this is very unfair to Andy. For one, the pieces aren’t just about Oil shell. Most of them are about topics inspired by Oil shell, things like motivations, facets of the system, different techniques used to implement it. He’s also written tons of comments on other people’s submissions. He’s a good-faith member of the community.

                                                                                              1. 13

                                                                                                I agree he definitely interacts more than simple link dumping and while Oil isn’t interesting to me, so are a lot of other technologies that I can’t filter out. I think he should be welcome to share his links so long as they contain new information and not a repetition of existing information. For example I probably would be interested in how he stays so productive and how he manages tasks, and how he decides what to work on next. I hate to admit it but I’m probably more likely to click it if a product name isn’t in the title ;).

                                                                                              2. 18

                                                                                                Disagree strongly. @andyc’s blog posts are exactly the kind of content that should be submitted to lobsters. Please don’t stop Andy!

                                                                                                1. 13

                                                                                                  Strongly disagree. If @andyc content is not for lobsters, what is? Each of the posts is technically sound, and I learned many things from them, even tho I’m not interested in Oil per se.

                                                                                            2. 19

                                                                                              Interestingly, a sentence immediately below, which however didn’t make its way into above “money” quote, is:

                                                                                              It’d be nice to primarily work in Go rather than work on Go.

                                                                                              1. 19

                                                                                                How good of a programmer does one have to be before they can reject Haskell or Rust have it reflect something other than their own ignorance?

                                                                                                1. 4

                                                                                                  Sorry, I don’t understand your question/statement. Could you please rephrase it, English is not my mother tongue. I’m not sure if you ask about the skill level one has to have to be able to reject Haskell or Rust on a non-ignorance base without prejudice of other developers, or something completely different?

                                                                                                  1. 5

                                                                                                    Some fervent proponents of programming languages will imply that programmers that like or use other languages simply do not understand the unique benefits they convey. Paul Graham wrote a whole article that may be the root of some of this thinking.

                                                                                                    Rust and Haskell stereotypically attract these followers more than many languages. But other languages are not immune to this criticism; I’m a Lisp weenie and as we all know, Lisp is still #1 for key algorithmic techniques such as recursion and condescension.

                                                                                                    I read cgag’s comment (and upvoted it) as a tongue in cheek joke: a fervent follower of language X will always consider a criticism of X or a desire to not use X as a position rooted in ignorance of X’s capabilities.

                                                                                                    1. 3

                                                                                                      Some fervent proponents of programming languages will imply that programmers that like or use other languages simply do not understand the unique benefits they convey. Paul Graham wrote a whole article that may be the root of some of this thinking.

                                                                                                      This is true a lot of the time. It’s certainly possible for two people who have both used language X to disagree on whether the style of programming that language X facilitates or encourages is good; but a lot of the time a person who likes language X is making the case that language X is good to programmers who haven’t used it and don’t care to (which is fair enough - it takes a decent amount of time and effort to learn a novel programming language well enough to have an informed opinion about it, and it’s reasonable to decide that you don’t care about forming an informed opinion about a language and doing something else with your time instead).

                                                                                                      1. 1

                                                                                                        Oh, I think you and pg make a good point: sometimes there really are advantages that you can’t see when you look up from blub to language X, and the only real way to get it is to learn X. But I think it’s important to think about looking down the ladder too.

                                                                                                        When I’m in X slinging macros to build a DSL that makes my life easier, I’m making a decision that forces the next programmer to look at my code to deeply understand my DSL and all the decisions therein. What multiplies my productivity might quarter theirs.

                                                                                                        Sometimes you look down and the forced simplicity of blub looks OK :)

                                                                                                2. 8

                                                                                                  I spent a little bit of time on both Rust and Go and I learned a lot more with Go. Rust is pretty standard and sane, calling into libc, using LLVM. Go goes wild and does its own thing everywhere, it even does its own linking. It’s a lot of fun.

                                                                                                  1. 4

                                                                                                    I believe I understand what you meant, Go has a goal of simplicity, Rust and Haskell are more feature rich. Working on the Go compiler as a result can feel like polishing the same thing over and over, spending tremendous effort to make small improvements. The way you phrased it though appears as though you think Rust and Haskell are “smarter” or “superior” in some way. Implying some language is “smarter” or “more sophisticated” is a good way to make everyone hate that language.

                                                                                                    1. 6

                                                                                                      Implying some language is “smarter” or “more sophisticated” is a good way to make everyone hate that language.

                                                                                                      I would only ask that while some fans of other languages can become overly zealous that we try to not anthropomorphize the language itself by applying a label of hate to it. I think we can all agree that the GP comment is of poor quality.

                                                                                                      1. 3

                                                                                                        I can see that. I doubt anyone truly “hates” a language any more than they hate broccoli or brie. I love broccoli and I love brie, but I have heard some people hold strong negative opinions before.

                                                                                                      2. 1

                                                                                                        I think he just means Go isn’t that great of a language. I don’t really blame him for having that opinion. Go reminds me a lot of Java, it got adopted because a giant tech company “sponsored” it

                                                                                                        I mean just replace “Go isn’t that good” with “C++ isn’t that good” or “Java isn’t that good” and it suddenly becomes way less controversial.

                                                                                                        1. 4

                                                                                                          i first played with go before it was 1.0, and immediately liked it because it got so many things right, even back then. easy compilation, easy definition of packages without additional magic files, binaries that can just be copied. it’s just optimized for sanity if you want.

                                                                                                          so, imho: it got adopted because smart, experienced people got as much time as they wanted to carefully build something.

                                                                                                          1. 2

                                                                                                            Yea from what I’ve heard/experienced, the Go tooling is incredible (just like the Java tooling was incredible). I think what people have a problem with is Go the language.

                                                                                                            Full disclosure though, I’ve never used the language in any serious capacity (other than adding a 5-line patch to the backend code at work here and there) so I don’t have much to say. I have an irrational distaste for the language that I can’t put my finger on. I’m not sure if it’s the weird syntax or what. Tooling seems great though. I’ve been meaning to install 9front on one of my computers.

                                                                                                            1. 1

                                                                                                              most, if not all of the weird choices were made deliberately, the faq explains some of them. imho these things make the language great. for example, the “backward” declarations really feel natural for me, compared to c style declarations.

                                                                                                              the rest of the language is really boring, but the single features really work well together. that’s what makes it great. maybe it’s like watching a anthony bourdain episode where someone cooks a great meal in a single wok over a wood fire outside. it’s about how the tools are used, not how complicated the tools are :)

                                                                                                              1. 1

                                                                                                                Hm maybe I should check it out then. I really like Lua and C for the same reasons you like Go

                                                                                                    1. 3

                                                                                                      David Harvey’s A Companion to Marx’s Capital. I’ve been reading more about the history of economics and political philosophy which has been very interesting. Obviously the works of Marx play massively into that, but reading the actual primary sources seems like a bit much. This isn’t a short book (just under 800 pages), but it covers all three volumes of Capital and provides a commentary from a modern perspective.