Can’t help but think of a “senior dev” “explaining” (hing: brain-dumping) some bizarre reasoning why his unusable untested undocumented untyped API uses floats for item counts or something, and expecting the “junior dev” to just nod and keep that in their mind and adapt to it.
(Instead of making every possible excuse not to work with that API and instead doing something else where they can make some progress without going insane.)
As far as I can tell it separates the base os from user changes which could break things by forcing you to use containers by annoying you to death any time you’re trying to permanently install a package.
It’s fine but it seems better for servers than users.
Basically the idea is to separate your system packages and your applications.
The system packages are installed and updated “atomically” i.e. in transactions. If a transaction fails, results in a broken system, or you just don’t like it, you can rollback anytime.
Applications on the other hand are usually installed in a containerized form. Basically, flatpak. You should avoid installing applications through the system package manager.
CLI apps is where it all gets interesting, and usually people use distrobox, docker/podman or toolbx to run stuff in containers. Although the universal blue project comes with brew prepackaged for when you want CLI apps installed system-wide without juggling containers.
The benefit is that your OS and your apps are separate. No dependencies breaking or conflicting. And if something does break, well just roll back.
I think some of these replies have perhaps missed the powerful idea that made me fall in love with Eelco Dolstra’s idea. Here’s what won me over.
For example: THE main feature is that you could have a different version of say Python (for the sake of this example) installed for each dependency in your system. Let’s say you had Brave working with one version of Python and another piece of software needed a previous version of Python. In an FHS style system, this would be challenging and you’d have to manually patch things to make sure the dependencies didn’t step on eachother. When you updated, your patches would likely have to be changed as well. So, system administration and updating can really break things.
In a Nix store where things can be content-addressed and linked by symlinks to their specific dependencies, they would just work alongside each other due to their unique, hash based folder locations. Each folder in the Nix store is named based on the sha256 hash of that piece of software’s ENTIRE dependency graph, which has powerful implications.
Because of this hash, they’re effectively hermetically sealed from each other and cannot step on each other. The software in the Nix store talks to eachother through symlimks that were made upon compilation of the system.
This is the very definition of Nix and taken far enough to define a whole OS is SUPER powerful concept.
Shoving your entire system config into a couple DSL files is elegant? Sorry, I’ll stick to OpenBSD’s ports system and periodic rsync backups, that give me all the same benefits without the mountain of XY problems. Gentoo would also like a word, but they’re too busy recompiling all of llvm with one build flag changed to give input. Hope you never have to use anything other nix, since you’ve spent all your time learing to configure an abstraction layer instead of interfacing with the real underlying tooling.
I’m not familiar with ports, does it provide an easy way to install packages of a particular version? Is it OpenBSD only, or just a system of installing things?
I’ve got no dog in the race as of yet, I’ve bounced off of nixos a few times because of the general lack of consistency from one package to the next in terms of configuration options made available in the Nix language.
Genuinely curious about how it compares. The nix package manager seems fairly promising, even on non-Nix systems, if I could ever convince myself I needed it
I’m not familiar with ports, does it provide an easy way to install packages of a particular version? Is it OpenBSD only, or just a system of installing things?
OpenBSD’s ports are just a collection of perl scripts and makefiles managed by a VCS (usually CVS though there are mirrors). Due to how recursive CVS works, you can easily update any part of the tree to a different commit/tag.
<span style="color:#323232;">$ cd ${PORTSROOT}/games/stone-soup
</span><span style="color:#323232;">$ cvs up -CPd -D </span><span style="color:#183691;">'some date_spec' </span><span style="font-style:italic;color:#969896;">#or -r some_tag
</span><span style="color:#323232;">$ make install
</span><span style="color:#323232;">$ヽ༼ຈل͜ຈ༽ノ enjoy your old or backported videos games
</span>
very scriptable, should be easy to figure out how to automate this should you need to.
For a university assignment, I built a compiler for x86; I cheated a bit by relying on LLVM, but it gave me a better understanding of the architecture. I also developed emulators for the NES (Ricoh 2A03) and RISC-V (RV32I) as a hobby. For the latter, I implemented it in FPGA.
OS and embedded dev here. I use assembly all the time. I’ve even worked on firmware that was entirely in assembly of strict requirements that couldn’t be met in C.
Also even machine code hides a lot about how the underlying machine works so if you really want to do computing from scratch you really do hate to invent the universe because there’s abstractions all the way up the hardware stack just like there is in software.
Not only C, I’ve had experiences with real time applications in Angular and React pushing like 100 updates a second and it’s really easy to fuck something up that will trigger change detection and subsequent calls to death and create a scenario like that.
How often is something is simplified with reactivity? Who though the web needs reactivity? When I go to the steam page of a game there’s no more than one thing which needs to react to my action. When I hover over a game a new div should appear and nothing else needs to react to it. I clearly don’t get it
It depends on the type of application and size. For your typical business app / backoffice with tons of fields on the same page and real time data reactivity makes sense, otherwise it doesn’t.
Just started a new job last week. Ive been in the industry for 3 years so not completely junior but getting in to a new codebase is always rough. Especially when only 1 huge library file is documented, every component is cluttered af and most variables and parameter names are 1 character long.
Doesnt help that functions are 100 lines either when each the parameter names makes the logic incomprehensible.
programmerhumor
Oldest
This magazine is from a federated server and may be incomplete. Browse more on the original instance.