1. 5

    @arrdem, you’ve got an issue with your power calculations and/or units. Watts are units for measuring instantaneous power and Watt*hours are power over a given time. So “8kw per day” doesn’t make much sense. You might just have kW and kWh switched, I didn’t look close at the numbers. Might be why things aren’t making sense.

    1. 2

      @azdle, yeah that checks out. The numbers clearly didn’t work when I tried to do the dimensional analysis this morning, I think the mistake comes down to me recalling kwh = w/h whereas kwh = w * h which is why I went and ballparked off of PG&E’s power analytics.

    1. 20

      The worst code you’ve ever written is the code that is no longer used. Is called YAGNI (You Are Not Gonna Need It).

      I’ve always known YAGNI to refer to something worse than that, code you never need in the first place. Code that was written to be “flexible” and “generic” such that it could be used in as many different situations as possible, but in making it generic the implementation gets so complicated that when the original need changes slightly in a way not originally anticipated its massively more work to go in and make changes. The idea is that you keep it simple and in the future when you need something different you’ll spend less time changing it than you would have making it generic in the first place.

      I’m rather familiar with this problem in the codebase I’m working on at work.

      1. 4

        Hopefully getting my home network up and running so I can put the wifi access point back on the hall ceiling. It’s almost there, but pin 4 isn’t showing up as connected according to my cable tester, so there’s a few punchdowns to check along the route. Of course one of them is underneath the bedroom floor, which won’t be fun to get to.

        Also spending yet more time in the car going to visit my friend for the weekend. (I usually drive about 30 miles in a week, this week I’ve done about 800 so far.) Looking forward to a social weekend, it’s been a hell of a week.

        1. 4

          There are tools that will tell you around what length the cable is broken. If you have some friends in the networking field ask them if they have one you can borrow.

          1. 2

            My old desktop motherboard had this in the BIOS for the built in NIC. I can’t 100% remember what it was, but i think it was a gigabyte with an AM3 socket. Might be worth checking that if you have any desktops sitting around.

            1. 2

              Hah, it turned out to be a couple of issues. One on cable run I’d just plain punched down blue/brown pairs the wrong way, and on the other run I’d just not punched down one of the pins. Once the physical stuff was actually connected, the whole thing started working. Funnily enough.

              I think the longest run I have is about 15 meters, and I pulled a minimum of two cables through where I wanted a connection (along with a spare string in each run), so if I suspect a broken cable I’ll just pull another run through.

          1. 9

            Most people have a fixed supply of discipline for tasks which are not intrinsically fun but still important. This is the kind of discipline that is needed to create secure code. Robert M. Pirsig wrote great words on this in Zen and the art of Motorcycle Maintenance where he describes ‘Gumption’. Recommended.

            However - we can deplete our supply of gumption easily enough by fighting our language. We run out of discipline that way. The result may be code that is memory safe but executes plugins from a globally writable directory.

            In this sense, the Rust memory security features may not be a net positive for writing safe code.

            I don’t follow this reasoning. To me it’s completely backwards.

            First, I’ll admit there may be something to this for people new to the language if learning new things costs gumption. However, I don’t think it’s fair to compare how someone feels when they program in a language they’ve been using for decades vs a language they’re still learning. (Sorry ahu, I’m not aware of what your experience is with rust and since you didn’t state it I’m assuming it’s not much.) Otherwise we’d all still be using assembly because ‘C is too complicated and forces you to think about too much irrelevant’.

            I’ve been programming Rust for years and doing it professionally for > 1 year now. I don’t fight the borrow checker any more, instead I know that it will catch me when I do something I shouldn’t have. That means that I don’t have to even think about it any more. To some extent the patterns that I’ve learned mean it’s just right the first time, but if I introduce something that isn’t safe I immediately get an error to pop up in the terminal next to me. Only then do I have to think about how what I did could be violating some rule elsewhere. Then as soon as I fix it, I can promptly forget about it.

            In the end my brain is limited, the more I can offload to the computer the more I have space for the interesting things. Or as the author puts it: I have to spend less gumption on writing Rust because the compiler brings more of its own gumption.

            1. 4

              Right. We develop the resilience to fight through those “not intrinsically fun” problem-solving tasks. In fact, it’s something every single one of us did when we first began learning how to code.

              1. 1

                (Grumpy C programmer who’s dabbled with Rust)

                I think you are both right. :) Most of the “fighting the borrow checker” happens when one doesn’t have much experience with Rust. As one gets better, I can only assume that one gets better at coming up with designs which lend themselves to fewer borrow checker fights.

                I think this is very similar to the pain experienced by a C programmer (really any procedural language) trying something radically different - e.g., common lisp. From my own experience, writing lisp was a pain at first because I just tried to write the code just as I would in C - because that’s just what I’m used to. With time and practice, one gets better at the new language and dealing with its quirks. (For the record, I lost interest in common lisp not long after my first aha moment.)

                So, I guess one can define two points in time for a Rust developer: the novice and the expert. For the novice, I think ahu’s statement is more or less correct. For the expert, you are correct. On that note, the steepness of the learning curve for Rust is interesting - if it is too steep, not enough novices will have the gumption to take the hit in productivity to practice enough to become experts.

              1. 5

                I’m trying to convince my workplace to get rid of whiteboarding interviews, does anyone know if there are resources for ideas of alternatives? Anyone have a creative non-whiteboarding interview they’d like to share?

                1. 7

                  The best that I’ve found is to just ask them to explain some tech that’s listed on their resume. You’ll really quickly be able to tell if its something they understand or not.

                  My team does basic networking related stuff and my first question for anyone that lists experience with network protocols is to ask them to explain the difference between TCP and UDP. A surprising number of people really flounder on that despite listing 5+ years of implementing network protocols.

                  1. 6

                    This is what I’ve done too. Every developer I’ve ever interviewed, we kept the conversation to 30min-1hr and very conversational. A few questions about, say, Angular if it was listed on their resume, but not questions without any context. It would usually be like- “so what projects are you working on right now? Oh, interesting, how are you solving state management?” etc. Then I could relate that to a project we currently had at work so they could get a sense of what the work would be like. The rapid-fire technical questions I’ve find are quite off-putting to candidates (and off-putting to me when I’ve been asked them like that).

                    As a side note, any company that interviews me in this conversational style (a conversation like a real human being) automatically gets pushed to the top of my list.

                    1. 4

                      Seconded. Soft interviewing can go a long way. “You put Ada and Assembler on your CV? Oh, you just read about Ada once and you can’t remember which architecture you wrote your assembly for?”

                      1. 3

                        I often flunk questions like that on things I know. This is because a question like that comes without context. If such a problem comes up when I’m building something, I have the context and then I remember.

                        1. 6

                          I don’t think any networking specialist would not know the difference between TCP and UDP, though. That sounds like a pretty clear case of someone embellishing their CV.

                          1. 4

                            So if you can’t whiteboard and you can’t talk about your experience, what options are left? Crystal ball?

                            1. 3

                              I like work examples, open ended coding challenges: Here’s a problem, work on it when you like, how you like, come back in a week and lets discuss the solution. We’ve crafted the problem to match our domain of work.

                              In an interview I also look out for signs of hostility on the part of the interviewer, suggesting that may not be a good place for me to work.

                        2. 5

                          A sample of actual work expected of the prospective employee is fair. There are pros and cons to whether it should be given ahead of time or only shown there, but I lean towards giving it out in advance of the interview and having the candidate talk it through.

                          Note that this can be a hard sell, as it requires humility on the part of the individual and the institution. If your organization supports an e-commerce platform, you probably don’t get to quiz people on quicksort’s worst-case algorithmic complexity.

                          1. 7

                            I certainly don’t have code just sitting around I could call a sample of actual work. The software I write for myself isn’t written in the way I’d write software for someone else. I write software for myself in Haskell using twenty type system extensions or in Python using a single generator comprehension. It’s for fun. The code I’ve written for work is the intellectual and physical copy of my previous employers, and I couldn’t present a sample even if I had access to it, which I don’t.

                            1. 5

                              Yup, the code I write for myself is either 1) something quick and ugly just to solve a problem 2) me learning a new language or API. The latter is usually a bunch of basic exercises. Neither really show my skills in a meaningful way. Maybe I shouldn’t just throw things on GitHub for the hell of it.

                              1. 4

                                Oh, I think you misinterpreted me. I want the employer to give the employee some sample work to do ahead of time, and then talk to it in person.

                                As you said, unfortunately, the portfolio approach is more difficult for many people.

                                1. 1

                                  I write software for myself in Haskell using twenty type system extensions or in Python using a single generator comprehension. It’s for fun.

                                  Perhaps in the future we will see people taking on side projects specifically in order to get the attention of prospective employers.

                              2. 3

                                I recently went through a week of interviewing as the conclusion of the Triplebyte process, and I ended up enjoying 3 of the 4 interviews. There were going to be 5, but there was a scheduling issue on the company’s part. The one I didn’t enjoy involved white board coding. I’ll tell you about the other three.

                                To put all of this into perspective, I’m a junior engineer with no experience outside of internships, which I imagine puts me into the “relatively easy to interview” bucket, but maybe that’s just my perception.

                                The first one actually involved no coding whatsoever, which surprised me going in. Of the three technical interviews, two were systems design questions. Structured well, I enjoy these types of questions. Start with the high level description of what’s to be accomplished, come up with the initial design as if there was no load or tricky features to worry about, then add stresses to the problem. Higher volume. New features. New requirements. Dive into the parts that you understand well, talk about how you’d find the right answer for areas you don’t understand as deeply. The other question was a coding design question, centered around data structures and algorithms you’d use to implement a complex, non-distributed application.

                                The other two companies each had a design question as well, but each also included two coding questions. One company had a laptop prepared for me to use to code up a solution to the problem, and the other had me bring my own computer to solve the questions. In each case, the problem was solvable in an hour, including tests, but getting it to the point of being fully production ready wasn’t feasible, so there was room to stretch.

                                By the time I got to the fourth company and actually had to write code with a marker on a whiteboard I was shocked at how uncomfortable it felt in comparison. One of my interviews was pretty hostile, which didn’t help at all, but still, there are many, far better alternatives.

                                1. 1

                                  I’m a little surprised that they asked you systems design questions, since I’ve been generally advised not to do that to people with little experience. But it sounds like you enjoyed those?

                                2. 1

                                  There are extensive resources to help with the evangelism side of things.

                                1. 6

                                  down and it looks like archive.org doesn’t have the page :(

                                  https://web.archive.org/web/*/riscv-basics.com

                                  anyone have a copy?

                                    1. 3

                                      Lobsters’ built-in “cached” button worked for me just fine: https://archive.is/https%3A%2F%2Friscv-basics.com%2F

                                      I wonder if they got embarrassed and took it down permanently.

                                      1. 2

                                        It works if you prepend “https://” to it: https://web.archive.org/web/*/https://riscv-basics.com

                                        There’s actually quite a few snapshot over less than 48 hours, I guess there were lots of people who though this might get taken down pretty quick.

                                      1. 15

                                        I’ve become more and more disillusioned with NixOS over the past couple of months. Packaging things that aren’t available, or even updating existing packages, has so many little undocumented gotchas that (I guess) they assume you’ll figure out reading from reading gh issues or random blog posts. It has actually stopped me working on a few different projects because it’s not worth figuring out how to package something.

                                        However, I don’t think I can go back to a traditional distro after tasting the stability and convenience of something like NixOS. Has anyone here tried both NixOS and GuixSD. or perhaps switched from one to the other?

                                        Guix seems so much better documented from the brief read though I’ve given it after seeing this. The docs just have so much detail.

                                        Also, I’d much rather learn a real language like scheme for making packages than the rather incomprehensible (at least to me) language that Nix invented.

                                        What are the downsides of Guix that I just haven’t seen yet?

                                        1. 9

                                          Guix has fewer packages, because they have a smaller community. Being a GNU project, they attempt to limit the amount of non-free, or license-incompatible, software as much as possible: using linux-libre, nearly no potential ZFS support, no Intel microcode, etc. If your hardware depends on a binary blob, you might have to jump through several hoops to get it working. As of 2018-07-06, they don’t have LVM support.

                                          That said, guix seems far better thought out than nix. It does not rely on a particular init ecosystem (cough, systemd, cough). It has more features available without installing additional packages, for example: guix import instead of the myriad of pypi2nix, nix-generate-from-cpan, etc packages that are separately written; guix environment makes creating an isolated container as easy as its normal environment isolation; etc. And guix is most certainly better documented.

                                          If you’re comfortable packaging software yourself (and don’t mind doing so), some of these problems could be fixable. You can keep (or contribute to) a non-free guix repository (such as these, but these do not seem to be well maintained, nor will the be approved of, probably). One could also use guix import to import from a local copy of nixpkgs (though such an import is imperfect, and might require manual maintenance), or run guix atop NixOS.

                                          Unfortunately, I needed a system that works with nearly-minimal hassle on my hardware, with my software, and that is what NixOS gave me. The nix language is quaint, and the reliance on bash and systemd rather annoying, but personally I can ignore that and use a working computer with a relatively nice environment management system.

                                          1. 2

                                            It does not rely on a particular init ecosystem You are referring to Guix, the package manager here, right? Because, as far as I understand, GuixSD, the Linux distribution does depend on https://www.gnu.org/software/shepherd/?

                                            1. 3

                                              I was referring to the fact that neither Guix nor GuixSD rely on systemd. But you are correct, as best as I can tell GuixSD seems to rely on Shepherd.

                                              Though maybe not all services seem to rely on it? Some of them don’t seem to mention shepherd at all, but I can’t tell whether or not that means anything because I’m not well versed in Guix scheme.

                                              1. 1

                                                https://github.com/guix-mirror/guix/blob/master/gnu/services/ssh.scm

                                                Here’s one example that clearly refers to shepherd. Is there any reason to believe that shepherd is better than systemd?

                                                1. 6

                                                  Three things, maybe:

                                                  • Shepherd doesn’t try to be more than an init system. Contrast to Logind, which GNOME depends on, which is tied to systemd. elogind had to be forked and extracted from systemd, because otherwise GNOME would not work without it. I don’t know of any end user applications that require shepherd to be the init system in any way that doesn’t resemble init system / daemon management usage.
                                                  • shepherd is also written in scheme, which means that Guix expressions can easily generate code per the user’s configuration for the shepherd file since you’re just going from scheme to scheme.
                                                  • I can’t remember if systemd can do this or not, but you can also run shepherd as a user to manage your user’s daemons (rather than the system-wide daemons). Convenient!
                                                  1. 1

                                                    I can’t remember if systemd can do this or not, but you can also run shepherd as a user to manage your user’s daemons

                                                    Yes, systemd can do that.

                                                    1. 1

                                                      I can’t remember if systemd can do this or not, but you can also run shepherd as a user to manage your user’s daemons

                                                      Systemd does have support for user services, without needing to start another daemon as your user.

                                                      1. 1

                                                        I should clarify that I meant being able to run one or more shepherd as a user being a feature :)

                                                    2. 5

                                                      Shepherd isn’t an ecosystem of things that come bundled together? It isn’t Linux specific? It doesn’t (yet) slowly overtake various other components of your system, such as udev? There are definitely reasons that I still believe that Shepherd is better than systemd.

                                                      However, nothing’s perfect. Upon a further examining of the documentation, it does seem that you are correct regarding Guix’s dependence on Shepherd: namely, all services do currently depend on it.

                                                2. 2

                                                  Thanks for that Guix on NixOS link. I actually installed GuixSD in a VM at work today and noticed there were quite a few packages missing that I would like to have, so that seems like a good way to get started making son new packages before I go all in on the OS.

                                                  1. 1

                                                    What is the status of Java especially maven dependencies of a project? (which doesn’t seem to be fixed in Nix yet)?

                                                1. 3

                                                  Minor correction in one example:

                                                  use crossbeam_channel as channel;
                                                  
                                                  // Create a non-buffered channel.
                                                  let (tx, rx) = channel::unbounded();
                                                  
                                                  // Create a buffered channel with a capcity of one.
                                                  let (s, r) = channel::bounded(1);
                                                  
                                                  [...]
                                                  

                                                  The first comment should be Create a buffered channel of unlimited capacity.. As you explain above this point, it would have to block when you send if it were unbuffered.

                                                  1. 1

                                                    Do you mean this with regard to the Go example? I think you’re right though and I’ll make that fix later.

                                                    1. 1

                                                      I meant in the first crossbeam-channel example.

                                                  1. 3

                                                    An especially eclectic collection of things this weekend for me.

                                                    A few social obligations, first, I’m going to finally be a good son and actually see my mother. It’s been far too long again. Second, pride is this weekend in my city, so I’ll be heading over to some friends’ place for an afternoon.

                                                    Between all that I’m working on making an enclosed spool holder for my 3D printer. I think I have the design mostly done, but I’m running into problems with it popping off part way through the print because it’s so large, so it’ll mostly be trying different tricks to get the PETG to stick to the bed better.

                                                    Printing stuff is a really bursty project though, so hopefully I’ll get some more done on my CoAP library. I got a couple PRs for improvements that has spurred me into getting back into working on that again.

                                                    Finally, I also picked up “ Hands-On Concurrency with Rust” by Brian L. Troutwine, so if the weather cooperates I’m hoping to get some hammock time in to do a first read through on some of that. I’m still in the intro chapter, but I’m really encouraged by how much technical detail there is already. I actually forgot it was a book about Rust for awhile with how much discussion there was about x86 & arm instructions and how concurrent programs behave at that level on each.

                                                    1. 2

                                                      Thanks for posting this. I’ve been meaning to get this on my phone for ages, this post was just the reminder I needed. Posted from my newly LineageOS’d/microG’d Nexus 5X.

                                                      1. 4

                                                        I don’t personally have any suggestions that haven’t already been mentioned, but you might want to contact the Rainforest Connection people and see if their stuff works for you. They’re streaming audio out of rainforests via cheap 2nd-hand cell phones and I think there was something with either bigger antennas for the phones or repeaters for the cell signal or something.

                                                        1. 3

                                                          Awesome! I’ve dropped them an email through their web form to see how they’re working it. Looks like they’re using much older gen phones as well as basic kits so might be a worthwhile avenue to look into how they’ve accomplished what they have (which is really cool from what i’ve read)

                                                        1. 9

                                                          Note: you may get the impression this is proxy’s fault, but it isn’t. Host: registry.npmjs.org:443 is, although unusual, a valid HTTP request. (Host: registry.npmjs.org is usual.) It’s NPM registry that is in violation of HTTP standard here.

                                                          1. 6

                                                            Huh, interesting, I definitely would have assumed that it would only include the “host”, but you’re totally right:

                                                            Host = "Host" ":" host [ ":" port ] ; Section 3.2.2

                                                            https://www.w3.org/Protocols/rfc2616/rfc2616-sec14.html#sec14.23

                                                            1. 2

                                                              That is kinda weird/interesting. If browsers did report the port, I could see mismatched Host header vs real port when behind a load balancer (typically handled by the load balancer adding X-Forwarded-For headers). But most browsers probably don’t do this, unless it’s a totally non-standard port?

                                                              1. 2

                                                                You can also mismatch TLS Server Name Indication and Host header. For example, nginx treats TLS and HTTP separately so it does not care if it mismatches.

                                                          1. 9

                                                            Here’s the RSS feed: https://us18.campaign-archive.com/feed?u=ab0f46cf302c0ed836e0bf0ad&id=56b5f64c5f

                                                            I still find this the best way for consuming periodical content. I can read it when I want, and not have it clutter my mailbox.

                                                            1. 1

                                                              While this will work, just keep in mind that there are plans for exclusive content that will not be available via RSS due to its limiting nature.

                                                              1. 2

                                                                Out of curiosity, what is more limiting about RSS than email? The only thing I’ve come up with so far is that I guess you could customize what is sent to each email address, but that doesn’t seem to apply to a newsletter anyway.

                                                                1. 1

                                                                  Customization is precisely my issue. The RSS feed will only render the issue as an anonymous reader, which removes any personalized messages I include as well as any exclusive content paying readers (will) have access to. Another issue on my end is that RSS subscriber numbers are not precise.

                                                                  To be clear though, I am in no way against RSS. In fact, the whole newsletter is based on my ability to read tons and tons of feeds. Just that Morning Cup of Coding is not (and will not be) designed for RSS, and thus I will not be actively promoting its use.

                                                                  1. 3

                                                                    You could require that RSS readers append a “token” to the URL; which would identify the reader and thus give them said personalized content.

                                                                    1. 2

                                                                      That could definitely work. Not sure how I can integrate that with MailChimp. I’ll give it a look this weekend. Thanks.

                                                                      1. 3

                                                                        You could always roll your own so you have more control:

                                                                        you’d still need something like SendGrid for delivery, but that’s not too hard either.

                                                                        1. 3

                                                                          Tbh, I don’t trust myself to build a software that sends emails to 3,5k readers :) But it’s definitely in the back of my mind because I still do a lot of things manually. I know about SendGrid and MailTrain, thanks for pointing out paperboy.

                                                            1. 7

                                                              Here’s a few that I use and fully recommend:

                                                              • Obsqr: a qr code scanner with sensible permissions.
                                                              • Riot.im: the most popular matrix client, currently.
                                                              • Tiny Tiny RSS: frontend for the self-hosted RSS reader of the same name. (Requires you to host a server.)
                                                              • StreetComplete: contribute to OpenStreetMap by helping fill in meta data that it can tell is missing or flagging inaccuracies.

                                                              And, actually, I’ve got a request: Does anyone have suggestions for a Free app that I can use to record GPS tracks? When my wife and I go hiking I like to record it, so looking for something that doesn’t depend on a data connection and it would be nice it if showed some stats about speed, elevation, etc and the track that has been recorded so far.

                                                              1. 6

                                                                I asked in my local OSM community and got the following responses:

                                                              1. 2

                                                                What exactly are these guys providing? It seems like they are providing a platform and some utility blocks–but how does that reduce the price down to $100?

                                                                1. 5

                                                                  The second version aims to service a 16 multi-block chip. [..] A 350umx350um block can be splitted in four, bringing down the price to 100 dollars per a 170umx170um block. [..] we foresee a crowdfunding campaign for the first oshpark-like chip in 2019.

                                                                  Sounds like they basically want to panalize silicon, the difference being that you get an IC with other people’s designs on it (possibly fused off?) So you all share the cost of what it costs to make the complete chip and are able to get a bit more scale out of it.

                                                                  1. 2

                                                                    Yea, looks like a half-way step between FPGA and full-wafer custom ASIC. You get utility stuff and interconnect standardised, but instead of a grid of LUTs, you get some fixed-size areas of full-custom silicon. Seems like an interesting idea.

                                                                1. 19

                                                                  However, Matrix developers have confirmed that the app in question will be based on the federated chat Matrix protocol (a more modern XMPP/Jabber competitor) and, more specifically, on the Riot client, which uses this protocol.

                                                                  Wonderful. Hopefully that means that the French gov’t will be helping to fund of Riot and/or Synapse. Heck, even if they make a competing client/server it’s still a win in my book. Open federated protocols are wonderful.

                                                                  1. 3

                                                                    6:37: Lights start dimming on. (30 minutes to full brightness)
                                                                    7:00: Wife’s alarm goes off, I start reading random crap from the internet.
                                                                    ~7:30: Out of bed into shower.
                                                                    ~7:45: Brew tea, mix together a lunch, clean apartment a bit.
                                                                    ~8:00: Walk outside and get on train. Then, read Lobsters/HN/RSS, drink tea, listen to music.
                                                                    ~9:00: Arrive at work, read more L/H/R if there’s no pressing work.
                                                                    10:00: Definitely start working if I haven’t already. Individual days vary a lot.
                                                                    if Wed || Fri: 11:30-12:00: Project sync meeting.
                                                                    if Tues: 13:30-14:00: Team sync meeting.
                                                                    if Thurs: 15:30: Beer:30 with coworkers.
                                                                    16:00: Head for train/bus, more reading L/H/R, more music.
                                                                    17:00: Get home, work on a project or just watch TV/movie if too tired from work.
                                                                    21:00: Bed time.

                                                                    Thankfully that’s all the more specific I can be about my actual working time. There’s no daily standups and nothing else overly rigid. It’s just “work on whatever there is to work on” for the most part.

                                                                    1. [Comment removed by author]

                                                                      1. 7

                                                                        First NixOS on prgmr, then Lobste.rs on NixOS! :)

                                                                        1. 4

                                                                          I haven’t received any reports of users running NixOS, but typically folks would only reach out to me i they were having a problem. You can certainly boot up a live rescue and run an install over the serial console. Depending on the distribution this either ‘just works’ or requires it be told the console is on the serial port.

                                                                          1. 4

                                                                            NixOS ISOs from their website do not enable the serial console by default, but building a custom ISO which does is easy enough. I did so a few days ago on Debian using nix to create an NixOS installer for my APU2:

                                                                            git clone --branch 18.03 --depth=1 https://github.com/NixOS/nixpkgs.git nixpgs
                                                                            cat > serial-iso.nix <<EOF
                                                                            {config, pkgs, ...}:
                                                                            {
                                                                              imports = [
                                                                                <nixpkgs/nixos/modules/installer/cd-dvd/installation-cd-minimal.nix>
                                                                                <nixpkgs/nixos/modules/installer/cd-dvd/channel.nix>
                                                                              ];
                                                                              boot.kernelParams = [ "console=ttyS0,115200n8" ];
                                                                            }
                                                                            EOF
                                                                            nix-build -A config.system.build.isoImage -I nixos-config=serial-iso.nix nixpkgs/nixos/default.nix
                                                                            
                                                                          2. 1

                                                                            I actually tried a few months ago, but gave up because I had thought I figured out it was impossible. Although, seeing the link that @alynpost just posted, I might give it another go when I have some free time.

                                                                            1. 6

                                                                              Some years ago, a friend taught me a simple trick which I used twice to install OpenBSD at providers where neither OpenBSD nor custom ISOs were directly supported: We would build or download a statically linked build of Qemu, boot the VPS into its rescue image and start Qemu with the actual hard disk of the VPS as disk and an ISO to boot from. Thats not too hard and works for pretty much everything where you got a rescue system with internet access. I guess it should work for NixOS too and maybe nix could even be used for the qemu build ;)

                                                                              1. 3

                                                                                If you want to give it a go and get stuck write support@prgmr.com and we’ll help you debug.

                                                                                1. 2

                                                                                  Thanks! I really should have been less lazy and just asked for help last time.

                                                                            1. 7

                                                                              Reading this gave me a fun New theory: Maybe the myth of the 10x programmer persists because companies that keep around jerks slowly lose all their programmers with better than average skill and are only left with those that can’t get jobs anywhere else very easily. Then the jerks really are 10x better than the new average at the company.

                                                                              1. 2

                                                                                10x this. in my experience, many of the folks cranking out tons of code and deliverables have the worst track record for nonfunctional requirements like usability, scalability, maintainability, and documentation. as a result, they quickly scare off everyone they frustrate and their cumulative touch surface on the codebase only reënforces the perception of their productivity.

                                                                                1. 1

                                                                                  :)) - I wouldn’t want to work for such a company

                                                                                1. 5

                                                                                  I still have yet to take the plunge on going full time on (or even ever charging anything for) any of my side projects, but, oh man, I can relate to some of the early stuff in this.