• 0 Posts
  • 19 Comments
Joined 3 years ago
cake
Cake day: June 20th, 2023

help-circle
  • Well, yeah, that’s what Scrum is. From the guide which takes maybe 10 minutes to read

    Scrum Teams are cross-functional, meaning the members have all the skills necessary to create value each Sprint. They are also self-managing, meaning they internally decide who does what, when, and how.

    That’s not a throwaway sentence - it is fundamental to how scrum works and that is reinforced throughout the scrum guide.

    Every conversation about Agile and/or Scrum being “the worst”, after some prodding it turns out that their company has refused to read or implement one or several of the fundamental principles, often without even being aware that was an essential requirement. You’re baking a cake and you decided to not use any butter, that’s on you champ, don’t blame the fucking recipe.

    The biggest valid criticism of scrum is that the thing that makes it so great - its structural empowerment of individual teams - is also what makes it structurally incompatible with any traditional top-down management style. The company must fundamentally be (re-)organized to have a flat corporate structure within its R&D department - most are simply incapable of mustering the necessary changes, if only because too many middle managers’ jobs are at stake. So they call their middle managers “POs” or “Scrum Masters” and wonder why their version of Scrum sucks.



  • Ideally you’d use the docker executor with a dind service instead of docker commands in the shell. You’ll have better isolation (e.g. no conflicts from open port forwards) and better forward-compatibility (the pipeline won’t break every time a major upgrade is applied to the runner because the docker - especially compose - CLI is unstable).


  • For gitlab this is only correct with a shell executor which is to be avoided in the general case in favor of a docker or k8s executor for isolation&repeatability.

    Those you can actually run locally with gitlab-runner, but then you won’t have all your gitlab instance’s CI variables so it’s a PITA if you need a CI token which you probably do if you actually make decent use of gitlab’s features.

    In most cases I just end up committing my changes to avoid the headache. :!git commit --amend --no-edit && git push -f goes pretty dang fast and 60 % of the time third time’s the charm.




  • you’re at risk of becoming dependent, and not building the understanding you’ll need to make something that matters

    Could be – and has been – said about literally any abstraction. Some people still haven’t gotten over the fact that assembly is not the default system programming language anymore.

    For me vibe coding is more akin to vbscript or MS Access. It’s for people who neither know nor care about the “how” and don’t give a shit about quality, performance, security, or maintainability (i.e. people who have no interest in software development). It’s a market that’s looked down upon for many good reasons, but it does exist and it does serve a purpose for small-scale and low-stakes DIY automation. Unfortunately that purpose is a lot narrower than the marketing pitch, nevermind all the other deleterious problems with the AI industry as it exists today.


  • For systems programming it makes the most sense out of the languages you mentioned. Languages requiring a runtime (Java/Python) do not fill the bill for system tools IMO. Golang is more arguable, but its memory safety comes through GC which many systems programmers aren’t fans of for a variety of technical and personal reasons.

    Rust is meant to be what C++ would be if it were designed today by opiniated system developers and didn’t have to be backwards-compatible.

    Those are the technical arguments I would use in a corporate setting.

    All that aside, there’s personal preference, and my point is that for FOSS projects that matters too. Rust is fun in a brain-teasy kind of way in the same way that writing C is fun, but without nearly as many footguns. Golang is practical but arguably not as fun. That’s the same logic that draws many programmers to write Haskell projects.

    The story of the Fish shell illustrates it quite well; the project gained a lot of development attention and contributions when they decided to rewrite from C++ to Rust, where they achieved a stable release with feature-parity a few months ago. It would have been a remarkably dumb decision for a private company to make, but makes perfect sense when you are trying to attract free talent.


  • The counterpoint is that, especially with FOSS that does not receive much (if any) corporate backing, developer retention and interest is an important factor.

    If I’m donating some of my free time to a FOSS project I’d rather not slug through awful build systems, arcane mailing lists, and memory unsafe languages which may or may not use halfway decent - often homebrew - manual memory management patterns. If the project is written in Rust, it’s a pretty clear indicator that the code will be easily readable, compilable, and safer to modify.




  • Real answer: it depends.

    • Deleting a file in use: no problemo. File is removed from the directory immediately, but exists on disk until last program who had the file open closes. Everyone wins! (Unless you’re trying to free up space by deleting a huge file that’s being held open by a program and not understanding why the filesystem usage didn’t go down)
    • Unmounting a hard drive in use: Will error out similarly to Windows. lsof can tell you which process has which files open. There’s nuance with lazy unmounts and whatnot but that should not be used in most cases.

    Now in practice you should be wary of one very important thing that changes compared to Windows: Writes are asynchronous on Linux. First the kernel writes to RAM, then it flushes to disk at a later time for performance reasons (this is one of the reasons why writing a bunch of small files is many times faster on Linux than Windows). The upshot is that just because your file copy is “done” doesn’t mean you can just yank the USB cable. Always safely unmount before unplugging a storage device on Linux.


  • Being able to assign a nameserver per interface with a domain wildcard is a fucking godsend. I use it every day with a hook script because my job uses some private domains but I don’t want to send my entire DNS history through the VPN. Now ~job.com goes to tun0 and that’s the end of it.

    systemd-resolved is not perfect but with libnss’s overly rigid nature the only alternative for my use-case would be to recreate similar functionality to resolved with dnsmasq – which is just objectively worse especially when you want to use DHCP sometimes but not always. Why reinvent the wheel? resolved does its job and does it well. I had some issues with it a few years ago but have been using it for the past couple years without complaint.



  • It’s one of a plethora of scripting languages from the '90s which were designed to be the antithesis of “fail fast” and kept going no matter what.

    I guess what with C/C++ being the Mainstream Option at the time, not having to deal with a strict compiler must have felt like freedom. As someone who has had to maintain, cleanup and migrate ancient PHP code, I call it folly. That mindset of “let the programmer just do whatever and keep trucking” breeds awful programming practices and renders static analysis varying degrees of useless, which makes large-scale refactoring hard to automate which is just amazing when your major versions aren’t even remotely FUCKING BACKWARDS COMPATIBLE.

    PHP’s original design is just fundamentally atrocious. It became popular in large part because unmaintainable code is usually someone else’s problem.

    A language that I would definitely use for server-side rendering and that was already good from its first stable release is Go. It was thoughtfully designed and lends itself really well to static analysis, while still being easy to write and decently performant.


  • azertyfun@sh.itjust.workstolinuxmemes@lemmy.worldAny more?
    link
    fedilink
    arrow-up
    16
    arrow-down
    1
    ·
    7 months ago

    Classful IPv4 was obsoleted 32 years ago. Only 8 years left before it’s literally older than a standard career.

    It’s fascinating the sheer inertia that leads formally-trained IT professionals to use and perpetuate such profoundly useless and obsolete nomenclature. You’d think that having an incorrect use of the term “class A” and not having any use for classes B and C would tip off academia that they should cordon off classful networking to the “History of Computing” course next to ARPANET.

    Maybe next time someone refers to 10.0.0.0/8 as a Class A network I’ll refer to it as the ARPANET Network. That’s only very slightly more anachronistic (3 years).


  • Nowadays “buggy” is not how I’d describe it, though there were certainly teething issues at the beginning. By now other DEs have learned to deal with it.

    However it’s still true that the GTK4 design is ill-fitting, and very opinionated. Quite exemplary of this are the applications that hardcode the GTK file picker (like Firefox and chrome) even though it’s inferior in every way to the Qt file picker and forces the infuriating GTK “design” choice of doing fuzzy search when you type in the file list instead of jumping to the relevant file. Very annoying when dealing with organized directories especially when no other file browser on my system works that way!


  • I’ve wrapped plenty of sensitive electronics that I’d be comfortable throwing at a wall. Get a larger box than you think you need, some foam wrapping/bubble wrap from another package and use that to form a protective core. Fill the rest of the box with lightly crumpled scrap paper, or packing peanuts if you have them. It ain’t rocket science.

    You just have to assume in the first truck the package will sit underneath seven other heavy packages, while the second truck will be completely empty as your package rattles around and bangs against the walls. Anything else is foolishness, you know damn well those trucks aren’t individually fastening every box for a couple euros of gross revenue per delivery.