Skip Navigation
For a game that turns 40 years old next month, it's unreal what we are learning about Tetris
  • Its a classic conflict of interests. But I believe he is a sportsman guy and truly was happy for the kid. Kinda felt bad though, but this is how things goes. Either way, congratz to both.

  • [Solved] Subclassing pathlib.PosixPath broken since Python 3.12 (actually its fixed, but workaround broken)
  • The other person got me the solution. __new__() is no longer needed to be overwritten anymore.

  • My Linux Command Line Tools
  • I've seen this before. It's a nice visualization. As for the "biggest" script, its not as slow as you think. It's a single du call (alongside cheap sort, head and tac) and therefore quite fast. In example in my ~/Documents directory is almost 1 TB big and running time biggest Documents executes it in almost 2 seconds (for the first time after a reboot). Subsequent calls are quicker, 0.6s and then 0.07s.

    Also I like the output of the files or folders and I can even use commandline arguments like biggest Documents/*.txt in example. So for me this is enough and exactly what I need.

  • [Solved] Subclassing pathlib.PosixPath broken since Python 3.12 (actually its fixed, but workaround broken)
  • I think in Python 3.11 and prior overriding new was needed in order to subclass it correctly, because it was buggy until 3.12. This was a workaround, if I remember correctly. I already tried without new and setting self__source, but couldn't make it work. I was close!

    With your suggestion it works now! I will need to test the app a bit now and if everything looks fine, will update the repository. Did exactly what you said and replaced this part:

    # class File(PosixPath):
    #     def __new__(cls, *args: Any, **kwargs: Any) -> Any:
    #         return cls._load_parts(args).expanduser().resolve()  # type: ignore
    #
    #     def __init__(self, source: str | Path, *args: Any) -> None:
    #         super().__init__()
    #         self.__source = Path(source)
    #
    class File(PosixPath):
        def __init__(self, source: str | Path, *args: Any) -> None:
            self.__source = Path(source)
            super().__init__(Path(source, *args).expanduser().resolve())
    
    

    Thank you for the help and solution!

    Edit: Forgot to answer your question. This could work without subclassing too off course, but doing it this way makes it more clean in my opinion. It's the natural way to me to extend functionality and use the extended version for the purpose its designed to. It's not strictly required and I would have done it otherwise too, if this was problematic and not working.

  • [Solved] Subclassing pathlib.PosixPath broken since Python 3.12 (actually its fixed, but workaround broken)
  • From https://github.com/python/cpython/blob/3.12/Lib/pathlib.py

    class PosixPath(Path, PurePosixPath):
        """Path subclass for non-Windows systems.
    
        On a POSIX system, instantiating a Path should return this object.
        """
        __slots__ = ()
    
        if os.name == 'nt':
            def __new__(cls, *args, **kwargs):
                raise NotImplementedError(
                    f"cannot instantiate {cls.__name__!r} on your system")
    

    Which sub classes PurePosixPath, which itself is basically just PurePath with a Posix flavour to it. And Path itself is PurePath as well. Not sure if I should copy paste them here.

    Edit: So I added these to my reply:

    PurePath

        def __new__(cls, *args, **kwargs):
            """Construct a PurePath from one or several strings and or existing
            PurePath objects.  The strings and path objects are combined so as
            to yield a canonicalized path, which is incorporated into the
            new PurePath object.
            """
            if cls is PurePath:
                cls = PureWindowsPath if os.name == 'nt' else PurePosixPath
            return object.__new__(cls)
    
    
        def __init__(self, *args):
            paths = []
            for arg in args:
                if isinstance(arg, PurePath):
                    if arg._flavour is ntpath and self._flavour is posixpath:
                        # GH-103631: Convert separators for backwards compatibility.
                        paths.extend(path.replace('\\', '/') for path in arg._raw_paths)
                    else:
                        paths.extend(arg._raw_paths)
                else:
                    try:
                        path = os.fspath(arg)
                    except TypeError:
                        path = arg
                    if not isinstance(path, str):
                        raise TypeError(
                            "argument should be a str or an os.PathLike "
                            "object where __fspath__ returns a str, "
                            f"not {type(path).__name__!r}")
                    paths.append(path)
            self._raw_paths = paths
    

    Path

    
        def __init__(self, *args, **kwargs):
            if kwargs:
                msg = ("support for supplying keyword arguments to pathlib.PurePath "
                       "is deprecated and scheduled for removal in Python {remove}")
                warnings._deprecated("pathlib.PurePath(**kwargs)", msg, remove=(3, 14))
            super().__init__(*args)
    
        def __new__(cls, *args, **kwargs):
            if cls is Path:
                cls = WindowsPath if os.name == 'nt' else PosixPath
            return object.__new__(cls)
    
  • [Solved] Subclassing pathlib.PosixPath broken since Python 3.12 (actually its fixed, but workaround broken)

    Solved: Thanks to a user with this reply: https://programming.dev/comment/10034690

    ---

    cross-posted from: https://beehaw.org/post/13901165

    > Hi all. I have a little problem and don't know how to solve. A CLI program in Python is broken since Python 3.12. It was working in Python 3.11. The reason is, that Python 3.12 changed how subclassing of a pathlib.Path works (basically fixed an issue), which now breaks a workaround. > > #### The class in question is: > > python > class File(PosixPath): > def __new__(cls, *args: Any, **kwargs: Any) -> Any: > return cls._from_parts(args).expanduser().resolve() # type: ignore > > def __init__(self, source: str | Path, *args: Any) -> None: > super().__init__() > self.__source = Path(source) > > @property > def source(self) -> Path: > return self.__source > > @property > def modified(self) -> Time: > return Time.fromtimestamp(os.path.getmtime(self)) > > @property > def changed(self) -> Time: > return Time.fromtimestamp(os.path.getctime(self)) > > @property > def accessed(self) -> Time: > return Time.fromtimestamp(os.path.getatime(self)) > > # Calculate sha512 hash of self file and compare result to the > # checksum found in given file. Return True if identical. > def verify_sha512(self, file: File, buffer_size: int = 4096) -> bool: > compare_hash: str = file.read_text().split(" ")[0] > self_hash: str = "" > self_checksum = hashlib.sha512() > with open(self.as_posix(), "rb") as f: > for chunk in iter(lambda: f.read(buffer_size), b""): > self_checksum.update(chunk) > self_hash = self_checksum.hexdigest() > return self_hash == compare_hash > > > #### and I get this error when running the script: > > > Traceback (most recent call last): > File "/home/tuncay/.local/bin/geprotondl", line 1415, in > sys.exit(main()) > ^^^^^^ > File "/home/tuncay/.local/bin/geprotondl", line 1334, in main > arguments, status = parse_arguments(argv) > ^^^^^^^^^^^^^^^^^^^^^ > File "/home/tuncay/.local/bin/geprotondl", line 1131, in parse_arguments > default, status = default_install_dir() > ^^^^^^^^^^^^^^^^^^^^^ > File "/home/tuncay/.local/bin/geprotondl", line 1101, in default_install_dir > steam_root: File = File(path) > ^^^^^^^^^^ > File "/home/tuncay/.local/bin/geprotondl", line 97, in __new__ > return cls._from_parts(args).expanduser().resolve() # type: ignore > ^^^^^^^^^^^^^^^ > AttributeError: type object 'File' has no attribute '_from_parts'. Did you mean: '_load_parts'? > > > #### Now replacing _from_parts with _load_parts does not work either and I get this message in that case: > > > Traceback (most recent call last): > File "/home/tuncay/.local/bin/geprotondl", line 1415, in > sys.exit(main()) > ^^^^^^ > File "/home/tuncay/.local/bin/geprotondl", line 1334, in main > arguments, status = parse_arguments(argv) > ^^^^^^^^^^^^^^^^^^^^^ > File "/home/tuncay/.local/bin/geprotondl", line 1131, in parse_arguments > default, status = default_install_dir() > ^^^^^^^^^^^^^^^^^^^^^ > File "/home/tuncay/.local/bin/geprotondl", line 1101, in default_install_dir > steam_root: File = File(path) > ^^^^^^^^^^ > File "/home/tuncay/.local/bin/geprotondl", line 97, in __new__ > return cls._load_parts(args).expanduser().resolve() # type: ignore > ^^^^^^^^^^^^^^^^^^^^^ > File "/usr/lib/python3.12/pathlib.py", line 408, in _load_parts > paths = self._raw_paths > ^^^^^^^^^^^^^^^ > AttributeError: 'tuple' object has no attribute '_raw_paths' > > > #### I have searched the web and don't understand how to fix this. Has anyone an idea what to do?

    0
    [Solved] Subclassing pathlib.PosixPath broken since Python 3.12 (actually its fixed, but workaround broken)

    Solution was quite easy. Thanks to the user reply here: beehaw.org/comment/3535588 or programming.dev/comment/10034690 (Not sure if the links actually work as expected...)

    ---

    Hi all. I have a little problem and don't know how to solve. A CLI program in Python is broken since Python 3.12. It was working in Python 3.11. The reason is, that Python 3.12 changed how subclassing of a pathlib.Path works (basically fixed an issue), which now breaks a workaround.

    The class in question is:

    ```python class File(PosixPath): def new(cls, *args: Any, **kwargs: Any) -> Any: return cls._from_parts(args).expanduser().resolve() # type: ignore

    def init(self, source: str | Path, *args: Any) -> None: super().init() self.__source = Path(source)

    @property def source(self) -> Path: return self.__source

    @property def modified(self) -> Time: return Time.fromtimestamp(os.path.getmtime(self))

    @property def changed(self) -> Time: return Time.fromtimestamp(os.path.getctime(self))

    @property def accessed(self) -> Time: return Time.fromtimestamp(os.path.getatime(self))

    # Calculate sha512 hash of self file and compare result to the # checksum found in given file. Return True if identical. def verify_sha512(self, file: File, buffer_size: int = 4096) -> bool: compare_hash: str = file.read_text().split(" ")[0] self_hash: str = "" self_checksum = hashlib.sha512() with open(self.as_posix(), "rb") as f: for chunk in iter(lambda: f.read(buffer_size), b""): self_checksum.update(chunk) self_hash = self_checksum.hexdigest() return self_hash == compare_hash ```

    and I get this error when running the script:

    Traceback (most recent call last): File "/home/tuncay/.local/bin/geprotondl", line 1415, in sys.exit(main()) ^^^^^^ File "/home/tuncay/.local/bin/geprotondl", line 1334, in main arguments, status = parse_arguments(argv) ^^^^^^^^^^^^^^^^^^^^^ File "/home/tuncay/.local/bin/geprotondl", line 1131, in parse_arguments default, status = default_install_dir() ^^^^^^^^^^^^^^^^^^^^^ File "/home/tuncay/.local/bin/geprotondl", line 1101, in default_install_dir steam_root: File = File(path) ^^^^^^^^^^ File "/home/tuncay/.local/bin/geprotondl", line 97, in __new__ return cls._from_parts(args).expanduser().resolve() # type: ignore ^^^^^^^^^^^^^^^ AttributeError: type object 'File' has no attribute '_from_parts'. Did you mean: '_load_parts'?

    Now replacing _from_parts with _load_parts does not work either and I get this message in that case:

    Traceback (most recent call last): File "/home/tuncay/.local/bin/geprotondl", line 1415, in sys.exit(main()) ^^^^^^ File "/home/tuncay/.local/bin/geprotondl", line 1334, in main arguments, status = parse_arguments(argv) ^^^^^^^^^^^^^^^^^^^^^ File "/home/tuncay/.local/bin/geprotondl", line 1131, in parse_arguments default, status = default_install_dir() ^^^^^^^^^^^^^^^^^^^^^ File "/home/tuncay/.local/bin/geprotondl", line 1101, in default_install_dir steam_root: File = File(path) ^^^^^^^^^^ File "/home/tuncay/.local/bin/geprotondl", line 97, in __new__ return cls._load_parts(args).expanduser().resolve() # type: ignore ^^^^^^^^^^^^^^^^^^^^^ File "/usr/lib/python3.12/pathlib.py", line 408, in _load_parts paths = self._raw_paths ^^^^^^^^^^^^^^^ AttributeError: 'tuple' object has no attribute '_raw_paths'

    I have searched the web and don't understand how to fix this. Has anyone an idea what to do?

    8
    My Linux Command Line Tools
    thingsiplay.game.blog Linux Command Line Tools

    A short overview about some of my command line scripts and applications. I am someone who uses command line applications in the terminal and through scripting a lot. And thus results in many aliase…

    Linux Command Line Tools

    A short list with categories of my smol terminal focused tools, scripts and functions I have created over the years. There are some general purpose and very specific ones. This list was needed, because in Github it was a bit cluttered. Maybe, just maybe, you find something useful or inspiring in there.

    2
    Question: How does one open source their stuff?
  • Open source software literally means that the source code is available to anyone. In GitHub, that just means that your repo is public rather than private. But your method technically doesn’t matter. You could publish to a forum if you wish. That’s still open source!

    That's debatable. Open Source is not defined being publicly available, that would be just Source Available, you can look at it. Being Open Source is defined by its license. If no one has the right to make changes to the software, then its not Open Source. The definition you gave is your definition (and probably by many other). At the same time, there are other definitions too and who says one of them is the only correct one?

    Without a license permitting the usage of the Source Code, its not open, its closed source (closed to edit and use). I know its debatable, I said it already, but that's the reason why we (or I) debate. In example, a software that is Open Source does not need to publish it publicly. It just needs to open it for the people who in example purchase the software. If nobody publishes the code to the internet in the public, it is still Open Source to the people who use it; not closed source anymore (if the license is playing nice).

  • For a game that turns 40 years old next month, it's unreal what we are learning about Tetris
  • Also recommended to watch: The History of Tetris World Records

    1. 2:32 Chapter 1
    2. 11:39 Chapter 2
    3. 16:28 Chapter 3: ENEOOGEZ
    4. 25:48 Chapter 4: Hypertapping
    5. 31:45 Chapter 5: The Next Generation
    6. 49:00 Chapter 6: Rolling
    7. 1:00:27 Chapter 7: Vaulting & Scaling
    8. 1:15:25 Chapter 8: Colors
    9. 1:25:00 Chapter 9: Crash
  • This week in KDE: all about those apps
  • I didn't change from any desktop environment. But I think that I also use Gnome applications, not sure. cleaning .config or .local directory is not an option for me.

  • Did I just solve the packaging problem? (please feel free to tell me why I'm wrong)
  • Why would PKGBUILD solve the issue? The packaging issues are still the same, as every distro has different package names, revisions and not all packages in their repository. The dependencies are not solved with this.

  • Apple limits third-party browser engine work to EU devices
  • Same for side loading apps. If the rest of the world / governments does not care, then Apple won't care in the rest of the world too.

  • This week in KDE: all about those apps
  • I don't use SMB. It's SSH connection using Files transferred over Shell protocol (FISH).

  • This week in KDE: all about those apps
  • One of my favorite blogs recently.

    A few weeks ago, some of us discovered that KDE apps just looked terrible when run in GNOME.

    They should test this much more often and frequently. Unlike Gnome, KDE do actually care about their users, not just about themselves.

    Dolphin now gives you the option to enable previews for folders on remote locations.

    I wouldn't use this for internet connections, but when accessing my Steam Deck through Dolphin on my PC, then this could be fast enough for smaller directories I guess. Meaning as long as the remote location is in the LAN and not the internet, the performance wouldn't be too bad I guess.

    Discover now handles the case where one of your Flatpak apps has been marked as “end of life” and replaced with another one; it gives you the opportunity to switch to the new one, or cancel and keep using the old one anyway

    Wow! This is a topic we discussed a lot in the web. Not for Flatpaks but often for native package managers like in Fedora or Archlinux, where no longer supported programs are still in the repository (such as neofetch). I still wish this check from Discovery app would be on the side of the package managers+repository information like Flatpak+Flathub itself, as I do this in commandline only. But very nice to see how KDE improves on this front.


    BTW a personal little problem from me: My Application Launcher menu is very slow with bad performance. It always freezes for half a second goes loads when I move mouse and freezes again. Does anyone experience this issue?

  • EA SPORTS WRC will be adding EA anticheat, game will not playable any more. On ProtonDB game is rated Platinum
  • This is the equivalent of Sony requiring PSN account in countries where no PSN account exist. Just on a different technical level, but with the same outcome. This should be illegal.

  • Is there a way to disable the "Restart to Keep Using Firefox" page?
  • You can enable saving the tabs when closing Firefox. I use Firefox like this since a decade or so. Open Settings > General > Startup and check option "Open previous windows and tabs" (its the first top most option on that page).

    You can also open the Menu > History > "Recently Closed Windows" and probably open the last window this way? I don't know if this works after an update. But in the History menu could also be an option "Restore Previous Session", when a session is available (maybe after an update??).

    Honestly, I don't know why Firefox does not ask to reload tabs, after restart of an update. I think it's an oversight.

  • Reddit’s deal with OpenAI will plug its posts into “ChatGPT and new products”
  • Well the companies and developers don't decide for every single material. In example what I expect is, that they program the scraper with rules to respect licenses of individual projects (such as on Github probably). And I assume those scraper tools are AI tools themselves, programmed with AI tool assist on top of it. There are multiple AI layers!

    At this point, I don't think that any developer knows exactly what the AI tools are fed with, if they use automatically scraped public sources from the internet.

  • Reddit’s deal with OpenAI will plug its posts into “ChatGPT and new products”
  • The license does not apply to posts and replies in Reddit, right? Thank god I created a blog to post about any stuff that I want, without license or restrictions from Reddit. Before the AI breakthrough and what happened to Reddit. But even if so, do AI tools understand such a license text and evaluate if they can or cannot use the material?

  • Reddit’s deal with OpenAI will plug its posts into “ChatGPT and new products”
  • Reddit has become one of the internet’s largest open archives of authentic, relevant, and always up-to-date human conversations about anything and everything.

    Reddit CEO Steve Huffman says

    But refuses to pay the users or at least moderators who build Reddit to what it is now. Instead, it pushes more advertisements and sells data to AI companies for millions of Dollars.

  • Half Of PlayStation Players Still Haven't Upgraded To PS5
  • All the greatest recent games run super well on the Steam Deck

    I get what you are telling here, but it's not 100% accurate, generally speaking. It might be true for you personally. I own a first gen Steam Deck myself and its just a complementary hardware to my PC (and wonderful at that). It does not run all greatest games at all or in some cases limited and problematic. So "super well" is a little bit exaggerated, but that does not take away how fantastic the device is.

  • Half Of PlayStation Players Still Haven't Upgraded To PS5
  • Most people don't need the newest and expensive tech. From the last 30 days of active games on Playstation brand, here a split PS3/PS4/PS5 (I just show a ratio that is set in relation to the numbers of players for the game), meaning left side is older console:

    https://ps-timetracker.com/statistic/last-30-days

    • - / 42 / 14 Fortnite (3 times)
    • - / 3 / 2 Roblox (1.5 times)
    • 0 / 33 / 9 Minecraft** (3.7 times)
    • - / 14 / 9 Cod:MW2 (1.6 times)
    • - / 38 / 12 GTA V (3.2 times)
    • - / 23 / 8 Rainbow Siege (2.9 times)
    • - / 26 / 8 Apex Legends (3.3 times)
    • - / 17 / 7 Overwatch 2 (2.4 times)
    • - / 1 / 1 EA Sports FC 24 (1 time)

    Edit: I have added simple math result in how many times the PS4 player base is big as the PS5 player base. Just out of curiosity and to provide a quicker way of scanning through the list.

    (**ps3 players almost at 0 level for this game)

    As you can see, all games are available for PS4 and they run decent enough, are multiplayer games and the new consoles do not offer anything substantial for these kind of players.

  • Grand Theft Auto VI Now Targeting Fall 2025 Release, Take-Two Confirms
  • I own an Xbox Series (got it for free, you can't argue with that), but still will wait for the PC port. I don't think it will take 3 years before it comes to PC, especially not in todays landscape with a strong PC in Gaming overall. They surely are already working in a way to enable such a port. So 1 year from console release date seems to be realistic.

    ... who am I kidding to?

  • fpath v0.8: Reformat and stylize file path like text output.
    github.com GitHub - thingsiplay/fpath: Reformat and stylize file path like text output.

    Reformat and stylize file path like text output. Contribute to thingsiplay/fpath development by creating an account on GitHub.

    GitHub - thingsiplay/fpath: Reformat and stylize file path like text output.

    !

    A week ago I started a little script to format the output of file and path listings from other programs. It got a little bit out of hand and I implemented lot of advanced features into the fmt commands; kind of a sub language to define how the output should be formatted and structured. Entire idea is to give it paths, process the stream (not the file content itself, but the path representing a file) and output them again.

    fpath accepts two type of input: a) either as arguments like fpath *.txt or b) from stdin like ls -1 | fpath . With additional options and commands the output can be colored and reformatted to something entirely different. In example with -F option the advanced formatting is possible, such as fpath -F '{.size} {name}' as a simple example.

    There is lot of functionality (based on Python, yes this is a Python script), such as {reverse}{name}{/reverse} to reverse font color and background of the segment that is enclosed by the command, a slice to get a subset as a range from the entire path {-1:}, or {center:80}text{/center} to add spaces to get centered text, or just {ext} to output the extension, {mime} to output the file mime type, or even execute arbitrary programs {!grep:a}{path}{/!} to reduce output that has an a in the path.

    Did I over engineer it again? Or just ignore most stuff and use it with the most simple options, should be enough anyway: fpath -t -s red *.txt

    6
    The History of Tetris World Records [by Summoning Salt] ~ a 2 hour documentary

    I just watched an excellent 2 hour (just needed to edit title, as I noticed it was 2 hours and not 1, wow time really flew away!) long documentary. The build up in stages and showing the evolution of the best players achievements, is intense and very well edited, narrated and written documentary!

    I know 1 hour is long and I wasn't planning to watch everything, but time flew away. If you have any slight interest into this topic, I highly recommend you to take some time to watch. The video itself is broken up in 5 or so sections. So you could just watch a section at a time, if 2 hour is too long. There is a specific reveal that I do not want spoil, which was epic. Just insanity!

    BTW have fun. Edit: Here some timestamps:

    1. 2:32 Chapter 1
    2. 11:39 Chapter 2
    3. 16:28 Chapter 3: ENEOOGEZ
    4. 25:48 Chapter 4: Hypertapping
    5. 31:45 Chapter 5: The Next Generation
    6. 49:00 Chapter 6: Rolling
    7. 1:00:27 Chapter 7: Vaulting & Scaling
    8. 1:15:25 Chapter 8: Colors
    9. 1:25:00 Chapter 9: Crash

    ---

    For anyone who don't want to watch it on YouTube, here is a link to an Invidious instance:

    https://invidious.nerdvpn.de/watch?v=mOJlg8g8_yw

    5
    fpath v0.2 + update v0.3: Reformat and stylize file path like text output. (Python, terminal)
    github.com GitHub - thingsiplay/fpath: Reformat and stylize file path like text output.

    Reformat and stylize file path like text output. Contribute to thingsiplay/fpath development by creating an account on GitHub.

    GitHub - thingsiplay/fpath: Reformat and stylize file path like text output.

    !

    Hi all. Yesterday I posted a program/script which is focused on path based text formatting, such as output from ls or find. Today I want to share new version. I'm proud, even though its limited in its usefulness, but today I solved an issue that was complicated to me (and a few other issues).

    Linux command file is used to display file type and mime information, which is super handy. Reason why this was complicated to me is, as I want it to run only once for all paths together for performance reasons. For over thousand files instead taking more than a minute execution time, its down to under 2 seconds when displaying file type information (which includes spawning file process in the background). A few examples:

    ```sh $ find Desktop/. -maxdepth 0 | fpath -F'{type} \t{name}' text/plain append.cfg text/plain dynamic.cfg image/png nearest.png image/png new.png

    $ find Desktop/. -maxdepth 0 | fpath -a -F'{path}\n\t{file}' /home/tuncay/Desktop/append.cfg ASCII text /home/tuncay/Desktop/dynamic.cfg ASCII text /home/tuncay/Desktop/nearest.png PNG image data, 1920 x 1440, 8-bit/color RGB, non-interlaced /home/tuncay/Desktop/new.png PNG image data, 1920 x 1440, 8-bit/color RGB, non-interlaced ```

    Update v0.3:

    Rather than creating a new post, I want to note that I have a huge update. First off, the performance is increased drastically with recent optimizations. Even thousands of paths are now processed very fast (until operations reading from file system is involved).

    Just to put into perspective: When I search and output list of paths with time baloosearch6 "a" in my home, I get 8468 files and it takes 0m0,048s. Now when I pipe that into fpath with default processing and without options, it takes 0m0,086s to process. But with a more complex command that involves reading file stats (like size and such) and colored output and a slice:

    sh time baloosearch6 "a" | fpath -F'{.mode} {.size} \t{-3:-1}: {blue}{name} {}' -sred

    it only takes 0m0,200s to execute! But using {file} or {type} or {mime} will still take a long time, even if the subshell process is run only once (it will still read the information for every file):

    sh time baloosearch6 "a" | fpath -F'{file}' took 3m54,233s to run. But what do you expect with approx. 8 thousand files. Without this script, it would take the same amount of time when running bare metal file command on all of these files.

    Secondly, I have implemented a slice command that works very well. It's like the index {3} thing, but now you can set a {start:end} range to not only get a single part, but all parts within that range. It even works with negative numbers like {-3:} to get the last three parts of a path. An empty index means to get everything until end of path.

    I'm quite happy how this program turned to be out. Python (at least for me with Python v3.12) is not that slow after all.

    0
    fpath: Reformat and stylize file path like text output. (Python, terminal)
    github.com GitHub - thingsiplay/fpath: Reformat and stylize file path like text output.

    Reformat and stylize file path like text output. Contribute to thingsiplay/fpath development by creating an account on GitHub.

    GitHub - thingsiplay/fpath: Reformat and stylize file path like text output.

    I did it again; exaggerate a simple idea and make it look more complicated at the end with too much text in the readme. I was bothered with the output of file listings and how unreadable they can get, especially with long paths and many of them on screen. At the end, I am not sure how useful this will be in the long run, but that is something you can judge yourself. It was certainly fun to create and in my opinion it's also fun to use.

    bash git clone https://github.com/thingsiplay/fpath cd fpath chmod +x fpath

    !

    --- What is this? Convenience script to style and reformat the output with path like formats. Designed to combine listings from other programs output, such as from find and even ls, or any other tool with similar capabilities. The script works mostly on text data rather than the file system, but some special commands are exception to this rule and will access the file system. ---

    0
    GIMP 2.10.38 Released
    www.gimp.org GIMP - GIMP 2.10.38 Released

    Release news for version GIMP 2.10.38

    GIMP - GIMP 2.10.38 Released

    New features and improvements

    • Improved support for tablets on Windows
    • Backports of other GTK3 features

    What’s next

    Clearly one of the smallest releases ever in the 2.10 series, and it might be our last. We’ll see, though we also know some people get stuck longer than others on older series (especially when using LTS distributions of Free Software operating systems), so we might do (if we feel like it’s needed) a 2.10.40 release with bug fixes only just before or just after GIMP 3.0.0 release, as a wrap up.

    In any case, we are now stopping backporting features in the 2.10 series. These graphics tablet support improvements for Windows are huge enough that they had to get in; yet from now on, we want to focus solely on releasing GIMP 3.0.0.

    Now you might wonder when that is? Very soon! We are on the last sprint towards the release candidate. This includes a lot of bug fixes, but also still some API changes going on. We will keep you updated!

    Don’t forget you can donate and personally fund GIMP developers, as a way to give back and accelerate the development of GIMP. Community commitment helps the project to grow stronger! 💪🥳

    ---

    GIMP 3.0 (Development branch roadmap

    3
    Question about GPL-3 and deleting files from a Github project

    This might be an odd question to ask, but I want to be sure to understand it correctly. When I clone a project in Github that is licensed under GPL-3.0 license, am I allowed to delete bunch of files that I no longer need?

    Someone took an old BCX-BASIC program and converted it into C with some additional work to make it compile in Linux, and a Python GUI. The original Basic program is still included in the project. I want to delete everything besides the .c program, license and an include file. I want to add my own Makefile and just create the commandline executable with gcc. And I might change the name of the application too and either create my own GUI or maybe (if its possible) to integrate the C program in Rust or Zig in example, but have to explore this more.

    But the files that were included there, the legacy BASIC program and some other files, are licensed under GPL-3 too. Am I allowed to just delete those files from the project?

    13
    unwrap: Wrapper to marry GNU Parallel and 7-Zip for archive extraction [Bash]
    github.com GitHub - thingsiplay/unwrap: Wrapper to marry GNU Parallel and 7-Zip for archive extraction

    Wrapper to marry GNU Parallel and 7-Zip for archive extraction - thingsiplay/unwrap

    GitHub - thingsiplay/unwrap: Wrapper to marry GNU Parallel and 7-Zip for archive extraction

    Bash script for Linux

    I have been working on this script for the last couple of days. It's not earth shattering, but sometimes these little things make life easier; so mine. I am at a point now, where the script is basically where I want to be. Maybe someone else finds it useful too.

    ---

    It uses 7z to extract files from archives. By also utilizing GNU Parallel, multiple archives can be processed at the same time.

    Purpose is to streamline option handling and usability of both programs into an unified interface. Sensible defaults and only functionality I care about are incorporated. 7z option and argument handling is confusing, doing things in unconventional ways. On the other side, we have Parallel, which is complicated and has ton of features; also confusing. So I picked up my favorite options and bundled them into a manageable script.

    Name of the script is inspired by unwrap() operation from Rust programming language. It's purpose is to provide the content of certain type of variables, by looking inside of it and taking it out.

    7z (probably in package p7zip) and parallel are required and need to be present.

    bash git clone https://github.com/thingsiplay/unwrap cd unwrap chmod +x unwrap

    usage:

    ```bash unwrap *.zip

    unwrap -f -i '*.txt' -o . *.zip ```

    0
    unwrap: Wrapper to marry GNU Parallel and 7-Zip for archive extraction [Bash]
    github.com GitHub - thingsiplay/unwrap: Wrapper to marry GNU Parallel and 7-Zip for archive extraction

    Wrapper to marry GNU Parallel and 7-Zip for archive extraction - thingsiplay/unwrap

    GitHub - thingsiplay/unwrap: Wrapper to marry GNU Parallel and 7-Zip for archive extraction

    cross-posted from: https://beehaw.org/post/13362507

    > It uses 7z to extract files from archives. By also utilizing GNU Parallel, multiple files can be processed at the same time. > > The purpose is to streamline option handling and usability of both programs into a unified command line interface, by only incorporating functionality which I need. 7z's option and argument handling is a bit confusing and does things in unique and unfamiliar ways. On the other side, we have Parallel, which is extremely complex and has ton of functionality; also confusing. So I picked up my favorite options and bundled them into a manageable script. > > Name of the script is inspired by unwrap() functionality from Rust programming language. It unpacks certain type of variables to make use what is inside of it. > > 7z (probably in package p7zip) and parallel are required and need to be present. > > bash > git clone https://github.com/thingsiplay/unwrap > cd unwrap > chmod +x unwrap > > > usage: > > bash > unwrap *.zip > > unwrap -f -i '*.txt' -o . *.zip >

    0
    unwrap: Wrapper to marry GNU Parallel and 7-Zip for archive extraction [Bash]
    github.com GitHub - thingsiplay/unwrap: Wrapper to marry GNU Parallel and 7-Zip for archive extraction

    Wrapper to marry GNU Parallel and 7-Zip for archive extraction - thingsiplay/unwrap

    GitHub - thingsiplay/unwrap: Wrapper to marry GNU Parallel and 7-Zip for archive extraction

    It uses 7z to extract files from archives. By also utilizing GNU Parallel, multiple files can be processed at the same time.

    The purpose is to streamline option handling and usability of both programs into a unified command line interface, by only incorporating functionality which I need. 7z's option and argument handling is a bit confusing and does things in unique and unfamiliar ways. On the other side, we have Parallel, which is extremely complex and has ton of functionality; also confusing. So I picked up my favorite options and bundled them into a manageable script.

    Name of the script is inspired by unwrap() functionality from Rust programming language. It unpacks certain type of variables to make use what is inside of it.

    7z (probably in package p7zip) and parallel are required and need to be present.

    bash git clone https://github.com/thingsiplay/unwrap cd unwrap chmod +x unwrap

    usage:

    ```bash unwrap *.zip

    unwrap -f -i '*.txt' -o . *.zip ```

    3
    Steam Deck is the ❝Biggest Threat❞ to Xbox [Fan The Deck]

    > Steam Deck is the biggest threat to Xbox and maybe the other way around too. Let's explore Microsoft and Valve's weird relationship

    23
    What is this block-rate-estim?? Suddenly came to life

    While I was writing a shell script (doing this the past several days) just a few minutes ago my PC fans spinned up without any seemingly reason. I thought it might be the baloo process, but looking at the running processes I see it's names block-rate-estim . It takes 6.2% CPU time and is running since minutes, on my modern 8 core CPU. And uses up 252 KiB. The command is shown as block-rate-estim --help, which when I run on the commandline myself will just run the program without output and blocking until I end the process. Sounds alarming to me first. Is something mining going on?

    I looked up where the command is coming from: ```bash $ ls -l /usr/bin/block-rate-estim .rwxr-xr-x 14k root 20 Dez 2023 /usr/bin/block-rate-estim

    $ yay -F block-rate-estim extra/libde265 1.0.12-1 [installed: 1.0.15-1] usr/bin/block-rate-estim

    $ yay -Si libde265 Repository : extra Name : libde265 Version : 1.0.15-1 Description : Open h.265 video codec implementation Architecture : x86_64 URL : https://github.com/strukturag/libde265 Licenses : LGPL3 Groups : None Provides : None Depends On : gcc-libs glibc Optional Deps : ffmpeg: for sherlock265 qt5-base: for sherlock265 sdl: dec265 YUV overlay output Conflicts With : None Replaces : None Download Size : 270,31 KiB Installed Size : 783,53 KiB Packager : Antonio Rojas Build Date : Mi 20 Dez 2023 20:06:16 CET Validated By : MD5 Sum SHA-256 Sum Signature ```

    It's still going on the background, I have no idea what this is. The thing is, I didn't start any process that is related to video codec. Other than FreeTube being in the background with video in Pause mode since 2 hours or so. I use FreeTube since months and this never happened before, I see this block-rate-estim process the first time.

    What should I do? I'm on an up-to-date EndeavourOS installation.

    9
    enjoy v0.5.0 - Play any game ROM with associated emulator in RetroArch on Linux
    github.com Release Maintenance update · thingsiplay/enjoy

    As the title suggest, this is not a big update and does not introduce any new features. The opposite is true, as those custom install and uninstall scripts are removed and the Readme file is no lon...

    Release Maintenance update · thingsiplay/enjoy

    !

    https://github.com/thingsiplay/enjoy

    enjoy is a blazingly fast wrapper around "RetroArch" on Linux, to help running emulator cores on the commandline. A user configuration file can be setup, including rules and core aliases pointing to file extensions and emulator paths.

    Usage Example:

    bash enjoy '~/Emulation/Roms/snes/Super Mario World (U) [!].smc'

    Update notes:

    As the title suggest, this is not a big update and does not introduce any new features. The opposite is true, as those custom install and uninstall scripts are removed and the Readme file is no longer converted to HTML. This reduces a little bit of complexity and dependency.

    Speaking of dependency, the internal libraries it depends on are all updated. The most notable one is the argument parser called clap, which is now at version 4.5 and no longer outputs the help in colors. Otherwise a few lines are refactored or reformatted and the README.md is worded differently; at some places. Overall this is a small update to bring the underlying code to the current state of the art. And to find an excuse to compile it with the most recent Rust compiler. If you liked the previous version of this program, then you will most likely like it again.

    • changed: the options parser and help text from -h or --help has no longer colored output and is reorganized
    • changed: if an empty "" entry is included, then entire program assumes nothing is given, in example following does not work: enjoy mario.smc "",
    • changed: logo slightly updated and corrected
    • changed: pandoc no longer used to convert README.md to HTML with Makefile
    • renamed: CHANGELOG.md to CHANGES.md
    • removed: install.sh and uninstall.sh scripts removed
    • internal: some code refactor, formatting and dependency upgrades
    1
    Run Flatpak apps by search filter or through fuzzy finder menu
    gist.github.com Run Flatpak apps by search filter or through fuzzy finder menu

    Run Flatpak apps by search filter or through fuzzy finder menu - flatapp

    Run Flatpak apps by search filter or through fuzzy finder menu

    I wrote a simple script in order to help someone in a recent reply from me, to make running Flatpak applications from terminal easier. After that I worked a little bit on it further and now ended up with 2 completely different approaches.

    1. flatrun: Run an app by a matching search filter. If multiple matches, then print all matching app ids instead.
    2. flatapp: Show list of installed apps in an interactive menu. Plus show a description of the app in a preview window. Run the selected application. Requires fzf.
    3. flatsearch: Show search results from repository in an interactive menu. A selected entry will be installed or uninstalled if it exists already (with confirmation from flatpak). Requires fzf.

    ```bash

    Show all matching apps

    $ flatrun F com.github.tchx84.Flatseal io.freetubeapp.FreeTube

    Run io.freetubeapp.FreeTube

    $ flatrun freetube

    Show help for com.obsproject.Studio

    $ flatrun obs --help ```

    or flatapp: (requires fzf)

    !

    and new flatsearch youtube (requires fzf)

    !

    12
    AppImage creation with inclusion of third party binary apps - how to deal with Free and Open Source?

    I want to create an AppImage of my Python software and distribute it this way. The script will be compiled with Nuitka to include Python and Standard Library functionality. In the AppImage I want to bundle it with other Libre software, but in binary format downloaded from Arch package repos, as my script depends on them. My script is more like a complex automation tool. I do not make any changes to the code of these binary dependencies, just include them as they are.

    I don't know how to deal with the licenses. Do I have to include the license for every project in my AppImage? Do I have to put the source code of these projects in it too?

    5
    tochd converter v0.12
    github.com Releases · thingsiplay/tochd

    Convert game ISO and archives to CD/DVD CHD for emulation on Linux. - thingsiplay/tochd

    Releases · thingsiplay/tochd

    tochd is an iso/cue+bin and other cd like formats to chd converter. It's actually an automation script that uses chdman and 7z under the hood. The Python script/program only works under Linux and is for commandline usage.

    v0.12 - March 8, 2024

    Note: We are jumping over v0.11 and combine it with next version v0.12.

    • bug: counter for finish states like "Completed: 0" are disabled, when combining the options -p and -s, because counting these variables is not thread safe at the moment
    • bug: cpu count was wrongly reported when using custom number for threads
    • new setting in option: specify -m auto to determine "cd" or "dvd" format based on filesize with a 750 MB threshold (thanks AlexanderRavenheart https://github.com/thingsiplay/tochd/pull/3)
    • changed: generation and handling of temporary folders refactored, now it's using proper builtin tempfile functionality instead custom logic, currently the folders are not hidden anymore (thanks AlexanderRavenheart https://github.com/thingsiplay/tochd/pull/3)
    • changed: due to the new approach of temporary folders, the option -E will finally cause Ctrl+c to delete temporary files and folders before exiting (thanks AlexanderRavenheart https://github.com/thingsiplay/tochd/pull/3)
    • removed: option -f and --fast, because nobody actually needs it, its an artefact of early testings to quickly generate huge files
    • lot of internal code refactor for being more consistent styling and naming (thanks AlexanderRavenheart https://github.com/thingsiplay/tochd/pull/3)
    2
    According to Google Plasma 6 for Arch was cancelled :D

    I don’t use Google directly, but as part of the open source meta search engine SearXNG, where we can specify what search engines it will use. And the top result is from Google and I can confirm that Plasma 6 for Arch is now officially been canceled. And it’s linked to Reddit. :smiley:

    Search terms: kde plasma 6 release arch linux

    30
    Scribus 1.6.0 Released
    1. January 2024 by Craig Bradney

    The Scribus Team is pleased to announce the release of version 1.6.0. Scribus 1.6.0 is the long awaited release in the next stable series, replacing 1.4.8 and development versions in the 1.5.x series. This version has been in development for some years and contains thousands of enhancements and fixes across all areas of the program. It has more features, is faster, and is more stable. All users of versions of 1.5.x and lower should migrate to 1.6.0.

    2
    thingsiplay thingsiplay @beehaw.org
    • https://thingsiplay.game.blog/
    • https://github.com/thingsiplay
    Posts 22
    Comments 311