Un motor de concentración gamificado para la terminal.
Project description
🪴 Zen Focus: Gamificación y Enfoque Profundo (Deep Work)
Zen Focus es una librería de Python orientada a proteger la atención de desarrolladores, científicos de datos y estudiantes.
Cuando ejecutamos procesos de alta carga computacional (limpieza de DataFrames gigantes, entrenamiento de modelos, simulaciones estadísticas), los tiempos de espera nos hacen perder nuestro estado de Deep Work al abrir redes sociales. Zen Focus resuelve esto mediante gamificación visual en la terminal y un escudo de red a nivel del sistema operativo.
✨ Características Principales
- Gamificación Visual (POO): Arte ASCII interactivo que evoluciona en 5 fases proporcionalmente al avance de tu código o tiempo de sesión.
- Arquitectura Extensible: Motor basado en clases abstractas (
TemaBase). Incluye temas predeterminados:PlantaFlor,Cohete,EdificioyBebida. - Escudo de Red (Context Manager): Modifica dinámicamente el archivo
hosts(/etc/hostsoSystem32/drivers/etc/hosts) para bloquear sitios web distractores y restaura la conexión de forma segura al finalizar o en caso de error. - Interfaz de Terminal (CLI): Integración nativa con
richpara paneles en vivo que no inundan la consola. - Decorador
@con_progreso: Gamifica cualquier función Python sin modificar su código interno. El tema evoluciona mientras la función se ejecuta. - Widgets Interactivos: Explora los temas en Jupyter Notebooks y Google Colab con controles interactivos de sliders y botones.
🚀 Instalación
Instala la última versión estable directamente desde PyPI:
pip install zen-focus rich
Para probar de inmediato sin configuraciones locales, haz clic en el botón de Open in Colab en la parte superior.
📖 Uso Básico
La librería puede usarse de varias maneras: integrada en scripts, como decorador, en sesiones dedicadas o en notebooks interactivos.
1. Gamificar un Script Largo
Importa un tema y hazlo evolucionar mientras tu código trabaja:
from zen_focus.temas import PlantaFlor
import time
mi_planta = PlantaFlor(nombre="Girasol Analítico")
# Simulamos el procesamiento de datos por lotes
for lote in range(5):
time.sleep(1) # Reemplaza con tu lógica de código pesada
mi_planta.evolucionar()
print(mi_planta.renderizar())
2. Decorador @con_progreso
Gamifica funciones automáticamente con un simple decorador. Perfecto para entrenamientos de ML, procesamiento de datos y análisis científicos:
from zen_focus.decoradores import con_progreso
from zen_focus.temas import Cohete
@con_progreso(tema=Cohete("Análisis de datos"), pasos=3)
def pipeline_datos(df):
df = df.dropna() # Paso 1
yield
df = df[df['valor'] > 0] # Paso 2
yield
resultado = df.sum() # Paso 3
return resultado
resultado = pipeline_datos(mi_df)
Sin yield (avance automático en background):
@con_progreso(tema=PlantaFlor("Entrenamiento"), retardo=1.0)
def entrenar_modelo(X_train, y_train):
return modelo.fit(X_train, y_train)
3. Modo Deep Work (Con bloqueo de sitios)
Utiliza la clase SesionZen junto con el Escudo para bloquear distracciones. Nota: Este script requiere ser ejecutado con permisos de administrador (sudo) para modificar las rutas de red.
from zen_focus.motor import SesionZen
from zen_focus.escudo import Escudo
from zen_focus.temas import Cohete
# 1. Definimos las distracciones
distracciones = ["twitter.com", "instagram.com", "youtube.com"]
# 2. El Context Manager garantiza que el internet regrese a la normalidad
with Escudo(bloquear=distracciones) as mi_escudo:
# 3. Configuramos la sesión y el tema
mision = Cohete(mision="Apolo 11")
sesion = SesionZen(minutos=25, escudo=mi_escudo, tema=mision)
# 4. ¡Iniciamos el motor en la terminal!
sesion.iniciar()
4. Widget Interactivo (Jupyter / Colab)
Explora y controla los temas interactivamente en notebooks:
from zen_focus.widgets import TemaWidget
from zen_focus.temas import PlantaFlor
# Crear y mostrar el widget
widget = TemaWidget(PlantaFlor("Mi Planta"))
widget.mostrar()
El widget incluye:
- Slider de evolución: Controla el nivel del tema (1 a n)
- Botón Evolucionar: Avanza un nivel (+)
- Botón Penalizar: Retrocede un nivel (−)
- Botón Reset: Reinicia a nivel 1
- Vista en vivo: Arte ASCII actualizado dinámicamente
Requiere: pip install ipywidgets
🐳 Ejecución Local con Docker
Si deseas probar la interfaz completa y correr los tests automatizados en un entorno aislado sin modificar los permisos de red de tu máquina anfitriona, el proyecto incluye una configuración de Docker lista para usar.
Clona este repositorio y ejecuta:
docker compose up --build
Esto instalará la librería en modo editable, ejecutará las pruebas con pytest o levantará el panel interactivo directamente en el contenedor.
🏗️ Arquitectura y Extensión
Si deseas crear tus propios temas, simplemente hereda de la clase abstracta TemaBase:
from zen_focus.base import TemaBase
class MiTemaCustom(TemaBase):
def evolucionar(self):
...
def penalizar(self):
...
def renderizar(self) -> str:
...
Project details
Release history Release notifications | RSS feed
Download files
Download the file for your platform. If you're not sure which to choose, learn more about installing packages.
Source Distribution
Built Distribution
Filter files by name, interpreter, ABI, and platform.
If you're not sure about the file name format, learn more about wheel file names.
Copy a direct link to the current filters
File details
Details for the file zen_focus-0.2.6.tar.gz.
File metadata
- Download URL: zen_focus-0.2.6.tar.gz
- Upload date:
- Size: 17.5 kB
- Tags: Source
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f0c9211922b8bcd54674aa3278088006ac826a590220081495947b33dde8ee1b
|
|
| MD5 |
ed58aca3d250bd870e48bb106063eaa9
|
|
| BLAKE2b-256 |
14166eae60e430a5bd629beaf9531360d86fd9cb18c42b18aea26343a7466367
|
File details
Details for the file zen_focus-0.2.6-py3-none-any.whl.
File metadata
- Download URL: zen_focus-0.2.6-py3-none-any.whl
- Upload date:
- Size: 19.3 kB
- Tags: Python 3
- Uploaded using Trusted Publishing? No
- Uploaded via: twine/6.2.0 CPython/3.14.3
File hashes
| Algorithm | Hash digest | |
|---|---|---|
| SHA256 |
f3433b3e8048c7e5cb808b0a1290a190a55a4f05ca0ea61939c7584fd2c6fa69
|
|
| MD5 |
d31bae8d6464c62c5335b420e09da3a9
|
|
| BLAKE2b-256 |
ce51cc9f76c698c71beada896ec2f67d6354867f6abae4c6c25b67feef10110d
|