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

help-circle


  • AFAIK the Yuzu accusations of containing code from the Nintendo SDK haven’t been proven and also didn’t come out until well after Yuzu had already shut down (it was drama surrounding the Suyu “devs” that tried to succeed them). The whole case was about them profiting off of their patreon and optimizing their emulator for a game that hadn’t been released yet.

    It’s not that Yuzu used stolen code, it’s that they released updates that optimized for the leaked copies of Tears of the Kingdom, and charged money for it. If they waited to release builds until after the release, or if they had been doing it for free, they probably wouldn’t have been shut down. You might think this is a small difference, but it really isn’t because having the binary file of a game is not the same as having the code that made the binary. Realistically, if you are good enough at reverse engineering binaries that you can figure out the code well enough to make optimizations for it in the 2 weeks that the game was leaked for before it came out, you are probably getting paid enough that steaking your income on a community-driven emulator would be unthinkable.

    Either way, Ryujinx, which didn’t profit like Yuzu did (and is written in a completely different programming language from Yuzu, with a completely different set of developers) still got shut down. Nintendo isn’t doing it because of stolen code, they’re doing it because it’s an emulator that exists.









  • No, I’ve never touched my .config file for KDE directly (I have made settings changes, but none that would cause it to clear hotkeys), I just can’t set hotkeys without them clearing on reboot/session end. Apparently it’s a known problem: https://bugs.kde.org/show_bug.cgi?id=484682

    That report mentions 6.0.3 I’ve had this issue since I installed NixOS with plasma 5 last year and remember finding forum posts about it as well. It hasn’t been too much of a deal for me because the only thing I was using it for was remapping the Konsole shortcut to launch Kitty instead.

    Edit: also that issue I linked looks like it’s resolved in 6.0.5 but I’m in 6.0.5 right now and I just tried to set a keybind and it’s still clearing on reboot.




  • To me at least angular makes a bit more sense than React’s way of doing things does. React tries to be functional with its components and yet it seems like they end up basically trying to mimic classes with useState and useEffect. To me Angular’s class-based approach makes a bit more sense (though I am primarily interested in backend development more than frontend so that could be why)

    It does kind of fall into a lot of the traps of Object-Oriented programming though so I can see why a lot of people don’t like it




  • You know neovim can use the exact same LSPs (Language Server Protocol) for intellisense as VS Code right? There’s intellisense, git integration, code-aware navigation, etc. Neovim can be everything VS code is (they’re both just text editors with plugins), except Neovim can be configured down to each navigation key so it’s possible to be way more efficient in Neovim. It’s also faster and more memory edficient efficient because it isn’t a text editor built on top of a whole browser engine like VS Code is.

    I use a Neovim setup at home (I haven’t figured out how to use debugger plugins with Neovim and the backend I work on is big enough that print debugging endpoints would drive me insane) and I can assure you I have never given variable names one letter unless I’m dealing with coordinates (x, y, z) or loops (i, j) and usually in the latter scenario I’ll rename the variable to something that makes more sense. Also, we don’t do it to seem hardcore, it’s because there are actual developer efficiency benefits to it like the ones I listed above.

    By your own logic you “can’t be bothered” to learn how to edit a single config file on a text editor that has existed in some form for almost 50 years (vi). Stop making strawman arguments.


  • I was trying to look more into game dev crunch at Nintendo and the most recent articles I could find were about Mario 64, Ocarina of Time, Majora’s Mask (all for the Nintendo 64) and Metroid Prime (for the GameCube). From what I can tell all of their recent games have been delayed instead of forcing crunch.

    That being said the difference in work culture means they probably still have longer hours but they aren’t giving their developers actual PTSD like EA and Activision. It is really sad that the bar for AAA game devs is not having devs hospitalized from overworking. Hopefully more game dev and software dev companies can meaningfully unionize to combat that.


  • My bad, that’s on me, it looks like the C++ libraries I found use either templates or boost’s reflection. There might be a way to do it with macros/metaprogramming but I’m not good enough at C/C++ to know.

    I’m learning rust and C at the same time and was mixing up rust’s features with C’s. Rust’s answer to reflection is largely compile-time macros/attributes and I mistakenly assumed C’s attributes worked similarly since they have the same name.


  • See my other comment for more detials but it kind of destroys the type safety of the language. In Java for example, it lets you modify private/protected fields and call private/protected methods.

    It’s also slower than accessing a field normally since you need to do a string lookup (but slightly faster than a hashmap/dictionary) so if you use it over a large enough list it’ll cause slowdowns.

    Most use cases for it in Java/C# revolve around testing, serialization, and dynamic filtering/sorting. And most of those cases can be handled more safely using macros/attributes (EDIT: and templates as well, though those are also pretty painful to deal with) because that gets handled at compile-time in C/C++.


  • It’s pretty cool when you use it right but it’s also really easy to shoot yourself in the foot with, even by C++ standards. For example, in other languages (I’m coming from Java/C# which both have it) it lets you access private/protected fields and methods when you normally wouldn’t be able to.

    There’s also a noticeable performance penalty over large lists because you’re searching for the field with a string instead of directly accessing it.

    For the times it is necessary (usually serialization-adjacent or dynamic filtering/sorting in a table) to use reflection, it’s faster at runtime than converting an object to a dictionary/hashmap. However, 99% of time it’s a bad call.