Threads for aphoenix

  1. 3

    A minor note about :visited is that it is actually quite a limited pseudo-element. The only usable CSS properties for :visited are:

    • color
    • background-color
    • border-color, border-bottom-color, border-left-color, border-right-color, border-top-color
    • column-rule-color
    • outline-color
    • text-decoration-color
    • text-emphasis-color.

    Notably, these are all colour related; you cannot extend this to images, due to the privacy restrictions on this pseudo element. So don’t do captchas that are just colour based!

    That said, I could certainly see someone like my father falling for a captcha like this.

    1. 5

      I built my first web site in 1994. I’ve spent a stupid amount of time from 1999 until now thinking about web security, with quite a chunk of that focused on how that applies to privacy. And I would very likely have fallen for a CAPTCHA like this a couple of days ago. I’d have thought it was odd, but there are many odd and ineffective CAPTCHAs out there. I’d not have given it much thought.

      1. 1

        I just realized that my comment insinuates that only a particular kind of person would fall for this… and I also insinuated that my dad is stupid, and neither is true.

        What I meant was that this is clever, and lots of people may fill it out as a CAPTCHA because it is very compelling and looks like a CAPTCHA. Given this article, there are now a group of savvy web-users that would be less likely to fall for it, and every time something like this proof of concept is shared, the number of people who will fall for it drops. But no matter what we do, there’s going to be a small subset of people who are not particularly web literate, who trust sites more than they should, and who will never be able to not fall for a trick like this. That’s the point that I was trying to get at - how insidious issues around :visited can be, because no matter what, it’ll trick some of the people all of the time.

    1. 4

      out of the loop here: What exactly does “serverless” mean (unironically) in this context? As far as I’m aware, “serverless” refers to peer-to-peer network protocols like BGP, some video games’ multiplayer, or ARP. None of these seem like they could be replaced by cgi-bin.

      1. 5

        Serverless Computing is a model where you provision things at a different level than “server”. They still obviously require a server to run, but you don’t have to manage things at the server level. A common example is Lambdas from AWS.

        Resources for more information:

        1. 1

          Are you being serious?

          This is referring to the ridiculous use of the term ‘server less’ to describe the pattern modelled by AWS Lambda, Azure Functions etc - “Functions as a Service” is the sometimes quoted ‘generic’ term.

          1. 9

            Are you being serious?

            Not everyone lives and breathes cloud network services.

        1. 2

          I had an idea for a simple game and I’m going to try to get a first crack at making that work. I’m not a game developer, so it should be interesting to see how far I can get.

          It’s also my mother-in-law’s 65th birthday today, and we’re having a big family pick-a-nic tomorrow, so we’ll be playing volleyball, eating barbecued food, drinking beer, playing frisbee, swimming, etc. in this insane heat and humidity (I’m in Southern Ontario, Canada). It’ll be fun, but I’m bringing two 4L jugs of water with so people stay hydrated.

          1. 1

            I don’t think this is a useful link, it’s just a link to a “sign up for more info!” page. I’d prefer a direct link to the repo, or to the paper.

            1. 4

              The site actually includes links to both, so it is arguably more useful than a link to either.

              1. 2

                I agree that the form is a bit prominent, but it gives a good entry point to the different resources, of which the Git repo is admittedly the most interesting at the moment – but the repo doesn’t have a nice rotating diagram ;)

              1. 12

                It’s important to note that you can be lazy, impatient, and proud without ever actually achieving anything as a programmer. You have to be lazy, impatient and proud in particular ways for this to work to your advantage, so you have to add a fourth virtue: get good.

                1. 16

                  I’ve been using NoScript for many years, but stopped.

                  Should I write a blog post about why I stopped using it? Are folks interested?

                  1. 14

                    I think that there’s a whole series of articles that would potentially be of interest to me:

                    • I don’t use NoScript
                    • I don’t obsessively block ads
                    • I don’t really advocate for my own privacy, and sometimes volunteer my PI to google
                    • I develop single page applications
                    • I use modern cloud server architecture
                    • I use CI/CD for personal projects
                    • I like Microsoft
                    • I built something using PHP7 and it was fine

                    I see a lot of “counter culture” style posts about these, but I rarely see the posts that talk about why one might actually do any of these things, and there’s a lot of good reasons that all of them exist.

                    Realistically, I’m not sure how popular any of these would be, because it’s more chic to be against something than it is to be for something, especially if that thing is relatively new.

                    1. 9

                      But this will ruin my claim that nobody ever writes blog posts about doing the default thing and having it work. :)

                      1. 5

                        This in particular is tempting ;)

                        I’ll easily be discredited due to my bias, though: “Firefox Security engineer says Firefox Security is great”

                        1. 3

                          I’d be interested in reading that even if it would be inherently biased.

                          P.S. Tracking protection in Firefox looks overly strict, for example it blocks cross-origin fetches to www.reddit.com even when using anonymous calls.

                          P.P.S. Lobsters now have a special homepage field in profile info.

                      2. 5

                        Sounds good.

                        1. 2

                          Since you asked, I’m not really interested. I’d rather not ‘need’ to allow tons of javascript to run on my computer just to read articles. If you don’t care then that’s your thing.

                          1. 2

                            Yes please.

                          1. 1

                            Am I the only one who finds it annoying to have real skinny columns of text with giant margins in my nice wide screens? I understand people often feel just as poorly about wide screens filled edge to edge with text, but can’t there be a nice compromise?

                            1. 5

                              I agree for media content (images, videos) but not for text. If the lines are too long then it is very difficult to read for me, because when reaching the end of a line then going to the next line is difficult.

                              1. 3

                                I don’t know the research behind it but I keep seeing the optimal line length for readability be defined as between 50 and 75 characters.

                                Personally I prefer column widths to be about as wide as a novel with font size comfortably readable from about half a meter from the screen. I have noticed that if columns are wider I tend to increase the font size in a constant ratio in order to achieve readability.

                                A number of blogs I follow don’t have any css styling at all and are essentially wall to wall text, for me to be able to actually read those I have about 16 lines of css that I inject otherwise it all just becomes a jumble of colours and shapes.

                                1. 1

                                  Probably instead of injecting CSS your windowing system has an ability to make your browser window the width you actually want to view webpages at.

                                  1. 2

                                    It does, but I normally have two windows locked at half width on one monitor and one full screen on the other monitor. I rarely if ever have windows tiled at some abstract size and even with the two windows locked I like to see a margin between the text and the edge of the window ;)

                                    1. 1

                                      This, unfortunately, doesn’t work in practice. There are too many sites out there that assume a particular minimum window width and add fixed-size margins to make the center column narrower. So with a narrower window you end up injecting CSS on those sites to get smaller margins, or with a wider window inject CSS on the other sites to make the text column narrower.

                                      (I personally resize my browser window depending on the site I’m visiting, because I gave up fighting this battle ages ago).

                                  2. 4

                                    As others have said, the reason is because there is an optimal readability length of lines. If lines are too long, then text can “swim” in front of the user and it is more difficult to read. If lines are too short, then lines feel choppy and you
                                    end up reading
                                    in blocky bits
                                    like this and it
                                    feels wrong.

                                    The wikipedia article on line length is quite well sourced and explains the difference between print and screen as well.

                                    1. 3

                                      Butterick’s section on responsive design gives some seemingly solid tips on spacing and line length.

                                    2. 1

                                      I have the opposite problem… I often run across websites that were designed by people who apparently only ever use their computer in what I call “iPad mode,” i.e. every application is full screen, all the time, and they just constantly switch between them. As a result, the sites they develop take up the full width of their display (or close enough to it).

                                      The problem is, I like to have many applications on my screen at the same time, it’s why windowing systems were invented back in the early 80’s. My web browser doesn’t take up my full screen width, it takes up maybe 1/2 of it. Which means these “wide mode” sites either require horizontal scrolling to read them (best case) or are just completely broken and unreadable, which is more often the case.

                                      Also, there’s some well-known science somewhere about narrow text columns being easier to read than long ones. That’s why magazines and newspapers almost never print an article the full width of the page and instead break it up into two or more columns.

                                    1. 2

                                      I’ve just installed this and it actually made the touchbar almost not suck.

                                      The only feedback I have is that, as it’s collapsible, I’d love the icon for uncollapsing it to be on the Touchbar Edit screen.

                                      1. 1

                                        dont say “gems” - thats just confusing.

                                        1. 9

                                          Thanks for pointing it out. I thought it was a pretty common idiom, like in “hidden gems”.

                                          1. 5

                                            It’s okay, you can use it because Ruby is mostly dying off.

                                            Just don’t call them eggs!

                                            1. 3

                                              Eggs?? That’s so last century! You probably meant wheels :-)

                                              1. 1

                                                Yeah but:

                                                • hidden gem -> gem
                                                • easter egg -> egg
                                                • [what goes here?] -> wheels

                                                I’m wracking my brain for how you’d get wheels reasonably in the title!

                                                1. 2

                                                  fortune wheel..

                                          2. 8

                                            Can you please tell us for how long you were confused? your comment comes across quite rude and nonconstructive (to me personally).

                                          1. 3

                                            Developers are obsessed with the notion of “best practice”. It implies that there is one correct way of doing things, and all other solutions are either imperfect or, at worst, “anti-patterns”. But the definition of best practice changes everytime a new technology arises, rendering the previous solution worthless garbage (even though it still gets the job done).

                                            Developers should be concerned with best practices. We are constantly learning better ways to do the jobs that we are doing. Some of the things that we used to do are no longer done, because there are better ways to do them; some of the new ways to do things are quite complex. The definitions change, because our understanding, or our underlying technology, changes. Similarly, we updated things like “our model of the atom” when we had a better understanding of how it should actually work. Complexity isn’t necessarily bad, just as simplicity isn’t necessarily good.

                                            It’s much more important to think for yourself than it is to strive for simplicity because some guy on this blog told you to try to be simple. Sometimes it’s fine and great to have a static site with no database, but pretty often it turns out that databases are important and do things that you kind of need. Sometimes it’s great to go for a simple tech stack and remove moving parts, but sometimes it turns out that a more complex tech stack is actually important to do the kinds of things that you need to do. The thing that’s actually important is not simplicity, it’s understanding why should approach something a particular way.

                                            Don’t get me wrong; there are certainly developers who find answers and then go looking for problems to solve with them. Sometimes developers make things much more complicated than they need to be. However, there’s a counterjerk to this happening where people make things much more simple than they should be, while questioning the utility of doing more. I think the simplicity counterjerk is just as destructive as thoughtless complexity.

                                            1. 11

                                              The issue with obsessing over “best practice” is that we end up building a certain way because it’s “best practice”, not because we understand why it’s appropriate to our situation.

                                              1. 0

                                                This is a great point. I think sometimes we fail to consider the full context for any given “best practice”, especially while in a development-intensive mode.

                                                I think it’s important to have a touch of skepticism about best practices, especially in environments that change rapidly.

                                                Ultimately, I think the intention comes from a good place. It seems to follow that if one is interested in following best practices at all, they want to do so out of a sense that it is the correct thing to do. This applies technically as well as socially. On its face, this may not seem problematic. However, issues arise once correctness (as a whole) and “best practices” become muddled.

                                                Are best practices good because they are correct, or are they correct because they are best practices? This is starting to look a lot like the Euthyphro Dilemma.

                                              2. 1

                                                People should be concerned with which practices are the best, but not with ‘best practice’. The problem with the concept is that it’s used as a justification for doing something. ‘We’re doing X, Y and Z because it’s best practice’ is nonsensical. There’s someone that things that A, B and C are best practice as well. Justify why it’s the best thing for you to do based on its actual merits. When new, superior approaches arise, they might become YOUR best practice immediately, but for a lot of people ‘best practice’ is synonymous with ‘the way we’ve always done it’.

                                              1. 1

                                                Here’s my work desk, and a tour of what you see!

                                                My computer is a MacBook Pro (2017) 15” with the dumb screen-bar-thing. It’s generally been a good computer, though it has been plagued by keyboard problems (the keyboard in there is the third keyboard it has had in two years. I use an apple Magic Mouse, mostly for the gesture support, though I try to limit how much I use the mouse. Typically, the MBP flips between two screens - one that is all communication (Slack, Hangouts, IRC) and one that is a Terminal (iTerm 2, zsh).

                                                Left hand monitor is an LG 5K Ultrawide monitor. It’s by far the best monitor I’ve ever had. Crisp, clear, delightful. You can see some PyCharm and WebStorm windows open on it - I use the JetBrains IDEs. They are well worth it.

                                                Right hand monitor is an AOC 4K. I think it’s probably a good monitor, but next to the 5K monitor and the MBP display, it looks pretty garbage. That’s got email, documentation, and any browsers that I’m using for testing.

                                                The Ryzen box beside the monitor is the “superficial dive” box. It’s full of post-it notes, sprint poker cards, sharpies, and dry-erase markers, which I use when we’re starting a project. You can see some post-its from a project to the left, along with some art-work by my son. Further to the right, you can see a tray of dry-erase markers (and envelope with 20% off coupons for a local diner) and the edge of my 1m X 2m whiteboard. My current daily bag is a Blizzcon bag from last year (which a friend procured for me - I’ve never been). I usually have a brown leather messenger bag, but it’s currently getting repaired. The speedcube is a Valk 3, the “coffee” is from Tim Hortons, the water bottle is a BOZ and it’s actually pretty great (I bought 6 from amazon once when they were on sale).


                                                Here’s my home setup though I’ve actually updated it since this picture. The printer is a Creality CR-10S, the computer is windows desktop that I mostly use for 3D modeling and for playing video games.

                                                1. 2

                                                  I like this article quite a bit, though I think I have to admit that a significant portion of my liking the article is that it’s supporting a point of view that I already share.

                                                  One of my favourite things to do when I’m interviewing is to pick a question that I think is relatively simple and then have the interviewee talk me through how they would approach it, allowing only a whiteboard. It lets me suss out their ability to solve problems along with their ability to communicate solutions. For the last round of hiring we did, it helped me weed out someone who wasn’t going to work with the team because they could not accept critique, which was a nice bonus.

                                                  Another option that I’ve read about (not employed or encountered) is paid interviews where the interviewee has a task that is more in depth that they perform, and they are paid accordingly. I like the idea of getting a real world idea of how something could work.

                                                  1. 4

                                                    It’s my second daughter’s 8th birthday.

                                                    We are hopefully going to be 3d printing some pokemon (she loves pokemon), playing some Pokemon Go and Let’s Go, and we might start building a PC together; I have a bunch of leftover parts, and it’s a fun little project.

                                                    If the arduino stuff I ordered comes in today, then we’ll build that instead. Otherwise, that might be another weekend.

                                                    1. 1

                                                      Something like Project Euler is a relatively fun starting point for people who are really into math. There are some fun algorithmic challenges that are in there that are mathematically interesting, and it has the added benefit of being something that they can start on without any coding knowledge, and build towards.

                                                      I definitely recommend Python as that seems to have one of the lowest barriers to understanding for people.

                                                      1. 3

                                                        Self Improvements: more fiddling with Kubernetes; my shop is making some changes to our infrastructure, and it seems like this will help with a lot of our issues.

                                                        Side Projects: working on my home management app and probably updating the home server. Also, trying out some dual-extrusion 3D printing hopefully. It’s also my oldest child’s birthday and I now have a teenager at home (and there’s going to be a slumber party on Saturday night).

                                                        Home Improvements: Bunch of home electrical work to do - I have a few new light fixtures and a few new outlets to install at various places in the house.

                                                        1. 18

                                                          All of these are actually things that you can do on new hardware as well.

                                                          I emulate a number of different user experiences from my workstations (I have a laptop and a desktop, both of which are top end). I have a few different VMs that I use to emulate:

                                                          • old phones
                                                          • old operating systems
                                                          • computers with very limited resources
                                                          • whatever else we decide to test

                                                          I can fully empathize with users that have limited hardware, without being limited by the hardware that I use for myself. I’m able to not just empathize - I can actually spin up a machine with the exact same specifications and try to experience things exactly like the end user who is having an issue.

                                                          It’s not bad to have older hardware, and I think it’s incredibly important for servers to be appropriately specced, but I don’t think that there is actually much benefit to having an old workstation other than not spending money, which is a sufficiently significant reason on its own.

                                                          1. 44

                                                            The problem with this approach is that poor hardware is a costume you put on for an evening. For many people, poor hardware is their life. Unless you’re constantly enduring the limitations of poor hardware yourself, you’re going to be constantly making life worse for those who do.

                                                            There’s a huge difference between immediately feeling the pain of your poor code before you even commit it, and hearing about it from a ticket from your user.

                                                            1. 27

                                                              Unless you’re constantly enduring the limitations of poor hardware yourself, you’re going to be constantly making life worse for those who do.

                                                              To be frank, I could not disagree more.

                                                              If I hire someone to do a kitchen renovation, and they show up with a hammer, a screwdriver and a handsaw and that’s it, then I’m going to start thinking about if that person is the right choice for the job. It’s not that you need more than a hammer, screwdriver, and handsaw to do the renovation; it’s that there are a bunch of newer tools that make doing that work much easier.

                                                              poor hardware is a costume you put on for an evening

                                                              Not at all; in fact, I’d argue that I’m probably more rigorous about testing poor hardware than you are. You are limited to testing your particular configuration of poor hardware, and you probably write things to address the issues that you have, but those are not universal experiences. How do you test things when you have, say, a hard requirement for IE6 that is run with no network connectivity? I’d imagine that you probably just don’t, because you can’t actually test that.

                                                              Again, I’m not saying that it’s bad to have old hardware, or that new hardware is a necessity for being a good developer, and I certainly agree that appropriately speccing your servers is of utmost importance, but I don’t think that poor hardware is actually a bonus. It’s a way you have elected to live, and that’s fine, but it doesn’t mean that you’re automatically giving more consideration to people who themselves have bad hardware.

                                                              1. 10

                                                                To be frank, I could not disagree more. If I hire someone to do a kitchen renovation, and they show up with a hammer, a screwdriver and a handsaw

                                                                That analogy just doesn’t make sense. It ignores exactly the point you’re responding to: the use of old hardware so you can see how well your code runs on old hardware.

                                                                How do you test things when you have, say, a hard requirement for IE6 that is run with no network connectivity?

                                                                How is that a hardware requirement? Testing lack of network connectivity doesn’t require special hardware, and IE6 isn’t hardware.

                                                                It’s a way you have elected to live, and that’s fine, but it doesn’t mean that you’re automatically giving more consideration to people who themselves have bad hardware.

                                                                It certainly does. It means you’re automatically giving more consideration than the average developer to people who themselves have bad hardware. It doesn’t mean it’s impossible for other people to also test on bad hardware, but it means they’re doing just that: testing on bad hardware. They’re not living bad hardware. And the vast, vast majority of developers don’t test on bad hardware at all, so you’re automatically a few steps ahead of them.

                                                                1. 5

                                                                  To be frank, I could not disagree more. If I hire someone to do a kitchen renovation, and they show up with a hammer, a screwdriver and a handsaw

                                                                  That analogy just doesn’t make sense. It ignores exactly the point you’re responding to: the use of old hardware so you can see how well your code runs on old hardware.

                                                                  I’m not sure it’s particularly helpful, but a more accurate kitchen-fitter analogy would be something like if you were looking to get your tiny cramped kitchen refitted, and find yourself looking round a kitchen showroom or brochure full of enormous, spacious show-kitchens. You wouldn’t question their ability to fit kitchen units, but you might wonder whether they will be able to come up with a plan that makes the best possible use of the limited space available.

                                                                  1. 1

                                                                    A good analogy, dancing around the concept of dogfiod

                                                                2. 5

                                                                  You have a great point. I’ll also add that your method of using better boxes allows you, if you choose, to run more analyses and verification of the code. That’s one of reasons I have an i7 now. That’s why some shops have entire clusters of machines. I think I read Intel uses around a million cores to verify their CPU’s. Mind-boggling.

                                                                  If multicore, you can also run IDE’s, VM’s, code generators, and V&V in parallel. That lets you reduce time to feedback on each work item. Then, you can iterate faster. Maybe even stay in mental state of flow for long time.

                                                                  1. 4

                                                                    You have a great point.

                                                                    Thanks! I was honestly taken aback by the fact that almost all the comments I received were supportive of the idea that the quality of the tools defines the quality of the artisan, which I think is entirely wrong.

                                                                    Having access to local VMs, IDEs, generators, etc. running parallel to each other is incredibly convenient, and I really just don’t buy into the notion that having a good computer makes you unaware or uncaring that bad computers exist.

                                                                    1. 6

                                                                      It does cause that problem for a lot of people. It doesn’t for everyone. It’s more evident when I read the Hacker News thread on a person’s experience with dial-up on modern sites. The comments made it clear a lot of people didn’t realize (a) how many folks had bad connections (dialup or mobile) and (b) how much worse their practices made their experience. Like you, there were some who were aware using techniques like rate limiting to simulate those connections. Most weren’t.

                                                                      So, it is a risk worth bringing up. That doesn’t mean it will apply to everyone though. Any artisan who cares about achieving a result in a certain context will do whatever it takes to do that.

                                                                      1. 3

                                                                        I really just don’t buy into the notion that having a good computer makes you unaware or uncaring that bad computers exist.

                                                                        It follows from the fact that if you don’t even notice that the code you’re writing runs poorly because your computer is quick, you’re unlikely to improve it until someone with slow hardware tells you it’s slow code.

                                                                    2. 1

                                                                      I’d argue that I’m probably more rigorous about testing poor hardware than you are

                                                                      Good for you, but this is not the usual behavior of at least 90% of developers around.

                                                                      1. 3

                                                                        this is not the usual behavior of at least 90% of developers around.

                                                                        That’s an interesting number because it dovetails nicely with Sturgeon’s Law (tl;dr: 90% of everything is crap).

                                                                        I don’t think that having a bad machine makes you think more about how people interact with your software. It makes you think more about how a particular subset of users interact with your software. Specifically, it limits you to thinking about how people like you interact with your software.

                                                                        This is a particular problem for a lot of people. I don’t want to harp on the author because I believe that they’re a great developer that delivers great software, but a specific example of the limitations that they introduce seems to be that they haven’t thought about how https://sr.ht looks for people who have large monitors; the site is pushed off to the left. I think this is partially because he does not or cannot use a large monitor with his setup, so it’s not something he tests for. I think this limitation is the result of the technology he is using and the philosophy of why he chooses to use technology in this way; he favours a particular set of users because those users have a similar situation to how he has chosen to use technology. This is not the only issue with sr.ht that I (or others) have identified, and I think that sr.ht is developed more for Drew and people like Drew than it is for everyone. Edit: Drew corrected me on this. I’m out to lunch here.

                                                                        It’s important to note that I think that is is okay that sr.ht is aimed at people like Drew; I think sr.ht is fantastic, I think that Drew is a great developer, and I am very happy that sr.ht exists. I’ve told dozens of people about it, and hopefully some will convert to paid users. It’s just not a service that works with my workflow, because I have chosen a different approach to things. The concern for me is that Drew seems to be convinced that developers like me are worse developers because we don’t do things the way he does. I think that’s clear from what he has stated even within this thread, and I think it’s an unfortunate position to hold.

                                                                        1. 3

                                                                          Aside: for the record I have thought about those people https://todo.sr.ht/~sircmpwn/sr.ht/112

                                                                          I think you should stop reading so much into my comments. If I didn’t say it, it’s not what I meant, and I never said that you were a worse developer for disagreeing with me.

                                                                          1. 2

                                                                            Unless you’re constantly enduring the limitations of poor hardware yourself, you’re going to be constantly making life worse for those who do.

                                                                            There’s a huge difference between immediately feeling the pain of your poor code before you even commit it, and hearing about it from a ticket from your user.

                                                                            What you wrote is pretty straight forward, but I added the inference that bad developers make life worse for other people and good developers don’t. If that’s not what you mean, then my apologies. To me, it looks like it’s what you wrote.

                                                                            for the record I have thought about those people

                                                                            Thank you for considering those with wider screens - the last time I saw it brought up, it was dismissed. My sincere apologies for spreading that misinformation, and I’ve edited my parent comment accordingly.

                                                                            If I didn’t say it, it’s not what I meant, and I never said that you were a worse developer for disagreeing with me.

                                                                            I’m not trying to dump on you or put words in your mouth. I’ve made some inferences from what you’ve said, and it seems like they’re unfair, so I’d love to understand your position more, but I’ll understand if you don’t reply.

                                                                            My stance is that a good developer is not defined by his tools. We can create software whether we’re using an 11-year old laptop, a souped up current generation MBP, or a whiteboard and notebook because these tools don’t define our ability to create things. We all have tools at our disposal to try to generalize from our experience to the experiences of all the people that might use our software, but the important thing is that we are making that generalization and trying to accommodate the people who have different experiences from our own.

                                                                    3. 9

                                                                      Also, even if you simulate poor hardware and test your code on it, there is probably a temptation to say, “It’s a bit slow, but that’s to be expected on low end hardware”.

                                                                      As someone who uses ‘poor’ hardware every day, you know how well other applications performing tasks of similar complexity work: It’s less easy to justify poor performance if you’re used to, e.g. a web browser, performing much better on the same hardware.

                                                                      1. 13

                                                                        even if you simulate poor hardware and test your code on it, there is probably a temptation to say, “It’s a bit slow, but that’s to be expected on low end hardware”.

                                                                        That’s not necessarily an unacceptable solution. It depends on the parameters of the project.

                                                                        I recently completed a project that had super fast sprints and spent no time on optimization. The project was 100% internally facing for the client company; every person had the same hardware, and it ran fine on the hardware. I don’t think I’m a worse coder because we took advantage of that, or because we didn’t spend the time to optimize for other setups. Based on the requirements, we delivered exactly what was needed, for exactly the use case that they had. On the opposite end of the spectrum, we are also currently working on a project that is confined to using Windows XP, IE6, and has very limited network connectivity. If I had an 11-year old laptop, I probably couldn’t adequately test for that scenario; I would have to procure other hardware to actually work on that, and working on it would be more painful than it already is.

                                                                        My whole point simply is that if you’re good at what you’re doing, the quality of the tool that you’re using is less important than the fact that you are good at what you’re doing.

                                                                        1. 5

                                                                          I don’t think I’m a worse coder because we took advantage of that, or because we didn’t spend the time to optimize for other setups.

                                                                          Nobody is suggesting that you are. Most people develop software for a very wide range of devices, especially for mobile software where the range of speeds in common use is vastly wider than the range of speeds of PCs in common use. This topic is clearly focusing on that, not on people developing software intended to be run on one particular piece of hardware that is known ahead of time.

                                                                          1. 2

                                                                            The author of the article did not merely suggest it, he stated it in no uncertain terms it in this very comment chain:

                                                                            Unless you’re constantly enduring the limitations of poor hardware yourself, you’re going to be constantly making life worse for those who do.

                                                                            I think this unambiguously says that if you use good hardware, you make bad software.

                                                                            Also you said this:

                                                                            Most people develop software for a very wide range of devices, especially for mobile software… This topic is clearly focusing on that,

                                                                            The author also specifically says this:

                                                                            I’m talking about making end-user applications which run on a PC.

                                                                            So I think it’s possible that we’re all talking at cross purposes.

                                                                            My entire point is that the tool does not define the skill of the developer. One can build great software whether using a $5K MacBook Pro or a $150 Chromebook, and the challenges that are faced are different for each.

                                                                      2. 4

                                                                        If your code takes X-times longer to compile just because you want to know it feels and learn from it then go ahead but it’s definitely useless. A VM gives you exactly the same experience + the choice to take a break from it.

                                                                        1. 11

                                                                          Incremental compilation is a thing. I spend way more time thinking and editing than I spend compiling.

                                                                          And if your low-end setup is something you want to “take a break from”, you’ve missed the point.

                                                                          1. 3

                                                                            How is using the target system as your main one better than choosing the best one available (or fitting your development needs?)

                                                                            Are we all going to start making Android apps on Android or make a game directly on a PS4?

                                                                            You work on whichever system makes the development most efficient (for you) and then test the resulting application on the target platform(s).

                                                                            Only my opinion, of course.

                                                                            1. 8

                                                                              Making Android apps is a miserable fate I wish on no one. And yeah it’d be neato to make games on a PS4. But these are both beside the point and I think you know it - I’m talking about making end-user applications which run on a PC.

                                                                              1. 1

                                                                                Hehe, it would be fun for sure :P

                                                                                Anyway, even making games or using certain desktop frameworks can take some time to properly build.

                                                                          2. 0

                                                                            The idea that you are using a programming language that takes noticeably long to compile while lecturing someone else on their choice of tools is pretty laughable.

                                                                        2. 10

                                                                          but I don’t think that there is actually much benefit to having an old workstation other than

                                                                          I personally would add environmental reasons as well (taking into account the newer hardware and what would happen to the old hardware)

                                                                          1. 5

                                                                            I kept using older hardware for three reasons:

                                                                            1. Assess the efficiency of my software.

                                                                            2. Make sure it will run fast on anyone’s machine like Drew.

                                                                            3. Help small-time sellers and reduce waste by buying good, used products.

                                                                            For model-checking and stuff, I did recently need a beefy machine vs what I had before. Plus, I had to consider all the slow-downs that will add up as new vulnerabilities are found in CPU’s. I also wanted support for many FOSS OS’s. So, I bought a Thinkpad 420 refurbished with Core i7. Been feeling really middle class with these boot and run times.

                                                                            1. 3

                                                                              You can do 1 & 2 on new machines. I would argue you can do it better than you can on old hardware. For most projects I do, I test on a variety of virtual machines that emulate old hardware, so I know how well it runs. Let’s say you have a use case where you’re doing a project for a company and half the company runs three different operating systems across four different hardware configurations; I can test all of those pretty reasonably without getting 12 different work stations.

                                                                              The third option is a great one, but I would argue that it’s a subset of the “saving money” option.

                                                                              1. 2

                                                                                Reducing waste is not about saving money

                                                                            2. 1

                                                                              I didn’t think of that, but to be fair, I have a whole storage area in my house for old hardware, going all the way back to the Aptiva we got in 1995. Ecological concerns are certainly important!

                                                                            3. 9

                                                                              All of these are actually things that you can do on new hardware as well.

                                                                              You can’t buy a new thinkpad with a 4:3 or 16:10 aspect ratio as far as I can tell. It’s also getting difficult to find models where the battery is easily swappable. Plus optimizing for thinness means nearly all modern laptop keyboards have very shallow, uncomfortable key actuation.

                                                                              I keep saying “I’ll upgrade when they make a new laptop that’s actually better than the one I have in ways I actually care about” and they keep not making one.

                                                                              1. 2

                                                                                You can’t buy a new thinkpad with a 4:3 or 16:10 aspect ratio as far as I can tell.

                                                                                I think that you’re absolutely right with your underlying point - if you have a specific hardware configuration and not having that is a dealbreaker for you, then that’s also a good reason for old hardware. That said, I think it’s a tradeoff - I’ve happily traded some of my keyboard preferences for a more powerful machine. I disliked the new MacBook Pro keyboard quite a bit when I got it, but I have found that the tradeoffs are sufficient enough that overall I enjoy the machine.

                                                                                And admittedly, this is less of an issue if you have a desktop workstation - you can choose the monitor configuration or keyboard that you want.

                                                                              2. 5

                                                                                I will add Drew’s strategy has one benefit over yours in that he’s forced to use low-end hardware non-stop. That can reduce folks’ tendency to cheat. I like your approach, too, though. :)

                                                                                1. 5

                                                                                  Cheating this system definitely happens. Not to get super sidetracked, but this is actually part of the project management axes of restraint: cost, quality, time, scope. This level of testing is covered by the “quality” aspect; if a client values high quality, then we do more testing of these sorts of things. If quality is lower on the scale, we may omit rigorous testing.

                                                                                2. 3

                                                                                  All of these are actually things that you can do on new hardware as well.

                                                                                  I don’t think the author ever implied that these were things you can only do on older hardware.

                                                                                  I’m able to not just empathize - I can actually spin up a machine with the exact same specifications and try to experience things exactly like the end user who is having an issue.

                                                                                  For some cases, yes, but VMs are not 100% accurate in terms of the underlying hardware they emulate/virtualize, so for some work (e.g. reproducing customer issues in a wayland compositor) they are not really useful.

                                                                                  1. 2

                                                                                    I don’t think the author ever implied that these were things you can only do on older hardware.

                                                                                    Here’s another quote from the author:

                                                                                    Unless you’re constantly enduring the limitations of poor hardware yourself, you’re going to be constantly making life worse for those who do.

                                                                                    I think they’re clearly saying that older hardware makes one a better coder. I think that is not a good way to think. To be clear, I’m certainly not saying that new hardware makes one a better coder. I think that the two things just aren’t related.

                                                                                    VMs are not 100% accurate in terms of the underlying hardware they emulate/virtualize, so for some work (e.g. reproducing customer issues in a wayland compositor) they are not really useful.

                                                                                    Absolutely correct - VMs aren’t a magical answer to every single problem. There are definitely cases where they’re not useful, and I’d go further and say there are even edge cases where they’re not only not-useful but actively misleading! They’re still very useful, and especially useful in testing for widely used devices in the sort of situations that are outlined in this article (low power laptops, old phones, multiple operating systems).

                                                                                    1. 4

                                                                                      I think they’re clearly saying that older hardware makes one a better coder.

                                                                                      That brings me to another risk: older hardware can force one to use development practices that are sub-optimal. As in, you can do stuff during development that don’t have to slow down the release versions. Using older hardware could, in theory, limit what a person does in development or have a negative effect on how released app is implemented.

                                                                                      This is my theory about C where BCPL and C authors made a lot of decisions based solely on the limitations of their hardware that are biting people to this day. People with much better hardware were designing languages with safety, modules, metaprogramming, better concurrency, and so on. So, the hardware limited their productivity, correctness/safety/security, and maintainability.

                                                                                      1. 2

                                                                                        And C, until very very recently, was the only language you knew could run on everything.

                                                                                        1. 1

                                                                                          You mean was capable of in theory or had compiler support already?

                                                                                          1. 2

                                                                                            Had compiler support already

                                                                                            1. 1

                                                                                              Yeah, that is kind of funny. I think the support of many of those machines happened due to its strong ecosystem of talent and tools. It was already preferred thing for bare-metal efficiency. Why not adapt it to the new cruddy devices. Talk about going back to its roots, though, for what appear on the surface to be the same reasons.

                                                                                              On the technical side, it’s amusing to note it was the only thing that could run on ESDAC but better designs could run on today’s embedded systems (i.e. 32-bit ones). Missed opportunity. Well, a bunch of people and companies ported other languages. They’re just super-super-niche. Astrobe Oberon comes to mind.

                                                                                      2. 3

                                                                                        Unless you’re constantly enduring the limitations of poor hardware yourself, you’re going to be constantly making life worse for those who do.

                                                                                        I think they’re clearly saying that older hardware makes one a better coder. I think that is not a good way to think.

                                                                                        AFAICT he’s just saying that low end hardware forces your sympathy with the rest of the crowd that did not buy a high-end laptop this year.

                                                                                        VMs are fine too, but it’s like using earplugs to pretend you’re deaf.

                                                                                        1. 4

                                                                                          VMs are fine too, but it’s like using earplugs to pretend you’re deaf.

                                                                                          To be fair, muting your software to test how easy it is to use without sound is probably a better option than deafening yourself. Sometimes temporary software solutions are better than permanent ‘hardware’ choices.

                                                                                    2. 3

                                                                                      Which virtualization software do you use, and how does it emulate the speed of old computers? Every virt platform can limit the amount of RAM, but how about the speed of disk and CPU so forth? The VM doesn’t really know what host its running on (i.e. is there a HDD or SSD in the host), and I think the common design is to run as fast as possible.

                                                                                      Speed is multi-dimensional, because your disk, memory, CPU, and network (especially network) may have different slowdowns, and different workloads will obviously be slowed down by different amounts due to this.

                                                                                      1. 3

                                                                                        VirtualBox allows you to change the clock speed of the CPU (execution cap) and VMWare allows you to set resources as well. Those are the two that I use with any real frequency.

                                                                                        With respect to write speeds on the disk, I rarely consider that (I almost exclusively write web software) though we do consider write speeds for one project - specifically, we want to check something writing to an HDD and not a SSD. To do that, we actually use an external HDD.

                                                                                        Network is what we actually consider the most, and write everything with that in mind. Luckily Network is kind of a firehose situation - if you reduce how much you send, you improve the perceived speed at which you receive it, so we work at always reducing the footprint of all traffic; reduce the number of requests, reduce the amount in requests, reduce, reduce, reduce.

                                                                                        1. 2

                                                                                          In terms of network, Chrome dev tools lets you simulate slow network speeds. I find that incredibly useful when writing publicly facing web apps; it’s very easy to forget how much network latency affects user experience when you’re always hitting a local server

                                                                                          1. 3

                                                                                            Does Chrome support adding latency now? Last time I used those developer tools (more than 1 year ago now) I think it only supported reducing bandwidth.

                                                                                            1. 3

                                                                                              Luckily I live in Canada and rarely have to simulate a poor connection.

                                                                                              Jokes aside, the Chrome dev tools are great for a lot of things; I’ll point out that Firefox dev tools also have a way of doing the same!

                                                                                              1. 2

                                                                                                Good to know. I use FF as my mian browser, but still use Chrome for webdev. Partly because we’re targeting Chrome (it’s an internal app) and partly because FF still seems to lock up the entire browser on occasion.

                                                                                            2. 2

                                                                                              Thanks for the details. That makes sense and I think it’s worlds better than what most people do.

                                                                                              I was thinking along the lines of estimating the speed of a Raspberry Pi on my Dell Intel Core i7 desktop. I found that although the clock speeds differ by a factor of 5 or so (3+ Ghz to 700 Mhz), the Pi is more like 30-50x slower! (e.g. with a workload of compiling Python)

                                                                                              Most software companies aren’t targeting the Pi, but they are targeting old ARM phones. I’d be interested to hear solutions for that. I guess VirtualBox only does x86 so it doesn’t apply to that problem.

                                                                                              I think the Android emulator is based on QEMU? I wonder if it tries to simulate speed too?

                                                                                        1. 7

                                                                                          Summary: Nick Cameron is a research engineer at Mozilla working on Rust: tools, the language, and compiler. He is leaving Mozilla - the article makes it sound like he has another opportunity that he is going to pursue. Steve Klabnik has also left the Rust team recently, though it sounds like this was for different reasons.

                                                                                          1. 13
                                                                                            1. 3

                                                                                              I’ll also get a chance to use Rust ‘in real life’. It’s hard to describe why that is a big deal for me; I’ve been programming in Rust pretty much daily for the last five years and writing real programs (and some pretty damn interesting ones too). But it feels cool to use it ‘on the outside’ after being ‘on the inside’ for so long. Especially in a project which is well-suited and committed to Rust.

                                                                                              It makes me smile to know that even Rust core team members are excited to have an opportunity to use Rust in production :)

                                                                                          1. 2

                                                                                            My sister-in-law is having a baby shower, so I think the whole family is going to that. After that, board games with my kids and wife.

                                                                                            Personal Projects: I’m turning my Creality CR-10S into a dual extrusion printer… soon. Just have to print a couple more pieces first and then I’m set. I hope to have the last 2 pieces printed, and then go through my plans again. I may actually start putting the print head together this weekend.

                                                                                            I’ll continue working on a few personal projects around home automation, and probably keep reading up on Kubernetes which is more for professional development, but has been a pretty good time thus far.

                                                                                            1. 2

                                                                                              Nice! I just got the parts to add a glass bed and a PEI sheet, i’m finally doing that this weekend! Also updating my firmware to the latest Marlin so that my printer doesn’t have the sometimes-catches-on-fire problem of i3 clones.

                                                                                              1. 1

                                                                                                Glass bed and a build sheet are both great additions. I’ve been using a BuildTak sheet for a while and have quite enjoyed that. Making your printer not light on fire is also a key part of letting things print overnight.

                                                                                                How do you like your i3 clone?

                                                                                                1. 2

                                                                                                  I love it so far! So far I feel like I’ve just printed mod parts for the actual printer instead of printing other things but it’s been a blast! So far I’ve done the external mosfet mod, added an octoprint raspberry pi, a camera, spool holders, and planning on building a lack enclosure next.

                                                                                                  1. 1

                                                                                                    So far I feel like I’ve just printed mod parts for the actual printer instead of printing other things

                                                                                                    This is how I can tell that you’re a real 3d Printer Enthusiast; I think about half the stuff we all print is for the printer.

                                                                                                    I’ve also gotten into printing board game pieces; I plan on giving my siblings some custom made board games for their birthdays (in the summer), and DnD minis, but a significant amount of printing has been for the printer itself - the pi mount, spool holders, supports, better knobs for levelling, and some pegboard things for various tools.

                                                                                            1. 9

                                                                                              This is really interesting to me because it directly states a thing the other monorepo articles only implied: The author imagines a single repo as the “natural state”, and modular repos as “a thing that happens to a monorepo”.

                                                                                              I’m starting to think that your opinion on monorepos depends on your personal experience:

                                                                                              • work at a megacorp where monorepi were your first real DVCS experience: this is the “natural order”, and modular repos are “breaking up the repo”
                                                                                              • work in modular repos, then watch a well-meaning autocrat try to merge them all into a centralized authority: the monorepo is “asserting control” by an unwelcome outside group
                                                                                              1. 4

                                                                                                Great point. I think the answer obviously falls somewhere in the middle - monorepos work sometimes, polyrepos work sometimes. The real answer is that making things work trumps other considerations, so if a monorepo removes more obstacles than it creates for your team, then a monorepo is a good answer for you.

                                                                                                These same sorts of arguments crop up in lots of other situations as well; *Framework X is better than Framework Y” is a classic, but usually the answer is really that each framework solves things slightly different and you should use the one that solves things for your team in a reasonable way. When you get into monolithic discussions, there isn’t always one answer that is always going to be the best answer, because each project has more things to consider than is possible in the length of one article.