Skip to content

Commit 33741a5

Browse files
Normalize docs and add class zero diagnostic
1 parent b4c18c2 commit 33741a5

122 files changed

Lines changed: 4464 additions & 7613 deletions

File tree

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

README.md

Lines changed: 38 additions & 62 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,4 @@
1-
# 🧭 Python Data Science Bootcamp
1+
# Python Data Science Bootcamp
22

33
[![CI](https://github.com/vladimiracunadev-create/python-data-science-bootcamp/actions/workflows/ci.yml/badge.svg?branch=master)](https://github.com/vladimiracunadev-create/python-data-science-bootcamp/actions/workflows/ci.yml)
44
[![Security](https://github.com/vladimiracunadev-create/python-data-science-bootcamp/actions/workflows/security.yml/badge.svg?branch=master)](https://github.com/vladimiracunadev-create/python-data-science-bootcamp/actions/workflows/security.yml)
@@ -11,26 +11,22 @@ Base de capacitacion tecnica para Python y Data Science orientada a clases reale
1111

1212
No es solo un repo de materiales. Reune curriculum modular, laboratorio interactivo local, portal del alumno, presentacion institucional y una familia documental que separa producto, operacion, seguridad y audiencias.
1313

14-
---
14+
## Estado actual del producto
1515

16-
## 🧭 Estado actual del producto
17-
18-
> Estado: base operativa
19-
> Superficies publicas: portal del alumno + vista institucional
20-
> Superficie local: laboratorio Flask con runner y notebooks
16+
> Estado: base operativa
17+
> Superficies publicas: portal del alumno + vista institucional
18+
> Superficie local: laboratorio Flask con runner y notebooks
2119
> Postura de despliegue: local-first, no internet abierta sin capas adicionales
2220
23-
## Que resuelve hoy este repositorio
21+
## Que resuelve hoy este repositorio
2422

2523
- una ruta concreta para ensenar Python y Data Science con progresion real;
2624
- un entorno local de clase para visualizar materiales, cargar notebooks y ejecutar codigo;
2725
- una superficie publica para alumnos y otra para stakeholders;
2826
- una base reusable para entrevistas, propuestas y futuras cohortes;
2927
- una postura documental mas cercana a producto que a inventario de archivos.
3028

31-
---
32-
33-
## 👥 Rutas recomendadas segun perfil
29+
## Rutas recomendadas segun perfil
3430

3531
| Perfil | Documento de entrada | Que mirar primero |
3632
|---|---|---|
@@ -44,9 +40,7 @@ No es solo un repo de materiales. Reune curriculum modular, laboratorio interact
4440

4541
Si no sabes por donde entrar, usa [docs/INDEX.md](docs/INDEX.md).
4642

47-
---
48-
49-
## ⏱ Como leer este repo segun tiempo disponible
43+
## Como leer este repo segun tiempo disponible
5044

5145
| Tiempo | Secuencia recomendada | Resultado esperado |
5246
|---|---|---|
@@ -56,77 +50,69 @@ Si no sabes por donde entrar, usa [docs/INDEX.md](docs/INDEX.md).
5650

5751
Eso evita leer la carpeta `docs/` como una coleccion plana. La documentacion esta pensada como sistema y no como inventario.
5852

59-
---
60-
61-
## 🧱 Superficies del producto
53+
## Superficies del producto
6254

6355
| Superficie | Rol | Estado |
6456
|---|---|---|
6557
| Laboratorio interactivo (`app/`) | entorno local de clase, notebooks y runner | operativo |
6658
| Portal del alumno (`site/`) | punto de entrada oficial para estudiantes | operativo |
6759
| Vista institucional (`site/product/`) | presentacion visual del producto | operativa |
68-
| Curriculum modular (`classes/`) | base pedagogica reusable 12 clases con notebooks documentados | operativo |
60+
| Curriculum modular (`classes/`) | base pedagogica reusable con clase 0 diagnostica y 12 clases con notebooks documentados | operativo |
6961
| Instalador Windows (`launcher.py` + `bootcamp.spec` + `installer/`) | empaqueta el laboratorio como .exe instalable sin Python | listo para build |
7062
| App Android (`mobile/`) | app Expo/React Native con contenido embebido + integracion Colab | listo para build |
7163
| PDFs (`docs/pdfs/`) | apoyo para reunion, evaluacion e impresion | operativo |
7264

7365
La fuente de verdad para esta taxonomia vive en [docs/CATALOGO_PRODUCTO.md](docs/CATALOGO_PRODUCTO.md).
7466

75-
---
76-
77-
## 🏗 Arquitectura en una mirada
67+
## Arquitectura en una mirada
7868

7969
```mermaid
8070
graph LR
81-
INST["Institucion"] --> PRODUCT["site/product/"]
82-
ALUM["Alumno"] --> PORTAL["site/"]
83-
ALUM --> MOBILE["mobile/ App Android"]
84-
DOC["Docente"] --> LAB["app/ Laboratorio Flask"]
85-
DOC --> WIN["launcher.py Instalador Windows"]
86-
87-
PRODUCT --> DOCS["docs/"]
88-
PORTAL --> DOCS
89-
MOBILE --> CLASSES["classes/ 12 clases"]
90-
MOBILE --> COLAB["Google Colab"]
91-
LAB --> CLASSES
92-
LAB --> DATA["datasets/"]
93-
LAB --> NOTEBOOKS["app/notebooks/"]
94-
LAB --> SAVED["app/saved_notebooks/"]
95-
WIN --> LAB
71+
INST["Institucion"] --> PRODUCT["site/product/"]
72+
ALUM["Alumno"] --> PORTAL["site/"]
73+
ALUM --> MOBILE["mobile/ App Android"]
74+
DOC["Docente"] --> LAB["app/ Laboratorio Flask"]
75+
DOC --> WIN["launcher.py Instalador Windows"]
76+
77+
PRODUCT --> DOCS["docs/"]
78+
PORTAL --> DOCS
79+
MOBILE --> CLASSES["classes/ clase 0 + 12 clases"]
80+
MOBILE --> COLAB["Google Colab"]
81+
LAB --> CLASSES
82+
LAB --> DATA["datasets/"]
83+
LAB --> NOTEBOOKS["app/notebooks/"]
84+
LAB --> SAVED["app/saved_notebooks/"]
85+
WIN --> LAB
9686
```
9787

9888
La arquitectura completa, con flujos y fronteras, esta en [docs/ARQUITECTURA_PRODUCTO.md](docs/ARQUITECTURA_PRODUCTO.md).
9989

100-
---
101-
102-
## 🚀 Capacidades actuales
90+
## Capacidades actuales
10391

104-
### 📚 Curriculum y pedagogia
92+
### Curriculum y pedagogia
10593

106-
- 12 clases modulares;
94+
- clase 0 diagnostica + 12 clases modulares;
10795
- ejercicios, tareas, notebooks y soluciones;
10896
- datasets sinteticos para practica;
10997
- guias de instructor, metodologia y evaluacion;
11098
- ruta inicial acotada para contexto escolar.
11199

112-
### 💻 Laboratorio interactivo
100+
### Laboratorio interactivo
113101

114102
- app Flask con visualizacion de clases;
115103
- carga de notebooks base;
116104
- ejecucion de codigo Python en navegador;
117105
- guardado de notebooks de practica;
118106
- endpoints `GET /health` y `GET /ready`.
119107

120-
### 🖼 Presentacion y evaluacion
108+
### Presentacion y evaluacion
121109

122110
- landing publica para alumnos en GitHub Pages;
123111
- vista institucional HTML separada del portal del alumno;
124112
- PDFs listos para preparacion personal y muestra del producto;
125113
- guia de evaluacion rapida para entrevista o revision externa.
126114

127-
---
128-
129-
## ⚡ Inicio rapido
115+
## Inicio rapido
130116

131117
### Opcion A - entorno virtual
132118

@@ -151,9 +137,7 @@ docker compose up --build
151137
docker compose -f docker-compose.prod.yml up -d --build
152138
```
153139

154-
---
155-
156-
## 🔁 Validacion y CI/CD
140+
## Validacion y CI/CD
157141

158142
```bash
159143
pytest
@@ -176,9 +160,7 @@ Eso cubre:
176160
- escaneo estatico de seguridad;
177161
- despliegue del portal del alumno a GitHub Pages.
178162

179-
---
180-
181-
## 🔐 Seguridad y limites
163+
## Seguridad y limites
182164

183165
Protecciones actuales:
184166

@@ -201,9 +183,7 @@ Limites actuales:
201183

202184
Ver detalle en [SECURITY.md](SECURITY.md).
203185

204-
---
205-
206-
## 🗺 Mapa documental
186+
## Mapa documental
207187

208188
| Documento | Rol |
209189
|---|---|
@@ -222,24 +202,20 @@ Ver detalle en [SECURITY.md](SECURITY.md).
222202

223203
> La documentacion de preparacion para entrevista y las notas internas del maintainer viven en `docs/entrevista/` y `docs/maintainer/` respectivamente. Ver [docs/INDEX.md](docs/INDEX.md) para el mapa completo.
224204
225-
---
226-
227-
## ✅ Lo que este repo si es
205+
## Lo que este repo si es
228206

229207
- una base seria de capacitacion tecnica;
230208
- un sistema que integra contenido, practica y presentacion;
231209
- una muestra de criterio pedagogico y operacional;
232210
- una propuesta que puede empezar acotada y crecer sin rehacerse.
233211

234-
## 🚫 Lo que este repo no vende
212+
## Lo que este repo no vende
235213

236214
- una plataforma multiusuario endurecida para internet abierta;
237215
- una app movil ya operativa;
238216
- una promesa de personalizacion infinita antes de cerrar condiciones;
239217
- una profundidad total en todas las direcciones desde la primera version escolar.
240218

241-
---
242-
243-
## 💡 Idea fuerza
219+
## Idea fuerza
244220

245221
El valor de este proyecto no depende de competir contra una tecnologia puntual. Su valor esta en traducir herramientas a aprendizaje real, con secuencia pedagogica, criterio docente, operacion responsable y una base documental que permite evaluarlo como producto.

RUNBOOK.md

Lines changed: 16 additions & 16 deletions
Original file line numberDiff line numberDiff line change
@@ -1,10 +1,10 @@
1-
# 🛠 RUNBOOK
1+
# RUNBOOK
22

33
> Guia de operacion diaria, smoke checks y recuperacion basica para `python-data-science-bootcamp`.
44
5-
## Arranque estandar
5+
## Arranque estandar
66

7-
### 🐍 Entorno virtual
7+
### Entorno virtual
88

99
```powershell
1010
python -m venv .venv
@@ -13,53 +13,53 @@ pip install -r requirements.txt
1313
python run_bootcamp.py
1414
```
1515

16-
### 🐳 Docker Compose
16+
### Docker Compose
1717

1818
```powershell
1919
docker compose up --build
2020
```
2121

22-
### 🛡 Compose endurecido
22+
### Compose endurecido
2323

2424
```powershell
2525
docker compose -f docker-compose.prod.yml up -d --build
2626
```
2727

28-
## Smoke checks minimos
28+
## Smoke checks minimos
2929

30-
### ❤️ Health
30+
### Health
3131

3232
```powershell
3333
Invoke-WebRequest -UseBasicParsing http://127.0.0.1:8000/health
3434
```
3535

36-
### 🟢 Readiness
36+
### Readiness
3737

3838
```powershell
3939
Invoke-WebRequest -UseBasicParsing http://127.0.0.1:8000/ready
4040
```
4141

42-
### 📚 Clase disponible
42+
### Clase disponible
4343

4444
```powershell
4545
Invoke-WebRequest -UseBasicParsing http://127.0.0.1:8000/api/classes
4646
```
4747

48-
### Ejecucion basica
48+
### Ejecucion basica
4949

5050
```powershell
5151
Invoke-WebRequest -UseBasicParsing -Method Post -ContentType 'application/json' -Body '{"notebook_id":"smoke","code":"2+2"}' http://127.0.0.1:8000/api/execute
5252
```
5353

54-
## 🔁 Validaciones de repo
54+
## Validaciones de repo
5555

5656
```powershell
5757
.\.venv\Scripts\python.exe -m pytest
5858
.\.venv\Scripts\python.exe -m pip install ruff
5959
.\.venv\Scripts\python.exe -m ruff check .
6060
```
6161

62-
## 🚨 Incidentes comunes
62+
## Incidentes comunes
6363

6464
| Incidente | Que revisar |
6565
|---|---|
@@ -69,20 +69,20 @@ Invoke-WebRequest -UseBasicParsing -Method Post -ContentType 'application/json'
6969
| Docker expone mal el puerto | confirmar mapeo `127.0.0.1:8000:8000` |
7070
| GitHub Pages no se publica | confirmar que el workflow corre sobre `master` o `main` y que `site/` existe |
7171

72-
## Apagado
72+
## Apagado
7373

74-
### 💻 Proceso local
74+
### Proceso local
7575

7676
Detener la terminal donde corre `python run_bootcamp.py`.
7777

78-
### 🐳 Docker
78+
### Docker
7979

8080
```powershell
8181
docker compose down
8282
docker compose -f docker-compose.prod.yml down
8383
```
8484

85-
## 🧯 Recuperacion basica
85+
## Recuperacion basica
8686

8787
- si el runner queda en estado inconsistente, reiniciar la sesion del notebook o reiniciar la app;
8888
- si el contenido guardado en `app/saved_notebooks` no se necesita, eliminarlo manualmente;

SECURITY.md

Lines changed: 11 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -1,19 +1,19 @@
1-
# 🔐 SECURITY
1+
# SECURITY
22

33
> Postura de seguridad actual y hardening recomendado para `python-data-science-bootcamp`.
44
5-
## 🧭 Estado actual
5+
## Estado actual
66

77
Este repositorio esta pensado para uso local, docente y de laboratorio. La app interactiva permite ejecutar codigo Python, por lo que hoy su postura de seguridad es adecuada para entornos controlados, demos guiadas y maquinas administradas por el docente, pero no para exposicion abierta a internet sin capas adicionales.
88

9-
## 🧾 Versiones soportadas
9+
## Versiones soportadas
1010

1111
| Linea | Estado |
1212
|---|---|
1313
| `2.x` | soportada |
1414
| `1.x` | sin soporte activo |
1515

16-
## 🛡 Protecciones que existen hoy
16+
## Protecciones que existen hoy
1717

1818
- validacion de `slug` e identificadores para evitar rutas arbitrarias;
1919
- limite de payload por request;
@@ -24,7 +24,7 @@ Este repositorio esta pensado para uso local, docente y de laboratorio. La app i
2424
- defaults de arranque local via `127.0.0.1`;
2525
- `docker-compose` enlazado a `127.0.0.1`.
2626

27-
## 🚧 Lo que no existe todavia
27+
## Lo que no existe todavia
2828

2929
- autenticacion de usuarios;
3030
- aislamiento fuerte por estudiante;
@@ -33,35 +33,35 @@ Este repositorio esta pensado para uso local, docente y de laboratorio. La app i
3333
- auditoria estructurada;
3434
- sandbox de sistema operativo para ejecucion de codigo no confiable.
3535

36-
## 🔒 Recomendaciones de hardening
36+
## Recomendaciones de hardening
3737

38-
### 🏫 Para uso local y docente
38+
### Para uso local y docente
3939

4040
- mantener `BOOTCAMP_HOST=127.0.0.1`;
4141
- ejecutar en maquina controlada por el docente;
4242
- limpiar notebooks guardados antes de compartir el repo o una imagen.
4343

44-
### 🌐 Si se publica fuera del equipo local
44+
### Si se publica fuera del equipo local
4545

4646
- poner la app detras de un reverse proxy con TLS;
4747
- exigir autenticacion externa antes de abrir el runner;
4848
- aplicar rate limiting en proxy o gateway;
4949
- registrar accesos y errores en logs centralizados;
5050
- separar entorno demo de cualquier entorno con usuarios reales.
5151

52-
## Riesgos aceptados
52+
## Riesgos aceptados
5353

5454
- el runner ejecuta codigo Python del usuario dentro del proceso de la app;
5555
- el timeout reduce riesgo de bloqueos, pero no reemplaza un sandbox real;
5656
- el proyecto prioriza facilidad de uso en laboratorio por sobre postura multiusuario endurecida.
5757

58-
## 🔎 Nota sobre analisis estatico
58+
## Nota sobre analisis estatico
5959

6060
- el archivo `app/execution_engine.py` contiene usos intencionales de `exec` y `eval` para emular una experiencia tipo notebook en laboratorio local;
6161
- esas lineas estan marcadas de forma localizada para Bandit, no porque el riesgo no exista, sino porque es una capacidad central del producto;
6262
- la mitigacion real no es "eliminar exec", sino mantener el runner en entorno controlado, con localhost por defecto, timeout, limites de payload y sin exposicion abierta.
6363

64-
## 📬 Reporte responsable
64+
## Reporte responsable
6565

6666
Si detectas una vulnerabilidad:
6767

0 commit comments

Comments
 (0)