• 5 Posts
  • 643 Comments
Joined 5 years ago
cake
Cake day: May 31st, 2020

help-circle


  • I’m currently at the other end of this, in that I’m trying to implement caching for a build tool. And yeah, I do expect to be in for a world of pain.

    Biggest problem is that you cannot do caching correctly, unless you know all the inputs upfront. If the user decides they’ll use the CPU temperature while building their distribution artifact without telling you about it, you’re fucked.
    Or well, the user is fucked. Because their CPU temp will not update and they’ll never be told about it.

    So, the user needs to tell you about every single input, which makes it extremely verbose. I guess, that’s why so many build tools have their own custom APIs rather than using file APIs from the stdlib, because it allows you to register e.g. paths as an input, wherever they’re created…


  • I like the idea, but I wouldn’t really know how to put it into practice. It works quite well, if you’re using Python to automate, but if you’re using more dedicated tooling for CI/CD automation (à la Ansible, Puppet etc.) then those tend to not really have a way to pause execution until a user input happens. It’s kind of anti-thetical to their end goal…

    I guess, you could have a Python or Bash script, where each function just calls an Ansible task and once you’ve automated a chunk, you replace that with an Ansible playbook. But yeah, really not sure, if that’s terribly sexy in practice.


  • Yeah, I’m really wondering why they thought this was a good idea. My best guess is that they want to keep everything within one file, since it makes the script easier to deal with. But when automation actually starts being implemented, they want the functions for each task to be grouped (and I believe, Python doesn’t support inline modules), so they abuse classes for that…?
    Well, and I guess, it allows them to have pseudo-constants within each task, which don’t need to be explicitly passed around between functions.

    But yeah, really not a fan of needing this much boilerplate to start out with. In my opinion, the activation energy required to use this pattern instead of slapping down documentation needs to be as minimal as possible, otherwise folks will slap down documentation instead.









  • At $DAYJOB, we’re currently setting up basically a way to bridge an interface over the internet, so it transports everything that enters on an interface across the aether. Well, and you already guessed it, I accidentally configured it for eth0 and couldn’t SSH in anymore.

    Where it becomes fun, is that I actually was at work. I was setting it up on two raspis, which were connected to a router, everything placed right next to me. So, I figured, I’d just hook up another Ethernet cable, pick out the IP from the router’s management interface and SSH in that way.
    Except I couldn’t reach the management interface anymore. Nothing in that network would respond.

    Eventually, I saw that the router’s activity lights were blinking like Christmas decoration. I’m guessing, I had built a loop and therefore something akin to a broadcast storm was overloading the router. Thankfully, the solution was then relatively straightforward, in that I had to unplug one of the raspis, SSH in via the second port, nuke our configuration and then repeat for the other raspi.



  • Well, I happen to be lucky enough that this particular project is actually developed as part of my dayjob. And the other projects, if I’m honest, are just projects I developed to scratch my own itch and then uploaded onto Codeberg with a libre license. I haven’t really announced them anywhere, except to a few colleagues, so I basically never get suggestions there.

    But yeah, this project being part of my dayjob kind of makes it even more clear-cut that I’m not going to put in extra time to develop features that no one currently sponsors…


  • Got a comment last week on one of the open-source projects I’m contributing to. We have an issue open, documenting that we’d like to support a certain feature, and this person clearly took quite a bit of time to pull together information, which gets us over the first major hurdle for this feature.

    But also, this feature is really not the highest priority to us right now. Really had to stop myself from promising that we’d look into it in my response, because it is still quite a bit of work to actually make it a reality. I’m still new to all this, so I still have to learn to not feel bad about it. If they want to scratch their own itch, they’ll have to scratch it in full. That I’d review their code before merging, is honestly already quite a bit of effort put in by me for something that I don’t care to solve right now. That I take time to respond is basic decency, but still also uses up time. Really, I had not understood before, how much work it has to be for maintainers with an actually active community.




  • (Other than things like locked down smart phone bootloaders, but that’s got nothing to do with the FOSS part of this discussion.)

    See, I disagree on that. If I know something I could (help to) build will only ever be used by a few folks and can never help most people, then my motivation is significantly lowered. Well, unless I’m truly just scratching my own itch, but even then I might choose to not scratch my itch, because I’d rather quit using the platform, if possible.

    And then, yeah, what the other person said about financing.

    For Android, there are various small efforts in terms of forks, with the biggest being LineageOS. There are even some commercial efforts, like /e/OS. I think, Huawei also wanted to do a fork or something. No idea what happened with that.
    But yeah, none of these efforts are hard forks, which can change more than superficial stuff. And it’s not for a lack of desire, but because it’s just such a ridiculous uphill battle to try to get anything noteworthy changed. Many times, LineageOS (and its predecessor CyanogenMod) had some cool features, which they later had to scrap, because they needed to follow what Google was doing and their features wouldn’t work with that anymore. If they would’ve seen any chance of a hard fork working out, they probably would’ve tried to go that route.