1. 2

    The idiomatic style of writing Go results in indenting of the error handling, while the happy path remains un-indented. I’ve come to really like this about Go and something I struggle with doing in Swift.

    1. 2

      That’s what the guard statement is for.

    1. 16

      On one side, I strongly agree with this. I use GCP and DigitalOcean often to outsource what I do.

      On the other hand, I’m watching an entire community of people put out fires because they built their IT on a managed service which Apple bought and effectively terminated yesterday, causing people to wake up to entire fleets of devices with broken policies.

      Like everything else in tech, there’s no right answer, rather it’s a set of tradeoffs someone has to make.

      1. 2

        MASSIVE DISCLAIMER I WORK ON GOOGLE CLOUD

        I think there is definitely a difference between using AWS/Azure/GCP/AliCloud and a startup like Fleetsmith. I feel super sad for the people that got impacted, as that sunset is really bad (I know that GCP has a 1 year sunset for GA products). If you’re using say, GKE for your k8s clusters, you can be confident that’s not going away.

        Yesterday I was trialing EKS (k8s) on AWS. I did not like the experience, I ended up abandoning the AWS native method for a third-party tool called eksctl and it still took ~30m to provision a 2 node cluster. I cannot begin to imagine how one would self host a k8s cluster.

        So yes, there are trade-offs, but I think there are definitely ways to mitigate them.

        P.S. Given the Fleetspeak turn-off, one great service going away that would keep me up at night is PagerDuty, there really is no product that I know of that is anywhere near as good.

        1. 3

          a difference between using AWS/Azure/GCP/AliCloud and a startup like Fleetsmith

          Is there thought? So only use a big provider (AWS/GCP/Azure) for your startup project? No Digital Ocean/Vultr? Those are both fairly large shops with a lot of startups on them. But they’re also not too big to fail. Digital Ocean is offering more managed services (databases and k8s) but if they ever declared bankruptcy, your startup will be scrambling for another service (and could find yourself with a much higher bill on the big three).

          I’d rather see more open source management solutions for things like simply full redundancy management for postgres or mysql. What I’ve found is that most shops that have this kind of tooling keep it under lock, and it’s proprietary/specific to their setup.

          I think managed services are bad due to cost and lockin, and they’re also having the side-effect on slowing innovation for better tooling so people can self-host those same solutions.

          1. 2

            Yes, the loss of DigitalOcean in particular would be a huge blow to the ecosystem. Their documentation in particular is fabulous.

            I’m unclear about whether I’d agree with lock-in as long as you are judicious if this is a concern, e.g. Google Cloud SQL is just Postgres/MySQL with Google juju underneath to make it run on our infra. There’s nothing stopping you dumping your database at any time. Same goes for something like a service like Cloud Run where you’re just deploying a Docker container, you can take that anywhere too. But then if you go all in on GCP BigQuery, then yeah, you’re going to have a harder time finding somewhere to take a data dump of that to.

            1. 1

              Is there thought?

              I would say that the difference isn’t big provider vs startup but infrastructure-as-a-service vs software-as-a-service. Sure the major cloud providers have some software they offer as services but they all also have VMs that you can spin up and install whatever you want on. It’s not like you can install Fleetsmith on your own machines.

            2. 1

              Disclaimer: I work on containers for AWS, but not directly on EKS

              Just a note here that eksctl is the official and recommended tool for interacting with EKS. You can find it in the EKS user guide here.

          1. 12

            I’m going to say something incredibly controversial here, so, be forewarned.

            I believe that good “glue” (people, not code) are absolutely essential for high performing companies.

            You can skate by if you are few people but communication overheads, understanding business needs and so forth grow exponentially difficult the more heads involved.

            We try to paper over the cracks with hierarchy and responsibility domains, I would even go so far as to say microservices architectures (as originally envisaged) are a response to this too.

            Now the controversial part I promised: In the Google Memo that James Damore famously wrote, part of why he asserted that women were not enjoying the tech industry was because women in general and on average tended to get more enjoyment and fulfilment from empathic stimuli.

            He backed this up with evidence that when women are given free choice (in more free societies) the bell curve shifted towards higher personable roles.

            The issue; he surmised, was that we as an industry do -not- respect empathic people. We respect code, and features and the people who make them.

            But Damore, Myself and seemingly the author of this post, think this is a wrong thing to promote/respect exclusively, and while it’s hard to promote or respect a “team” because teams don’t have a face, having “glue” in your team is essentially a superpower. I wholly believe that a team that can empathise with the rest of the business to understand human and material needs will outperform even the most high performing “rockstar” team, because a team that can relieve pain-points in a targeted way will deliver enormous amounts of business value and savings, even in the short term.

            But the big question remains: how do we measure that, how do we promote that, and how do we emphasise that it’s valued?

            For whatever it’s worth I’m not saying that only women can show empathy I’m pointing out that “lack of value in empathic pursuits” was one of the citations in the Damore paper. Men have a lot to gain from this too as I’m certain that many men are held back because they value empathy and the industry does not.

            1. 6

              Glue is immensely important to a smoothly-functioning engineering culture, full stop.

              Unfortunately, the pathologies I’ve seen develop w.r.t. glue are (some covered already in the OP):

              • A senior is supposed to be handling glue and things falling between the cracks, but is put in an orgchart (cough matrix management cough) where the need for glue is high but the support for glue is low. They are punished or actively prevented from being glue, often because it is theoretically somebody else’s job.
              • A senior is supposed to be handling glue but is busy doing 1337 rockstar coding and can’t be bothered to handle it–often this is compounded by technical acumen being rewarded more than soft skills, when both are critical in the higher levels of IC work.
              • A junior or somebody not responsible for the glue takes it upon themselves to be glue. It feels like work (because it is work!) but it isn’t what they’re supposed to be doing, and then they get hurt when they (correctly) aren’t rewarded for it.
              • Anybody does glue work that just isn’t really that important but makes people feel good. It’s easy to pick glue work that is super visible and gives everybody warm fuzzies but just isn’t that relevant…see something like bringing donuts or whatever.
              • Anybody does glue work that enables the stupid practices and people that necessitate the glue work. By handling scheduling for people, you indirectly support meetings and enable them to be bad at scheduling themselves.

              Basically, the big problem I have with glue work is that it screws up the heartless calculus at the center of any business. If the opex (tangible and intangible) of keeping employees happy and productive never shows up on the balance sheet–because some well-meaning person is handling it and subsidizing the company’s ignorance–then it will never get fixed, and will only get worse as the firm scales.

              1. 5

                Yeah. These pathologies can only be addressed by extending that calculus to account for more of the true conditions of employee and business success. It’s probably not a good idea to require engineers to do glue work, but there should be some way to acknowledge and (correctly!) reward those who shoulder that burden.

              2. 5

                The problem with Being Glue is not that it isn’t a good role. A TL on a team should be doing that. The problem, as the author points out is that it won’t get you promoted. Given the biases that exist in our jobs it’s even less likely that a woman in this role will get recognized and promoted for the work they’re doing.

              1. 10

                It’s a bit jarring to me that Pythonistas are so… authoritarian in their views. Maybe as a consequence of “There’s Only One Way To Do It” mentality, but anything remotely out of the ordinary seems to scare them into blogging about how everything else sucks…?

                Languages and their communities are made up of people, and people are flawed so yes projects will have flaws. So does Python! There’s no standardized way of interacting with a language project, and forums will be all over the place, people on them will be cursed with a number of vices, but eventually you make it out with more knowledge.

                How do I install it? The docs say brew install, but I’m on Windows.

                You’ll have a lot of problems outside of Python/C++/C#/Java if you’re on Windows.

                How do I read from a file? How do I parse JSON? How do I pull environmental variables?

                Read the docs?

                How am I supposed to be writing this? Do I download an IDE? Is there a Vim plugin?

                Use whatever - there’s no single right way you’re “supposed to be writing this”.

                What are the language quirks that will cost me an hour to discover?

                Everyone gets tripped up on different things…? And even if not, it won’t be a wasted hour because a language feature (either technical, or of design) is behind the quirk, and you’ll be better off knowing it?

                I could go on, but the questions are too lazy. Languages are not easy.

                Screw this, I’m going back to Python.

                Oh well.

                1. 24

                  I think you are misunderstanding his point. I don’t think he’s using Python as the gold standard on how to do things (because it sure as hell isn’t even though I love it). He’s using Python as a stand-in for “insert familiar preferred language”.

                  That list is a pretty decent summary of what a tutorial or reference for new programmers should contain. Go to any unfamiliar language and check out their tutorial and see how many of these points they check off. I’m sure there’s quite a lot of the more important points left. You are probably capable of finding out those things yourself, considering the criticism you are levelling at the post, but imagine you are very new to programming; what even is JSON? Why wouldn’t brew install work on Windows? Environmental what? Do I use Word or Notepad to write the code? Why can’t I do if a > b > c?

                  Being familiar with another language does not really mean you are that proficient with it either. It just means you have managed to start coding in it and your programs mostly function when you start them up. Pretending everyone has 10 years of experience with C, Rust, JS, Java, Python and insert your flavor of functional language is absurd and elitist.

                  1. 17

                    How do I read from a file? How do I parse JSON? How do I pull environmental variables?

                    Read the docs?

                    The first time I tried to use Swift, I ran into a bunch of these issues. Swift is a “app developer” language, at least as documented by Apple, so you don’t read files from a path, you read them from a bundle. What’s a bundle? Welcome to Foundation! Don’t know what that is? Down the rabbit hole of Apple specific APIs that don’t map to other languages we go.

                    1. 3

                      Yeah it’s one thing to just ‘read the docs’ when you’re asking simple questions like that and the language you’re using is Yet Another System Call Wrapping Language With A Basic Standard Library And FFI like Python, Ruby, Node.JS, Rust, etc. It’s quite a different issue when you’re learning a new language but where ‘new language’ is code for ‘entirely new set of APIs, things you might want to do, etc.’ like Swift where you’re not just learning a new fairly mundane and simple language but also an enormous API surface, UI paradigm, app development conventions, operating system, etc.

                      1. 1

                        Pretty sure the docs for Swift cover all that.

                      2. 0

                        There’s a difference between Swift and the APIs you call with it. You don’t need bundles to work with files:

                        let file = "file.txt" //this is the file. we will write to and read from it
                        
                        let text = "some text" //just a text
                        
                        if let dir = FileManager.default.urls(for: .documentDirectory, in: .userDomainMask).first {
                        
                            let fileURL = dir.appendingPathComponent(file)
                        
                            //writing
                            do {
                                try text.write(to: fileURL, atomically: false, encoding: .utf8)
                            }
                            catch {/* error handling here */}
                        
                            //reading
                            do {
                                let text2 = try String(contentsOf: fileURL, encoding: .utf8)
                            }
                            catch {/* error handling here */}
                        }
                        

                        (from StackOverflow)

                      3. 9

                        To me this post sounded like a bunch of made up reasons to avoid learning a new language. Yes, some languages will have better documentation than others, some languages will have better support for $OS than others, some languages will have better editor support for your favourite editor. But guess what, that’s all because someone put in the effort to make it so. If you believe for example that the editor support is not up to snuff, you can improve it for yourself and everyone else after you.

                        And yes, there will be “that one package everyone uses” because it’s better than the others, but why should there be an official statement about that anywhere? This is basically a cultural thing. Also, you can’t expect to completely become a native in just a few days. Besides, what’s best today might not be best tomorrow (think e.g. Requests, which is by many people considered the de facto Python library for HTTP, but with the introduction of async/await in the language, it’s no longer so clear that Requests is the way forward). Also, something might be great today but something even better might come along in a few years.

                        What do you do when you want to become more embedded in a culture? You make some friends and ask people to explain the local customs to you. Or maybe you buy a book about the culture and learn it from that. But mostly, you learn it through osmosis, by spending time in there.

                        1. 7

                          I suspect the post is more of a collection of common objections and stumbling blocks for people that might want to try out a new language. Any one of them might be the the thing that turns away a single person, as they pile up, less people are willing to jump over the hurdles.

                          I don’t think anyone expects to be “native” in a few days, but I know for me, if I can’t find a way to get a foothold in a language or framework within 4-6 hours, my interest moves onward. A foothold here is a basic, but useful (ideally) program that I can use as a base for building greater understanding over time. (Useful being a bit subjective). There are some exceptions to this, especially at $WORK, but yeah.

                        2. 8

                          I don’t think this post is Python-specific. I think everything makes sense even if you substitute “Python” for “$MY_LANGUAGE_OF_CHOICE”

                          1. 2

                            My point was that looking for the one specific way you’re “supposed to be writing this” is a sentiment I get from a lot of Python coders.

                            1. 2

                              Is that so bad though? “You could do X in 10 different ways” would tend to confuse beginners (arguably) even more.

                              1. 2

                                Yes, it is bad for a general purpose language to have one specific way of doing things. I have enough of a hard time having to always work with the same cloud provider (AWS), don’t tell me my code doesn’t conform to some standard if it achieves the same result. Coding is a creative endeavor, not paint by numbers.

                                For me, it’s an excuse to only support code written a certain way, and screw you for thinking differently.

                                1. 0

                                  Yes, it is bad for a general purpose language to have one specific way of doing things.

                                  In the language camp that you’ve spent the most time in, that advice may apply. But claiming anything to be universally true (or false) is taking things a bit too far.

                                  For instance, Ruby folks are happy having 10 different ways of doing the same thing, and Python folks are happy having one single way. Different people feel productive in different ways. That doesn’t have to mean that one is better than the other one.

                                  1. 1

                                    claiming anything to be universally true (or false) is taking things a bit too far.

                                    We’re in agreement here. Python coders say there’s only one right way to do things, I reject that because different people feel productive in different ways.

                                    1. 0

                                      Python coders say there’s only one right way to do things

                                      … in the Python world

                          2. 11

                            It’s a bit jarring to me that Pythonistas are so… authoritarian in their views. Maybe as a consequence of “There’s Only One Way To Do It” mentality, but anything remotely out of the ordinary seems to scare them into blogging about how everything else sucks…?

                            You’re missing the point. Python isn’t some magical language that has all of these fixed. In particular, the packaging situation on Python is an utter mess. The point is that the learning a language means learning the ecosystem and accidental complexity bundled with using a language in the real world. And that’s hard. Someone switching to Python from Java would have these exact same problems.

                            You’ll have a lot of problems outside of Python/C++/C#/Java if you’re on Windows.

                            In the 2018 SO survey, half of all developers said they used windows. Dismissing them out of hand is a great way to show just how little you care about adoption.

                            I could go on, but the questions are too lazy. Languages are not easy.

                            Many languages are essentially complex. Most are far more accidentally complex, making it artificially hard for beginners to start using it.

                            Perhaps this should be another bullet point under community: “Does the community think its the beginner’s fault for struggling?”

                            1. 3

                              I’ll stand as a Windows developer who has used quite a few languages on Windows outside of that group. Support varies, for sure.

                              1. 1

                                In the 2018 SO survey, half of all developers said they used windows. Dismissing them out of hand is a great way to show just how little you care about adoption.

                                I didn’t dismiss them. I just pointed out the large majority of them are using Python/C++/C#/Java. I guess I could have added PHP to the list.

                                Perhaps this should be another bullet point under community: “Does the community think its the beginner’s fault for struggling?”

                                There’s struggling and there’s I expect every problem to be already fixed for beginners, so I don’t have to struggle. Struggling while learning a new language is always going to happen. To dismiss it with “Screw this, I’m going back to my blanket” is unrealistic.

                                1. 11

                                  There’s struggling and there’s I expect every problem to be already fixed for beginners, so I don’t have to struggle. Struggling while learning a new language is always going to happen. To dismiss it with “Screw this, I’m going back to my blanket” is unrealistic.

                                  Dude, my job is improving accessibility for formal verification languages. Look how many of the other commenters are talking about the same pain points. These are not “I want my blanket” problems, and you thinking they are is a sign you haven’t had to go through this in a very long time.

                                  1. 0

                                    Dude, my job is a bit immaterial to the point. And I’ve been learning a language that is still in alpha and makes me file Github issues when I use it because it explodes left and right. I don’t say “screw this, I’m going back to $COMFORTABLE_LANGUAGE_I_KNOW” because I realize a) it has future potential and b) creating languages and growing them, along with a community around it, is no easy feat. And it doesn’t have to be for me to consider learning said language worthwhile. The world doesn’t revolve around my needs (or my job). And plenty of other commenters see your post as whining, too.

                                    1. 7

                                      Dude, my job is a bit immaterial to the point.

                                      The point of that statement is that I’m not demanding anything radical, and I’m often the person who’s fixing these issues for formal verification languages. I’m not a no-stakes observer complaining about languages being hard, I’m talking about actual barriers to learning and adoption.

                                      The world doesn’t revolve around my needs (or my job). And plenty of other commenters see your post as whining, too.

                                      Okay, I don’t think this conversation is going to go anywhere. If you think these very real issues are “whining” or a “blanket”, then we don’t have any common ground.

                                      1. 0

                                        If your point is that you have languages have to:

                                        • Explain how to install them for every operating system available
                                        • Tell you how you should be “writing” with it
                                        • Tell you all the quirks that might cost you (personally) an hour or more to discover
                                        • How the help is organized (not just where it is)
                                        • Where to look for your specific problem X they don’t know about (docs, FAQ, community, Google)
                                        • Teach you how to debug with it
                                        • How to do unit testing
                                        • How to build, package, manage your environment
                                        • Package management
                                        • Where the language community is, who the abusers are, tell you about the high-profile rivalries, all the in-jokes
                                        • ….

                                        for you to figure them out or else you screw back to Python, then yeah I don’t think we have common ground.

                            1. 4

                              Module support in the go command is now ready for production use.

                              It’s interesting to read this, as almost everyone complaining about issues with modules were trying to adopt them in production workflows for the last year+. The release notes make it sound like now is the time to start adopting modules.

                              Of course, if people hadn’t tried to actually used them from the start, they would’ve lacked the proper attention. And I’ve personally been happy with modules for a long time now. But the messaging reads weird.

                              There’s more details on the defer changes Jana Dogan’s blog.
                              And Francesc Campoy did a good review of all the changes since 1.12 at fosdem.

                              1. 4

                                It would have been interesting to see Swift evaluated on this list. It’s used more and more for Apple’s OS frameworks, and I suspect it has decent interop with C++, since Apple has a lot of legacy code, and needs to consider that when choosing what to include in its replacement language.

                                As someone who likes Go a lot and uses it every day, I’m not at all surprised it’s not a good fit here. Especially if the core team is more familiar with C++/Rust etc. Still, I could see Go succeeding in many user space components. Components like the software update system could be handled well by Go’s features. It could also be a good language to write a init system.

                                1. 4

                                  I suspect it has decent interop with C++

                                  Everything I’ve read suggests it doesn’t really. Either you have to provide a C interface to your C++ code, or you need to wrap your C++ in Objective-C and use the Objective-C wrapper in Swift.

                                  Having said that, I don’t use swift and much of what I found on the subject was several years old, so I’d be interested to hear from someone who knows what they’re talking about.

                                  1. 2

                                    Swift lacks concurrency support beyond Darwin.

                                  1. 29

                                    I might have sort of agreed if recover() didn’t exist. Since it does exist, panic(), it’s essentially a design where exceptions do exist, but you cannot differentiate between them, and you can also use them with goroutines.

                                    I also agree that signalling errors in the return values is usually a better approach, but Go also got the Either a b/'a, 'b result type laughably wrong. In the design where product types exist but sum types and destructuring don’t, nothing keeps you from just ignoring the possibility of an error and using the alleged return value in an expression. If you are given a Maybe or Either type, you have to explicitly handle the case when the callee gives you an error value instead of a result.

                                    And then, practical implementations of algebraic effects seem like a matter of time now.

                                    1. 8

                                      I think you need recover() to scope “it’s game over man” to something that makes more sense; for example the current goroutine or current HTTP request. In those scenarios, completely bringing down a server with a panic() doesn’t strike me as desirable, but completely bringing down the current connection or goroutine does.

                                      Unfortunately this does allow for the possibility of abuse and using panic() as poor man’s exceptions – something not uncommon for new Go programmers more used to exception-based languages (I did this myself) – but that’s not the intended use. I’m not sure if there’s any way around this?

                                      1. 3

                                        Oh, I’m not against having a mechanism for signalling a failure from goroutines (there has to be some). My point is that, at the language level, goroutines that are expected to cause recoverable panics are indistinguishable from those that aren’t supposed to panic at all or should always be treated like fatal errors if they do.

                                        It’s the same problem as now knowing whether a function throws exceptions or not, viewed from a slightly different angle. If you want your program to decide what to do with panicking goroutines (retry/abort/ignore ;), you’ll end up replicating either exceptions or sum types in a compiler-unenforceable way.

                                        1. 1

                                          Fair enough. I’ve actually made the mistake by not scoping panics() a few times, and making a more explicit choice about this would probably be better. In practice, I’ve actually found that most – although obviously not all – panics() should actually be scoped to the goroutine.

                                        2. 1

                                          What’s a valid reason to panic in a HTTP handler? Most of my experience has been with poorly written dependencies that panic, which I now tend to avoid. But I also can’t really recall choosing to panic in a web server in code I’ve written.

                                          1. 2

                                            In general: you probably shouldn’t. But you don’t always control panics: they may happen due to nil dereference, accessing an array beyond its size, etc. In practice, it’s pretty hard to give a hard guarantee that any given non-trivial Go code will never panic.

                                            1. 1

                                              The idea is that the server shouldn’t die just because one request triggered a panic.

                                        1. 12

                                          Is the need to have private conversations the most important part about building open source software? Most of my interactions, as a user, as a contributor and as a maintainer in open source projects happen completely in the open.

                                          • public mailing lists
                                          • public rooms in IRC
                                          • public slack channels

                                          I do occasionally have DMs and use WhatsApp to discuss some sensitive matters with another person. Or send a direct email to someone. But most of the time I want the conversation to be out in the open and indexed. I tend to discourage DMs and redirect discussions back into the open unless strictly necessary. If I had to pick something to complain about proprietary systems (Slack in my case) is that they’re quite terrible at indexing content over long periods of time. Information becomes lost.

                                          There’s something to be said about proprietary tools, but the lack of end-to-end encryption is a odd axe to grind in the context of communities where most communication is totally public.

                                          1. 5

                                            It’s not just message privacy, it’s also geolocation/IP privacy. If you can’t use a service via Tor, doxxing yourself to the hosted service provider via IP geolocation/mandatory phone number is now the cost of entry—even for the public channels.

                                            1. 4

                                              Can I run email or irc over tor?

                                              Maybe my issue with discord and slack over just mailing lists is the monitoring is focused at a single entity. Mail and irc can be scanned and logged but it’s done by multiple ISPs and entities.

                                              1. 4

                                                Can I run email or irc over tor?

                                                Yes. There’s been an “OnionNet” IRC network running on the hidden services system for as long as I’ve been following the dark net’s development.

                                                Now, connecting to clearnet networks from within Tor is a different matter. Most of them block all the exit nodes (probably the only reason OnionNet is usable is because it’s not valuable enough to be worth spamming).

                                                1. 3

                                                  Yes. I do the latter regularly.

                                                  1. 2

                                                    Yeah! There are several free email services that have hidden services (tor-only endpoints), as well. Most f/oss IRC networks permit use of Tor, as well.

                                              1. 23

                                                I really can’t agree with this more. At work I was just upgraded to a top of the line 16” MacBook Pro and I hate it. It’s so bad that I’ve been looking for something to buy myself to replace it and I can’t find anything good. The XPS 13 is probably good enough, but I’d really like something better than that.

                                                I’m probably even less demanding than Drew, I’m willing to deal with non-free device firmware blobs. But I need a high DPI screen, so I don’t even have the option of going with something old.

                                                1. 7

                                                  The new ThinkPads aren’t so bad; I have an x270 and it works well for me. It’s been working with Linux pretty much out of the box ever since I got it 2 years ago.

                                                  I don’t like how the XPS integrates the click buttons on the touchpad (a lot of laptops do that), but other than that it’s pretty okay for the most part.

                                                  1. 3

                                                    Can you only get a 1366 x 768 display on the x270? I don’t think I could deal with that.

                                                    The XPS is probably where I’ll end up. The just announced a new model with a 16:10 display. I’m going to wait to see what the linux compatibility with that is/see if that display comes to the Developer Edition models. And I actually prefer the click being integrated in the touch pad, so that’s not a worry of mine.

                                                    1. 4

                                                      I had work buy me an X260 without thinking about it, and they got me a 1366x768 one. It never even occurred to me that such a thing would be possible to buy, so I didn’t think to specify.

                                                      But even if they had gotten me a higher-resolution one, the display is still 16:9; too small to be usable without an external display. It’s also very dim; completely useless outside. The only good thing about it is that it’s not glossy. I’m much happier on my X301, so most of the time I just SSH in from that machine.

                                                      1. 3

                                                        Nah, I have a 1920x1080. For a 12.1” screen that’s more than plenty. Pretty sure I could also configure a higher resolution one. I’m not even sure they’re even selling the x270 any more, since there’s the x280 and x390 now. I’d probably get the x390 if I had to buy a laptop now.

                                                        “ThinkPad [model]” doesn’t necessarily say all that much, since they come in a gazillion build configurations. A lot of them are mass-produced for enterprises that buy 500 of them for their office workers and the like, and come with shitty screens like the one you saw. But you can get better for sure.

                                                        The ThinkPad has both integrated click and buttons on top; it’s a great design IMHO (but in the end of course a matter of personal taste/preference).

                                                        1. 2

                                                          Good to know, I only found one build of the x270 on their website, and I can’t even find that again now, which had that screen & AFAICT, couldn’t be customized. Probably just need to do through their website more.

                                                          The ThinkPad has both integrated click and buttons on top; it’s a great design IMHO (but in the end of course a matter of personal taste/preference).

                                                          Ah, yeah, that definitely is best. I miss that from my old x220. I wish I would have never gotten rid of that.

                                                      2. 2

                                                        I’m still holding out on buying anything as long as my X300 keeps running, but I just a look at the x270 and seriously … how can they build a notebook with a touchpad that has the buttons on the wrong side?

                                                        1. 3

                                                          I think they’re more intended for the TrackPoint than the touchpad, so it makes sense from that perspective. My old T61 had buttons on the top and bottom. I find it works quite well for both though. Also: it has a middle click button! A rarity on laptops and a small feature that actually matters a lot to me.

                                                          1. 1

                                                            I think you’re using the touchpad wrong. x270 is design with the nipple pointer in mind and that’s why the buttons are on the top. Also I’ll just put it out there: buttons on the top of the trackpad should be standard to begin with ­— it’s much more ergonomic. You need to move your finger less and your wrist of the hand that is touching the buttons can rest on the laptop rather than outside surfice.

                                                            1. 1

                                                              Buttons at the top make it a pain to use gestures – if the laptop can’t be used without a mouse, why even bother with a touchpad?

                                                              Maybe Lenovo should just sell me the device 2€ cheaper and put a real mouse in the package instead. (Same with keyboards these days. Those super-thin devices don’t look that practical anymore if I have to carry an additional, usable keyboard.)

                                                          2. 2

                                                            They aren’t so bad, but they’re clearly worse work tools.

                                                            I ~recently switched from a T430 to a A485 (that’s a T480 but with AMD in it).

                                                            No latch on the cover, meaning that after 5 years it will be opening itself in the backpack every day.

                                                            No ultrabay, or however it was called, meaning I need to carry around either a sata-to-usb converter or an external dvd depending on what I need. Sure it’s slimmer now: but also less useful. That’s not what I wanted a thinkpad for.

                                                            Two batteries instead of one. Battery life is as good/bad as it was on the T430, but now when the battery wears out I’ll need to replace two instead of one – and one of them is deep enough to require a full-on disassembly.

                                                            The physical cover for a webcam is nice, but everything else is a straight downgrade. If anyone else made laptops with decent trackpoints I’m sure I’d never look at Lenovo again :/

                                                            1. 3

                                                              I’m using T430 privately, yet I’m thinking more and more about buying something new. T430 lacks power, 1080p x265 is too much for it. Putting SSD in it gave it second breathe at the time, but that’s about it. Working with ThinkPads spoiled me, I need trackpoint, touchpad is no go (I mean I use it only for scrolling, but can easily live w/o it at all), which limits me mostly to ThinkPads (there are few other non-Lenovo series that happen to have trackpoint equivalents, but there aren’t many of them).

                                                              I’m not necessarily fond of what is presently offered in ThinkPad lineups. I would even overpay for some Extreme if it was 14” and having normal RJ45 ethernet port (instead of Lenovo’s proprietary mini-RJ45-crap forcing you to buy and use some adapter if you’re wire networks user). 15” is too much, I want to have some mobility. And honestly, I use wire networks rarely, but lack of normal RJ45 port irritates me immensely, possibly more than it should. Ultrabays are cool too, I have one right now with additional SSD there. But if I need, I can replace it and put DVD drive in it, or something else. It takes literally seconds. Lack of it in newer models also bothers me (but not as much as lack of RJ45). And having USB-C for charging maybe is nice and dandy, but for firmness and durability I think slim tip connector, like used in T470 (my work laptop), is what I prefer the most.

                                                              They make laptops slimmer, but modularity and usability, are reduced because of that.

                                                          3. 3

                                                            What do you hate about the 16” MacBook Pro? I feel like I’ve been hearing generally positive things about it.

                                                            1. 5

                                                              It’s just super unreliable. Half the time when I connect it to my Thunderbolt 3 dock (which I bought from an apple store) it just sits there and flashes until it reboots. It also fairly often will end up rebooting while its suspended. Bluetooth devices slowly get juddery over time and half the time it won’t auto reconnect to them.

                                                              I have more problems on top of that don’t help my impression of the system overall, those just come from Parallels being awful at what it does, but I need Linux to do my job.

                                                              Edit: I should also mention, my last work-issued laptop was a 2015 Macbook, which as I understand it was the last “good” one before they started mucking things up. So, my expectations weren’t pre-set to be super low. Maybe that is why I’m relativity more disappointed with it than others that had used other newer models.

                                                              1. 2

                                                                I have more problems […] those just come from Parallels being awful at what it does […]

                                                                I’m confused. Are most of your applications designed for macOS, Windows, Linux, or general Unix?

                                                              2. 3

                                                                I’m curious about the answer as well. I’ve been using a 16” for a few months now, and really like it. I’ll be disappointed(but not surprised) if the complaint is actually about the fact that it ships with Catalina.

                                                              3. 2

                                                                I have a hidpi x1 carbon v6 and it’s not bad. the v4 had better ergonomics though, and the fact that they backslid on that makes me sad. (specifically, the margins on the side of the keyboard are too small on the v6)

                                                                1. 1

                                                                  … I need a high DPI screen…

                                                                  As do I…

                                                                  … so I don’t even have the option of going with something old.

                                                                  …which is why I’m still using 15 year old T42p’s with 1600x1200 screens…

                                                                1. 2
                                                                  • jury duty
                                                                  • Work: writing an Apple MDM service (Go)
                                                                  • Home: tinkering with x-callback-urls and trying to glue my ReMarkable tablet and Ulysses app (Go, Swift)
                                                                  1. 3

                                                                    Nix would fit under this tag as well.

                                                                    1. 9

                                                                      I manage macOS deployments in enterprise and while the complaints are about different things this year, the problems are not necessarily worse they have been in the past.

                                                                      Apple tends to have good intentions (kext -> sext, read only system partition etc) but spends very little time on making sure the migration is seamless.

                                                                      • In the betas there was absolutely no way to mount a root volume at /, so after we complained, Apple added the synthetic.conf config, but it’s still something many struggle with.
                                                                      • The “firmlink” introduction for read only system volumes broke many tools.
                                                                      • The upgrade and every single point release after ended up reverting config files and moving them to a new directory. We use puppet so the changes are re-applied, but this still causes many users to discover the change because their ssh login is not working immediately after the upgrade.
                                                                      • The 10.15.4 release is about to introduce another number of disruptive changes, including the removal of /usr/bin/xar, which package installers depend on, and will catch popular tools by surprise.

                                                                      If you’re like me and all you do with your Macbook is iTerm, Vim, Git, Firefox and SSH then of course the OS upgrades will mostly go un-noticed. But when you look at all the things users typically do with their computers, keeping up with Apple is a constant race to keep up.

                                                                      1. 3

                                                                        It’s interesting to me how — apart from the usual fanboys — I still haven’t seen any unequivocally positive feedback about Mac OS Catalina.

                                                                        I have unequivocally positive feedback about Catalina. I have no complaints about anything that’s stopped working, no complaints about anything missing, and I appreciate the minor changes and improvements.

                                                                        1. 1

                                                                          You also do a clean install every year, right? Did you do one for Catalina?

                                                                          1. 1

                                                                            I do a wipe/reformat every year but not tied to OS upgrades. Haven’t done one since Catalina, yet, no.