Curso online, gratis sobre Inteligencia Artificial (AI)

La universidad de Helsinki ha sacado un curso para aprender inteligencia artificial gratis, 100% online y actualizado para 2025. El certificado también es gratuito.

Está pensado para que lo hagas a tu ritmo y sin conocimientos previos. Tiene una parte de teoría y ejercicios prácticos. El primer curso te servirá de introducción a la IA y el segundo sobre como construirla.

Para conseguir el certificado deberás enviar el 90% de los ejercicios y responder correctamente al 50%.

Puedes acceder al curso en el siguiente enlace: https://www.elementsofai.com/es/

Minientrada

Este sitio transforma tu código del caos a la claridad

¿Quieres escribir mejor código y entender de verdad los patrones de diseño? Entonces Refactoring.guru es un recurso que no puedes dejar pasar.

Este sitio ofrece explicaciones claras y visuales sobre conceptos clave como refactorización, principios SOLID y patrones de diseño, todo pensado para que realmente lo entiendas, sin tecnicismos innecesarios ni ejemplos confusos.

Ideal para desarrolladores que quieren mejorar la calidad de su código, hacerlo más mantenible y profesional, y dominar buenas prácticas que aplican en cualquier lenguaje de programación.

Tanto si estás empezando como si ya llevas tiempo programando, esta página te va a ayudar a escribir código del que puedas sentirte orgulloso.

Minientrada

Libro oficial de Google para aprender Rust en 5 días.

Hoy os traigo un curso gratuito y completo creado por Google para aprender Rust, un lenguaje de programación moderno, rápido y seguro. Puedes encontrarlo en el siguiente enlace: comprehensive-rust.

Es un curso interactivo de Rust, pensado tanto para programadores nuevos en Rust como para quienes ya tienen experiencia con otros lenguajes como C++, Python o JavaScript.

¿Qué incluye el curso?

  • Fundamentos de Rust: Aprendes lo básico: variables, tipos, funciones, estructuras de control, módulos, etc.
  • Propiedad y préstamos (ownership & borrowing): Uno de los puntos clave y más únicos de Rust: cómo maneja la memoria sin un recolector de basura.
  • Manejo de errores: Cómo trabajar con Result y Option, dos tipos clave para evitar errores en tiempo de ejecución.
  • Programación funcional: Usar closures, iteradores y patrones de programación funcional en Rust.
  • Tipos avanzados y manejo de datos: Enums, estructuras, genéricos y cómo aprovechar el sistema de tipos de Rust.
  • Programación concurrente y multihilo: Rust hace que trabajar con hilos sea más seguro y menos propenso a errores.
  • Unsafe Rust y FFI: Para los valientes: cómo hacer cosas peligrosas (y necesarias), como interactuar con C.

Esquemas de Prompts para ChatGPT

Hoy os traigo unos ejemplos de PROMTS que funcionan muy bien para ChatGPT y con los que conseguirás una mejor respuesta.

Los promts son instrucciones o preguntas que se utilizan para interactuar con modelos de lenguaje, como ChatGPT. La importancia de los promts radica en que:

  1. Definen el Contexto: Establecen un tema de conversación, lo que ayuda al modelo a entender que tipo de respuesta se espera.
  2. Influencian la respuesta: Pueden orientar la conversación.
  3. Mejoran la precisión.
  4. Permiten la personalización: Permiten adaptarse a las necesidades y preferencias del usuario.
  5. Facilitan la creatividad: Para generar ideas nuevas y originales.
  6. Ayudan a evitar malentendidos.

R-T-F (Rol – Tarea – Formato)

  • Actúa como [Rol que quieras indicar]
  • Crea una [Tarea que quieres realizar]
  • Muestra el resultado en el siguiente formato: [Formato esperado]

T-A-O (Tarea – Acción – Objetivo)

  • Define la [Tarea]
  • Indica la [Acción]
  • Aclara el [Objetivo]

B-A-B (Antes – Después – Puente)

  • Explica el problema [Antes]
  • Indica el resultado [Después]
  • Pide el [Puente] solución

C-A-R-E (Contexto – Acción – Resultados – Ejemplos)

  • Da el [Contexto]
  • Describe la [Acción]
  • Aclara los [Resultados]
  • Da algunos [Ejemplos]
Minientrada

¡Truco! Entrar en la BIOS de tu PC

Entrar en la BIOS de un PC es algo que todos hemos hecho en alguna ocasión. Hacerlo es tan sencillo como presionar Supr o F2 (o alguna otra tecla, dependiendo de la placa) al encender o reiniciar el PC pero, ¿sabías que puedes hacerlo más fácil todavía?

  1. Haz clic con el botón derecho del ratón en cualquier espacio vacío de tu escritorio.
  2. Selecciona Nuevo.
  3. Pulsa sobre Acceso directo.
  4. En el cuadro que aparece, escribe «shutdown /r /fw /t 1»Acceso directo BIOS
  5. Asígnale el nombre que quieras y se habrá creado el acceso directo en el escritorio.
  6. Pulsa sobre este acceso directo que has creado con el botón derecho del ratón y luego pulsar sobre Propiedades.
  7. En la ventana que se abre pulsa sobre «Opciones avanzadas«.
  8. Ahí tendrás que marcar la opción «Ejecutar como administrador«.
  9. (Opcional) Puedes cambiar el icono para dejarlo más bonito.

¡Cuidado! Al indicar el /f, se va a forzar el cierre de todos los procesos que tengamos abiertos en ese momento.

Otra opción es ejecutarlo directamente sin tener un acceso en el escritorio (o cualquier otro directorio). Para ello los pasos son los siguientes:

  1. Abre el cuadro de ejecutar (Win + R).
  2. Escribe «shutdown /r /fw /t 1»
  3. ¡Listo! El PC reiniciará directo a la BIOS.

Finalmente indicar que solo entrará en la BIOS la primera vez. Luego, las siguientes veces que reinicies el PC arrancará Windows de forma normal, no irá siempre a la BIOS directamente.  Solo cuando pulséis en el icono o ejecuteis el comando.

 

Control de Procesos en Linux – Guía Sencilla

Tanto si estás especializado en Linux como si eres un programador que necesita este SO para desplegar sus aplicaciones, seguro que en alguna ocasión  has tenido que localizar algun proceso que se está ejecutando. Hoy os traigo una guía para encontrar más sencilla y clara los procesos, tanto padres como hijos.

Comencemos explicando ‘pgrep‘, que nos permite hacer un grep entre los procesos.
Con ‘ps -ef‘ vemos todos los procesos del sistema. Le podemos añadir el flag ‘–forest‘ para que nos muestre el árbol de todos los procesos que se están ejecutanod.
También tenemos ‘pstree‘, que hace algo similar y nos permite ver los procesos de una forma bastante clara.

Todos estos comandos son muy útiles, pero tienen un problema: trabajan sobre una instantánea de los procesos que están corriendo en el momento de lanzar el comando. Es decir, una foto estática que puede mostrar procesos que al segundo siguiente ya no están en ejecución.

Para obtener los procesos en tiempo real tenemos ‘top‘ y ‘htop‘. Que lo que hace es ir recargando los valores a lo largo del tiempo para tener siempre una instantánea en tiempo real.
Además, nos muestra información de carga del sistema (procesador, memoria, swap…). Si no te interesa ver esa información «extra» puedes utilizar la combinación de teclas ‘altgr‘ + ‘#‘ y de esta forma solo ver los procesos. También puedes editar las columnas que no quieres que se muestren.
Finalmente, puedes eliminar los threads, que básicamente son subprocesos. Normalmente aparecen pintados en color verde. Se pueden eliminar con ‘shift‘ + ‘h‘.
Si pulsamos ‘F5‘ lo veremos en formato de árbol y con ‘F3‘ podemos buscar entre los procesos. Con la tecla ‘u‘ podemos filtrar procesos por usuario. También podemos realizar acciones (como matar un proceso) con ‘F9‘.

Minientrada

Frameworks Modernos para Desarrollo Web con Python

Seguro que alguna vez has querido crearte una web para un proyecto y te ha resultado tedioso tener que hacer todo el código HTML, CSS…

Hoy os traigo 3 frameworks que os ayudarán en el proceso para podáis dedicar más esfuerzo a la lógica de la aplicación.

FastHTML

Con FastHTML puedes crear aplicaciones web modernas y atractivas en Python puro y desplegarlas en minutos.  Puedes obtener más información y acceso a algunos ejemplos en su web: https://www.fastht.ml/.

FastAPI

Misma idea que la anterior pero esta vez centrada en crear una API. Te permitirá crear tus propias API con una sintaxis relativamente sencilla. Además, de forma automática te genera la documentación para que pueda ser consultada por internet.
Más información en su web: https://fastapi.tiangolo.com/.

Reflex

Si buscas algo tanto para frontend como para backend. Es personalizable, responsive y permite utilizar plantillas. Además, permite componentes.
Más información en su web: https://reflex.dev/

Términos que todo programador debería conocer

  1. Variables: Espacios de memoria reservados para almacenar datos en un programa. Cada variable tiene asociado un nombre único y un valor.
  2. Tipos de datos: Determinan el tipo de información almacenado en una variable. Algunos tipos comunes son:
    1. Int: Números enteros.
    2. Float: Números decimales.
    3. String: Texto.
    4. Bool: Valores Booleanos (true o false).
  3. Estructuras de control: Mecanismos que permiten controlar el flujo en ejecución de un programa. Un ejemplo son los condicionales (if-else) y otro los bucles (for, while).
  4. Estructuras de datos: Formas de organizar y almacenar datos en memoria para un acceso eficiente, como arreglos, listas y diccionarios. Ofrecen diferentes formas de estructurar y manipular información.
  5. Algoritmos: Son secuencias de pasos definidos que resuelven problemas o realizan tareas específicas, siguiendo una lógica ordenada para alcanzar resultados precisos y eficientes.
  6. Debugging – Depuración: Proceso de identificar, analizar y corregir errores o fallos en el código de un programa.
  7. POO: Programación orientada a objetos, es un paradigma de programación que organiza el código en objetos que encapsulan datos y comportamientos, permitiendo la reutilización y extensión de funcionalidades a través de la herencia y composición.
  8. Operaciones lógicas: Aquellas aplicadas a valores booleanos. Son AND, OR, NOT…
  9. Operaciones matemáticas: Operaciones aritméticas básicas como la suma o la resta. Se aplican a valores numéricos y permiten realizar cálculos y manipulaciones de datos.
  10. Funciones: Bloques de código reutilizable que realizan una tarea específica. Permiten agrupar un conjunto de instrucciones bajo un nombre que facilita su llamada y ejecución desde diferentes partes del programa.
  11. Métodos: Funciones asociadas a objetos en la POO. Operan sobre los atributos y comportamientos del objeto y pueden acceder a sus datos internos.
  12. Asincronismo: En la programación asíncrona las operaciones no se ejecutan en orden secuencial, lo que permite que el programa funcione mientras se ejecutan tareas en segundo plano.

Listar los últimos archivos modificados de un sistema Linux

Hoy os traigo una forma de conocer los archivos que se han tocado últimamente en nuestro sistema.

Vamos a explicar el procedimiento paso a paso:

find . -type f

Con este comando vamos a mostrar un listado de todos los archivos que están en este directorio y sus subdirectorios.

Ahora vamos a formatear la salida del comando con printf

find . -type f -printf "\n%TF-%TH-%TM %p"

F – Para mostrar el año, mes y día.
H – Para mostrar la hora.
M – Para mostrar los minutos.
p – Para imprimir la ruta.

Ahora le metemos un pipe (tubería) para ordenar:

find . -type f -printf "\n%TF-%TH-%TM %p" | sort -nr -t"-" -k1,5

n – Ordenamiento numérico
r – Para ordenar al revés
t»-» – Se utiliza para indicar que el separador de campos es el guión.
k1,5 – Le indicamos que debe ordenar por los campos del 1 al 5, es decir, empieza por el año, después el mes y así hasta el minuto.

Finalmente recortamos la salida para que solo nos muestre las X primeras líneas, en este caso 20:

find . -type f -printf "\n%TF-%TH-%TM %p" | sort -nr -t"-" -k1,5 | head -20

También podemos ver solo el nombre del fichero en lugar de la ruta completa. Para ello usamos %f:

find . -type f -printf "\n%TF-%TH-%TM %f"

Y finalmente indicar que una buena práctica para limpiar la salida es enviar todos los errores a /dev/null:

find . -type f -printf "\n%TF-%TH-%TM %p" 2>/dev/null | sort -nr -t"-" -k1,5 | head -20

Y tambien podemos quitar todos los ficheros que empiecen por «.», es decir, todos aquellos ficheros ocultos que tenemos en el sistema:

find . -type f -printf "\n%TF-%TH-%TM %p" 2>/dev/null | sort -nr -t"-" -k1,5 | grep -Ev "\.\/\." | head -20

E – Expresiones regulares extendidas.
v – para descartar las líneas que coincidan con el patrón.

A partir de este grep puedes crear el que quieras para descartar también cualquier otro tipo de fichero que no sea interesante para tu búsqueda.

Para finalizar, puedes crear un alias que te permita llamar a este comando de una forma rápida. En este caso lo hemos llamado «lastmod»:

alias lastmod='find . -type f -printf "\n%TF-%TH-%TM %p" 2>/dev/null | sort -nr -t"-" -k1,5 | grep -Ev "\.\/\." | head -20'

Con el alias podrás buscar fácilmente los archivos modificados en el directorio en el que te encuentres.

API WordPress que no conocías

Si eres desarrollador seguro que para algun proyecto has usado wordpress y también estoy seguro que desconocías que por defecto WordPress tiene una API activa que desconocías y que es un problema para la seguridad de tu sitio web.

Para encontrar en enlace a esa API dentro de cualquier sitio con WordPress, solo tendrás que buscar en el código de la página por «api.w.org». De esta forma obtendrás un enlace, que normalmente no se modifica y es «*/wp-json».

Tener esto activado tiene dos problemas muy importantes de seguridad (y seguro que muchos más):

  1. Pueden hacer un scrapping muy facil de TODO tu sitio web.
  2. Suele tardar más de un segundo en responder, por lo que te pueden tirar la web con un DDoS.

Por esto, si no la utilizas, es recomendable desactivarla y si la utilizas, debes limitar su acceso.

¿Cómo desactivar esta API?

Aquí dejo dos opciones:

  1. Desactivarla para todo el mundo.
  2. Permitirla solo para usuarios administradores.

Opción 1: Desactivar API para todos.

add_filter(‘rest_authentication_errors’, ‘disable_rest_api’, 99);

function disable_rest_api($access) {
return new WP_Error(‘rest_disabled’, __(‘La REST API está desactivada en este sitio.’), array(‘status’ => 403));
}

Opción 2: Desactivar API para usuarios no administradores.

// Restringe el acceso a la Rest API solo para administradores
function restrict_rest_api_to_admins() {
// Verifica si el usuario no es administrador
if ( ! current_user_can( ‘administrator’ ) ) {
// Deshabilita el acceso a la Rest API
add_filter( ‘rest_authentication_errors’, function( $result ) {
// Devuelve un mensaje de error de autenticación
return new WP_Error( ‘rest_api_admin_only’, ‘Acceso denegado. Solo los administradores pueden acceder a la Rest API.’, array( ‘status’ => rest_authorization_required_code() ) );
});
}
}
add_action( ‘rest_api_init’, ‘restrict_rest_api_to_admins’ );

Para insertar este código puedes utilizar algún plugin como «Code Snippets» (de Code Snippets Pro) o insertarlo en el functions.php.

Si necesitas más información, puedes entrar en el siguiente artículo de webempresa: ¿Cómo desactivar Rest API en WordPress?

O También puedes obtener más información en este vídeo: