Backend

Experiencias relacionadas con el desarrollo de backend.

Crear un nuevo documento en Firebase con NextJs 12 y TypeScript

Guarda el documento sin Id y Firebase le asigna un Id automáticamente:

const CreatePodcastInDB = async (title: string, description: string, url: string) => {
    const [docRef] = await Promise.all([addDoc(collection(db, "podcast"), {
        title: title,
        description: description,
        url: url,
        createAt: Date(),
    })]);
    console.log(docRef.id)
}

Guarda el documento con el Id deseado:

const CreatePodcastInDB = async (title: string, description: string, url: string) => {
    const [docRef] = await Promise.all([addDoc(collection(db, "podcast"), {
        title: title,
        description: description,
        url: url,
        createAt: Date(),
    })]);
    console.log(docRef.id)
}

Instalar NVM en Windows

NVM “Node version manager”. Este es el gestor de versiones para NodeJs, permite tener diferentes versiones de NodeJs instaladas en tu ordenador y poder ir utilizando la que necesites en cada momento con un solo comando.

Voy a explicar como hay que hacer la instalación en el orden correcto en Windows para no tener problemas y que todo funcione correctamente.

Step 1.a

Debemos desinstalar todas las versiones que tengamos de NodeJs y npm en nuestro ordenador, para ello vamos a la barra de tareas, en la parte inferior izquierda donde pone “Búsqueda” e introducimos el texto “agregar o quitar programas”. Seleccionamos esa opción en la ventana de la búsqueda. En la ventana que se nos abre localizamos NodeJs y lo desinstalamos.

Step 1.b

Una vez realizado el paso anterior, en vamos a limpiar las variables de entorno de todo rastro de NodeJs y npm. Para ello hacemos la búsqueda igual que en el paso anterior pero esta vez buscamos “editar variables de entorno del sistema”. En la ventana que se nos abre de las propiedades del sistema hacemos clic en “variables de entorno”. En la sección de variables del sistema seleccionamos la linea donde pone “Path”, hacemos clic en editar y en la ventana que se nos abre buscamos las lineas relacionadas con NodeJs y npm y las eliminamos.

Step 1.c

Reiniciamos el equipo para que los cambios que hemos realizado surtan efecto.

Step 1.d

En este paso vamos a rastrear la siguiente lista de directorios y vamos a eliminarlos para no dejar ni rastro de NodeJs y npm. Si no hacemos esto correctamente , NVM va a ver que ya existen y no va realizar la instalación de forma apropiada. Para poder realizar este paso hay que habilitar la opción “Mostrar archivos ocultos y del sistema”. Para ello hacemos lo mismo que en los pasos anteriores, buscamos la opción en la barra de tareas donde pone “Búsqueda”.

Step 2

Ya hemos realizado la limpieza a fondo de NodeJs y npm. Ahora vamos a instalar NVM, para ello descargamos el instalador de la página de GitHub desde el siguiente enlace. Elegimos la versión ejecutable “nvm-setup.exe”. Una vez descargada, ejecutamos el archivo y seguimos las instrucciones de la instalación sin modificar ninguna configuración. Para comprobar que todo ha ido bien, abrimos una consola, introduciendo “CMD” en la barra de tareas donde pone Búsqueda. Una vez abierta la consola introducimos el comando “nvm” y presionamos Enter. Nos debe salir algo parecido a la siguiente imagen.

En mi caso la versión que he instalado es la 1.1.10.

Step 3.

Seguidamente vamos a proceder a instalar las versiones que queramos de NodeJs. Si deseamos saber las versiones disponibles de NodeJs, podemos verlo en el siguiente enlace.

Para la instalación, en mi caso necesito las versiones 18.15.0, 16.20.0, 14,21.3 y 12.22.12, lo hacemos con los siguientes comandos.

Para ver la lista de versiones disponibles de NodeJs de las que disponemos utilizamos el comando “nvm list”.

Step 4.

Nos falta seleccionar la versión que deseamos utilizar, por ejemplo la 16.20.0, para ello usamos el comando “nvm use 16.20.0”. Seguido utilizamos el comando “nvm list” para comprobar que se ha seleccionado la versión deseada. Este paso debería mostrar lo mismo que la imagen siguiente.

Step 5.

Para finalizar, con los comandos “node -v” y “npm -v” podemos ver las versiones que estamos utilizando de NodeJs y npm y que hemos seleccionado en el paso anterior.

Anexo

Si deseamos desinstalar alguna de las versiones porque ya no la necesitamos, por ejemplo la versión 12.22.12, utilizaremos el comando “nvm uninstall 12.22.12”.

String, StringBuilder y StringBuffer en Java

Los objetos String son inmutables, esto puede suponer una gran diferencia con respecto a StringBuilder y StringBuffer que si que son mutables. Cuando trabajas con Strings nunca se muta el objeto original, se crea un objeto nuevo y cambia la referencia de memoria de la variable a ese nuevo objeto. El objeto original queda sin referencia a ninguna variable y el recolector de basura de java se encarga de destruirlo. Esto cuando se trata de trabajar con muchos nuevos objetos puede provocar un retardo en la ejecución del proceso.

Con StringBuilder o StringBuffer esto no sucede porque son objetos mutables, es decir, no se crea un nuevo objeto cada vez que manipulamos la cadena guardada en StringBuilder o StringBuffer, por tanto tampoco cambia la referencia al espacio de memoria asignado a la variable de la cadena.

Ejemplo:

String saludo = "Hola";
saludo = saludo + " Luis";

Con String saludo = “Hola”; estamos creando la variable saludo que crea un objeto y apunta a una posición de memoria.

Con saludo = saludo + “ Luis”; estamos concatenamos el nombre de Luis a lo que contiene la variable saludo, en este caso Hola, pero esto no esta modificando el valor de la variable saludo sino está creando un nuevo objeto que va a guardar dicha concatenación y va a apuntar a la posición de memoria de la variable saludo. Ahora el objeto anterior que guarda la cadena Hola ha quedado sin referencia a ninguna posición de memoria, no lo vamos a usar nunca más pero hasta que el recolector de basura de java lo elimine, va a seguir consumiendo recursos innecesarios.

Por el contrario con StringBuilder o StringBuffer esto no pasa, solo se modifica el objeto original y siempre apunta a la misma posición de memoria.

Ejemplo:

StringBuilder saludo = new StringBuilder("Hola");
saludo.append(" Luis");

StringBuilder y StringBuffer son casi iguales. StringBuffer puede ser usado en programas concurrentes, lo que se conoce como “thread safe”. Esto hace que StringBuilder sea más eficiente en programas no concurrentes.

Por tanto, si vamos a trabajar intensamente con cadenas, es mucho mejor utilizar StringBuilder y StringBuffer en lugar de String.

Error CORS petición Backend localhost

Este error me ocurrió al conectar el Frontend al Backend en localhost por culpa de CORS.

SOLUCIÓN:

Instalar una extensión en Chrome llamada Allow CORS que engaña al navegador desactivando el cors y haciendo posible la recepción de la petición al Backend correctamente.

RamdomDogs Front+Back

Iniciar nuevo proyecto con Express y TypeScript desde cero. Para ello utilizo de guÍa el siguiente enlace. Desde el principio he tenido que buscar soluciones, me daba errores con los permisos de la carpeta donde había iniciado el proyecto, una vez solucionado esto encontré el obstáculo de la versión de node que tenía instalada, superado llegó lo peor y no era la asincronía, fue el CORS. Vi el error desde el principio pero no tomé la solución correcta. Pensé todo el tiempo en solucionarlo añadiendo dependencias y modificando el código del backend, pero estaba equivocado. Aunque con mi estrategia conseguí eliminar el error de la consola solo fue un espejismo, retornaba un objeto que no era lo que esperaba recibir y tenía una URL vacía que me engañó aún más. Después de una reunión con Kevin y los compañeros de practicas, que aprovechamos para hacer Mob Programming, estuvimos haciendo pruebas, dando nuestra opinión de lo que estaba pasando y haciendo de Driver en mi Pc, por fin vimos la luz. Fue una sesión corta pero genial para todos aprender del problema

SOLUCIÓN:

Instalar una extensión en Chrome llamada Allow CORS que engaña al navegador desactivando el cors y haciendo posible la recepción de la petición al Backend correctamente.

REPOSITORIOS:

RandomDogs_Frontend GitHub

RandomDogs_Backend GitHub

1ª semana en Lean Mind

Solo tengo palabras de elogio para esta empresa. La organización de las prácticas es buenísima. Todo está pensado de antemano. Es como si las hubieran codificado con TDD, para que tengan muy buena cobertura de test y haya los menores fallos a la hora de ejecutarlas.

Te hacen sentir cómodo, relajado y a la vez te motivan para que des lo mejor de ti. Nunca estás solo, siempre hay alguien para apoyarte y ayudarte a dar tus primeros pasos hacia adelante.

Destacar esta semana la jornada de formación con los compañeros de Lean Mind. Fue dura porque había muchos conceptos nuevos en la Kata pero a la vez muy productiva porque nunca había pensado como se podía testear una consola. Jonay me ayudó a entender como lo había hecho. Gracias compi.