CRISPR comenzó como un patrón de repeticiones de ADN observado en bacterias en 1987. Décadas después, los investigadores descubrieron que forma parte de un sistema de defensa microbiana; en 2012, CRISPR-Cas9 se presentó como una herramienta programable para editar ADN. Reseña histórica de la revista Journal of Bacteriology
El anuncio de Anthropic describe otro tipo de hallazgo: un sistema asociado a transcriptasas inversas, enzimas que copian ARN en ADN. Claude detectó un patrón de secuencias repetidas junto a una de estas enzimas en virus que infectan bacterias. El equipo lo llamó ART (array-associated reverse transcriptases). Su parecido con CRISPR está en la organización de las repeticiones y en que estas parecen producir ARN cortos; todavía no se ha demostrado que ART funcione como herramienta de edición genética.
Anthropic formó un grupo de investigación en biología para explorar si modelos de IA podían ayudar a descubrir sistemas biológicos en grandes bases de datos genéticas. En uno de sus primeros proyectos, agentes de Claude analizaron más de 200.000 transcriptasas inversas y seleccionaron candidatos para revisión. Tras el análisis computacional, científicos examinaron uno de ellos y realizaron pruebas de laboratorio. El equipo reporta un sistema antes no caracterizado, pero señala que aún desconoce su función. Anuncio y descripción del trabajo
Características principales
Sistema identificado: ART, compuesto por una transcriptasa inversa, un gen asociado y una serie de repeticiones de ADN.
Dónde se encontró: principalmente en bacteriófagos, virus que infectan bacterias.
Cómo se detectó: Claude buscó patrones en secuencias genéticas y propuso candidatos; especialistas revisaron y probaron uno en el laboratorio.
Escala del análisis: según Anthropic, unos 950 agentes trabajaron durante 21 horas, usando cerca de 210 millones de tokens.
Primer indicio experimental: las repeticiones parecen expresarse como varios ARN cortos.
Lo que falta saber: la función de ART y si puede tener aplicaciones biotecnológicas.
El resultado apunta a una posible nueva forma de usar IA en biología: rastrear enormes colecciones de datos, reconocer patrones poco evidentes y sugerir qué vale la pena probar en el laboratorio. Si investigaciones posteriores determinan que ART tiene una función programable, podría abrir una nueva línea de herramientas moleculares, como ocurrió con algunos sistemas CRISPR. Esa posibilidad es todavía especulativa: el anuncio presenta resultados iniciales y la función de ART sigue sin aclararse.
La noticia más sólida por ahora es el hallazgo de un sistema biológico que había pasado inadvertido y la demostración de que Claude pudo contribuir a detectarlo. Su importancia futura dependerá de que otros experimentos confirmen qué hace ART y si esa función puede aprovecharse.
En enero de 2026, Figure presentó Helix 02, un sistema que coordina el cuerpo completo del robot para combinar caminar, mantener el equilibrio y manipular objetos. La empresa mostró, entre otras tareas, a un robot descargando un lavavajillas. Sin embargo, esos sistemas aprendían en los entornos donde después trabajarían.
Helix 2.5 aborda esa limitación: Figure afirma que el robot pudo realizar tareas en casas que no había visto durante el entrenamiento, sin recopilar datos ni ajustarse en cada una. (Helix 02; Helix 2.5)
Figure entrenó Helix 2.5 con Index, su conjunto de datos de comportamiento humano, y evaluó el modelo en 30 casas del área de la Bahía de San Francisco. Según la empresa, el mismo modelo pudo ordenar salas, doblar toallas y hacer camas en viviendas desconocidas, combinando locomoción y manipulación de objetos.
Figure reporta que el modelo tuvo una tasa de éxito del 56 % en las pruebas de generalización sin entrenamiento específico para esos hogares, frente al 9 % de su comparación sin preentrenamiento en Index. Son resultados publicados por la propia empresa; la nota no equivale a una evaluación independiente. (Anuncio de Figure)
Características destacadas
Generalización a casas nuevas: probó las tareas en 30 hogares que no formaron parte de la recopilación de datos del robot.
Tres tareas con un mismo modelo base: ordenar salas, doblar toallas y hacer camas.
Coordinación de cuerpo completo: combina caminar, observar el entorno y manipular objetos durante tareas de varios pasos.
Sin ajuste en cada vivienda: Figure dice que no recogió datos ni afinó el modelo específicamente para esas casas y objetos.
Preentrenamiento con Index: el sistema parte de datos de actividad humana para intentar transferir habilidades a un robot.
Mejor resultado reportado: Figure compara un 56 % de éxito con un 9 % sin el preentrenamiento en Index. La empresa también afirma que usó la mitad de los datos específicos de tarea que en un comportamiento representativo de Helix 02.
Los robots suelen ser sensibles a cambios en el espacio: muebles, objetos y distribución pueden afectar cómo realizan una tarea. Si un modelo logra adaptarse a lugares nuevos sin volver a entrenarse allí, podría reducir el tiempo y el costo de preparación para cada instalación. El avance también apunta a una idea importante en robótica: combinar percepción, desplazamiento y manipulación para completar tareas completas, en lugar de resolver cada movimiento por separado.
Aun así, los resultados describen tres tareas domésticas y las pruebas de Figure en 30 hogares. No demuestran que el robot pueda hacer cualquier labor en cualquier casa ni que opere con fiabilidad comercial en esas condiciones.
Helix 2.5 muestra un posible paso desde robots entrenados para un sitio concreto hacia robots que puedan transferir habilidades a entornos nuevos. Los resultados son prometedores según las pruebas de Figure, pero falta comprobar cómo se sostienen con más tareas, hogares y evaluaciones independientes.
ROS —el Sistema Operativo para Robots— es un conjunto abierto de herramientas, bibliotecas y estándares que permite crear y conectar componentes de software robótico. Isaac ROS ya ofrecía paquetes optimizados para acelerar tareas como percepción, navegación y manipulación usando hardware de NVIDIA. La versión 5.0 amplía esa base con flujos de trabajo pensados para que los agentes de IA también ayuden en el desarrollo. (NVIDIA, descripción de Isaac ROS; ROS, referencia mencionada por NVIDIA)
NVIDIA anunció Isaac ROS 5.0 en ROSCon. Es una colección gratuita y de código abierto de paquetes acelerados por GPU, construidos sobre ROS. La actualización busca facilitar tanto la creación de aplicaciones robóticas como su ejecución en robots reales: incorpora soporte para agentes de IA durante el desarrollo y opciones para desplegar las aplicaciones en dispositivos Jetson, desde Orin Nano hasta Thor. (Anuncio oficial)
Características principales
Flujos de trabajo para agentes de IA: los agentes pueden ayudar con tareas de desarrollo, como configurar Isaac ROS, trabajar con sus herramientas y adaptar modelos a una aplicación robótica.
Compatibilidad con ROS Lyrical y Ubuntu 24.04: abre una vía para adoptar la versión reciente de ROS y acelera ciertas tareas en GPU.
Percepción y seguimiento de objetos: la biblioteca de inferencia de FoundationPose permite estimar y seguir la posición y orientación de objetos; NVIDIA afirma que puede hacerlo hasta 5,5 veces más rápido.
Ajuste de percepción a las cámaras: una nueva herramienta ayuda a adaptar FoundationStereo a las cámaras y condiciones del entorno de cada proyecto.
Tareas de manipulación reutilizables: incluye un flujo para “detectar, tomar y colocar” objetos que puede usarse como componente independiente.
Ejecución en el robot: es compatible con hardware NVIDIA Jetson, lo que permite procesar modelos y aplicaciones directamente en el dispositivo.
Integración con el ecosistema existente: conserva ROS como base para que los desarrolladores puedan sumar aceleración y bibliotecas de NVIDIA a sistemas construidos con herramientas ROS.
Las características y cifras son las descritas por NVIDIA en su anuncio; los resultados pueden depender del hardware y de la aplicación concreta. (Anuncio oficial)
La noticia conecta dos etapas que suelen requerir mucho trabajo de integración: programar el comportamiento de un robot y ejecutarlo en el equipo físico. Si estos paquetes y flujos reducen el tiempo necesario para conectar percepción, planificación y manipulación, podrían ayudar a que más equipos desarrollen y prueben robots para fábricas, almacenes y otras tareas. El anuncio presenta herramientas para desarrolladores; por sí solo, no demuestra que los robots puedan realizar tareas generales de forma autónoma.
Isaac ROS 5.0 amplía la infraestructura abierta de ROS con aceleración de NVIDIA y asistencia de agentes de IA. Su importancia práctica dependerá de cuánto simplifique el desarrollo y de cómo rindan esas herramientas en robots y entornos reales.
Los accesos directos o shortcuts te permiten ser más productivo. Es por eso que te enlistamos algunos de los Accesos directos en Visual Studio Code, al menos algunos de los más útiles. si estás comenzando a desarrollar es bueno que te familiarices con ellos desde el inicio.
Ctrl + P – Muestra la barra de búsqueda para buscar archivos
En Mac es: Cmd + P
Con este acceso directo navegarás entre archivos todo el tiempo. Puedes escribir el nombre del archivo y abrirlo presionando Enter.
Ctrl + Shift + P – Muestra la paleta de comandos
En Mac es: Cmd + Mayús + P
Te muestra la paleta de comandos donde puedes buscar una acción.
Ctrl + B – Alternar la barra lateral
En Mac es: Cmd + B
Muestra u oculta la barra lateral donde puedes navegar por el explorador.
Ctrl + Shift + E – Ir a la ventana del Explorador
En Mac es: Cmd + Mayús + E
Va a la ventana del Explorador donde tiene su árbol de archivos y puede navegar usando las teclas de flecha.
Ctrl + Shift + M – Muestra rápidamente errores y advertencias
En Mac es: Cmd + Mayús + M
A todo el mundo le gusta el código libre de errores. Este comando muestra el panel de problemas donde puede ver los errores y advertencias identificados.
Ctrl + Shift + L – Selección multi cursor
En Mac es: Cmd + Mayús + L
Agregue cursores adicionales para editar todas las apariciones de la selección actual. Por lo general, es menos propenso a errores que buscar y reemplazar todo.
Ctrl + D – Selección uno por uno
En Mac es: Cmd + D
Similar al anterior, pero usa Ctrl + D si deseas agregar las ocurrencias de la selección actual una por una. Cada vez que presionas la combinación de teclas, agregas una nueva aparición a la selección.
Ctrl + / – alternar comentario de línea
En Mac es: Cmd + /
Alternar entre comportamiento de línea comentado y no comentado.
Ctrl + Shift + I – formatea todo el archivo
En Mac es: Mayús + Opt + F
En Windows: Mayús + Alt + F de Windows
Formatea todo el archivo activo o le solicita que instale una extensión de formateador. Puedes usar la extensión Prettier para formatear el código JS, por ejemplo.
Alt + Arriba o Alt + Abajo – Mover línea
En Mac es: Opt + Down u Opt + Up
Muy claro. Mueva la línea hacia arriba y hacia abajo.
Ctrl + Espacio – Mostrar sugerencias
Muestra sugerencias para completar rápidamente propiedades y otras cosas.
Y uno de mis favoritos:
Shift + Alt + Abajo o Shift + Alt + Arriba – Duplica la línea de código
En Mac es Mayus + Opt + Arriba o Mayus + Opt + Abajo
Este acceso directo te facilita duplicar el contenido de una línea de código hacia por debajo o arriba.
Estos son algunos de los accesos directos más útiles para Visual Studio Code, pero desde luego hay más y los puedes consultar en los siguientes enlaces:
En programación, el boilerplate code o simplemente boilerplate son esas secciones de código que deben incluirse en muchos lugares con poca o ninguna alteración.
Cuando se utilizan lenguajes que se consideran verbosos, el programador debe escribir mucho código para lograr una mínima funcionalidad. Dicho código se llama boilerplate.
Los tres lenguajes tienen for, pero cada uno lo entiende a su manera. Java tiene dos formas, Go usa una sola palabra para todos los bucles, y en Python el for siempre recorre algo. Los comparamos con ejemplos ejecutados en los tres.
public class CicloFor {
public static void main(String[] args) {
for (int i = 0; i < 3; i++) {
System.out.println("valor de i: " + i);
}
String[] lenguajes = {"Java", "Go", "Python"};
for (String l : lenguajes) {
System.out.println(l);
}
for (int i = 0, j = 10; i < j; i += 3, j -= 3) {
System.out.println(i + " " + j);
}
}
}
java CicloFor.javavalor de i: 0
valor de i: 1
valor de i: 2
Java
Go
Python
0 10
3 7
El primero es el for heredado de C: una inicialización, una condición que se comprueba antes de cada vuelta y un incremento que se ejecuta al final de cada una. El segundo, el «for mejorado», recorre un arreglo o cualquier colección sin índice. El tercero recuerda que cada una de las tres partes puede tener varias expresiones separadas por comas.
Go: una sola palabra para todos los bucles
package main
import "fmt"
func main() {
for i := 0; i < 3; i++ {
fmt.Println("valor de i: ", i)
}
for i := range 3 {
fmt.Println("range:", i)
}
lenguajes := []string{"Java", "Go", "Python"}
for i, l := range lenguajes {
fmt.Println(i, l)
}
n := 1
for n < 100 {
n *= 3
}
fmt.Println("primera potencia de 3 mayor que 100:", n)
for {
fmt.Println("una vez y fuera")
break
}
}
go run .valor de i: 0
valor de i: 1
valor de i: 2
range: 0
range: 1
range: 2
0 Java
1 Go
2 Python
primera potencia de 3 mayor que 100: 243
una vez y fuera
Go no tiene while ni do: todo se escribe con for. Con tres partes es el clásico, sin paréntesis. Con solo la condición, hace de while. Sin nada es un bucle infinito, del que se sale con break. Y con range recorre colecciones devolviendo el índice y el valor. Desde Go 1.22, range también acepta un número: for i := range 3 da 0, 1 y 2.
Fíjate en los dos espacios de valor de i: 0. fmt.Println pone un espacio entre cada argumento, y el texto ya terminaba en espacio. En Go se escribe fmt.Println("valor de i:", i), sin el espacio final.
Python: siempre recorre algo
for i in range(3):
print("valor de i: ", i)
for i in range(3):
print("valor de i:", i)
lenguajes = ["Java", "Go", "Python"]
for i, l in enumerate(lenguajes):
print(i, l)
for i in range(10, 0, -3):
print(i, end=" ")
print()
for l in lenguajes:
if l == "Rust":
break
else:
print("no había Rust")
python ciclo.pyvalor de i: 0
valor de i: 1
valor de i: 2
valor de i: 0
valor de i: 1
valor de i: 2
0 Java
1 Go
2 Python
10 7 4 1
no había Rust
En Python no hay for con contador: se recorre una secuencia, y range genera los números. range(10, 0, -3) cuenta hacia atrás de tres en tres, y enumerate da el índice junto a cada elemento. El primer print tiene el mismo doble espacio que Go, por el mismo motivo: print separa sus argumentos con un espacio.
Lo exclusivo de Python es el else del for: se ejecuta solo si el bucle terminó sin break. Sirve para búsquedas como esta, donde llegar al final significa que no se encontró nada.
Lado a lado
Java
Go
Python
Contar de 0 a 9
for (int i = 0; i < 10; i++)
for i := 0; i < 10; i++ o for i := range 10
for i in range(10):
Recorrer una colección
for (String l : lista)
for _, l := range lista
for l in lista:
Con índice
el for clásico
for i, l := range lista
for i, l in enumerate(lista):
Mientras se cumpla algo
while (cond)
for cond
while cond:
Infinito
while (true)
for
while True:
Bloque
llaves
llaves, obligatorias
sangría
Lo que cambia por debajo
La versión anterior de esta entrada decía que Java es un lenguaje interpretado, como Python. No es exacto, y la diferencia explica buena parte de la diferencia de velocidad. Java se compila a bytecode, y la máquina virtual compila a código máquina, mientras el programa se ejecuta, las partes que más se usan. Go se compila directamente a un ejecutable nativo. Python, en su implementación habitual, también compila a bytecode, pero lo interpreta instrucción a instrucción, y por eso un bucle con mucho cálculo suele ir bastante más despacio. Para medirlo bien, mira medir el rendimiento en Java.
Entrada publicada en 2020 y revisada en octubre de 2026. Cada ejemplo se ejecutó en un contenedor limpio con Java 25 LTS, Go 1.25 y Python 3.14; las salidas están copiadas de esa ejecución.
Estas son algunas de las librerías para Java que puedes usar para generar reportes en diversos formatos, agregar gráficas y otros recursos útiles para mostrar datos al usuario final. Algunos proyectos disponen de una versión opensource, edición community y versiones comerciales.
JFreeChart es una biblioteca de gráficos hecha 100% Java que facilita a los desarrolladores mostrar gráficos de calidad profesional en tus aplicaciones. El amplio conjunto de características de JFreeChart incluye:
Una API consistente y bien documentada, que admite una amplia gama de tipos de gráficos
Diseño flexible que es fácil de ampliar, dirigida tanto a aplicaciones de servidor como del cliente.
Compatibilidad con muchos tipos de salida, incluidos los componentes Swing y JavaFX, archivos de imagen (incluidos PNG y JPEG) y formatos de archivos de gráficos vectoriales (incluidos PDF, EPS y SVG)
JFreeChart es de código abierto o más específicamente, software libre. Se distribuye bajo los términos de la GNU Lesser General Public Licence (LGPL), que permite su uso en aplicaciones propietarias.
JasperReport
JasperReport es una de las herramientas para reportes de código abierto más populares y ampliamente utilizadas. Se usa en cientos de miles de entornos de producción y presenta versiones tanto community como comerciales.
Formateo y visualización de reportes interactivos
Repositorio central seguro
Informe de programación y distribución
Interfaz de usuario personalizable y personalizable
BIRT
BIRT consta de varios componentes. Los componentes principales incluyen un diseñador de reportes y en tiempo de ejecución de BIRT, pero BIRT también proporciona tres componentes adicionales: un motor de gráficos, un diseñador de gráficos y un visor. Con estos componentes, podrías desarrollar y publicar informes como una solución independiente.
Listas
Gráficas
Tablas cruzadas
Cartas y documentos
Informas compuestos
Pentaho
Pentaho es una suite empresarial completa, que abarca una amplia gama de casos de uso desde reportes hasta minería de datos. La suite de Pentaho BI abarca varios proyectos de código abierto, de los cuales Pentaho Reporting es uno de ellos. Al igual que las otras herramientas, Pentaho Reporting tiene un amplio conjunto de funciones, listas para su uso en organizaciones empresariales.
Permite crear reportes en PDF, Excel, HTML, texto, archivo de texto enriquecido, XML y CSV.
SpagoBI
SpagoBI es otra suite de inteligencia empresarial completa. Algunas herramientas que incluye son, por ejemplo: reportes, gráficos, cockpits, minería de datos, ETL y mucho más. La empresa que respalda este desarrollo ofrece servicios profesionales como asistencia al usuario, mantenimiento, consultoría y capacitación.
Reportes en formatos HTML, PDF, XLS, XML, TXT, CSV, RTF
Análisis multidimensional (OLAP)
Gráficas
KPIs
Coopits Interactivos
Reportes ad-hoc
Muchas otras características.
KNIME
KNIME es una plataforma de análisis de código abierto, con orígenes en la investigación farmacéutica. Su uso se ha expandido a industrias como bancos, editores, fabricantes de automóviles, compañías de telecomunicaciones y otros.
KNIME proporciona una gama de características, que incluyen extensiones de colaboración y un portal web. El aprendizaje automático también está integrado, incluido el soporte de Weka.
ReportServer
ReportServer es otra plataforma de inteligencia empresarial de código abierto, con una edición comercial disponible también. ReportServer permite crear reportes, análisis ad-hoc, informes de Excel y Word y análisis OLAP multidimensionales.
Katherine Louise Bouman es una científica y profesora asistente de ciencias de la computación en el Instituto de Tecnología de California. Hace tres años, Bouman lideró la creación de un algoritmo que eventualmente ayudó a formar esta imagen única en su clase: un agujero negro supermasivo y su sombra en el centro de una galaxia conocida como M87.Ella era entonces una estudiante graduada en ciencias de la computación e inteligencia artificial en el Instituto de Tecnología de Massachusetts.
Puedes ver una interesante charla de Bouman y su propuesta para la detección de agujeros negros en TED de hace tres años.
Años más tarde puedes ver que su investigación es un total éxito.
Ella y su equipo tomaron los «datos escasos y ruidosos» que generaron diversos radiotelescopios alrededor del mundo e intentaron crear una imagen.Durante los últimos años, Bouman dirigió la verificación de imágenes y la selección de parámetros para crearla. Mas de 5 petabytes fueron necesarios para recabar la información de todos los centros de investigación que participaron.
La imagen obtenida, revela la cara sombría de un agujero negro supermasivo de 6.500 millones de masas solares en el centro de Messier 87 (M87), una gran galaxia a unos 55 millones de años luz de la Tierra en el cúmulo de galaxias de Virgo.Tales objetos son la comprobación (una vez más) de la teoría de la relatividad general de Einstein que predice la deformación del espacio-tiempo por objetos súper massivos.
Python trae mucho de serie, pero buena parte de lo que se hace con él a diario se apoya en librerías externas. Estas son las que más se usan, agrupadas por tarea y cada una con un ejemplo corto que puedes copiar y ejecutar.
Ten en cuenta que el nombre del paquete no siempre coincide con el del import: se instala pillow y se importa PIL, se instala beautifulsoup4 y se importa bs4.
Para…
Librería
Versión probada
Peticiones HTTP
requests
2.34.2
Barras de progreso
tqdm
4.70.1
Imágenes
Pillow
12.3.0
Cálculo numérico
NumPy
2.5.3
Tablas de datos
pandas
3.0.6
Gráficas
Matplotlib
3.11.2
Extraer datos de HTML
Beautiful Soup
4.15.0
Bases de datos
SQLAlchemy
2.1.4
APIs web
FastAPI
0.143.0
Pruebas
pytest
9.1.1
requests: peticiones HTTP
import requests
r = requests.get("https://httpbin.org/get", params={"lenguaje": "python"}, timeout=10)
print(r.status_code, r.headers["Content-Type"])
print(r.json()["args"])
r = requests.post("https://httpbin.org/post", json={"sitio": "decodigo.com"}, timeout=10)
print(r.json()["json"])
Con params se arma la cadena de consulta, con json= se envía un cuerpo JSON con su cabecera, y r.json() decodifica la respuesta. Pon siempre un timeout: sin él, una petición a un servidor que no responde puede quedarse esperando indefinidamente. Si solo necesitas algo puntual y no quieres dependencias, la biblioteca estándar también lo hace; lo vemos en peticiones HTTP sin dependencias.
tqdm: barras de progreso
from time import sleep
from tqdm import tqdm
total = 0
for n in tqdm(range(50), desc="Procesando", ncols=70):
total += n
sleep(0.02)
print("suma:", total)
salida, última línea de la barraProcesando: 100%|█████████████████████| 50/50 [00:01<00:00, 49.11it/s]
suma: 1225
Basta con envolver el iterable en tqdm(). La barra se va redibujando en la misma línea y muestra el avance, la velocidad y el tiempo que falta. Es muy útil en procesos largos, porque deja ver enseguida si el trabajo avanza o se ha atascado.
thumbnail reduce la imagen para que quepa en la caja que le das (200×200), pero conserva la proporción: por eso queda en 200×100 y no se deforma. Pillow abre y guarda los formatos habituales (PNG, JPEG, WebP, GIF…) y sirve para recortar, rotar, dibujar o cambiar el formato por lotes.
salidamedia: 21.14 máxima: 24.3
[65.3 69.8 75.74 67.64 71.78]
count sum mean
lenguaje
Python 3 400 133.333333
Java 2 175 87.500000
Go 1 40 40.000000
NumPy opera sobre arreglos completos de una vez: temps * 9 / 5 + 32 convierte las cinco temperaturas sin escribir ningún bucle, y además mucho más rápido que un bucle en Python. pandas se apoya en NumPy para trabajar con tablas: aquí agrupa por lenguaje y calcula el número de filas, la suma y la media de cada grupo en una sola línea. Si trabajas con archivos muy grandes, merece la pena mirar también Polars, una alternativa más reciente y muy rápida.
La gráfica que genera el ejemplo, tal cual. Los datos son inventados.
matplotlib.use("Agg") hace que dibuje directamente a un archivo, sin abrir ninguna ventana; así funciona también en un servidor o en un contenedor. En tu ordenador puedes quitarlo y llamar a plt.show() para ver la gráfica en pantalla.
Beautiful Soup: extraer datos de HTML
from bs4 import BeautifulSoup
html = """
<ul id="lenguajes">
<li class="activo"><a href="/python">Python</a></li>
<li><a href="/java">Java</a></li>
<li class="activo"><a href="/rust">Rust</a></li>
</ul>
"""
soup = BeautifulSoup(html, "html.parser")
for a in soup.select("#lenguajes li.activo a"):
print(a.text, "->", a["href"])
salidaPython -> /python
Rust -> /rust
select acepta selectores CSS, los mismos que se usan en las hojas de estilo, así que #lenguajes li.activo a se lee igual que en CSS. Para descargar la página se combina con requests. Si lo que necesitas es recorrer un sitio entero siguiendo enlaces, la herramienta adecuada es Scrapy. Y antes de extraer datos de un sitio, revisa sus condiciones de uso y su robots.txt.
SQLAlchemy: bases de datos
from sqlalchemy import create_engine, select, String
from sqlalchemy.orm import DeclarativeBase, Mapped, mapped_column, Session
class Base(DeclarativeBase):
pass
class Articulo(Base):
__tablename__ = "articulos"
id: Mapped[int] = mapped_column(primary_key=True)
titulo: Mapped[str] = mapped_column(String(100))
visitas: Mapped[int]
engine = create_engine("sqlite:///:memory:")
Base.metadata.create_all(engine)
with Session(engine) as s:
s.add_all([Articulo(titulo="Hola mundo", visitas=10),
Articulo(titulo="Leer CSV", visitas=42),
Articulo(titulo="Peticiones HTTP", visitas=27)])
s.commit()
consulta = select(Articulo).where(Articulo.visitas > 20).order_by(Articulo.visitas.desc())
for a in s.scalars(consulta):
print(a.titulo, a.visitas)
salidaLeer CSV 42
Peticiones HTTP 27
Cada tabla se define como una clase, y las consultas se escriben en Python en lugar de en SQL. Es el estilo de SQLAlchemy 2, con anotaciones de tipo (Mapped[int]). El mismo código funciona con SQLite, PostgreSQL o MySQL cambiando solo la cadena de conexión. Para SQLite sin ninguna librería externa, mira SQLite con Python.
FastAPI: APIs web
from fastapi import FastAPI
from fastapi.testclient import TestClient
from pydantic import BaseModel
app = FastAPI()
class Articulo(BaseModel):
titulo: str
visitas: int = 0
@app.get("/saludo/{nombre}")
def saludo(nombre: str):
return {"mensaje": f"Hola, {nombre}"}
@app.post("/articulos")
def crear(articulo: Articulo):
return {"creado": articulo.titulo, "visitas": articulo.visitas}
cliente = TestClient(app)
print(cliente.get("/saludo/Ana").json())
print(cliente.post("/articulos", json={"titulo": "FastAPI"}).json())
r = cliente.post("/articulos", json={"visitas": "muchas"})
print(r.status_code, [e["loc"][-1] + ": " + e["type"] for e in r.json()["detail"]])
FastAPI usa las anotaciones de tipo para validar lo que llega: en la última petición falta el título y visitas no es un número, así que responde con un error 422 que explica cada fallo, sin que hayas escrito ninguna validación. Aquí se prueba con TestClient, que llama a la API sin levantar un servidor; en producción se ejecuta con uvicorn.
Con las versiones actuales, TestClient avisa de que usar httpx está obsoleto y pide instalar httpx2. Por eso aparece en el pip install de arriba; con él, el aviso desaparece y el ejemplo funciona igual.
Si buscas un framework completo, con panel de administración, usuarios y plantillas incluidos, la referencia es Django. Para algo pequeño y sin estructura impuesta, Flask.
Las pruebas son funciones que empiezan por test_ y usan un assert normal. parametrize ejecuta la misma prueba con varios casos, y cada uno aparece por separado en el informe; pytest.raises comprueba que se lanza la excepción esperada.
Interfaces gráficas multiplataforma, también para móviles
La versión de 2019 de esta entrada incluía Twisted, un framework de red basado en eventos. Sigue existiendo, pero hoy, para la mayoría de los programas concurrentes, se usa asyncio, que viene con Python, o librerías construidas sobre él.
Entrada publicada en 2019 y revisada en octubre de 2026. Todo el código se ejecutó con Python 3.14.8 en un contenedor limpio, con las versiones de la tabla; las salidas están copiadas de esa ejecución.