Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Librerías permitidas, no permitidas y malas prácticas T3 #423

Open
matiasmasjuan opened this issue Jun 6, 2023 · 28 comments
Open

Librerías permitidas, no permitidas y malas prácticas T3 #423

matiasmasjuan opened this issue Jun 6, 2023 · 28 comments
Labels
IMPORTANTE Tarea 3 Dudas sobre la T3

Comments

@matiasmasjuan
Copy link
Contributor

Para consultar sobre una librería deben responder esta issue con una pregunta de la siguiente forma:

¿Puedo usar la librería nombre_librería para hacer explicación_de_lo_que_quiero_hacer?

¡Recuerden especificar en su README qué librerías utilizan!


Librerías Permitidas

  • socket
  • PyQt5
  • QtDesigner
  • threading
  • time
  • random
  • collections
  • string
  • pprint
  • textwrap
  • json
  • pickle
  • os
  • sys.exit
  • functools.partial
  • functools.reduce
  • itertools
  • datetime
  • dataclasses

Librerías Prohibidas

  • pygame
  • OpenCV
  • Arcade
  • Pyglet
  • Tkinter
  • matplotlib
  • keyboard
  • shutil
  • pathlib
  • glob
  • pandas
  • numpy
  • ast
  • curses
  • io
  • sympy

☠️ Built-ins Prohibidos

El uso de alguna de las siguiente funciones es automáticamente un 1,0 sin discusión: 😭

Malas prácticas

El uso de las siguientes prácticas será considerado una mala práctica:

  • except Exception: o únicamente except: (excepciones bien capturadas sí estarán permitidas).
  • Variables globales de cualquier tipo.
  • Import * o imports que no se encuentren al inicio del programa.
  • Paths absolutos y no relativos.
  • No añadir encoding al momento de trabajar archivos.
  • No utilizar señales cuando corresponde.

Éxito en la tarea, programadores avanzados! 🎲🃏

@matiasmasjuan matiasmasjuan added Tarea 2 Dudas sobre la T2 IMPORTANTE Tarea 3 Dudas sobre la T3 and removed Tarea 2 Dudas sobre la T2 labels Jun 6, 2023
@d-i-n-b
Copy link

d-i-n-b commented Jun 8, 2023

Hola,
¿Se pueden ocupar las librerías math y typing?
Quiero ocupar math para crear dinámicamente un círculo de jugadores en la ventana de juego dependiendo de la cantidad de jugadores, y typing para agregar type hints a mis variables, atributos, funciones y métodos

@matiasmasjuan matiasmasjuan pinned this issue Jun 8, 2023
@matiasmasjuan
Copy link
Contributor Author

Hola @d-i-n-b !

Recuerda especificar siempre para qué quieres usar las librerías.

@ooscarr
Copy link

ooscarr commented Jun 9, 2023

Hola, quiero usar la librería sys.argv para saber el puerto que envían como argumento en la consola py main.py 3333

@matiasmasjuan
Copy link
Contributor Author

Hola @ooscarr !

, puedes usar sys.argv para recibir argumentos por consola.

Saludos!

@d-i-n-b
Copy link

d-i-n-b commented Jun 10, 2023

Hola,
¿Se pueden ocupar las librerías math y typing?
Quiero ocupar math para crear dinámicamente un círculo de jugadores en la ventana de juego dependiendo de la cantidad de jugadores, y typing para agregar type hints a mis variables, atributos, funciones y métodos

@matiasmasjuan
Copy link
Contributor Author

Hola @d-i-n-b !

, puedes usar math u typing para lo que mencionas.

@FelipeIGS
Copy link

se puede ocupar beautifultable para el tema del log?

@matiasmasjuan
Copy link
Contributor Author

Hola @FelipeIGS:

No, no puedes. Librerías como beatifultable, prettytable, o tabulate requieren ser instaladas para usarse, por lo que podrían generar problemas o errores al momento de la corrección.

Saludos!

@StefanoBrunel
Copy link

Hola, se puede ocupar la libreria "copy" ? para poder hacer copias de bytearrays que puedan modificarse sin modificar la original.

@matiasmasjuan
Copy link
Contributor Author

Hola @StefanoBrunel : , si puedes usar la librería copy para eso. Saludos!

@tomastrivino
Copy link

tomastrivino commented Jun 16, 2023

Hola,
se puede usar filter()? Lo quiero usar para obtener clientes cuyo ID no ha sido aún ocupado por un socket dentro de un diccionario de nombre self.clientes, que contiene 4 llaves inicialmente seteadas a "Undefined".
I.e. usuarios_disponibles = list(filter(lambda x: self.clientes[x] == "Undefined", self.clientes)), que me retornará los usuarios que se encuentran disponibles para ser asignados a un socket, y, por ende, aceptar la conexión inmediatamente (y no dejarlo en lista de espera).

Gracias

@tremendapithon
Copy link

Hola buenas se puede usar subprocess para volver a cargar el programa otra vez, estuve viendo y parece que no es necesario instalarlo/

@matiasmasjuan
Copy link
Contributor Author

Hola @tomastrivino: , puedes usar map, filtery reduce, junto a las funciones lambda👌
Hola @tremendapithon : No, no puedes usar subprocess. Esto debido a que no necesitan tener distintos subprocesos dentro de la ejecución del programa para acceder a distintos archivos/programas a la vez. Si bien lo mencionas para cargar nuevamente el programa, no debería ser necesario dado los requerimientos de la tarea, y podría dificultar la corrección.

@tremendapithon
Copy link

@matiasmasjuan En realidad, ni tanto, solo facilita que un cliente que no pueda acceder a la sala lo pueda volver a intentar, sin tener que abrir la terminar o volver a iniciar al main.py, en ese caso se podria justificar o no?

@tremendapithon
Copy link

tipo, cuando la sala se llena o existe una partida en curso, lo que hace es cerrar mi programa y volver a cargar otro desde el mismo programa cerrado, y en ese procedimiento el usuario se podra conectar cuando exista un cupo en el servidor.

@tremendapithon
Copy link

incluso lo puedo hacer con os.system()

@matiasmasjuan
Copy link
Contributor Author

Ahora entiendo un poco más lo que intentas hacer. Si lo puedes realizar con os.system, entonces estaría bien. Recuerda mencionar en tu readme el proceso que haces para manejar este tipo de casos 👌.

Saludos!

@FelipeIGS
Copy link

Hola! se puede ocupar la funcion math para ocupar facilitar el mod matematico de la codificacion

@tremendapithon
Copy link

@matiasmasjuan Al final lo hice con os.system(), obtuve el mismo resultado y no me ha generado problemas.

@matiasmasjuan
Copy link
Contributor Author

@FelipeIGS : , puedes usar math para eso.

@NewtonCultist
Copy link

@matiasmasjuan Hola!, se puede usar el Qtimer de pyqt.core para ayudar al cliente a cargar la informacion que recibe del servidor

Gracias :)

@matiasmasjuan
Copy link
Contributor Author

Hola @TVMerlo : No sé si entendí muy bien tu pregunta, pero no encuentro mucho sentido de tener que usar Qtimers para cargar la información del cliente que recibe del servidor, a menos que quisieras implementar el bonus del turno con tiempo. Dado que los mensajes entre cliente y servidor se transmiten de forma casi instantánea, sería innecesario tener que implementar timers para enviar la información, y eso solo entorpecería y haría más lento la corrección, debido a la demora en actualizar la interfaz. Sin embargo, si planeas utilizarlos porque tienes problemas en que se mezcla la información, te recomendaría usar locks al momento de recibir o enviar dicha información 👀

Saludos!

@BenzoylMorexide
Copy link

BenzoylMorexide commented Jun 19, 2023

Hola @matiasmasjuan. ¿Es posible ocupar la librería select para ocuparlo de tal forma que pueda cerrar el listening del server pasado cierto límite de sockets aceptados? Dejo un snippet:

while True:
    readable, writable, exceptional = select.select(conns, [], [])
    if sock in readable: # new connection on the listening socket
        conn, caddr = sock.accept()
        conns.add(conn)
        if len(conns) > LIMIT: # ">" because "sock" is also in there
            conns.remove(sock)
            sock.close()
    else: # reading from an established connection
        for c in readable:
            buf = c.recv(4096)
            if not buf:
                conns.remove(c)
                sock = get_listening_socket()
                conns.add(sock)
            else:
                print("received: %s" % buf) 

@matiasmasjuan
Copy link
Contributor Author

Hola @BenzoylMorexide !

No, no puedes utilizar select para esta tarea. Esto debido a dos razones. La primera se debe a que en esta tarea no hay que limitar la cantidad o límite de sockets que puede aceptar el servidor, sino que este debe aceptar todas las conexiones posibles y redirige a los clientes a la sala de espera. En ese sentido, hacer uso de select para lo que mencionas estaría contradiciendo el enunciado y conllevaría un descuento según la distribución de puntajes.

En segundo lugar, no es necesario requerir de una librería para lograr esto. Simplemente se podría cerrar el listening del server pasado un límite de sockets aceptados.

PD: puedes usar

```python # todo tu codigo ```

Para hacer snippet bonitos.

Algo del siguiente estilo:

while True:
    readable, writable, exceptional = select.select(conns, [], [])
    if sock in readable: # new connection on the listening socket
        conn, caddr = sock.accept()
        conns.add(conn)
        if len(conns) > LIMIT: # ">" because "sock" is also in there
            conns.remove(sock)
            sock.close()
# etc

Saludos!

@c4ebt
Copy link

c4ebt commented Jun 21, 2023

Hola! Se puede usar la función copy de la librería copy para crear copias de listas/diccionarios y poder modificarlas sin modificar la original?

Se que ya se permitió el uso de copy arriba, pero se preguntó específicamente para bytearrays y me han bajado por no preguntar cosas que consideré obvias ._. así que decidí preguntar igual.

@matiasmasjuan
Copy link
Contributor Author

Hola @c4ebt : , puedes usar copy para eso. Saludos!

@StefanoBrunel
Copy link

Hola! se puede ocupar exec_()?? quiero ocuparlo para poder mostrar un mensaje popup, el cual lo estaba implementando con QMessageBox(). el uso seria : QMessageBox().exec_()

@matiasmasjuan
Copy link
Contributor Author

Hola @StefanoBrunel : , puedes usar exec_() para eso. Recuerda que ese método no tiene nada que ver con built-in prohibido exec.

Saludos!

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment
Labels
IMPORTANTE Tarea 3 Dudas sobre la T3
Projects
None yet
Development

No branches or pull requests

10 participants