# Ingeniería de Datos - 2026


<!-- WARNING: THIS FILE WAS AUTOGENERATED! DO NOT EDIT! -->

> Apuntes del curso de Ingeniería de Datos

Bienvenido/a al repositorio de **ID_2026**.  
Este proyecto está completamente preconfigurado con un **Dev Container**
en Visual Studio Code que incluye todas las herramientas necesarias para
análisis de seguridad (SBOM, CodeQL y Grype).

------------------------------------------------------------------------

## 📋 Requisitos Previos

Antes de comenzar, asegúrate de tener instalados:

<table style="width:100%;">
<colgroup>
<col style="width: 48%" />
<col style="width: 29%" />
<col style="width: 22%" />
</colgroup>
<thead>
<tr>
<th>Herramienta</th>
<th>Enlace</th>
<th>Nota</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Docker</strong></td>
<td><a href="https://www.docker.com/get-started"
class="uri">https://www.docker.com/get-started</a></td>
<td>Debe estar corriendo en tu sistema</td>
</tr>
<tr>
<td><strong>Visual Studio Code</strong></td>
<td><a href="https://code.visualstudio.com/"
class="uri">https://code.visualstudio.com/</a></td>
<td>Editor recomendado</td>
</tr>
<tr>
<td><strong>Dev Containers Extension</strong></td>
<td><a
href="https://marketplace.visualstudio.com/items?itemName=ms-vscode-remote.remote-containers">Extensión</a></td>
<td>Necesaria para abrir el Dev Container</td>
</tr>
</tbody>
</table>

### ✅ Verificar Docker

Abre una terminal y verifica que Docker está correctamente instalado:

``` bash
docker --version
docker run hello-world
```

Deberías ver la versión de Docker y un mensaje de éxito.

------------------------------------------------------------------------

## 🚀 Inicio Rápido (5-10 minutos)

### Paso 1: Clonar el repositorio

``` bash
git clone https://github.com/dci-courses/id_2026.git
cd id_2026
```

### Paso 2: Abrir en VS Code

``` bash
code .
```

### Paso 3: Reconstruir y Abrir el Dev Container

Una vez que VS Code esté abierto:

1.  Presiona **`Ctrl + Shift + P`** (Windows/Linux) o
    **`Cmd + Shift + P`** (Mac)
2.  Escribe: `Dev Containers: Rebuild and Reopen in Container`
3.  Selecciona la opción y presiona Enter

**Esto iniciará el proceso de construcción del contenedor.**

### Paso 4: Esperar a la Construcción ⏳

Durante la construcción, se realizarán:

- ✅ Instalación de dependencias Python
- ✅ Configuración de Jupyter Kernel
- ✅ Descarga de CodeQL query packs
- ✅ Actualización de BD de Grype
- ✅ Verificación de herramientas

**Esto puede tomar 3-10 minutos la primera vez.** Ten paciencia y no
cierres VS Code.

Verás mensajes en la terminal indicando el progreso:

    Building image...
    [... logs del proceso ...]
    Successfully built container

### Paso 5: Archivo de Bienvenida

Después de la construcción, se abrirá automáticamente **`WELCOME.md`**
con:

- 📚 Guía completa del proyecto
- 🚀 Instrucciones de uso
- 📊 Descripción de scripts disponibles
- ❓ Solución de problemas comunes

Si no se abre automáticamente, puedes abrirlo manualmente: - Presiona
`Ctrl + O` - Busca `WELCOME.md`

### Paso 6: Configura el kernel de Jupyter

1.  Abre cualquier notebook `.ipynb`
2.  Al ejecutar una celda por primera vez, selecciona el kernel:
    **Python (ingenieria-datos)**

------------------------------------------------------------------------

## ⚙️ Qué Se Instala Automáticamente

El Dev Container preinstala automáticamente:

### 🐍 Python y Herramientas

<table>
<thead>
<tr>
<th>Herramienta</th>
<th>Versión</th>
<th>Uso</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>Python</strong></td>
<td>3.11</td>
<td>Lenguaje base</td>
</tr>
<tr>
<td><strong>uv</strong></td>
<td>Latest</td>
<td>Gestor de dependencias (más rápido que pip)</td>
</tr>
<tr>
<td><strong>Jupyter</strong></td>
<td>Latest</td>
<td>Notebooks interactivos</td>
</tr>
<tr>
<td><strong>Pandas</strong></td>
<td>Latest</td>
<td>Análisis de datos</td>
</tr>
</tbody>
</table>

### 🔐 Herramientas de Seguridad

<table>
<colgroup>
<col style="width: 48%" />
<col style="width: 33%" />
<col style="width: 18%" />
</colgroup>
<thead>
<tr>
<th>Herramienta</th>
<th>Versión</th>
<th>Uso</th>
</tr>
</thead>
<tbody>
<tr>
<td><strong>CodeQL CLI</strong></td>
<td>2.25.1</td>
<td>Análisis estático de seguridad (vulnerabilidades en código)</td>
</tr>
<tr>
<td><strong>Grype</strong></td>
<td>Latest</td>
<td>Escaneo de vulnerabilidades en dependencias</td>
</tr>
<tr>
<td><strong>Syft</strong></td>
<td>Latest</td>
<td>Generación de SBOMs (inventario de componentes)</td>
</tr>
<tr>
<td><strong>Node.js</strong></td>
<td>20</td>
<td>Necesario para análisis JavaScript con CodeQL</td>
</tr>
</tbody>
</table>

### 📦 Query Packs de CodeQL

Se descargan automáticamente: - `codeql/python-queries` - Análisis de
Python - `codeql/javascript-queries` - Análisis de
JavaScript/TypeScript - `codeql/java-queries` - Análisis de Java

------------------------------------------------------------------------

## ✨ Después de Abrir el Contenedor

### 1. Verificar que Todo Funciona

Abre una terminal en VS Code (``` Ctrl + `` ```) y ejecuta:

``` bash
uv run scripts/generate_codeql.py --diagnose
uv run scripts/generate_grype.py --diagnose
```

Deberías ver:

    ✓ CodeQL CLI: CodeQL version 2.25.1
    ✓ Grype CLI: Grype version X.X.X
    ✓ Node.js: v20.x.x
    ✓ npm: x.x.x
    ✓ Query pack codeql/python-queries disponible
    ✓ Query pack codeql/javascript-queries disponible
    ✓ Grype DB status: Database ready

### 2. Explorar el Proyecto

Lee el contenido de: - **`WELCOME.md`**: Guía general del proyecto -
**`nbs/sbom/generacion_sbom.ipynb`**: Notebook para generar SBOMs -
**`nbs/vuln/generacion_codeql.ipynb`**: Notebook para ejecutar análisis
estático (CodeQL) - **`nbs/vuln/generacion_grype.ipynb`**: Notebook para
escanear vulnerabilidades en dependencias (Grype)

### 3. Ejecutar tu Primer Análisis

Idealmente puedes realizar el proceso a través de los notebooks para la
mejor experiencia, sin embargo, también puedes ejecutar los archivos de
forma individual.

Desde la terminal:

``` bash
# Generar SBOMs para los repositorios
uv run scripts/generate_sboms.py

# Ejecutar análisis de seguridad estático con CodeQL
uv run scripts/generate_codeql.py

# Escanear vulnerabilidades en dependencias con Grype
uv run scripts/generate_grype.py
```

Los resultados se guardarán en `data/results/`

------------------------------------------------------------------------

## 🧭 Estructura del Proyecto

    id_2026/
    ├── data/
    │   ├── repos/              # Repositorios a analizar
    │   ├── results/            # Resultados de análisis (JSON)
    │   └── repos.json          # Configuración de repositorios
    ├── nbs/                    # Notebooks Jupyter
    │   ├── sbom/               # Análisis de SBOMs
    │   └── vuln/               # Análisis de vulnerabilidades
    │       ├── generacion_codeql.ipynb          # Análisis estático
    │       ├── explicacion_script_codeql.ipynb
    │       ├── generacion_grype.ipynb           # Escaneo de dependencias
    │       └── explicacion_script_grype.ipynb
    ├── scripts/                # Automatización
    │   ├── generate_sboms.py
    │   ├── generate_codeql.py
    │   ├── generate_grype.py
    │   └── add_submodules.py
    ├── .devcontainer/          # Configuración del Dev Container
    ├── README.md               # Será generado automáticamente
    └── WELCOME.md              # Guía general (se abre automáticamente)

------------------------------------------------------------------------

## 🐛 Solución de Problemas

### ❌ “Dev Containers extension not found”

**Solución**: Instala la extensión desde el Marketplace de VS Code -
Presiona `Ctrl + Shift + X` - Busca “Dev Containers” - Instala la
extensión oficial de Microsoft

### ❌ “Docker daemon is not running”

**Solución**: Asegúrate de que Docker Desktop esté abierto - Windows:
Abre Docker Desktop desde el menú Inicio - Mac: Abre Docker Desktop
desde Applications - Linux: Ejecuta `sudo systemctl start docker`

### ❌ “La construcción del contenedor es muy lenta”

**Normal para la primera vez** (puede tomar 5-10 minutos) - Se descargan
imágenes base - Se compilan herramientas como CodeQL - Se descarga la BD
de Grype - Próximas aperturas serán mucho más rápidas

### ❌ “Python kernel no aparece en Jupyter”

**Solución**: Reinicia el kernel manualmente 1. Abre un notebook
`.ipynb` 2. Presiona `Ctrl + Shift + P` 3. Selecciona
`Jupyter: Select Kernel` 4. Elige `Python (ingenieria-datos)`

### ❌ “CodeQL análisis falla”

**Ejecuta el diagnóstico**:

``` bash
uv run scripts/generate_codeql.py --diagnose
```

Verifica que todos los componentes tengan ✓

### ❌ “Grype análisis falla”

**Ejecuta el diagnóstico**:

``` bash
uv run scripts/generate_grype.py --diagnose
```

Verifica que Grype CLI y su BD estén disponibles

------------------------------------------------------------------------

## 💡 Tips Útiles

1.  **Primeros comandos después de abrir el contenedor:**

    ``` bash
    # Ver qué repositorios están listos para analizar
    ls data/repos/

    # Ver resultados previos
    ls data/results/
    ```

2.  **Agregar nuevos repositorios:**

    - Edita `data/repos.json`
    - Ejecuta:
      `uv run scripts/add_submodules.py && git submodule update --init --recursive`
    - Corre los análisis nuevamente

3.  **Reconstruir el contenedor** si necesitas actualizar dependencias:

    - `Ctrl + Shift + P` → `Dev Containers: Rebuild Container`

4.  **Acceder a la terminal dentro del contenedor:**

    - \`Ctrl + \`\` para abrir la terminal integrada

------------------------------------------------------------------------

## 📚 Próximos Pasos

1.  **Lee `WELCOME.md`** para entender la estructura completa
2.  **Explora los notebooks** en `nbs/` para ver ejemplos de uso
3.  **Ejecuta `--diagnose`** para verificar herramientas
4.  **Corre tu primer análisis** con los repositorios incluidos

------------------------------------------------------------------------

## ❓ ¿Necesitas Ayuda?

- Consulta **`WELCOME.md`** para instrucciones detalladas
- Revisa los **notebooks** para ejemplos paso a paso
- Verifica el **diagnóstico**:
  `uv run scripts/generate_codeql.py --diagnose` y
  `uv run scripts/generate_grype.py --diagnose`
