You signed in with another tab or window. Reload to refresh your session.You signed out in another tab or window. Reload to refresh your session.You switched accounts on another tab or window. Reload to refresh your session.Dismiss alert
@@ -11,26 +11,22 @@ Base de capacitacion tecnica para Python y Data Science orientada a clases reale
11
11
12
12
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.
13
13
14
-
---
14
+
## Estado actual del producto
15
15
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
21
19
> Postura de despliegue: local-first, no internet abierta sin capas adicionales
22
20
23
-
## ✨ Que resuelve hoy este repositorio
21
+
## Que resuelve hoy este repositorio
24
22
25
23
- una ruta concreta para ensenar Python y Data Science con progresion real;
26
24
- un entorno local de clase para visualizar materiales, cargar notebooks y ejecutar codigo;
27
25
- una superficie publica para alumnos y otra para stakeholders;
28
26
- una base reusable para entrevistas, propuestas y futuras cohortes;
29
27
- una postura documental mas cercana a producto que a inventario de archivos.
30
28
31
-
---
32
-
33
-
## 👥 Rutas recomendadas segun perfil
29
+
## Rutas recomendadas segun perfil
34
30
35
31
| Perfil | Documento de entrada | Que mirar primero |
36
32
|---|---|---|
@@ -44,9 +40,7 @@ No es solo un repo de materiales. Reune curriculum modular, laboratorio interact
44
40
45
41
Si no sabes por donde entrar, usa [docs/INDEX.md](docs/INDEX.md).
46
42
47
-
---
48
-
49
-
## ⏱ Como leer este repo segun tiempo disponible
43
+
## Como leer este repo segun tiempo disponible
50
44
51
45
| Tiempo | Secuencia recomendada | Resultado esperado |
52
46
|---|---|---|
@@ -56,77 +50,69 @@ Si no sabes por donde entrar, usa [docs/INDEX.md](docs/INDEX.md).
56
50
57
51
Eso evita leer la carpeta `docs/` como una coleccion plana. La documentacion esta pensada como sistema y no como inventario.
58
52
59
-
---
60
-
61
-
## 🧱 Superficies del producto
53
+
## Superficies del producto
62
54
63
55
| Superficie | Rol | Estado |
64
56
|---|---|---|
65
57
| Laboratorio interactivo (`app/`) | entorno local de clase, notebooks y runner | operativo |
66
58
| Portal del alumno (`site/`) | punto de entrada oficial para estudiantes | operativo |
67
59
| 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 |
69
61
| Instalador Windows (`launcher.py` + `bootcamp.spec` + `installer/`) | empaqueta el laboratorio como .exe instalable sin Python | listo para build |
70
62
| App Android (`mobile/`) | app Expo/React Native con contenido embebido + integracion Colab | listo para build |
71
63
| PDFs (`docs/pdfs/`) | apoyo para reunion, evaluacion e impresion | operativo |
72
64
73
65
La fuente de verdad para esta taxonomia vive en [docs/CATALOGO_PRODUCTO.md](docs/CATALOGO_PRODUCTO.md).
74
66
75
-
---
76
-
77
-
## 🏗 Arquitectura en una mirada
67
+
## Arquitectura en una mirada
78
68
79
69
```mermaid
80
70
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
96
86
```
97
87
98
88
La arquitectura completa, con flujos y fronteras, esta en [docs/ARQUITECTURA_PRODUCTO.md](docs/ARQUITECTURA_PRODUCTO.md).
99
89
100
-
---
101
-
102
-
## 🚀 Capacidades actuales
90
+
## Capacidades actuales
103
91
104
-
### 📚 Curriculum y pedagogia
92
+
### Curriculum y pedagogia
105
93
106
-
- 12 clases modulares;
94
+
-clase 0 diagnostica + 12 clases modulares;
107
95
- ejercicios, tareas, notebooks y soluciones;
108
96
- datasets sinteticos para practica;
109
97
- guias de instructor, metodologia y evaluacion;
110
98
- ruta inicial acotada para contexto escolar.
111
99
112
-
### 💻 Laboratorio interactivo
100
+
### Laboratorio interactivo
113
101
114
102
- app Flask con visualizacion de clases;
115
103
- carga de notebooks base;
116
104
- ejecucion de codigo Python en navegador;
117
105
- guardado de notebooks de practica;
118
106
- endpoints `GET /health` y `GET /ready`.
119
107
120
-
### 🖼 Presentacion y evaluacion
108
+
### Presentacion y evaluacion
121
109
122
110
- landing publica para alumnos en GitHub Pages;
123
111
- vista institucional HTML separada del portal del alumno;
124
112
- PDFs listos para preparacion personal y muestra del producto;
125
113
- guia de evaluacion rapida para entrevista o revision externa.
126
114
127
-
---
128
-
129
-
## ⚡ Inicio rapido
115
+
## Inicio rapido
130
116
131
117
### Opcion A - entorno virtual
132
118
@@ -151,9 +137,7 @@ docker compose up --build
151
137
docker compose -f docker-compose.prod.yml up -d --build
152
138
```
153
139
154
-
---
155
-
156
-
## 🔁 Validacion y CI/CD
140
+
## Validacion y CI/CD
157
141
158
142
```bash
159
143
pytest
@@ -176,9 +160,7 @@ Eso cubre:
176
160
- escaneo estatico de seguridad;
177
161
- despliegue del portal del alumno a GitHub Pages.
178
162
179
-
---
180
-
181
-
## 🔐 Seguridad y limites
163
+
## Seguridad y limites
182
164
183
165
Protecciones actuales:
184
166
@@ -201,9 +183,7 @@ Limites actuales:
201
183
202
184
Ver detalle en [SECURITY.md](SECURITY.md).
203
185
204
-
---
205
-
206
-
## 🗺 Mapa documental
186
+
## Mapa documental
207
187
208
188
| Documento | Rol |
209
189
|---|---|
@@ -222,24 +202,20 @@ Ver detalle en [SECURITY.md](SECURITY.md).
222
202
223
203
> 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.
224
204
225
-
---
226
-
227
-
## ✅ Lo que este repo si es
205
+
## Lo que este repo si es
228
206
229
207
- una base seria de capacitacion tecnica;
230
208
- un sistema que integra contenido, practica y presentacion;
231
209
- una muestra de criterio pedagogico y operacional;
232
210
- una propuesta que puede empezar acotada y crecer sin rehacerse.
233
211
234
-
## 🚫 Lo que este repo no vende
212
+
## Lo que este repo no vende
235
213
236
214
- una plataforma multiusuario endurecida para internet abierta;
237
215
- una app movil ya operativa;
238
216
- una promesa de personalizacion infinita antes de cerrar condiciones;
239
217
- una profundidad total en todas las direcciones desde la primera version escolar.
240
218
241
-
---
242
-
243
-
## 💡 Idea fuerza
219
+
## Idea fuerza
244
220
245
221
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.
Copy file name to clipboardExpand all lines: SECURITY.md
+11-11Lines changed: 11 additions & 11 deletions
Display the source diff
Display the rich diff
Original file line number
Diff line number
Diff line change
@@ -1,19 +1,19 @@
1
-
# 🔐 SECURITY
1
+
# SECURITY
2
2
3
3
> Postura de seguridad actual y hardening recomendado para `python-data-science-bootcamp`.
4
4
5
-
## 🧭 Estado actual
5
+
## Estado actual
6
6
7
7
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.
8
8
9
-
## 🧾 Versiones soportadas
9
+
## Versiones soportadas
10
10
11
11
| Linea | Estado |
12
12
|---|---|
13
13
|`2.x`| soportada |
14
14
|`1.x`| sin soporte activo |
15
15
16
-
## 🛡 Protecciones que existen hoy
16
+
## Protecciones que existen hoy
17
17
18
18
- validacion de `slug` e identificadores para evitar rutas arbitrarias;
19
19
- limite de payload por request;
@@ -24,7 +24,7 @@ Este repositorio esta pensado para uso local, docente y de laboratorio. La app i
24
24
- defaults de arranque local via `127.0.0.1`;
25
25
-`docker-compose` enlazado a `127.0.0.1`.
26
26
27
-
## 🚧 Lo que no existe todavia
27
+
## Lo que no existe todavia
28
28
29
29
- autenticacion de usuarios;
30
30
- aislamiento fuerte por estudiante;
@@ -33,35 +33,35 @@ Este repositorio esta pensado para uso local, docente y de laboratorio. La app i
33
33
- auditoria estructurada;
34
34
- sandbox de sistema operativo para ejecucion de codigo no confiable.
35
35
36
-
## 🔒 Recomendaciones de hardening
36
+
## Recomendaciones de hardening
37
37
38
-
### 🏫 Para uso local y docente
38
+
### Para uso local y docente
39
39
40
40
- mantener `BOOTCAMP_HOST=127.0.0.1`;
41
41
- ejecutar en maquina controlada por el docente;
42
42
- limpiar notebooks guardados antes de compartir el repo o una imagen.
43
43
44
-
### 🌐 Si se publica fuera del equipo local
44
+
### Si se publica fuera del equipo local
45
45
46
46
- poner la app detras de un reverse proxy con TLS;
47
47
- exigir autenticacion externa antes de abrir el runner;
48
48
- aplicar rate limiting en proxy o gateway;
49
49
- registrar accesos y errores en logs centralizados;
50
50
- separar entorno demo de cualquier entorno con usuarios reales.
51
51
52
-
## ⚠ Riesgos aceptados
52
+
## Riesgos aceptados
53
53
54
54
- el runner ejecuta codigo Python del usuario dentro del proceso de la app;
55
55
- el timeout reduce riesgo de bloqueos, pero no reemplaza un sandbox real;
56
56
- el proyecto prioriza facilidad de uso en laboratorio por sobre postura multiusuario endurecida.
57
57
58
-
## 🔎 Nota sobre analisis estatico
58
+
## Nota sobre analisis estatico
59
59
60
60
- el archivo `app/execution_engine.py` contiene usos intencionales de `exec` y `eval` para emular una experiencia tipo notebook en laboratorio local;
61
61
- esas lineas estan marcadas de forma localizada para Bandit, no porque el riesgo no exista, sino porque es una capacidad central del producto;
62
62
- 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.
0 commit comments