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

help-circle


  • There should be a way to pay only the workers when you buy something. In that case, you could pay them but only after pirating and making sure you enjoy it. Since there is nothing like that, I think you should pay only content from small creators. Big creators already have plenty, and paying for anything else just gives money to greedy executives who then lower the quality of the content to make more money. Of course, if you have the means and don’t pay anything, you are just making sure there will be less of that content made in the future. It isn’t scalable; if everybody pirated content without paying a single cent, there would be no content made except by hobbyists who don’t want to make a living out of it.












  • Imagus is a browser extension for Firefox that allows users to enlarge images and display images/videos from links with a simple mouse-over. It is similar to the Hover Zoom extension, which is a popular tool for browsing memes and gifs on desktop. However, Hover Zoom has been flagged as spyware, so users may want to consider using Imagus instead. Imagus works with a wider range of links than Hover Zoom, including those from imgur. The extension also has customizable settings, including an expandable set of rules for getting larger images, media, or other content.





  • A function decorator: You can create a decorator that handles the connection and cursor creation and passes the cursor to the decorated function.

    import sqlite3
    from functools import wraps
    
    DB_FILE = "your_database_file.db"
    
    def with_cursor(func):
        @wraps(func)
        def wrapper(*args, **kwargs):
            conn = sqlite3.connect(DB_FILE)
            cursor = conn.cursor()
    
            result = func(cursor, *args, **kwargs)
    
            conn.commit()
            cursor.close()
            conn.close()
    
            return result
    
        return wrapper
    
    @with_cursor
    def insert_post_to_db(cursor: sqlite3.Cursor, issue: Issue, lemmy_post_id: int) -> None:
        cursor.execute(
            "INSERT INTO posts (issue_url, lemmy_post_id, issue_title, issue_body) VALUES (?, ?, ?, ?)",
            (issue.url, lemmy_post_id, issue.title, issue.formatted_body),
        )
    

  • A context manager: Create a context manager that handles the connection and cursor creation, as well as closing the connection when done. This way, you can use the with statement to manage the connection and cursor in your functions.

    import sqlite3
    
    DB_FILE = "your_database_file.db"
    
    class DatabaseConnection:
        def __enter__(self):
            self.conn = sqlite3.connect(DB_FILE)
            self.cursor = self.conn.cursor()
            return self.cursor
    
        def __exit__(self, exc_type, exc_val, exc_tb):
            self.conn.commit()
            self.cursor.close()
            self.conn.close()
    
    def insert_post_to_db(issue: Issue, lemmy_post_id: int) -> None:
        with DatabaseConnection() as cursor:
            cursor.execute(
                "INSERT INTO posts (issue_url, lemmy_post_id, issue_title, issue_body) VALUES (?, ?, ?, ?)",
                (issue.url, lemmy_post_id, issue.title, issue.formatted_body),
            )