Vamos a ver cómo realizar un backup de una base de datos mongo y restaurarlo en otra instancia.

Para ello, haremos uso combinado de los comandos mongodump y mongorestore.

Un ejemplo de uso del comando mongodump sería el siguiente:

mongodump \
  --host ip.direccion.origen \
  --port 27017 \
  --username miUsuario \
  --password M1P455W0rD \
  --db nombre_bd \
  -o bd_dump

Donde el parámetro -o hace referencia al directorio donde se almacenarán los backups.

En el caso de mongorestore, indicaremos el host donde queremos recuperar los datos, así como la carpeta bd_dump, donde están los backups:

mongorestore \
  --host ip.direccion.destino\
  --port 27017\
  --username miUsuario \
  --password M1P455W0rD \
  --db nombre_bd\
  bd_dump
Anuncios

Serán incontables ya las muchas veces que he instalado paquetes globales de npm para ejecutarlos sólo una vez y luego desinstalarlos.

Es para gente como yo que, a partir de la versión 5.2.0 de npm, también tenemos npx.
Leer el resto de esta entrada »

I’m doing a personal project that uses ionic framework, firestore and part of the @ngrx platform. One of de decisions I’ve made is to use Effects to perform navigation.

On that use case, it’s useless for an effect to dispatch an action.
Leer el resto de esta entrada »

After reading this Gil Fink’s post, I wanted to set context mode in StencilJS in order to determine whether the application is loaded on a Windows Phone, Android, iOS, or a Desktop the same way ionic framework does.
Leer el resto de esta entrada »

We are currently doing some spike applications that involve part of the Spring Cloud Netflix stack.

One of them is a Zuul edge server to proxy some microservices and handle authentication. On these microservices we need some special, custom headers. So we are going to see how to create a custom Zuul filter in our Spring context that add the user’s name on a header before proxying:
Leer el resto de esta entrada »

Recientemente leí este artículo de mi buen amigo Norman Coloma.

En él, introduce una mejora en el uso de validadores asíncronos con respecto a muchos de los ejemplos que verás por internet, llevándose su lógica a un servicio externo.

Aún así, y tras hablarlo con él, vimos que ese componente era demasiado listo:

  • ¿Por qué saber de servicios externos?
  • ¿Por qué saber de controles abstractos?
  • ¿Por qué hacer ese bind a la hora de validar?
  • ¿Por qué no introducir un validador asíncrono de una manera tan fácil como hacemos con los síncronos?

Leer el resto de esta entrada »

Hoy he tenido que copiar unos ficheros al interior de un contenedor Docker (concretamente, un backup de una base de datos SQLServer).

Podría haberlo hecho montando un volumen que apuntara al sistema de ficheros, pero he preferido ver si había otra manera. Y la hay. Cómo no, en Docker también existe el comando cp:

docker cp backup_de_mi_DB.DAT mssql-server-linux:/tmp

Obviamente, también podemos extraer datos del docker para guardarlos en nuestra máquina local:

docker cp mssql-server-linux:/ruta/hacia/el/fichero ./fichero

El tema de las anotaciones son más que conocidas en el mundo java y hoy en día casi todo lo configuramos con anotaciones, aquellos tiempos en los que se hacía todo en interminables ficheros xml que nadie era capaz de seguir se acabaron (gracias a dios).

Pero cuantas veces, sobre todo para los que usamos Spring Framework, hemos visto aquello de @EnableSomething y luego hacer uso de @Something? no os habéis preguntado nunca como funciona?

Todo esto surge, porque hace poco me surgió una necesidad en la que encajaba completamente una custom annotation para reutilizar el código. El caso en cuestión era suscribirse a eventos en kafka y me resultaba tedioso el tener que configurar kafka en cada módulo donde quisiera escuchar un evento y más aún los if que surgían… pongamos un ejemplo:

@KafkaListener(topics = "mitopic)
public void listener(String payload){
Event event = Event.from(payload);
if (event.name == "READ") {
// do something
} else if (event.name == "WRITE" {
// do something
} else if (event.name == "DELETE" {
// do something
}
}

Esta solución al menos a mi, me hace sangrar los ojos.. y es que no me llevo bien con los ifs y menos aún, con los concatenados.

Podríamos pensar en crear tres métodos distintos, uno para cada evento. Pero ni con esas vamos a conseguir quitarnos los ifs. Sin embargo, resultaría super sencillo contar con algo así:

@MyCustomAnnotation({Event.READ, Event.WRITE, Event.DELETE})
public void onEvent(String payload){
// do something
}

Incluso si quisiésemos separarlo, hasta quedaría bien:

@MyCustomAnnotation({Event.READ})
public void onRead(String payload){
// do something
}
@MyCustomAnnotation({Event.WRITE})
public void onWrite(String payload){
// do something
} 
@MyCustomAnnotation({Event.DELETE})
public void onDelete(String payload){
// do something
} 

¿A que queda mejor? ¿pero como hacerlo? Lo veremos en la segunda parte…

Estoy aprovechando un pequeño proyecto personal para profundizar un poco más en la gestión del estado de una aplicación con @ngrx/store. Uno de los casos de uso que incluye es el registro de un usuario, para el que he optado por hacer un wizard.
Leer el resto de esta entrada »

Mira que había visto varias veces que el uso de async/await era sencillo, pero aún me estaba resistiendo y optando por el uso de promesas. Viendo que está soportado en la mayoría de navegadores de escritorio actuales y en las versiones más recientes de node, he decidido hacer unas pruebas para enamorarme de esta feature al instante.
Leer el resto de esta entrada »

A %d blogueros les gusta esto: