aebletrae [she/her]

  • 0 Posts
  • 16 Comments
Joined 1 year ago
cake
Cake day: July 23rd, 2023

help-circle

  • The output here lets us know that systemd is running the service file and starting the script just fine. The echoed GPU temperature is making it to the journal, but the gpuTemp variable isn’t being updated (staying at 0) because of a problem executing nvidia-settings. Specifically, it wants a display: “The control display is undefined”.

    You could add a line to the service file:—

    Environment = DISPLAY=:0

    Although if echo DISPLAY in your terminal gives you a different value, use that. There’s a possibility that that will just push one error further down the line, but it’s something to try.

    Alternatively/additionally, you could try changing the User= line to your own username to see if it picks up the environment your manual executions work with.

    You aren’t the only one to run into problems trying to automate nvidia-settings. You might end up needing to track down an Xauthority file or use the display manager’s initialisation options.


  • If you had a book which had on its Contents page:

    Chapter 1 . . . . . . . . . . page 1

    and you crossed it out, then wrote:

    Chapter 1 . . . . . . . . . . page 1

    Chapter 2 . . . . . . . . . . page 50

    someone looking for Chapter 1 is still going to find all the text in the right place (as long as it was less than 50 pages).

    Changing the partitition table is like changing the Contents page; it doesn’t mess with the rest of the data. And if the new table points to the same place it did before, the data can still be found.

    That said, if the filesystem still thinks it’s 1TB, you may end up with future problems unless you resize it to fit the reduced partition.




  • “Instance” seems too jargon-y to me as well, and “proxy” is even worse. “Server” and “host” are probably a little more familiar, but are still technical language.

    Confusion doesn’t stem from individual words; people need explanations and examples, but, as an alternative to “instance”, if you want to extend the “communities” metaphor, then “society” as a cluster of communities is a natural option, particularly since it relates to the widely understood concept of social media. Since most people using the Internet also know what a web “site” is, you could use the sibilant linguistic association to help cement the notion:—

    Each society has its own web site, such as:

    • aussie.zone, where the communities relate to Australia;
    • programming.dev, where the communities discuss software development;
    • and lemmy.film, where the communites are about movies.

    You can choose which society you want to join, although some will ask you to fill out an application. Most societies have connections to others, meaning that you can discuss things with people who are part of different societies. Often, you’ll recognise them by their username saying that they’re at (@) another site. Not all societies get along with one another, so which one you join will also affect who you can talk with.

    Each society has its own rules it expects you to follow, whether you are a member of that society or just visiting.

    This kind of language seems more intuitive to me anyway, although when I’ve tried describing instances and federation before now, I’ve likened instances to countries:—

    You choose somewhere to live (and you can move later if you want). If there’s a cross-border agreement, then you can send messages back and forth between people in each place.

    but this has also meant stressing that your instance “country” doesn’t have to match where you physically live, so a more general term probably would have been more useful.





  • For someone seemingly so eager to try out new distros, I’m surprised you haven’t mentioned virtual machines. If the vibes are off, it’s a whole lot less disruptive to find out that way.

    Your experience with drivers won’t be quite the same as a bare-metal installation, but checking out software shouldn’t be a problem.



  • Admittedly, I have much less experience with i3, so I fired up a virtual machine with Debian 11.6 and installed i3 (along with lightdm) and was able to recreate the problem of .profile not being executed when logging in, so this isn’t unique to your particular setup. Great!

    Fortunately, this combination does execute commands in ~/.xsessionrc, so I added:—

    . $HOME/.profile
    

    to that file, then logged out and back in again. That did the trick for me, with the commands in .profile then successfully modifying the PATH variable (and writing additional lines to the execution log files), so I suggest you try creating/modifying .xsessionrc in the same way.


  • But those kinds of initialisations belong in .profile (or, if you’re using a weird desktop environment, its own configuration file), particularly if you want .desktop files to work. (In .bashrc, PATH will grow longer in each subshell, which shouldn’t cause problems but is wasteful.)

    So, what desktop environment (GNOME, KDE, Cinnamon, etc.) are you using?

    .profile is executed by login shells for the benefit of it and its subshells, and by DEs like Cinnamon for the benefit of .desktop launchers at login.

    So, have you logged out and back in again since adding these lines to .profile?

    And of course, the .profile has to be executed properly for its configuration to take effect, so it`s useful to know if the problem is with those specific lines, or the file as a whole.

    Add:—

    date >> ~/profile-execution-log-top.txt
    echo $PATH >> ~/profile-execution-log-top.txt
    

    to the top of .profile, and:—

    date >> ~/profile-execution-log-end.txt
    echo $PATH >> ~/profile-execution-log-end.txt
    

    to the bottom of .profile (use alternative paths as you see fit) to monitor that activity. You can test this by sourcing .profile but the real test is logging out and in again. Look at the time when you do this so you can correlate each action with each timestamp in the log files. If .profile is executed to completion, you should have two files with matching timestamps but different PATHs. If you don’t have a matching timestamp in the “end” log file, there’s a problem mid-execution. If neither file is being updated, .profile isn’t being executed at all.



  • Having thought about this some more with practicality and clarity thrown out the window in favour of abstractions, how about this?

    A game is a sequence of moves. Past moves are immutable, future moves unknowable; a singly linked list fits the bill here.

    Each move consists of a player token and a position. The position might ordinarily be thought of as a grid index but, as you point out, it could just as well be membership in one of the potentially winning lines. Either a move is part of one of these lines or it isn’t. This makes the position equivalent to a bit field. If each potential win line is distinct, they could indeed be held sparsely in a set.

    Checking for a win then consists of counting player tokens for each potential win line and checking for crossing the necessary threshold. Filter, sum, max, greater than?, any?

    I think this scheme would be applicable to arbitrary game boards, with none of it requiring mutation. Is that the kind of thing you were after? The reflection/rotation equivalence isn’t present here, but I still think that’s more an artefact of analysis, rather than a property of gameplay.


    1. The ordering of each row should not matter.

    This is true for your abstracted rows, but is maintaining eight sets of three square states, two or three of which must be updated with every move, really a better model than a single sequence of nine, where only one needs to change at a time? It’s more complex to think about, and is less efficient to update. When you throw in steps to canonicalize the rotation and reflection, which may produce different transformations from the input/output grid on the first three moves, you may need to change even more set items with each move.

    It’s true that, mathematically, the mapping from grid to sequence is arbitrary and the only thing that matters is consistency, but if you view programming languages as a way to communicate with humans, then clarity of purpose, rather than mathematical idealism, should be your goal. Use a nine-item array or a three-by-three nested array for the underlying storage and treat your eight win-checking sets as views into that more ordered structure. These views could well be functions that return a set and are themselves held in a set to be applied in any order. Similarly, treat canonicalization as another way to view the underlying board.

    You could sidestep the mutable borrowing by not mutating individual squares. Take a leaf from the functional-programming books and use a function that takes a board and a move and returns an entirely new board. Or takes a board and returns one of the abstracted row sets. There are only nine squares and nine moves. The win-checking views aren’t needed before move six. A bit of copying isn’t going be a problem.