• 0 Posts
  • 16 Comments
Joined 1 year ago
cake
Cake day: June 12th, 2023

help-circle
  • It doesn’t necessarily work that way, though. If tests tell you you broke something immediately, you don’t have time to forget how anything works, so identifying the problem and fixing it is much faster. For the kind of minor bug that’s potentially acceptable to launch a game with, if it’s something tests detect, it’s probably easier to fix than it is to determine whether it’s viable to just ignore it. If it’s something tests don’t detect, it’s just as easy to ignore whether it’s because there are no tests or because despite there being tests, none of them cover this situation.

    The games industry is rife with managers doing things that mean developers have a worse time and have the opposite effect to their stated goals. A good example is crunch. It obviously helps to do extra hours right before a launch when there’s the promise of a holiday after the launch to recuperate, but it’s now common for games studios to be in crunch for months and years at a time, despite the evidence being that after a couple of weeks, everyone’s so tired from crunch that they’re less productive than if they worked normal hours.

    Games are complicated, and building something complicated in a mad rush because of an imposed deadline is less effective than taking the time to think things through, and typically ends up failing or taking longer anyway.



  • If past support questions showed up in searches, then more users would be able to help themselves and would never need to ask for support, so it wouldn’t matter as much what platform it happened on.

    Personally, I think it would be good if support discords were all bridged to matrix spaces (currently doable, but matrix needs locking down more than discord to stop spam as the tools to prevent and remove it are worse) and the matrix history was archived somewhere search engines could index it like mailing list archives are (currently not doable). That approach would let users use what they want without forcing anyone else to, and keeps self help as easy as it was in the days of forums.


  • I think you’ve misunderstood my complaint. I know how you go about composing things in a Unix shell. Within your post, you’ve mentioned several distinct languages:

    • sh (I don’t see any Bash-specific extensions here)
    • Perl-compatible regular expressions, via grep -P
    • printf expressions
    • GNU ps’s format expressions
    • awk

    That’s quite a lot of languages for such a simple task, and there’s nothing forcing any consistency between them. Indeed, awk specifically avoids being like sh because it wants to be good at the things you use awk for. I don’t personally consider something to be doing its job well if it’s going to be wildly different from the things it’s supposed to be used with, though (which is where the disagreement comes from - the people designing Unix thought of it as a benefit). It’s important to remember that the people designing Unix were very clever and were designing it for other very clever people, but also under conditions where if they hit a confusing awk script, they could just yell Brian, and have the inventor of awk walk over to their desk and explain it. On the other hand, it’s a lot of stuff for a regular person to have in their head at once, and it’s not particularly easy to discover or learn about in the first place, especially if you’re just reading a script someone else has written that uses utilities you’ve not encountered before. If a general-purpose programming language had completely different conventions in different parts of its standard library, it’d be rightly criticised for it, and the Unix shell experience isn’t a completely un-analogous entity.

    So, I wouldn’t consider the various tools you used that don’t behave like the other tools you used to be doing their job well, as I’d say that’s a reasonable requirement for something to be doing its job well.

    On the other hand, PowerShell can do all of this without needing to call into any external tools while using a single language designed to be consistent with itself. You’ve actually managed to land on what I’d consider a pretty bad case for PowerShell as instead of using an obvious command like Get-ComputerInfo, you need:

    (Get-WmiObject Win32_ComputerSystem).FreePhysicalMemory / 1024
    

    Even so, you can tell at a glance that it’s getting the computer system, accessing it’s free physical memory, and dividing the number by 1024.

    To get the process ID with the largest working set, you’d use something like

    (Get-Process | Sort-Object WorkingSet | Select-Object -Last 1).Id
    # or
    (Get-Process | Sort-Object WorkingSet)[-1].Id
    

    I’m assuming either your ps is different to mine, or you’ve got a typo, as mine gives the parent process ID as the second column, not the process’ own ID, which is a good demonstration of the benefits of structured data in a shell - you don’t need sed/awk/grep incantations to extract the data you need, and don’t need to learn the right output flag for each program to get JSON output and pipe it to jq.

    There’s not a PowerShell builtin that does the same job as watch, but it’s not a standard POSIX tool, so I’m not going to consider it cheating if I don’t bother implementing it for this post.

    So overall, there’s still the same concept of composing something to do a specific task out of parts, and the way you need to think about it isn’t wildly different, but:

    • PowerShell sees its jurisdiction as being much larger than Bash does, so a lot of ancillary tools are unnecessary as they’re part of the one thing it aims to do well.
    • Because PowerShell is one thing, it’s got a pretty consistent design between different functions, so each one’s better at its job as you don’t need to know as much about it the first time you see it in order to make it work.
    • The verbosity of naming means you can understand what something is at first glace, and can discover it easily if you need it but don’t know what it’s called - Select-String does what it says on the tin. grep only does what it says on the tin if you already know it’s global regular expression print.
    • Structured data is easier to move between commands and extract information from.

    Specifically regarding the Unix philosophy, it’s really just the first two bullet points that are relevant - a different definition of thing is used, and consistency is a part of doing a job well.


  • Powershell isn’t perfect, but I like it a lot more than anything that takes sh as a major influence or thing to maintain backwards compatibility with. I don’t think the Unix philosophy of having lots of small tools that do one thing and do it well that you compose together has ever been achieved as I think being consistent with other tools you use at the same time should be part of doing your thing well, and things like sed, grep and perl all having different regular expression syntax demonstrate inconsistency and are easy to find. I also like that powershell is so verbose as it makes it much easier to read someone else’s script without knowing much powershell, and doesn’t end up getting in the way of actually writing powershell as the autocomplete is really good. I like having a type system and structured data, too.

    Some of these things are brought to a unixier shell with nushell, but I’m not convinced it’ll take off. Even if people use it, it’ll be a long while before you Google a problem and the solution also includes a nushell snippet, whereas for any Windows problem, you’ll typically get a GUI solution and a powershell solution, and only a maniac would give a CMD solution.




  • There are other rarely-used C+±like languages that fit your criteria, and they basically all aim to eliminate the kind of thing I was talking about. If someone was used to one of those and tried picking up C++ for the first time, they’d probably end up with working, but unnecessarily slow C++, having assumed the compiler would do a bunch of things for them that it actually wouldn’t.

    The popular low-level systems programming languages that aren’t C++ are C and Rust. Neither is object-oriented. C programmers forced to use C++ tend to basically write C with a smattering of features that make it not compile with a C compiler, and produce a horror show that brings out the worst of both languages and looks nothing like C++ a C++ programmer would write, then write a blog post about how terrible C++ is because when they tried using it like C, it wasn’t as good at being C as C was. Rust programmers generally have past experience with C++, so tend to know how to use it properly, even if they hate the experience.


  • I’d say this is pretty dependent on the language. For example, with C++, you need to micromanage (or at least benefit from micromanaging) a lot of things that you can get away without knowing about at all with other languages. That stuff takes time to pick up if you’re self-teaching as you can write stuff that looks like it works without knowing its half as fast as it could be because you aren’t making use of move semantics, and if a colleague is teaching you, then that’s time they’re not spending directly doing their own work. On the other hand, someone with Typescript experience could write pretty decent Javascript from the get-go.



  • Shared components work brilliantly in a fantasy world where nothing uses new features of a library or depends on bug fixes in new versions of a library, and no library ever has releases with regressions or updates that change the API. That’s not the case, though, so often there’ll exist no single version of a dependency that makes all the software on your machine actually compile and be minimally buggy. If you’re lucky, downstream packagers will make different packages for different versions of things they know cause this kind of problem so they can be installed side by side, or maintain a collection of patches to create a version that makes everything work even though no actual release would, but sometimes they do things like remove version range checks from CMake so things build, but don’t even end up running.


  • The way I like to think of it is that non-copyleft licences are like giving everyone freedom by saying there are no laws - suddenly, you can do anything, and the government can’t stop you! However, other people can also do anything and the government can’t stop them, either, and that includes using a big net to catch other people and make them their slaves. The people caught in the nets aren’t going to feel very free anymore, and it’s not unreasonable to think that a lot of people will end up caught in nets.

    Copyleft licences are like saying there are no laws except you’re not allowed to do anything that would restrict someone else’s freedom. In theory, that’s only going to inconvenience you if you were going to do something bad, and leaves most people much freer.

    The idea is basically that you shouldn’t be able to restrict anyone else’s freedom to modify the software they use, and if you’re going to, you don’t get to base your software on things made by people who didn’t.



  • We only reimplemented the engine, not the game. You still need to own a copy of Morrowind so there’s something for the new engine to actually run. That said, it is possible for it to run other potentially-open-source games, such as OpenMW’s example suite (which isn’t finished enough to even call a game yet) or the Robowind demo (which I can’t remember the licencing details of) .


  • I’ve yet to find tooling that supports this. Clang format has a setting that looks like it does it, but actually does something else. If I have to press the spacebar a bunch of times each time I add an argument to a function, that’s a pain, and it’s a bigger pain to convince the people I’m working with that that pain’s less bad than using spaces everywhere and having the IDE deal with it.

    Until the people making editors and auto formatters acknowledge that the obvious most sensible whitespace style is even a thing, I’m forced to do something else and be really grumpy about it.


  • I’ve read that part of why GIMP is the way it is is because it’s meant to be a testbed for the GTK UI library, so features are added to use new UI elements as much as they are to aid photo manipulation, and in some cases it’s considered preferable to use a weird widget so it’s got a test case rather than whichever widget leads to the best UX. I don’t think I’ve ever looked for a more definitive source than a Lemmy/Reddit comment, but it’s at least consistent with my experience of using GIMP.