UlrikHD

joined 1 year ago
[–] UlrikHD@programming.dev 1 points 1 year ago* (last edited 1 year ago) (1 children)

match isn't a protected keyword like if is.

match = 0
match match:
    case 0:
        print(0)
    case _:
        print(1)

Is legal and will give print out 0.

[–] UlrikHD@programming.dev 1 points 1 year ago

That's interesting, thanks for the reply

[–] UlrikHD@programming.dev 2 points 1 year ago (1 children)

Might as well start with a solid foundation from the start though. The extra work is minimal so there isn't much of a time cost to it. I wouldn't call it overengineering, it's just a different way to write code, and the way many naturally default to without really thinking about it.

[–] UlrikHD@programming.dev 4 points 1 year ago (3 children)

Those doesn't break backwards compatibility though. Naturally you can't use match with a python 3.7 interpreter, but what scripts written for python 3.7 wouldn't work with a 3.11 interpreter?

I haven't encountered that issue before, so I'm curious what those problems OP have encountered looks like.

[–] UlrikHD@programming.dev 1 points 1 year ago (1 children)

How many ~hours per week is expected for the role, and are there any particular day(s) when most of the activity is happening.

I'd be happy to help out.I live in Norway with active hours ~05-22 CEST. For more personal information, feel free to DM. My discord username is the same as this username if you prefer that.

[–] UlrikHD@programming.dev 5 points 1 year ago (10 children)

That honestly makes me curious, what issues have you encountered when upgrading your python(3) version?

[–] UlrikHD@programming.dev 23 points 1 year ago (3 children)

I get the point the author is coming from. When I was teaching first year engineering students programming, the one on the left is how everyone would write, it's simply how human intuitively think about a process.

However, the one on the right feels more robust to me. For non trivial processes with multiple branches, it can ugly real quick if you haven't isolated functionalities into smaller functions. The issue is never when you are first writing the function, but when you're debugging or coming back to make changes.

What if you're told the new Italian chef wants to have 15 different toppings, not just 2. He also got 3 new steps that must be done to prepare the dough before you can bake the pizza, and the heat of the oven will now depend on the different dough used. My first instinct if my code was the one on the left, would be to refactor it to make room for the new functionality. With the one on the right, the framework is already set and you can easily add new functions for preparing the dough and make a few changes to addToppings() and bake()

If I feel too lazy to write "proper" code and just make one big function for a process, I often end up regretting it and refactoring it into smaller, more manageable functions once I get back to the project the next day. It's simply easier to wrap your head around

bakePizza() 
box()```
than reading the entire function and look for comments to mark each important step. The pizza got burned? Better take a look at `bakePizza()` then.
[–] UlrikHD@programming.dev 5 points 1 year ago

All it took for me to switch to GitLab was a larger free lfs quota which I wanted for a project. The superior webpage UI made me migrate every old project to it too.

[–] UlrikHD@programming.dev 4 points 1 year ago

I assume you meant that both Rust and C compiles into machine code? Python compiles into bytecode that is then run in a VM, Rust and C usually doesn't do that as far as I know.

I was mostly curious if it was as easy as in C. Turun's reply answered that question though. Cheers.

[–] UlrikHD@programming.dev 1 points 1 year ago (1 children)

Interesting stuff, might give me an excuse to look into rust in the future. Thanks!

[–] UlrikHD@programming.dev 1 points 1 year ago* (last edited 1 year ago)

As others have suggested, ffmpeg is a great cli tool. If you aren't comfortable with the terminal you can do it via python like this:

import os
import sys
import subprocess


def crop_media(file_name: str, w: int, h: int, x: int, y: int, new_dir: str) -> None:
    try:
        subprocess.run(f'ffmpeg -i "{file_name}" -vf "crop={w}:{h}:{x}:{y}" temp.gif -y',
                           shell=True, check=True, stdout=subprocess.DEVNULL, stderr=subprocess.DEVNULL)
        os.rename('temp.gif', os.path.join(new_dir, file_name))
    # Print the error and continue with other gifs, remove try block if you want a complete stop
    except subprocess.CalledProcessError as e:
        print(e)
    except KeyboardInterrupt:
        print('KeyboardInterrupt, cleaning up files...')
        os.remove('temp.gif')
        sys.exit(0)


def crop_directory(directory: str, w: int, h: int, x: int, y: int, new_dir: str) -> None:
    for root, _, files in directory:
        for file in files:
            if not file.endswith('.gif'):
                continue
            if os.path.isfile(os.path.join(new_dir, file)):
                print(f'{file} already exists in {new_dir}, skipping...')
                continue

            file_path = os.path.normpath(os.path.join(root, file))
            crop_media(file_path, w, h, x, y, new_dir)


if __name__ == '__main__':
    width = 0
    height = 0
    x_offset = 0
    y_offset = 0
    gif_directory = ''
    new_directory = ''
    crop_directory(gif_directory, width, height, x_offset, y_offset, new_directory)

This should go through every file in the directory and subdirectories and call the ffmpeg command on each .gif. With new_directory you can set a directory to store every cropped .gif. The ffmpeg command is based on johnpiers suggestion.

The script assumes unique filenames for each gif and should work with spaces in the filenames. If they aren't unique, you can just remove the new_directory part, but you will then lose the original gif that you cropped.

[–] UlrikHD@programming.dev 1 points 1 year ago (5 children)

Could you elaborate on that point? Is it as smooth as using C?

view more: ‹ prev next ›