Utilizar diferentes Java JDK (o JREs) en Ubuntu

Problema

El problema es típico y sencillo de arreglar: Trabajar en Ubuntu y desarrollas en Java pero tienes proyectos que utilizan diferentes JDKs (o JREs). ¿Cómo arreglarlo de forma fácil? Primero vamos a suponer que tienes 3 versiones de la JDK, yo los he instalado con estos comandos:

sudo apt install -y openjdk-8-jdk-headless
sudo apt install -y openjdk-17-jdk-headless
sudo apt install -y openjdk-21-jdk-headless

Por defecto y de forma automática tendremos disponible la última versión.

$ java -version
openjdk version "21.0.10" 2026-01-20

$ javac -version
javac 21.0.10

¿Cómo cambiar la versión predeterminada?

Para cambiar la versión “seleccionada” por el sistema podemos usar el comando update-alternatives. Con el siguiente comando podemos ver todos los comandos referentes a java:

sudo update-alternatives --get-selections | grep java

Ejecuta los siguientes comandos y seleccionamos el número de la versión deseada (tanto para java y javac):

$ sudo update-alternatives --config java
There are 3 choices for the alternative java (providing /usr/bin/java).

  Selection    Path                                            Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-21-openjdk-amd64/bin/java      2111      auto mode
  1            /usr/lib/jvm/java-17-openjdk-amd64/bin/java      1711      manual mode
  2            /usr/lib/jvm/java-21-openjdk-amd64/bin/java      2111      manual mode
  3            /usr/lib/jvm/java-8-openjdk-amd64/jre/bin/java   1081      manual mode

Press  to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/lib/jvm/java-17-openjdk-amd64/bin/java to provide /usr/bin/java (java) in manual mode

$ java -version
openjdk version "17.0.18" 2026-01-20
OpenJDK Runtime Environment (build 17.0.18+8-Ubuntu-124.04.1)
OpenJDK 64-Bit Server VM (build 17.0.18+8-Ubuntu-124.04.1, mixed mode, sharing)

$ sudo update-alternatives --config javac
There are 3 choices for the alternative javac (providing /usr/bin/javac).

  Selection    Path                                          Priority   Status
------------------------------------------------------------
* 0            /usr/lib/jvm/java-21-openjdk-amd64/bin/javac   2111      auto mode
  1            /usr/lib/jvm/java-17-openjdk-amd64/bin/javac   1711      manual mode
  2            /usr/lib/jvm/java-21-openjdk-amd64/bin/javac   2111      manual mode
  3            /usr/lib/jvm/java-8-openjdk-amd64/bin/javac    1081      manual mode

Press  to keep the current choice[*], or type selection number: 1
update-alternatives: using /usr/lib/jvm/java-17-openjdk-amd64/bin/javac to provide /usr/bin/javac (javac) in manual mode

$ javac -version
javac 17.0.18

Y ya está, hay más formas como usar jEnv o SDKMAN, pero eso lo dejo para otra entrada.

¡Espero que sea de ayuda!

Conectar a host remoto con Oracle SQL*Plus

Esta entrada es un rápido recordatorio sobre cómo usar SQL*Plus el cliente CLI de Oracle para acceder a BD mediante su TNS o los parametros de una conexión JDBC.

Con TNS adhoc:

sqlplus user/pass@"(DESCRIPTION=(ADDRESS=(PROTOCOL=TCP)(HOST=myhostname)(PORT=1530))(CONNECT_DATA=(SERVICE_NAME=serviceName)))"

O usando el formato easy connect:

sqlplus user/pass@myhostname:1530/serviceName

Crear proyecto python desde cero (venv)

¿Alguna vez te has preguntado cómo empiezan los proyectos de python? ¿Creo una carpeta? ¿Uso cualquier IDE? ¿Uso pip install y ya …?

No todo es siempre un IDE, a veces, la base de todo está en la consola. En python existe el concepto de “entorno virtual” esto es que para un proyecto dado guarda las bibliotecas o paquetes necesarios para este proyecto. La idea es similar a quien conozca npm de Node.js.

La cosa es que en python con pip podemos instalar paquete usando:

pip install <nombre_paquete>

Pero por defecto python lo instala de forma global para el interprete de python (en la carpeta lib donde tengas instalado python). Entonces: ¿Qué pasa si en un proyecto necesito Pandas 2.3 y en otro 1.4 y en el interprete global tengo instalado Pandas 2.2. Pues por defecto se usará la versión 2.2, para evitar estos problemas, existe venv.

Continue reading

Modificar el author de un comit (git)

El problema es conocido, a veces, al hacer un commit, se nos olvida configurar bien nuestro usuario o simplemente usamos la cuenta equivocada (si usamos varios login, o servers para git).

Corregir esto en git es muy sencillo, teniendo en cuenta dos escenarios diferentes:

  1. Cambiar el autor del último commit
  2. Cambiar el autor de uno o varios commits más atrás del HEAD
Continue reading

Git Hash Commit, identificando commits

¿Qué es un hash de un commit? Cuando haces un commit en Git, se guarda una instantánea del estado de nuestro proyecto en ese mismo momento. Para identificar ese commit de forma única, Git genera un código hash, que es una especie de “huella digital” del commit. Algunas características de este código hash son:

  • Es una cadena de caracteres generada con el algoritmo SHA-1.
  • Representa de forma única el contenido del commit (incluyendo archivos, autor, fecha, mensaje, etc.).
  • Sirve para referenciar ese commit en el historial.

Por ejemplo, un hash “largo” tiene la forma: e3a1b2c4d5f67890123456789abcdef123456789.

Continue reading

DosBox: Cómo corregir que el ratón se mueven MUY rápido

El problema

Estás jugando a un juego de MS-DOS o usando un programa TUI tipo QBasic u otro que tenga soporte para ratón, pero …. el ratón súper rápido: el mínimo movimiento produce un desplazamiento del ratón bestial de extermo a extermo de la pantalla y lo hace inmanejable.

Solución

Hay que ajustar la sensibilidad del ratón, por defecto DosBox la pone al 100%. Podemos poner un valor entre 0 y 100. En mi caso probé a bajarlo al 50% y me lo solucionó.

En el fichero dosbox.conf editar la secciçon [sdl] y modificar sensitivity, su valor por defeto es 100 bajaro a 50:

sensitivity=50

Para más información consultar [1]. (esto no lo he probado pero lo dejo aquí anotado por si es de ayuda) Otras opciones serían ajustar en tiempo real DosBox usando shortcuts de teclado. Presiona:

  • Ctrl + F10 → captura/libera el ratón.
  • Ctrl + F11 / Ctrl + F12 → bajan o suben la velocidad de emulación (afecta todo, no solo el ratón).
  • Ctrl + F8 / Ctrl + F7 (según versión) → pueden ajustar la sensibilidad del mouse directamente.

¡Espero haber sido de ayuda!

REFERENCIAS

  1. Configuración del SQL en DosBox

Mockear un API con json-server

json-server es una herramienta NodeJS que nos permite prototipar o mockear un API REST de forma muy rápida. Ya sea para empezar un desarrollo Frontend si esperar al desarrollo del BackEnd o porqué necesitamos mockear el BackEnd por el motivo que sea.

Una vez definido el API a usar es muy rápido y sencillo usar cualquier petición HTTP con los métodos GET, POST, PUT, PATCH, DELETE …

Continue reading

Apache Maven: Comandos utiles

Apache Maven es una herramienta de gestión de proyectos que automatiza la construcción, informe y documentación de software. Usa un archivo POM (Project Object Model) basado en XML para definir cómo se construye un proyecto, sus dependencias y cómo se empaqueta. Esto estandariza el proceso, permitiendo que cualquier desarrollador compile, pruebe y empaquete un proyecto de forma consistente.

Conocer los comandos de Maven es clave porque te da control total sobre el ciclo de vida de tu proyecto. Te permite automatizar tareas, gestionar dependencias, depurar problemas de construcción y personalizar el proceso. Dominar estos comandos te hará más productivo y autónomo al manejar proyectos de software.

Continue reading