Lemmy Português

890 readers
9 users here now

Bem-vindo(a)!

Esta é o Lemmy Português, uma instância de Lemmy direcionada a utilizadores e comunidades Portuguesas, ou de Língua Portuguesa.
Servidores disponibilizados pela WebTejo.


Regras

Para o bom funcionamento deste espaço, existem regras e um código de conduta que deve ser sempre seguido.

  1. Respeita todos e mantém uma atitude acolhedora. Isto implica não recorrer a insultos, humilhações, ataques pessoais, etc. Sê tolerante.
  2. Publicação ou ameaças de publicação de informações privadas (doxxing, mensagens diretas, etc) é estritamente proibido.
  3. Usa linguagem percetível por todos e uma gramática correta. Este espaço pretende ser inclusivo, e isso só é possível se todos formos capazes de comunicar bem.
  4. Nada de conteúdo NSFW.
  5. Qualquer conteúdo de teor traumático, perturbador ou que conte o enredo de algum livro, filme, série ou jogo deve ser marcado como tal e escondido (spoiler).
  6. É inaceitável tentar passar por uma outra pessoa.

Por fim, usa senso comum.

O incumprimento de qualquer uma destas regras resultará num aviso. Caso o problema persista, o utilizador será banido.

ℹ️ Estas regras serão expandidas e um documento de código de conduta redigido, na comunidade Regras, quando o Lemmy suportar melhores controlos de moderação para comunidades.


Registo de contas e criação de comunidades

Devido ao aparecimento de trolls e de contas automáticas que poluem a rede com conteúdo indesejado, o registo de novas contas foi restringido, sendo agora necessário não só um endereço de correio eletrónico, como o preenchimento de uma pequena "candidatura" que terá que ser aprovada por um administrador antes da conta ser ativada.

Pelo mesmo motivo, a criação de comunidades está sujeita a uma restrição semelhante. Será necessário fazer uma publicação na comunidade Meta, com título e corpo adequados, para requisitar a criação de uma nova comunidade.

Por fim, é igualmente possível requisitar a posição de moderador numa das comunidades originais ou numa que não possua nenhum moderador ativo. Em qualquer dos casos, haverá um processo de avaliação antes da promoção, por motivos de segurança.

Para mais informações, deves ler a barra lateral da comunidade Meta.


WebTejo

Esta instância corre num servidor da WebTejo, uma empresa de alojamento web independente e nacional. Deem uma vista de olhos 😉


Ajudar a correr esta instância

liberapay

O servidor onde a instância está alojada custa ~10€/mês. Eu consigo cobrir parte dos custos, mas para garantir o seu suave funcionamento, é necessária algum auxílio. Ninguém se deve sentir no dever de doar o que seja, porém àqueles e àquelas que têm a possibilidade e a vontade, qualquer ajuda é muito bem-vinda :)

Eis a página de LiberaPay onde é possível fazer um donativo: https://liberapay.com/lemmy.pt/
Num futuro próximo vai ser estabelecido um repositório com registos mensais de donativos e despesas, de modo a existir maior transparência no financiamento da instância. Fiquem atentos.


Matrix

Existe uma sala na rede Matrix dedicado a esta instância de Lemmy. Aqui, além de discussões sobre a instância, os administradores vão publicando avisos relativamente a problemas técnicos e interrupções de serviço. Junta-te a #tuga-lemmy:matrix.org para participares na conversa!

Existem também outras salas portuguesas que podes ver aderindo ao espaço #espacotuga:matrix.org.

Também é possível entrar em contacto com os administradores através das mensagens privadas da plataforma, ou por correio eletrónico.


Traduzir o Lemmy

Sendo apologistas do movimento de software livre e da ideia de redes federadas, temos contribuído para o projecto através da tradução para Português. Este processo é realizado através da instância de Weblate (uma ferramenta de tradução, também ela livre) do projecto Lemmy, e que pode ser econtrada em https://weblate.join-lemmy.org Qualquer sugestão de tradução é bem-vinda!

Discussão sobre a tradução do projecto pode ser feita na sala de Matrix acima referida, ou, alternativamente, numa outra sala sobre tradução em geral, em #tuga-traducao:matrix.org


Qualidade do serviço

uptime

É possível consultar o "uptime" do serviço em https://estado.lemmy.pt.

founded 3 years ago
ADMINS
1
 
 

SO, it started quite nicely with a fully working program. However nearing the end... or at the end of my programming experience or asking it to program something for me, it wrote in some nasty nasty screen flickering shit. I couldn't stop it and it quickly just froze my screen where the only option was to push the button. I tried it a second time to confirm, but this time I was able to quickly go to a different CLI window and kill that sonobabich. Here is what it came up with in case you want to try it. maybe it only screws up my computer:

import os
import cv2
import numpy as np
import time
import tkinter as tk
from tkinter import messagebox, filedialog

def threshold_to_black(image_path, duration):
    original_image = cv2.imread(image_path)
    
    if original_image is None:
        print("Error: Could not read the image.")
        return

    height, width, _ = original_image.shape
    gray_image = cv2.cvtColor(original_image, cv2.COLOR_BGR2GRAY)
    steps = duration * 10  # 10 frames per second

    for i in range(steps + 1):
        # Calculate the threshold value (0 to 255)
        threshold = int((i / steps) * 255)
        
        # Create the thresholded image
        thresholded_image = np.where(gray_image < threshold, 0, 255).astype(np.uint8)

        # Resize the thresholded image to fill the window
        resized_image = cv2.resize(thresholded_image, (window_width, window_height), interpolation=cv2.INTER_LINEAR)

        # Display the thresholded image
        cv2.imshow(window_name, resized_image)

        # Wait for a short period to create the effect
        time.sleep(0.1)

        if cv2.waitKey(1) & 0xFF == ord('q'):
            break

    # Display the final black image
    cv2.imshow(window_name, np.zeros_like(thresholded_image))
    
    while True:
        if cv2.waitKey(1) & 0xFF == ord('q'):
            break
    
    cv2.destroyAllWindows()

def select_image():
    current_directory = os.getcwd()  # Get the current directory
    filetypes = (
        ('JPEG files', '*.jpg'),
        ('JPEG files', '*.jpeg'),
        ('All files', '*.*')
    )
    
    filename = filedialog.askopenfilename(
        title='Select an Image',
        initialdir=current_directory,  # Start in the current directory
        filetypes=filetypes
    )
    
    if filename:
        return filename
    else:
        messagebox.showerror("Error", "No image selected.")
        return None

def get_duration():
    def submit():
        nonlocal total_duration
        try:
            minutes = int(minutes_entry.get())
            seconds = int(seconds_entry.get())
            total_duration = minutes * 60 + seconds
            if total_duration > 0:
                duration_window.destroy()
            else:
                messagebox.showerror("Error", "Duration must be greater than zero.")
        except ValueError:
            messagebox.showerror("Error", "Please enter valid integers.")

    total_duration = None
    duration_window = tk.Toplevel()
    duration_window.title("Input Duration")
    
    tk.Label(duration_window, text="Enter duration:").grid(row=0, columnspan=2)
    
    tk.Label(duration_window, text="Minutes:").grid(row=1, column=0)
    minutes_entry = tk.Entry(duration_window)
    minutes_entry.grid(row=1, column=1)
    minutes_entry.insert(0, "12")  # Set default value for minutes
    
    tk.Label(duration_window, text="Seconds:").grid(row=2, column=0)
    seconds_entry = tk.Entry(duration_window)
    seconds_entry.grid(row=2, column=1)
    seconds_entry.insert(0, "2")  # Set default value for seconds
    
    tk.Button(duration_window, text="Submit", command=submit).grid(row=3, columnspan=2)
    
    # Center the duration window on the screen
    duration_window.update_idletasks()  # Update "requested size" from geometry manager
    width = duration_window.winfo_width()
    height = duration_window.winfo_height()
    x = (duration_window.winfo_screenwidth() // 2) - (width // 2)
    y = (duration_window.winfo_screenheight() // 2) - (height // 2)
    duration_window.geometry(f'{width}x{height}+{x}+{y}')

    duration_window.transient()  # Make the duration window modal
    duration_window.grab_set()    # Prevent interaction with the main window
    duration_window.wait_window()  # Wait for the duration window to close

    return total_duration

def wait_for_start(image_path):
    global window_name, window_width, window_height

    original_image = cv2.imread(image_path)
    height, width, _ = original_image.shape

    window_name = 'Threshold to Black'
    cv2.namedWindow(window_name, cv2.WINDOW_NORMAL)
    cv2.resizeWindow(window_name, width, height)
    cv2.imshow(window_name, np.zeros((height, width, 3), dtype=np.uint8))  # Black window
    print("Press 's' to start the threshold effect. Press 'F11' to toggle full screen.")
    
    while True:
        key = cv2.waitKey(1) & 0xFF
        if key == ord('s'):
            break
        elif key == 255:  # F11 key
            toggle_fullscreen()

def toggle_fullscreen():
    global window_name
    fullscreen = cv2.getWindowProperty(window_name, cv2.WND_PROP_FULLSCREEN)
    
    if fullscreen == cv2.WINDOW_FULLSCREEN:
        cv2.setWindowProperty(window_name, cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_NORMAL)
    else:
        cv2.setWindowProperty(window_name, cv2.WND_PROP_FULLSCREEN, cv2.WINDOW_FULLSCREEN)

if __name__ == "__main__":
    current_directory = os.getcwd()
    jpeg_files = [f for f in os.listdir(current_directory) if f.lower().endswith(('.jpeg', '.jpg'))]
    
    if jpeg_files:
        image_path = select_image()
        if image_path is None:
            print("No image selected. Exiting.")
            exit()

        duration = get_duration()
        if duration is None:
            print("No valid duration entered. Exiting.")
            exit()

        wait_for_start(image_path)

        # Get the original
2
view more: next ›