1. 8

    I’ll add Structure and Interpretation of Computer Programs by Abelson and Sussman. This book was very fun for me when I did a close reading of it and I return to it every now and again. I think everyone should read it.

    1.  

      This one is fun to pair with the video lectures, too. https://groups.csail.mit.edu/mac/classes/6.001/abelson-sussman-lectures/

      1.  

        I loved the first two, maybe three chapters. A lot of fun. But by the last two, I really just wanted it to end. It seemed to drag on and on. I seem to recall I had to gloss over a few sections because my maths is pretty weak. Overall it was a very worthy read, but I could have stopped halfway through and been satisfied (too bad I can’t leave a book unfinished).

      1. 2

        This sounds perfect for me, I’ve always felt like my Gitea installation was overkill. I love the automatic repo creation. I’m having a bit of trouble getting it to run though:

        GITDIR_BASE_DIR=/tmp/git ./go-git-dir
        

        This gives an error ‘Users directory does not exist’ before exiting.

        1. 2

          I added back implicit repo creation under an option (implicit_repos under options in config.yml). There’s been a pretty big rewrite and the code has been cleaned up substantially as well.

          Hope this works for you! Let me know if you have any serious issues.

          1. 1

            Thank you so much, I’ve been too busy to try just yet, but I’m definitely going to replace my Gitea installation with this. I’ll be sure to let you know if there are any troubles!

            1. 2

              No worries! It’s gone through a few big rewrites and cleanups in the last week or so… but it’s getting closer to the point where I’d call it stable.

              Just pushed about 1k lines of tests which validate a TON of things related to permissions… and I’ve got one more idea for cleaning up the code.

              Thanks for following up! Definitely let me know if you have any issues.

          2. 2

            I actually moved to a slightly more explicit definition of repos in config.yml, but it’s still super lightweight (this lets the server be a little bit more picky with path definitions since I really don’t want someone cloning something to be able to escape the git dir). Maybe automatic creation could be an option to enable?

            There’s a bit of a chicken vs the egg on initial setup - I’d be open to suggestions on how to fix that (maybe a simple command to do it). Easiest way to fix that is manually cloning /tmp/git/admin/admin and making a user in users/whoever.yml, adding that user to the admins group in config.yml and then pushing. After it’s running, you should be able to clone ssh://git@localhost:2222/admin and push to that.

            1. 1

              Thanks, I understand now. I had it in my head that I was supposed to create a ‘users’ directory directly under the base dir (I didn’t realise it was for config). But reading it again it all makes sense now. I love the project, keep it up. The automatic repo creation as an option would be nice, although I’m happy either way as it isn’t too difficult to add repos to the config either.

          1. 1

            I used to use OpenBSD ksh everywhere, but now use ksh on OpenBSD and bash on Linux as I modified my startup scripts to work with both, and it’s just easier that way. For scripts I try to write POSIX sh. I hate #!/bin/bash for scripts. If it’s not going to be portable, and you need the extra features, why not just write in a more capable language?

            1. 7

              I use rc(1), the only shell that doesn’t confuse me endlessly with absurd quoting problems. Now I actually enjoy writing shell scripts…

              1. 2

                I wrote a dotfile manager in rc and it was such a breath of fresh air. Just reading the documentation honestly made me happy, and not much documentation does that! I don’t think I could ever use it as an interactive shell though, and I still write most scripts in portable sh, but I do wish rc were more ubiquitous.

                1. 1

                  I loved using RC but eventually gave up and use zsh (home) and bash (work).

                  1. 1

                    I use rc as my fulltime shell as well - specifically Byron’s rc which cleans up some of the silly “if not” logical things.

                  1. 11

                    This is exactly why I haven’t hosted my own email in years. Even one rejection to a GMail address is just not worth the risk. I think Fastmail is the least bad option, so that’s what I’ve been sticking with.

                    1. 8

                      To avoid any misunderstanding: in the last few weeks, I can 100% reproduce identical emails being either accepted (if my secondary “new” domain is used in From and MAIL FROM) or 550-5.7.1 rejected (if the old primary one with the cron-acquired “low reputation” is used) at the SMTP stage; e.g., you get a bounce right away in a few seconds at most. Note that in the case of them being accepted, they don’t show up in Spam folder, either, but appear straight in the Inbox of my own Gmail (so, I assume G Suite would be the same).

                      So, as above, there’s zero reasons to conclude that even one rejection is not worth the risk, as you can simply resend.

                      However, to extrapolate your conclusion — you appear to assume that using a third-party email service is a sureway for 100% acceptance, but, due to the way Bayesian filters work, that’s 100% not the case. Setting up SPF and DMARC for your own server is trivial; and that’s exactly the control parts of the equation. Your email may still end up in the Spam folder even if you do use a hosted provider. Some of these companied like SendGrid can’t even go through Greylisting, something that any homemade email server would have zero trouble going through, so, the assumption that these people know what they’re doing is not even correct to start with.

                      1. 9

                        I know how to setup my own spam filters, SPF, DKIM, DMARC, SMTP, IMAP, sieve, etc etc. it just hasnt been worth the hassle since … 2013?

                        I used to run email hosting at an ISP for thousands of local businesses. Never again. GMail ruined my day every day. People screaming because no matter what we do their mail to customers, clients of lawyers, etc at gmail addresses are getting bounced at random.

                        I stated using Fastmail because my own employer’s mail hosting was unreliable for me communicating with devs of open source projects with GMail addresses. So I’ve been with Fastmail for about 7 years and be never had a message bounced or marked as spam, nor have I had an inbound mail lost due to greylisting, spam, or rejection. (Fastmail’s greylisting was extremely advanced back in 2012)

                        1. 1

                          I stated using Fastmail because my own employer’s mail hosting was unreliable for me communicating with devs of open source projects with GMail addresses.

                          In my experience, OSS people are actually one of the few folk that still run their own mail servers, so, communicating with them is rarely an issue; in fact, I’ve had issues communicating with some OpenBSD folk through Gmail, because of Gmail not being too friendly with greylisting (using a diff IP on each attempt).

                          So, given your ISP experience, what do you think is the magic thing that Fastmail does here? Do they send some sort of magic bytes with their mail? Different byte alignment? Or is it just a matter of them being whitelisted by Gmail as another major player, to not get the emails rejected? TBH, I find your absolutes a little hard to believe — have you moved the customers of the ISP to Fastmail, and did they stop complaining about Gmail, or what? You can’t even send inline patchsets through Gmail without it mangling the whitespace, don’t really see how it could be used in OSS too effectively.

                          1. 2

                            In my experience, OSS people are actually one of the few folk that still run their own mail servers

                            Depends a lot. Nodejs and webdev people are not going to run their own mailservers. People writing C code and working on OSes will.

                            I’ve had issues communicating with some OpenBSD folk through Gmail, because of Gmail not being too friendly with greylisting (using a diff IP on each attempt).

                            OpenBSD’s spamd needs to a) support IPv6, which I think it still doesn’t and b) needs to have some database of all the known IP addresses a domain can use for sending.

                            So, given your ISP experience, what do you think is the magic thing that Fastmail does here?

                            Have a good reputation from sending a lot of mail, have a great spam filter, and their greylisting system is clustered, knows all the possible sending IPs for domains, and automatically skips greylisting in several situations. e.g., if the sender is in your address book, which most greylisting systems won’t have access to because they’re not that tightly integrated into the actual email service. More details here: https://www.fastmail.com/help/technical/smtpchecks.html#greylising

                            TBH, I find your absolutes a little hard to believe — have you moved the customers of the ISP to Fastmail, and did they stop complaining about Gmail, or what?

                            I pushed hard to move our email hosting to Fastmail, but the owner of the company felt that ISPs are worthless if they don’t provide their own DNS, email, and webhosting. That was understandable until the mid 2000s, but then the competition got so big it is impossible as a small company to do all of these things in-house and do them well.

                            I did get several thousand domains moved to an external DNS hosting provider after screaming about the dangers for years, and then finally we had a DDoS that was so bad it caused customers to have a full outage because their primary webhosting was with us and their DNS was with us. Their backup webhosting was elsewhere, but our DNS was down because our AS was unreachable…

                            Owner never budged on email, and to this day they still do their own email hosting on servers that are 10 years old with no reliable backups running end of life open source software from around 2009. It’s bad bad bad all the way around, but hey – not my company, not my money.

                            edit: fastmail actually provides nice reselling features where we could have hosted everything including the webUI on our own domains, with own branding, etc and nobody would have ever knows it was Fastmail underneath. Contacts and calendars support, which [the ISP] still does not offer. It would be cheaper to pay Fastmail than what it was costing us to maintain our infrastructure, AND Fastmail would automate the entire migration process for each domain for you: ingestion of mail, DNS cutovers, etc. Seamless.

                            1. 7

                              I’m a web developer, I don’t write C code, and I run my own mailservers on OpenBSD and I’ve never had issues with my emails getting through. I’m not really a fan of this whole ‘web developers aren’t real developers’ stereotype.

                              1. 2

                                Yeah that’s a dumb stereotype, I’m glad I didn’t use it.

                          2. 1

                            I’m also on Fastmail, but I have configured it so that I can use my domain on all the messages. However, Google still blocks my messages (and that is quite annoying when I’ve sent out celebration invites).

                            I did set SPF and DKIM correctly. What do people recommend, how to set it up so that chances of Gmail marking all messages as spam are minimized?

                            1. 4

                              What do people recommend, how to set it up so that chances of Gmail marking all messages as spam are minimized?

                              I think the moral of the story is that it’s not us, it’s them. They’re at Gmail are the unreliable email provider.

                      1. 18

                        And.. one can upgrade from 6.5 using sysupgrade

                        1. 4

                          Sooooo nice!

                          1. 2

                            I still haven’t upgraded from 6.3 because the entire opensmtpd configuration language changed quite a bit. Maybe with 6.6 I can find some better tutorials out there, but I still need to build out a full test environment for it. E-mail is not something I want to fuck up :-P

                            1. 3

                              Yeah I had a lot of problems with that. Took me awhile to get back to a working configuration and I made a few mistakes! As my configuration is pretty simple I probably would have been better just starting from scratch and reading the manpage without any prior assumptions than trying to adapt what I had.

                                1. 1

                                  Wow .. that’s .. long .. gotta skip way down to the code.

                                  I mean .. I’d rather just have a tutorial that tells me how to convert my old config to the new config. Like here’s the ansible template for my old one:

                                  https://github.com/sumdog/bee2/blob/master/ansible/roles/openbsd-email/templates/smtpd.conf.j2

                                  I don’t think the old one had filter implemented yet. pki and action look mostly the same, but the accept have been replaced by action. I’ve read through the official doc before and got confused and couldn’t find a straight upgrade guide. I’ll probably write one myself whenever I get around to it.

                                  1. 1

                                    You can contact the author on twitter, maybe he knows of such a resource. https://twitter.com/PoolpOrg

                            1. 1

                              I hope they’ll be allowing us to rearrange and rename collection items. The strange lack of that is the reason I’ve completely avoided using bookmarks in the current Firefox app. Otherwise, it’s looking good, and assuming extensions are on the way soon, I’m looking forward to switching over.

                              1. 13

                                Some of the psychology you cite is very pertinent and interesting but I really disagree with some of your conclusions.

                                I think that if you as a candidate freeze up when asked to perform a basic example of what you’d be doing for your job, then that’s an interview skill you should consider building rather than advocating doing away with that class of interview question.

                                I know a LOT of talented people who have great trouble with whiteboarding, and I get it. I REALLY do because I used to be in that category.

                                But like any other fight / flight response where no actual mortal peril is involved, you can work through the anxiety and learn to process the situation differently, and once you do, it’s incredibly empowering!

                                When I’m doing an interview and I can tell that my candidate is freaking out, I typically ask them to talk me through what they think a solution would flow like, without any of the syntax involved.

                                And honestly, what job anywhere is free of this kind of pressure?

                                [Full Disclosure: I work for a Major Cloud Company and our interview process is highly data driven and also includes some whiteboarding. I think this hiring strategy has been extremely successful, but obviously YMMV and different companies are different.]

                                1. 15

                                  The problem is, its not only about anxiety. It could be, and is, any number of things, like active stressors (disease, divorce etc.), biochemical stuff (low sugar, hormones), meteorology (too hot/cold) etc. I remember, 10y ago that when I had an interview @booking.com, my head hurt so strong that I could hardly speak.

                                  And honestly, what job anywhere is free of this kind of pressure?

                                  Almost any job is without that kind of pressure. Its totally artificial.

                                  When you measure people this way, you have no option but to ask academic stuff. For example, local Microsoft tech interview I was part of were created by assistants of local faculty of Mathematics, and had questions such as what is the probability that frog will survive the road run and other crap like that. I finished the same math university 5 years before and I still couldn’t manage many questions. Not to mention, just finished students nailed it, with 0 practical experience (it was 0). So, this type of interview is biased toward fresh graduates and academy itself has entirely different goals and agenda far removed from usual everyday IT reality (since then I had number of professors working in my team and each time with disappointing results). Or, member the interview of author of brew for Google ?

                                  I used exclusively lets-speak-about-random-IT-stuff type of interview and I think it worked OK. I also ask for online profiles - Github, Gitlab, etc… there is no substitute for seeing (or not seeing!) code itself. There are few persons that were great in that while sucked on job a lot, but overall, the initial feeling after the conversation was at least 90% on the spot.

                                  1. 2
                                    And honestly, what job anywhere is free of this kind of pressure?
                                    

                                    Almost any job is without that kind of pressure. Its totally artificial.

                                    Couldn’t disagree more. I’ve worked in this industry for 30 years, admittedly only 5 or so of those years as an actual ‘software developer’ (mostly release engineer, devops, and before that highly code-centric sysadmin).

                                    I can’t think of a single job I’ve ever worked that didn’t have “OK. We need you to produce. NOW” moments.

                                    If you’ve worked jobs that don’t have that kind of pressure, I envy you, but I’m unsure whether or not your experience is one that many others share.

                                    1. 15

                                      Certainly many jobs require deploying a patch, developing a new schema, reacting to a fire in the moment on deadline, etc., but I think few require you to be able to converse about it to strangers who can fire you, in those circumstances. ;)

                                      My work is not complicated. My experience with whiteboard interviewing has been with insignificant companies that do not do hard engineering. When I froze up and couldn’t think of the name for modulo after having just used the operator, the interviewer decided I wasn’t a good fit… I think less technical or complicated jobs use whiteboard just as much as Google, and that’s frustrating.

                                      1. 11

                                        Most of them won’t then stare at you while you do your job on an unfamiliar tool you’re only using so they can decide whether to promote or fire you.

                                        Instead, they give you some requirements, you leave, you work alone on them at a computer, maybe talk to team members, maybe status reports (mostly typed), and eventually deliver the results to then.

                                        These are the skills the interview process should assess. That’s why a lot of shops do take-home assignments or just not whiteboarding. Now, whiteboarding in non-hostile environment can be great for testing presentation and collaboration skills.

                                        1. 4

                                          Exactly.

                                          When multiple people STARE AT ME while working (even in familiar environment), I can’t work productively.

                                          Also, nobody ever comes with the random problem and ask you to solve it yesterday in 1 hour. You always have some context, some continuancy.

                                          1. 2

                                            I can appreciate where you’re coming from here and I’ve done take home assignments in the past. I stand by my comments around whiteboarding as a valuable interviewing tool. I think if interviewers are getting hung up on details they’re missing the point, and I also think that as a prospective interviewee having the expectation that you won’t be asked to give a sample of your work on the spot doesn’t seem realistic to me.

                                            However, if all of you can restrict your job search to companies that never do whiteboarding, good on you!

                                            1. 2

                                              The problem with whiteboarding is that while it measures something, the something it measures is not the thing you’ll care about if you hire them. Which in turn is why there are books out there that teach whiteboard interview coding as a separate skill from actual programming, and why even prestigious universities now include a unit on interview coding as a separate skill from programming.

                                              Which raises the inevitable question: why not actually test for the skills you’ll care about on the job? If you don’t test for the job skills you’ll hire people who don’t have the job skills.

                                              1. 3

                                                why not actually test for the skills you’ll care about on the job?

                                                That is what they’re trying to do. It takes a lot of time to find out if someone can actually do a good job as part of your team, and the only way to really test it is to employ them for a few months (A few months of probation is quite common for this). Given that you can’t afford to make that sort of investment in every candidate that applies, companies use whiteboarding and other forms of technical interview to try and guess whether a candidate might have suitable skills before investing more time in them.

                                                1. 0

                                                  That is what they’re trying to do.

                                                  Well, no. What they’re trying to do is cargo-cult what they think Google is doing, because they think “Google is big and successful, so if our company does what Google does, our company will be big and successful too”.

                                                  Of course, Google openly admits their process has a high false-negative rate (it flunks qualified people), but they get enough applicants that they can afford to reject some qualified people. The average company isn’t in that position and can’t afford it.

                                                  And Peter Norvig has explained that Google found a negative correlation between doing well on competitive programming tasks and performance on the job, which throws a wrench in any argument that on-the-spot coding under pressure measures something useful.

                                                  Interviewing as typically practiced in tech is fundamentally broken. It measures the wrong things, draws the wrong conclusions from what it does measure, and is more or less random. I think it’s long past time to stop defending that.

                                                  1. 2

                                                    I never said that the processes were effective, nor am I defending them. I am merely pointing out that they are ultimately an attempt (however ineffective) to select candidates with relevant skills and reject those without.

                                                    “Why not actually test for the skills you’ll care about on the job?” is unhelpful in that the intention is blatantly obvious, but offers absolutely no suggestion of how to achieve it.

                                                    1. 6

                                                      “Why not actually test for the skills you’ll care about on the job?” is unhelpful in that the intention is blatantly obvious, but offers absolutely no suggestion of how to achieve it.

                                                      Tthere are a ton of articles and talks floating around on how to do better tech interviews – I’ve even written/presented some of them, based on my own experience helping to rebuild interview processes at various places I’ve worked – and people could quite easily find them if they wanted to.

                                                      But here goes. Again.

                                                      As I see it, there are several fundamental problems, and various ways to avoid them.

                                                      Problem #1 is playing follow-the-leader. People implement processes based on what they think bigger/more successful companies are doing, without considering the tradeoffs involved or indeed whether those processes had anything to do with the size/success of those companies. Google’s admitted high false-negative rate is the quintessential example: they really can afford to throw away qualified applicants, because tomorrow another hundred will have submitted applications. The typical tech company can’t afford this, or can’t afford other unquestioned assumptions baked into large-company interview processes.

                                                      The solution here is to question the assumptions and expose the tradeoffs. The extremes are “Never hire an unqualified person” and “Never pass on a qualified person”. Google optimizes for the former at basically all costs. Many companies, on the other hand, need to push the needle further toward the latter, which means a more forgiving process that doesn’t flunk people as quickly or for reasons as minor as large companies do. True story: I know one person who flunked Google because they had to write and then read out a bash script over the phone and the interviewer mistranscribed it. I know another person who flunked at Twitter because they provided one of two textbook algorithms for the problem posed, but the interviewer only knew the other and didn’t bother looking more deeply than just “that’s not the answer I know”.

                                                      Those should be unforgivable interviewer errors at any company, but are especially unforgivable at companies which can’t afford to just throw qualified applicants into the trash can.

                                                      Problem #2 is poor targeting. A lot of interview processes, especially at BigTech, explicitly or implicitly target fresh graduates, by quizzing on the sorts of things fresh graduates will have top-of-mind. Many of those things are not top-of-mind for working programmers who’ve been in the industry a while, since they’re rarely used in actual day-to-day programming (this includes a lot of algorithm and data-structure questions, since most working programmers don’t implement those from scratch on a routine basis). This biases away from experienced programmers, and creates a self-reinforcing cycle: you hire a bunch of recent grads, and they come in and start interviewing people which pushes even more toward preferring recent grads, so you hire even more of them, and… then one day you look around and wonder why it’s so hard to find experienced people. This is especially bad in the places that do algorithm challenges, because usually they’re posing things that want you to come up with a solution that took top people in the field decades to come up with while not under any particular pressure, and they want it from you in 20 minutes. On a whiteboard. While they watch. The only way to pass these is to “cheat” by already knowing the answers in advance, which you do either by reading a book about interview problems, or by being a recent grad who just passed a bunch of exams on the material.

                                                      The solution here is to interview based on things that are actually relevant to day-to-day programming. You can, if you want to, find out about someone’s problem-solving skill while using questions and problems that involve things real working programmers actually do.

                                                      Speaking of which, problem #3: far too many interview problems are contrived and unrealistic.

                                                      You can do interviews based on real-world practical problems. Two of the best interview processes I’ve ever gone through did exactly this: one had a work-sample test where they gave you a simplified version of an actual problem from the domain they worked in, the other did a collaborative session where you had to debug a piece of code extracted from their real system and find the real problems in it. Putting together an interview based on these kinds of problems doesn’t take a ton of time, and gives you a much more realistic idea of how someone will perform in your company than the million and first shibboleth problem that tries to test for “fundamentals” but really only checks whether someone was taught the test.

                                                      Problem #4 is measuring things that don’t matter. Whiteboard design can be useful, but whiteboard coding isn’t. Algorithm regurgitation isn’t. Trivia isn’t. Having open-source contributions on GitHub isn’t. Having lots of free time to do competitive “challenges” isn’t. And a lot of “soft” factors like confidence aren’t.

                                                      Measure the things that matter. Measure how well someone can ask questions about a problem or communicate ideas on how to solve it. Measure how well someone works with others (pair programming can make a great interview session if you do it right). Measure how well someone finds and uses resources to help them work through a problem. Measure how well someone interacts with non-engineer colleagues. We’ve all worked with people who were good and people who weren’t so good; figure out what the good ones had in common and measure for that. It’s almost never going to be things like “they were really good at writing linked-list implementations on a whiteboard”.

                                                      Here are some concrete ideas for more useful interviews.

                                                      First, always let the candidate use a real computer with real programming tools and access to references, Google, and Stack Overflow. I make a point of telling people that I’ve written significant chunks of Django’s documentation but I still have that documentation open in tabs when I’m working; it’s outright nonsense to forbid that while also claiming you measure realistic performance.

                                                      Second, use technical sessions that avoid the problems outlined above. Here are ideas:

                                                      • Code review. Bring a piece of code (as realistic as possible) and have the candidate work through it with you. Have them demonstrate that they can read and understand it, ask productive questions about it, and offer constructive and useful feedback on it.
                                                      • Pair programming. Bring something with a known bug, have them debug and fix it with you. Have them demonstrate that they understand how to approach it, search for and identify the problem, and work up a fix.
                                                      • Give them notes from a real problem, and be prepared to answer questions about it, and have them write a brief post-mortem for it. Have them demonstrate they can take in the information you’re giving them, usefully probe for anything missing, and synthesize it all into an explanation of what happened.
                                                      • Bring them a rough feature spec and ask them to refine it and break it down into assignable units of work. Have them demonstrate they can ask good questions about it, figure out the needs and the tradeoffs involved, and come up with a sensible plan for how to go after it.

                                                      Third, use non-technical sessions! And not just a “culture fit” lunch with the team. Have them do a session with a PM or designer or other non-engineer colleagues to see how they interact and watch for signs of whether they’ll have productive working relationships with those folks.

                                                      Finally, standardize your evaluations. It’s OK if there are different possible combinations of sessions (some people may prefer to do a take-home work sample, others may prefer to pair live and in person, etc.), but it’s not OK if interviewers have different rubrics for grading. Write out, explicitly, the qualities you’re looking for, in specific terms (i.e., not “confidence” or “professionalism” – those are vague weasel words that shouldn’t be allowed anywhere near an interview scorecard). Write out how interviewers are supposed to look for and evaluate those qualities. Set explicit baseline and exceeds-expectations bars for each session. Write scripts for interviewers to practice on and follow when presenting problems. Have interviewers practice running the sessions with current employees, and have some of your acting “candidates” try to pull sessions off-script or fail, to make sure interviewers know how to handle those cases gracefully.

                                                      And finally, treat candidates like people. Someone you’re interviewing should be seen as a colleague you just haven’t worked with yet. Designing a process to be adversarial and to treat everyone as a con man will yield miserable and unproductive interviews.

                                                      Now, I got voted “-2, troll” in my previous comment for citing sources that the typical coding interview doesn’t measure things that actually matter and in fact selects for things that correlate negatively to on-the-job performance. But I could cite plenty more. This video, for example, is a former Google employee who at one point recounts the story of a frustrated recruiter who revealed to a hiring committee he served on that they’d all just voted “no hire” on slightly-anonymized versions of their own interview packets and how it exposed the brokenness that was going on there. This article from a company that provides interviewing tools goes into detail on just how unreliable it is to use something that seems like it might be a proxy for real on-the-job skills (key takeaway: scores assigned to candidates by interviewers were all over the place, and inconsistent even for the candidates with the highest mean performances, fully one-third of whom outright bombed at least one interview).

                                                      Interviewing is broken. It can be fixed. Both of these should be uncontroversial facts, but the fact that multiple people here saw them as “trolling” is indicative of the real problem.

                                                      1. 2

                                                        I regret I have but one upvote to give for your comment.

                                                        1. 1

                                                          Excellent comment. I particularly like the part that goes from practices focusing on recent grads that becomes self-sustaining. That could be actionable under anti-discrimination laws. I’ll try to remember that.

                                                          If -2 was what I think it was, then that might be how intro had a tone that looked aggressive, dismissive, or something else. People here are more sensitive to that than most places both in terms of most of us wanting civility and what a large group deems as inclusive speech. Your comments will get better reception if you present your counterpoints without any rhetoric that comes off as a personal attack or dismissal.

                                                2. 0

                                                  In my CV you can see that I have created number of large services to be used by entire countries, 24/7. This can easily be checked even real time (I have admin access to all of them which I can demonstrate immediately ). You want me to whiteboard ? No!

                                                  Furthermore, I will make sure all of my senior IT friends and colleagues know how much you suck as a company (in this land, you can count seniors on fingers ATM) so good luck for you finding one.

                                                  It looks to me that many people do not get it - senior developers are celebrities today.

                                                  Me? I’ll rather collect peanuts then make somebody else rich(er) on my work without fair compensation, respect and professionalism.

                                                  1. 6

                                                    Me? I’ll rather collect peanuts then make somebody else rich(er) on my work without fair compensation, respect and professionalism.

                                                    Your response made me take a step back and think about what we’ve all been saying here, and I came to a couple of conclusions.

                                                    1. I am not a software developer per se. I work in the devops space. I do write software, but it’s nothing even remotely on the order of magnitude that the average Crustacean does. I write simple process automation scripts in Python and occasionally Ruby or Bash. This informs both my world view and the kinds of things I would ask people to whiteboard. As in, they are not at all algorithmically hard, things like “Print the duplicates in this list of numbers” and the like.

                                                    2. Reading all of you express such vehement opposition to the idea certainly has me questioning its wisdom when interviewing software devs, and also wondering if the experiences you’ve all had were at the hand of people who weren’t very mindful of candidate experience in how they were conducting their interviews in general.

                                                    In any case, it’s all very good food for thought, and I will now shut up on this topic and think on all of this.

                                                    1. 5

                                                      Based on my own experience, it is not that uncommon to find someone with “years of programming experience” on their resume, but has trouble solving basic programming tasks. This is because experience comes in a ton of different shapes and sizes. For that reason, before I can be okay with hiring someone in a technical capacity, I really need some kind of evidence that they can write code well. Whether that’s looking at code they wrote previously, giving them a new coding assignment, a white board interview, a presentation or maybe just prior experience working with them, I don’t really care. But there needs to be something. If I just took peoples’ word for it, the results would be pretty bad.

                                                      I think people in this thread generally underestimate just how many people are out there that claim coding experience but fail to meet some really minimal standards. I’m talking about things like Fizz Buzz. Some kind of evaluation process is necessary in my experience.

                                                      Personally, I think the person you’re talking too is being way too unreasonable.

                                                      Everyone gets way too hung up on this shit. There’s a saying that goes something like, “all models are wrong, but some are useful.” It applies just as well to hiring practices. You can’t get it right all of the time, and some of your techniques might indeed yield false negatives. This is basically impossible to measure, but since a false positive is generally perceived as being much more costly than a false negative, you wind up trying to bias toward rejecting folks that might be otherwise qualified in favor of avoiding false positives.

                                                      The whole thing is super hand wavy. People just seem to get obsessed with the fact that Hiring Practice X is wrong one dimension or another. And they’re probably right. But so what? All hiring practices are wrong in some dimension. And even this differs by experience. For example, a lot of people love to poo-poo whiteboard interviewing because that’s not reflective of what the job is actually like. But that’s not true for me. I use the whiteboard all the time. It’s a pretty useful skill to be able to go up to a whiteboard and communicate your ideas. Obviously, the pressure of evaluation isn’t there when you’re on the job, but I don’t see how to relieve that other than by limiting yourself to hiring people you already know.

                                                    2. 1

                                                      In my CV you can see that I have created number of large services to be used by entire countries, 24/7.

                                                      I want to remind you that this doesn’t matter at all in terms of good, software engineering. There’s both lots of crap tech out there with high usage and countries that demand even crappier tech. High uptake doesn’t mean anything except you worked on something that had high uptake due to you or more likely someone else given how businesses/governments decide what to use. If you doubt this, I hit you with my COBOL argument: why not hire someone how knows what billions of lines of mission-critical code are written in? Must be better than almost everything else if argument by uptake and net worth in critical areas is meaningful.

                                                      Or that’s just social-economic forces making that happen in a world where we need to consider other things. ;)

                                                  2. 1

                                                    I think the whole point of the article here is that there is no one best type of interview. Some candidates have anxiety attacks when mild pressure is applied, and do much better in a lower-pressure situation like a take-home assignment, and don’t mind spending the time on it. Some candidates have families or other obligations and can’t spend (unpaid) hours outside of their normal job writing up a solution to somebody’s take-home assignment, but do just fine solving problems on whiteboards. Probably some others have issues with both of those and need something else again.

                                                  3. 9

                                                    I think that’s a very different situation when you’re already comfortable with your environment.

                                                    1. 9

                                                      Couldn’t disagree more with you, either. I’ve also been in this industry for 30 years with almost all of them being an actual ‘software developer’ and I can count on one hand the number of times that I’ve had “produce now!” moments. Perhaps I’ve been lucky, but in my experience, these are rare, 1% times, when there’s a demo or something the next day and you’re trying to get something out the door. Given that, why exactly should we measure this? Even given those high pressure situations, you’re not standing alone, at a whiteboard or in front of a panel, with no resources ( google, library, other engineers ), no context ( mystery problem… you don’t get to know until you have 2 hours to solve! ) and no backup plan. Even with all of those caveats, I have NEVER had to cough up a random data structure with no reference material/resources/etc. in less than an hour or two EXCEPT in an interview.

                                                      1. 1

                                                        What I’m hearing is that a lot of people have had really bad experiences with whiteboard interviewing.

                                                        If the interviewer is hung up on syntax, they’re IMO doing it wrong.

                                                        1. 2

                                                          If someone presents a problem for you, do you immediately recall all algorithms you’ve learned and start whiteboarding that? That’s generally what happens in these whiteboarding sessions that I’ve been in. I don’t remember a ton of stuff off-hand and search for it all the time. Should that count against me? If it does, I don’t really want to work at that place anyway.

                                                          1. 1

                                                            I realized (as I wrote in another reply to someone else) that there’s a disconnect here.

                                                            I’m not a software developer. I do devops work which means I write a lot of VERY simple process oriented automation scripts in Python and occasionally Ruby or Bash.

                                                            When I do whiteboarding with candidates, the most algorithmically complex I get is “print the duplicates in this list of numbers” but mostly it’s things like “Here’s a json blob that lives on an http server. Write code that grabs the blob and connects to each host in a group given on the command line” type things.

                                                            But even so I certainly see where you’re all coming from, and can appreciate the idea that there are definitely better tools out there, especially for cases where you’re not doing hiring at scale.

                                                            Which makes me wonder, how might one apply all this anti-whiteboarding sentiment in a large corporate environment? How do you get take home exams, pairing, or whatever to be effective when you need to hire 50 people in a month?

                                                            1. 2

                                                              I used to work at Capital One and we were always trying to hire people. Each team largely handled its own hiring, though, and we had .. so many teams. Some teams do a whiteboarding session, some do a take home assignment, some do a little pair programming exercise. It really depends on the team and the people.

                                                              I’m not anti-whiteboarding for things like what you mentioned, but if someone is asking me to regurgitate a CS algorithm that I haven’t touched in decades, I don’t really get the point.

                                                      2. 3

                                                        Hmm. I’m not up to 30 years experience at this point (closer to 20), but I’ve never had this happen to me. Even when production bugs hit, it’s not a “We need you to produce. NOW” scenario, but an all-of-us circling the wagons type of deal to track it down. Even in startups where I was the only person writing code, it was never like that. That seems really unusual to me. I don’t know what country you’re in, but for context, I’m in the US.

                                                        1. 4

                                                          OK. We need you to produce. NOW

                                                          Oh, you work for those type of guys who think programming is like manufacture so you can measure it by the number of bricks in the wall, LOC, or something. I don’t accept that kind of job. I know better. I witnessed it dozens of times for other companies I consult for and that kind of job is always substandard.

                                                          I envy you

                                                          Its better idea to fight for your rights (our rights, really).

                                                          but I’m unsure whether or not your experience is one that many others share

                                                          I am sure its not. I am sure its opposite. But that is where I draw the line. I don’t mind fixing simple things here and there ASAP, but designing entire/parts of app/service without adequate time is no bueno.

                                                          1. 4

                                                            Oh, you work for those type of guys who think programming is like manufacture so you can measure it by the number of bricks in the wall, LOC, or something. I don’t accept that kind of job. I know better. I witnessed it dozens of times for other companies I consult for and that kind of job is always substandard.

                                                            This is kind of a cheap shot and also? It’s not true.

                                                            But even if it was, people work for different reasons. I live in a society that doesn’t provide much of a net if you fall, and I have some medical conditions which require some fairly expensive care.

                                                            So, yes I work for a company that pays well. I put a LOT of blood, sweat and tears into my job, and I won’t apologize for that.

                                                            Might it not be the kind of place you’d want to work? I don’t doubt that, and I’m glad you’ve been able to find work that suits your particular needs and wants, but please consider that not everyone is you before making broad statements about people and workplaces when you have zero information.

                                                            1. 4

                                                              Besides the broad generalizations, I find myself between both of you. majkinetor strikes a cord when he says one must fight for their rights. I’d add that once one finds ones self (if ever) in a position wherein one can enlighten the company masses than one should do what one can. But, feoh, isn’t incorrect either. Sometimes you just gotta play the game. I have only worked for places that tend to think of programming in terms of lines of code. It’s really why I am always looking for a new place to work. And, yes, I hate interviewing as well, which makes my conundrum annoying.

                                                              1. 1

                                                                But even if it was, people work for different reasons. I live in a society that doesn’t provide much of a net if you fall, and I have some medical conditions which require some fairly expensive care.

                                                                We do generalization here, any kind of behavior may be adequate in specific context.

                                                                So, yes I work for a company that pays well. I put a LOT of blood, sweat and tears into my job, and I won’t apologize for that.

                                                                Who asked you to do this ? When I speak, I speak about myself and what I think, I am not giving lectures or judgement.

                                                                when you have zero information

                                                                Not zero, I am in this business more then 30 years (also with medical conditions). Don’t be angry :)

                                                                1. 2

                                                                  Not zero, I am in this business more then 30 years (also with medical conditions). Don’t be angry :)

                                                                  I can see where I came off as defensive there. I’m not angry, I’m just surprised at the expectations some folks have around the interview process.

                                                                  If you can find work with those expectations, that’s fantastic.

                                                          2. 1

                                                            I think you’re combining two different things here - having a candidate write things on a whiteboard in an interview, and interviewing a candidate based on solving highly abstract problems that have little relation to the actual day-to-day work of building software, stuff like writing binary tree manipulation algorithms.

                                                            I think the second is a ridiculous thing to judge candidates based on almost all of the time, unless of course you’re doing one of the few jobs that actually involves doing stuff like that.

                                                            The first though, is a perfectly good way to determine whether candidates can actually produce code.

                                                            1. 0

                                                              The first though, is a perfectly good way to determine whether candidates can actually produce code.

                                                              Producing code on whiteboard? I had that on university on exams and many “programmers” came out of it without using a computer single time during the entire studies (I know, my sister was one of them, never turned a computer on until she finished computer studies! and got a job). Doesn’t inspire…

                                                          3. 4

                                                            Mine is kind of like the protagonist’s job in Office Space, but with more SIP trunking.

                                                            1. 3

                                                              At most places I’ve worked pressure was 99% of the simmering kind. Less than 1% I’ve had that flashpoint pressure but frequently it was artificially created to “increase productivity”. Basically the only time when you have to deliver NOW is during major production incidents.

                                                              I’d bet that even at your “Major Cloud Company” the percentage of people involved in solving a major production incident are in the low double digits.

                                                              I have frozen during whiteboard interviews and I’m far from a shy person. Day to day I’m more likely to be the kind of person that makes others freeze - and I don’t say that as some sort of self-praise, quite frequently it’s not a good trait.

                                                              In my opinion, even with your highly data driven process, if you work for a “Major Cloud Company” you can just ask for a painting competition among your candidates and you’d get the same results. Your company probably pays a very high salary compared to the market so competition would be fierce and people willing to train for 6 months on the intricate details of painting while holding a full-time job at the same time would probably make at least half-decent coders :)

                                                              TL;DR: It’s the high salaries and very competitive recruitment pipeline that produce results, not necessarily the actual interviewing details, in my opinion.

                                                              1. 1

                                                                I share your opinion - note that, in my mind, the “increase productivity” methods actually are very harmful in the long run

                                                              2. 1

                                                                But like any other fight / flight response where no actual mortal peril is involved, you can work through the anxiety and learn to process the situation differently, and once you do, it’s incredibly empowering!

                                                                I’ve been thinking about this point for several days now.

                                                                I haven’t been in the habit of thinking about interviewing in terms of a set of skills one can acquire/improve. However, perhaps if I can get myself into this mindset, it will help me to do something other than just walk into a new place and fly by the seat of my pants :)

                                                                1. 1

                                                                  I’ve been thinking about this point for several days now.

                                                                  I haven’t been in the habit of thinking about interviewing in terms of a set of skills one can acquire/improve. However, perhaps if I can get myself into this mindset, it will help me to do something other than just walk into a new place and fly by the seat of my pants :)

                                                                  I am sincerely grateful for the fact that at least one person took the advice I was giving in the spirit in which it was meant :)

                                                                  It most definitely is a skill, and here’s how I know that:

                                                                  There was a period in my career when I was much better at interviewing than actually doing the work. My work ethic has never been in question, I will work to the point of stupidity at times, but I had made some rather near sighted choices around which skills to build (learning new technologies in a very shallow way VERY quickly) over skills I should have focused on (attaining mastery in a few key tools and subject areas)>.

                                                              1. 3

                                                                For DOM, I haven’t used either of the following myself, but I’m interested in this:

                                                                https://redom.js.org/

                                                                For something more about manipulation of existing elements (like jQuery), I like the idea of this:

                                                                https://blissfuljs.com/

                                                                For animations, I’d just use CSS and toggle classes with JS if necessary.

                                                                For requests, I use this:

                                                                https://github.com/github/fetch

                                                                If you’re comfortable with jQuery, I don’t see any problem with it, it’s still a perfectly valid choice in some situations.

                                                                1. 2

                                                                  As a programmer, you spend a lot of time editing and navigating code.

                                                                  In my experience, not as much as all editor-focused write-ups want you to think. Presumably, you spend much more time thinking what is it that you actually want to do. (Disclosure: my perception is informed by me spending most of the time in Python, as opposed to more text- and repetition-heavy languages like Java.)

                                                                  1. 1

                                                                    Is it? I’m trying to find breakdowns of how programmers spend their time and it’s tricky. I’d suspect it would be something like half our technical time is spent debugging.

                                                                    1. 1

                                                                      I second this. Also for more verbose languages like Java there are usually very good supporting tools, and You usually don’t use a simple editor, but a semantically aware IDE for the task.

                                                                      1. 1

                                                                        Agreed.

                                                                        I don’t get why people have this need for optimising their text editing so much. They spend so much time trying to learn all these handy keyboard shortcuts and tricks, that the actual time they save when editing text is meaningless.

                                                                        1. 3

                                                                          For me it’s absolutely nothing to do with saving time and everything to do with comfort. It didn’t take long to get over the initial hurdle of just running vimtutor and learning the basic keys to move around and edit. From there it was just editing and occasionally thinking ‘I do this [thing] a lot, is there a way to optimise it? Same for my shell setup. It’s not really a deliberate decision to spend ages customising everything, it’s a gradual process that occurs naturally over years out of curiosity, and it pays off.

                                                                          Edit: the immediate benefit post-vimtutor was being able to keep my hands off the mouse, and that was enough to make it more comfortable than what I had been doing before. I don’t think I would have bothered if it had been that stressful and time consuming just to get started.

                                                                    1. 3

                                                                      I’ve tried OpenBSD a few times over the last few years, and a few weeks back I finally got a working installation (suspending, keys, etc.) but then I realized that it is just generally too slow, especially when compared to Linux on the same machine. And even if some parts are nicer or cleaner, the documentation is more thought through (but not necessarily that easy to find something, if you’re not sure what you are looking for), it’s still not worth having Emacs be 5-10 times slower, let alone Firefox or any other larger application (which to be fair, for me is just the two). It’s sad, but that’s what really what keeps me back, and the main comparison, since both are free operating systems.

                                                                      Though I should say that it’s quite nice (with the exception of relayd) on servers.

                                                                      1. 1

                                                                        What was notably slower? Firefox?

                                                                        1. 1

                                                                          Firefox, Emacs, Startup, everything that had to do with I/O basically.

                                                                          1. 1

                                                                            For posterity I will say I’ve personally never noticed much slowness sans Firefox, which was solved in the about:config by setting layers.acceleration.force-enabled to true. A lot of packages put information like that in /usr/local/share/doc/pkg-readmes. There are also some sysctl settings that help improve OpenBSD performance, though I shan’t go into them here.

                                                                        2. 1

                                                                          I’m thinking of trying openbsd again for a little pet home server, and relayd would necessarily be a part of that (I think, from its docs). What pain did you hit with it?

                                                                          1. 2

                                                                            My use case was to serve a regular HTTP server (httpd) and a Go server on the same host, where one domain directs to one port, and the other to another. After looking though quite a few mailing lists (which still takes less time than reading the manual) I got it working, but it didn’t have https support. Also websockets broke sometimes.

                                                                            But if you only want to host static content or cgi, then httpd should have you covered, which is a bit easier to work with.

                                                                            1. 1

                                                                              I’ve been running relayd as a TLS termination proxy for a few web apps for a few years and it has mostly been fine. A few configuration issues, I can’t remember what exactly (but my fault), and I haven’t tried websockets. Otherwise it has worked for me.

                                                                              1. 1

                                                                                I’m not saying it’s no doable, it’s just that it seems a lot harder to do (since there is less resources) compared with more popular alternatives like nginx. And I know I could also use nginx, but that kind of takes the whole fun out of OpenBSD.

                                                                              2. 1

                                                                                Hmmm, yeah I was hoping to virtualhost multiple domains, and redirect ports 80/443 accordingly (some static httpd, some python/flask).

                                                                          1. 2

                                                                            As I’m a bit ignorant about these things, just wondering if anyone can explain the motivation for the Xorg setuid change?

                                                                            1. 10

                                                                              A local root hole in X.org discovered around the release of 6.4: https://marc.info/?l=openbsd-tech&m=154050351216908&w=2

                                                                              1. 2

                                                                                https://marc.info/?l=openbsd-tech&m=154050351216908&w=2

                                                                                Wow, that’s… Very interesting.

                                                                                OTOH, I think it’s pretty cool that Theo would reveal such info even though it may seem to undermine credence about revealing security vulnerabilities to his own project. I mean, if his own people don’t tell him about the upcoming embargoed bugs due to the known stance of The OpenBSD Project against security embargoes, what can be expected of other projects and bigger vendors?

                                                                                I’m happy to see matthieu is still a committer, though, and has been committing throughout Oct and Nov last year around this controversy, too; i.e., at least from the public eye, there’s no evidence to suggest that his account was ever disabled; but this is some harsh reality come OpenBSD way…

                                                                              2. 6

                                                                                Heh, I’ve used startx(1) for as long as I’ve used Unix systems, guess I have to finally start using a login manager!

                                                                              1. 1

                                                                                Ah, excellent! I was just wondering if I could style the menu before realising it was rofi, so there’s nothing for me to do! I’ve been looking for something simple like this.

                                                                                1. 4

                                                                                  And the churn continues. I’d be all for it if I were sure we were actually making forward progress, not just revolting against last year’s trends for attention.

                                                                                  1. 2

                                                                                    Personally I think it does look like it’s working towards a future with less necessary tooling and native modules in the browser. If we want less churn (of course we do), then moving towards the native solution seems like the right direction doesn’t it? I don’t think ‘revolting against last year’s trends’ is a fair summary, they explained their motivations well enough in the article.

                                                                                  1. 3

                                                                                    With HTTP/2 many small files is not a problem. Just ship ES Modules directly to browsers. More granular caching, less dev tools.

                                                                                    1. 1

                                                                                      yeah, the small files problem was more relevant in 2016

                                                                                      1. 1

                                                                                        It’s not as big of a problem if you know all of them up front. But ES modules don’t let you know this without using a bundler or bundler-like tool. See this post for why http/2 doesn’t solve the problem: https://engineering.khanacademy.org/posts/js-packaging-http2.htm

                                                                                        1. 2

                                                                                          Use modulepreload to preload all the module files:

                                                                                          https://html.spec.whatwg.org/multipage/links.html#link-type-modulepreload

                                                                                          1. 2

                                                                                            Thanks for the pointer! I hadn’t seen this before and haven’t been able to find good information on browser support yet. Do you know how well supported it is?

                                                                                            Additionally, it fails to solve two of the problems with just serving ES modules:

                                                                                            1. You still need to provide a static list of modules, so you’ll need a tool to convert your dependency graph into that list (a bundler?)

                                                                                            2. By splitting everything into multiple files, you lose compression efficiency. Assuming you need everything anyway, shipping as a single (or small number) of bundles will produce the best results.

                                                                                            1. 1

                                                                                              Yeah it seems to be a little difficult to find information on. I know there’s support in Chromium, but not sure it’s in the others just yet. I’ve only experimented with this a little on small projects and nothing in production so I’m still trying to get my head around how it would work when things get larger and more complex! In that case bundling probably will always be a good idea. Also agree with the point about compression. Below a certain size it’s probably not a big issue, but there will definitely be a point where you need to consider that.

                                                                                              My hope is just that eventually I will be able to use this and avoid complex build steps for smaller projects with a manageable number of modules.

                                                                                      1. 3

                                                                                        While I like a good DIY approach to learning about software, I wouldn’t in good faith recommend using make to build JS projects, unless your Makefile defers to compiler toolchains like webpack or parcel. The pain of not having a proper module system plagued JS development for years, and we finally have standards for this. Manually specifying dependency order is painful!

                                                                                        1. 2

                                                                                          I use Ninja, which is like a simplified make meant to be generated by scripts, and ninja-build-gen to build the semi-complex, albeit static Javascript site kitspace.org. You don’t have to figure out manual dependency when using this setup as you automate it using the generator script.

                                                                                          I do think it’s a good solution for medium complexity projects but, like you say, the build-times are hitting me hard since I have to write out many files multiple times. It has served me well but moving forward I will be using a more established JS build system (probably NextJS which wraps Webpack).

                                                                                          1. 1

                                                                                            It entirely depends on what you’re doing. Not every project requires that complexity. But for those that do, I like to use Fuse-Box, as it’s a lot faster than Webpack, with sane configuration. Webpack build times are atrocious.

                                                                                            https://fuse-box.org/

                                                                                          1. 18

                                                                                            I’m feeling a bit disillusioned with FreeBSD as a user running it on their home server (mainly for ZFS). For all its promises of being a coherent system it hasn’t felt that way to me (unlike OpenBSD). Here are a few things that rub me the wrong way:

                                                                                            Many projects start and stall development, but it’s rarely clear when this happens and they tend to linger around in the system or still listed on support sites as solutions (e.g. docker port, relayd port).

                                                                                            In the mount_unionfs(8) manpage:

                                                                                            THIS FILE SYSTEM TYPE IS NOT YET FULLY SUPPORTED (READ: IT DOESN’T WORK)

                                                                                            On FreeBSD 12. How long has that message been there? If it doesn’t work, then remove it! It’s things like this that make me distrust the system. If things like this are still hanging around, then what else has been forgotten about?

                                                                                            I don’t trust the FreeBSD wiki at all, there is too much outdated information. I don’t think it’s really viable in the same way the ArchWiki is, and it shouldn’t be on the official domain, it’s an inconsistent mess and not a good look. Unlike some others (who rave about the handbook) I find FreeBSD documentation very hit and miss.

                                                                                            There are three firewalls. Pick one and run with it (and it it’s PF, then rename it because it causes confusion with the OpenBSD version). The justification in the handbook is this:

                                                                                            FreeBSD provides multiple firewalls in order to meet the different requirements and preferences for a wide variety of users.

                                                                                            If one firewall doesn’t meet the different requirements then it needs to be improved. Why don’t others have this problem? It’s another reason FreeBSD does not feel coherent or straightforward to me.

                                                                                            Why is rubygems split up from the ruby package? I have never had a problem with them being packaged together on any other system, and it has caused me no end of pain on FreeBSD and just feels arbitrary. There are other strange packaging decisions I’ve run into, though I can’t recall them right now. In general, I prefer package maintainers make as few modifications to the software as possible and keep it simple and predictable.

                                                                                            If bhyve and jails had simple, consistent interfaces designed for humans (see OpenBSD’s vmm), there wouldn’t be such a need for the multitude of wrapper tools.

                                                                                            A few minor things…

                                                                                            I still find /usr/local/etc and /usr/home catch me out on occasion.

                                                                                            I find freebsd-update slow and clunky (how many reboots do I need?).

                                                                                            In my experience FreeBSD is a bloated system, without a good sense of direction and needs to cut a lot of fat. There’s plenty I like about it, and I’m going to continue using it for now (for ZFS), but to be honest I don’t see much of a future for it unless things change. I don’t see that happening though.

                                                                                            Edit: And I completely disagree with the assertion that it ‘just works’. I’ve had to fiddle with workarounds for strange quirks numerous times.

                                                                                            1. 12

                                                                                              Unlike some others (who rave about the handbook) I find FreeBSD documentation very hit and miss.

                                                                                              I was drawn to FreeBSD by its reputation to have a superb documentation. And for the most part, I find the documentation (i.e., the handbook) is actually really good. However, it is constantly in danger of becoming outdated, and it is obviously a lot of work to maintain quality and up-to-dateness. To make matters worse, the freebsd-doc mailing list seems to be filled with spam and it is not really obvious how to contribute. As an (maybe extreme) example, this patch for the OpenLDAP server page that was first submitted in May 2017 was only merged in December 2018: https://bugs.freebsd.org/bugzilla/show_bug.cgi?id=219142

                                                                                              When setting up various services (LDAP, mail, etc.) on my home server, the handbook was not sufficient to avoid the classic googling of random blog posts. But it still was the most helpful source for me.

                                                                                              1. 4

                                                                                                Yeah I do think the handbook is a very good resource, but as you say you do run into the odd issue which does affect my trust in it somewhat. I often just feel like FreeBSD is trying to do too much, spreading itself too thin for the size of its community to reasonably support, so quality suffers.

                                                                                                I also think the handbook should be very careful about covering supporting software which is outside the base system.

                                                                                                None of this is unfixable!

                                                                                              2. 4

                                                                                                If one firewall doesn’t meet the different requirements then it needs to be improved. Why don’t others have this problem? It’s another reason FreeBSD does not feel coherent or straightforward to me.

                                                                                                I stongly agree. FreeBSD does need to pick a firewall (Dragonfly’s ipfw3 maybe?) and drop the other ones.

                                                                                                There seems to be lots of cruft like this in FreeBSD. Yet it seems like I am always reading some flameup on the mailing list whenever anything old and crusty is even considered for removal. Here is a recent example. This is from someone running current! I guess timed was in 4.3 BSD, but it should have probably been moved to ports ages ago..

                                                                                                Another example are all the “r”-commands in base — currently deprecated, but still present (in 12.x so far).

                                                                                                Time for housecleaning[1]!


                                                                                                [1]: Heck, maybe rip out nasty old ipsec and implement wireguard instead.

                                                                                              1. 10

                                                                                                This is basically my stance towards vi/vim too. But whenever possible, I prefer vis over “regular” vi, since it’s smaller and faster than vim, but has those few features like text objects and macros I really would miss in nvi.

                                                                                                1. 3

                                                                                                  Yes, vis is great especially for things like multiple cursors, structural regular expressions, treating newlines like any other characters and much more.

                                                                                                  1. 1

                                                                                                    I’ve been using vis as my main editor for probably about a year now. I don’t miss Vim (Neovim specifically) at all. Everything feels so much more simple and manageable, and I can make up for any missing functionality with Lua.

                                                                                                  1. 2

                                                                                                    GNU Stow is a symlink farm manager

                                                                                                    What’s the benefit of symlinking vs. copying? I guess being able to edit dotfiles in their usual places (vi ~/.vimrc) is cool, but I actually do make temporary local changes sometimes, and I don’t want them in the repo.

                                                                                                    I just have “modules” (directories) with apply.sh scripts and a really simple install.sh to install these “modules” (also rinstall.sh to install over SSH to a machine where I don’t want to clone the git repo). So the repo works as kind of a “staging area” (like the git index).

                                                                                                    1. 1

                                                                                                      I’m in agreement with you. I would rather have filenames that don’t begin with a dot, and an install shell script gives me exactly that. What does stow do that a shell script can’t?

                                                                                                      1. 3

                                                                                                        I think the real benefit of having symlinks is if you are sharing the files across multiple devices.

                                                                                                        There’s nothing stopping someone from re-implementing a copy-not-symlink version of stow, but then you are responsible for merging differences in the script (or bailing out with an error).

                                                                                                        The beauty of having symlinks is you can use any external tool (e.g. git) to handle merging changes in the config files if you share them across multiple devices.

                                                                                                        edit: I actually implemented a shell script to do exactly what OP described, but kept getting burned by managing conflicts.

                                                                                                        1. 2

                                                                                                          Most of the things I want to make local customisations for have ways to include other files (sh, ssh, my editor, etc.), so I usually make my main config files include a .foo.local or .foo.d/* whenever possible.

                                                                                                          1. 2

                                                                                                            Some of the things I stow with stow are directories for precisely that same reason. I wrote an i3wm config manager that uses ~/.config/i3/config.d, and what I put into stow was literally that directory so I can add new files to ~/.config/i3wm/config.d and they magically show up in my repo where I can add them since config.d is a symlink.

                                                                                                          2. 2

                                                                                                            Isn’t managing conflicts exactly what a tool like git is supposed to help with? So on update a copy-not-symlink script would copy back into the repo and then do a merge.

                                                                                                            (I’ve always used symlinks because it’s less work and thought up front)

                                                                                                            1. 1

                                                                                                              Yea that was kind of my (poorly worded) point. with copy-not-symlink, your script now has to be smart enough to recognize conflicts, not copy, and invoke git or whatever to help merge changes. with symlinks, you use one tool to symlink (stow) and another to resolve conflicts (git). Stow doesn’t care about conflicts, and it doesn’t have to. It is simpler and less work than creating your own script to copy-not-symlink.

                                                                                                      1. 18

                                                                                                        Depends on 36 crates, 1.9M output binary (after stripping it manually)

                                                                                                        For some value of “minimal”, I guess.

                                                                                                        1. 11

                                                                                                          I feel like this is a bit of cheap shot, considering that this follows defaults and the defaults of rustc might differ from your expectations (e.g. debug symbols, stdlib, jemalloc, which is easily 2 megs). The crates situation is also debatable - it does use a concurrency framework under the hood that is well-factored into pieces.

                                                                                                          Most of the size comes from just one pair of crates, btw: regex and regex_syntax. Most of the crates are indeed lightweight, providing such things as a reusable parking lot reimplementation.

                                                                                                          The tool is rather small (a bit over 100 lines). If it were implemented in Go, for example, you’d pull all that in through a runtime, if it were in C, I’d be interested to see how much code you need to pull in (or write yourself) to get to an equivalent level.

                                                                                                          If you’d want to trim this, there’s certainly ways, but yes, I think you can definitely say this is rather minimal.

                                                                                                          1. 18

                                                                                                            A stubborn focus on the absolute number of crates is indeed a bit weird from the perspective of “minimalism.” It would be “easy” to reduce that count if only everybody built monolithic crates and never factored things out into reusable components. For example, in regex’s case, the parser, aho-corasick, thread locals and UTF-8 automata construction tools could all legitimately be rolled directly into the regex crate itself, thereby decreasing the absolute number of crates and trivially satisfying “minimalists” such as @pcy everywhere. But that’s basically where the benefits stop, because now nobody can reuse any of those crates. The same goes for parking_lot or crossbeam. You could reduce the number of absolute crates by building more monolithic crates, and forcing anyone with a more refined use case to either copy and paste or depend on more than they need.

                                                                                                            With that said, one might question why regex is being depended on at all in the first place, and I think that might be a valid criticism. e.g., It does look like dup is not using the ignore crate for its filtering support, but rather, for its parallel directory iterator. The only reason why these two things are coupled in the same crate is because I haven’t devoted any resources to de-coupling them. Ironically, decoupling them will (probably) just increase the absolute number of crates that one brings in when depending on ignore, but also simultaneously enabling tools like this to depend on fewer crates.

                                                                                                            To play the devil’s advocate, an absolute number of crates can increase maintenance burden for folks. I tend to like to keep an eye on every dependency I use, transitively or otherwise, to make sure I’m up to date on what’s going on there. This becomes intractable as the number of crates grows. However, when the count balloons because one logical crate starts splitting itself apart internally, that tends to be OK because I’m only dealing with the higher level crate.

                                                                                                            Lobsters does love their pithy one-line zingers, even when they lack substance, just like reddit. This is one of the reasons why I’m steadily growing to hate this place.

                                                                                                            1. 5

                                                                                                              The one-liners seem to be a consequence of showing karma, which I plan to avoid in my upcoming site.

                                                                                                              Also, howdy. I was that fool on HN who challenged you to the xsv coding duel. It was a pleasant surprise to see you here, as well as minimaxer and a few other HN hats.

                                                                                                              Would you write up a few thoughts on what you’d like to see out of a new site? (Or, alternatively, a few reasons why you are steadily growing to hate the present one.)

                                                                                                              It will be a few years before things are significantly different, but the plan is basically to bring HN’s mod tools to the masses. Everyone can make their own HN front page (called a lambda) and moderate/curate in the ways that have proven effective on HN: changing titles, hiding karma, re-ranking stories regardless of upvotes, muzzling individual users, and so on. I’m particularly motivated to avoid the mistakes that plague the current batch of sites (including some of HNs), so your perspective would help.

                                                                                                              1. 7

                                                                                                                Hiya. :-)

                                                                                                                This is kind of a bit of a tangent for this thread, so I’ll just keep it brief. Basically, I would like to see a technical forum that is heavily moderated. I don’t necessarily mean moderation from the perspective of “let’s have a strong CoC,” but rather, moderation in the sense that “discourse should be high quality.” It’s an explicit intent to increase the barrier of contribution by demanding higher quality discussion.

                                                                                                                The forum that comes to mind is r/AskHistorians. They have a very heavy handed approach to moderation, and as a result, I can go read discussions in that forum with virtually zero noise. It’s excellent.

                                                                                                                There are serious downsides to this. For one, it requires someone willing to do the moderation work. Speaking from experience, this is freaking hard. Secondly, I don’t know how many people would be willing to participate in such a forum. There would be really hard questions about who gets to judge quality. r/AskHistorians generally gauges quality, from what I can tell, based on citations/sources and, to some extent, pedigree. I don’t know whether that would carry over nicely to a tech-focused forum, but it feels possible. Basically, stop blabbing shitty/low-effort opinions and start grounding them in experience (or others experiences) that others can learn from.

                                                                                                                1. 11

                                                                                                                  Hi,

                                                                                                                  I would personally encourage anyone who wants to build a community like what burntsushi describes to try it. I can’t speak for pushcx or alynpost in this, but I don’t think Lobsters should regard new communities as a threat to its own prominence; rather, I think every community should understand that different places serve different purposes and every community benefits from the presence of the others.

                                                                                                                  I do, also, call on crustaceans to continue working towards the ideal of high-quality conversation. I don’t think this has to mean there are never jokes; we shouldn’t ask people to stop being people just because the subject matter is technical. I think you all do an astonishing job of it, when we consider what technical forums which don’t prioritize depth and nuance look like.

                                                                                                                  I wish I could volunteer to be part of burntsushi’s proposed effort; I do think it would be an interesting experiment. Unfortunately, in all honesty, the attention I’ve been able to give to Lobsters lately has already been suffering due to me prioritizing support and activism communities that I’m also a part of. I don’t think it would be fair to anyone to further divide my attention.

                                                                                                                  Good luck!

                                                                                                                  1. 3

                                                                                                                    Hello. It’s been a couple months, but you may be curious to see the results of the community experiment so far: https://www.laarc.io/

                                                                                                                    The conversation here helped inform the site’s direction. And it was a relief to hear you voice something so true: the communities will always compliment and strengthen one another. One does not come at the expense of the other.

                                                                                                                    1. 2

                                                                                                                      Congratulations! It looks really active.

                                                                                                                    2. 2

                                                                                                                      <3

                                                                                                                    3. 1

                                                                                                                      Personally I’m not completely against this kind of comment because they can (not always) spark interesting discussion (e.g. @pcy latest response). I also think discussion risks becoming very artificial/unnatural without them and I imagine an environment like you’re suggesting would be intimidating to a number of people who might otherwise have valuable input but lack self confidence.

                                                                                                                      1. 3

                                                                                                                        I mean, yeah. Clearly a lot of people like those sort of low substance pithy one liners. They get upvoted all the time here. That pattern is what I don’t like.

                                                                                                                        Lobsters is what it is. I’m not out to change it. I was asked my thoughts on what a different community might look like, so I answered. And yes, I explicitly acknowledged that it raises the barrier to contribution. There is no free lunch. I’m sure there are ways to inspire confidence, but at the end of day, you still wind up excluding low quality content.

                                                                                                                        r/AskHistorians proves it’s possible. The experiment is carrying it over to a tech focused forum.

                                                                                                                        1. 1

                                                                                                                          I would say that the experiment is really whether your moderation team have the good judgement, time, and persistence to be the ones to do it. I’ve no doubt it’s possible, for the right people.

                                                                                                                    4. 1

                                                                                                                      [edit: Oops, replied to wrong post. LOL, confused by nesting!]

                                                                                                                      1. 1

                                                                                                                        minimaxer and a few other HN hats

                                                                                                                        Hi shawn. Welcome to Lobsters!

                                                                                                                        I have never seen that HN user, don’t use HN at all myself, and haven’t for years. Even back then, I didn’t have an account. Just to be clear. Clever name, though :-)

                                                                                                                        Your new site sounds interesting. I’ll look out for it. I wish I had time to help out. I think that if you give everybody effective mod tools and ownership of their personal spaces, you can probably do without “karma” or similar gamification schemes altogether. Lobsters’ public invite tree does a great job at mitigating spammers and bots, and it’s such a simple thing. Public mod log is a very good feature as well.

                                                                                                                      2. 4

                                                                                                                        Thank you for writing this insightful and informative reply to the pithy one-liner.

                                                                                                                      3. 6

                                                                                                                        I feel like this is a bit of cheap shot

                                                                                                                        Yes, mea culpa, sorry. (Although I’m currently writing something for a system that has 4 megabytes of RAM, and seeing that that amount of code is needed to do something relatively simple feels a bit weird.)

                                                                                                                        and the defaults of rustc might differ from your expectations (e.g. debug symbols, stdlib, jemalloc, which is easily 2 megs).

                                                                                                                        I actually compiled with the --release flag, and with LTO turned on (which I’d expect to eliminate unused code).

                                                                                                                        I am aware of the fact that some people do use Rust and emit small binaries. For example, the tools made by the demogroup Logicoma are all written in Rust (except for their synthesizer), and yet the output is around 64 kilobytes.

                                                                                                                        if it were in C, I’d be interested to see how much code you need to pull in (or write yourself) to get to an equivalent level.

                                                                                                                        Hold my beer. :)

                                                                                                                        1. 4

                                                                                                                          Thanks for the reply :).

                                                                                                                          Well, I deployed full tokio/serde applications on 8MB, so this is definitely feasible even with the large frameworks. libstd and alloc do have an undeniable base cost. It’s interesting how the growth of a Rust application is very much “steep, and then quickly getting smaller”.

                                                                                                                          Hold my beer. :)

                                                                                                                          I’ll also buy you the next one, feel welcome!

                                                                                                                          1. 7

                                                                                                                            I delivered: mdu.c. 221 lines (as counted by cloc). I used only libc, and even went as far as trying to use syscalls only. The result isn’t very “industry-grade”, but that wasn’t really my goal to begin with.

                                                                                                                            It spawns new ‘threads’ using fork(2), and communication is done using pipes (read(2), write(2) etc. are atomic). The main thread tells a worker thread which directory to (non-recursively) look at, these worker threads send newly discovered directories back to the main thread, which puts them in a queue. The worker thread signals it has done counting the file sizes of a single directory by letting the main thread know how large that dir is. The main thread then looks at the queue, and assigns one new directory to each idle threads. (Or just read the source.)

                                                                                                                            But how big is it, and does it work?

                                                                                                                            $ ll . # Including all the comments, of course.
                                                                                                                            -rw-r--r-- 1 9946  mdu.c
                                                                                                                            $ gcc -O3 -omdu mdu.c && wc -c mdu
                                                                                                                            17744 mdu
                                                                                                                            $ strip -s mdu && wc -c mdu
                                                                                                                            14536 mdu
                                                                                                                            $ git clone https://github.com/sharkdp/diskus # Let's download some testing material (looks like they changed the name)
                                                                                                                            $ ./mdu
                                                                                                                            28578
                                                                                                                            

                                                                                                                            14k is still a bit much, don’t you think? Let’s try cheating a little:

                                                                                                                            $ sstrip -z mdu && wc -c mdu
                                                                                                                            12533
                                                                                                                            

                                                                                                                            (sstrip)

                                                                                                                            Hmm, not bad. But let’s try something better/cheatier: executable compression. I’m using my own unpacker, as UPX etc. wouldn’t do much good, as the input binary is already quite small.

                                                                                                                            $ xz -9 --extreme --keep --stdout mdu > mdu.xz && cat $foo/vondehi mdu.xz > mdu.vndh && chmod +x mdu.vndh && wc -c mdu.vndh
                                                                                                                            3590 mdu.vndh
                                                                                                                            $ ./mdu.vndh # Including the .xz file etc.
                                                                                                                            32136
                                                                                                                            

                                                                                                                            And now it’s less than a single page :).

                                                                                                                            In the large comment at the top of the file, I explained how to make it even smaller (it’s probably not that hard to cut the size in half), but I’m too lazy to do it.

                                                                                                                            EDIT: Of course, it’s linking dynamically to libc. The actual thing must be multiple megabytes, right?

                                                                                                                            $ musl-gcc -static -O3 -omdu.musl mdu.c && wc -c mdu.musl
                                                                                                                            34320 mdu.musl
                                                                                                                            

                                                                                                                            And if you get rid of all the syscalls, you can make a much smaller static binary anyway.

                                                                                                                            EDIT2:

                                                                                                                            I’ll also buy you the next one, feel welcome!

                                                                                                                            I actually don’t drink anything containing alcohol, but thanks anyway.

                                                                                                                            About the “trolly oneliner” conversation: I’m actually surprised that silly comment got that many votes in the first place.

                                                                                                                            1. 2

                                                                                                                              I must admit that I didn’t have time to read through it yet (was sick over the weekend), but thanks for writing it already. I’ll have a check :)

                                                                                                                              I actually don’t drink anything containing alcohol, but thanks anyway.

                                                                                                                              Any other beverage will do ;).

                                                                                                                              About the “trolly oneliner” conversation: I’m actually surprised that silly comment got that many votes in the first place.

                                                                                                                              I’m not, sadly. That thing flies so well on the internet, because it triggers the “cool, agree” emotion, even without looking at the subject of the comment in detail.