Code Review. How to modify an old commit.

Sometimes, when using Code review, you need to modify an old commit with the suggestions. I used to create a new commit for the modifications, but this is non clean, intuitive (if you wrap commits by task), nor backwards compatible.

There is a better way to this using git rebase, which basically allows you to change a commit and apply those changes to further commits.

In order to do that, we need to rebase the commit this way.
1º- Checkout the branch
2º- git rebase –interactive ‘xxxxxx^’
3º- In the editor, change ‘pitch’ to ‘edit’ on the commit we want to modify.
4º- Make the changes
​5º- git commit –all –amend –no-edit
6º- git rebase –continue
​7º- git push (–force) origin <branch_name>​
I hope it helps

From Java to Kotlin. Cheatsheet

I wanted to keep everything regarding the differences between Java and Kotlin on one place. That’s why I’ve created with Cheatsheet.
I hope it would be useful for you as well.




Variables I



Variables II



Null I



Null II



Strings I



Strings II



Ternary Operator



Bits Operations



Is As In



Smart Cast



Switch / When






















How to create a REST API with Node.js and LoopBack

how to API REST tutorial

In this post, we are going to learn how to use LoopBack Node.js framework  to create a fully functional REST API over MongoDB.

We will follow these steps:

1- Define the models in the database

2- Define the relations between models

3- Define users access levels


To follow this tutorial we will need NodeJS and MongoDB installed in our computer.


Install the LoopBack module.

Run Loopback and follow instructions.

Move to the new folder.

We are going to do an e-commerce API for the example. We want to to store all date in a persistent way into a MongoDB database that will have Clients, Products and Comments.

In order to do so, we need to specify the route of the database. As it is not created yet, will create a new folder and connect it to MongoDB.

Then, in another terminal, we run the Loopback commands to create the database

We’ll call it “ecommerce”

Once we generated the database, we can see the code generated by Loopback at the file model-config.json.

It is recommendable to change the attribute “dataSource”: “db” to the database we just created (“MongoDB”) at ACL,RoleMapping and Role.


To create a new collection (what would be a table), we’ll use the following command.

The way to define the data will be as the following example:

*In this case is not needed to define more attributes because we are extending the “User” class that already have username, password, email and other needed attributes.

Now we are going to define the “Product” collection.

Now, the comments:

Let’s add some Comments properties now.

Now we have all the collections defined, it’s time to define the relation between them.


Let’s review what we have done up to now.

On the one hand, we have the e-commerce Users and on the other hand we have the Products.

We also want the Users to post Comments about our Products.

So these would be the relations:

1- A product can have several comments.

2- A product can have several users commenting about it.

3- A comment belongs to determined product.


4- A user can post several comments.


5- A product can have several comments about it.

[insert schema here]

To define the relations between collections, we will use the following command:

1- A product can have several comments.

2- A product can have several users commenting about it.

3- A comment belongs to determined product.

4- A user can post several comments.

5- A product can have several comments about it.

With what we have done up to now

Up to this point, we already have the API and we can do some testing by this command.


Despite of this, we haven’t finished yet, as any user could use all the methods and CREATE and DELETE some data without any authentication, which drives us to the last step.


The first thing that we are going to do in this section is to create the users “admin” and “kike” (although you can change the last one for your username) and we will give to the administrator privileges to the user “admin”.

Loopback allows us to include a script that will run whenever we start the service, so we will use that to introduce these two users into the database.

So, we create a file at <our project folder>/server/boot/script.js and copy the following code:

This will create two new users. A regular user (Kike) and an Admin user (obviously, admin). After that we create a Role admin and bind them together.

Now, let’s restrict the some accesses for Authenticated users:

We will use the Loopback Access Control List (ACL) by using this command:

So first, let’s deny all kind of accesses:

Once we have done this, let’s enable GET (READ) accesses for autheticated users:

And finally, allow Admins to perform all operations:

Once we have done this, we finished and already have a fully functional REST API with Node.js.

We can run it and start playing with it with he following command:

Cool, isn’t it? Now you can relax, take a cup of coffee and tell your coworkers how hard you have been working.


Improve your algorithms using the correct Data Structure

Algorithm complexity. Big O


We know that Object-oriented Programming can help us to design and build huge systems, but this is only the half history. Usually, we use computer programs because we need to manage huge amounts of data and do it within a reasonable amount of time.

Here is where algorithm design comes into play. The way we manage the data into the algorithm will determine the time that will take to solve the problem. (See above the Amount of data – Time correlation table)

Is this post, I want to talk about how using the correct data structure can help us to get a successful cost-effective algorithm.

When developing an algorithm, there are several things that we should take into account:

1- Amount of data

2- How we structure the data

3- How we manage the data

4- Time and space complexity

We assume that the main aim of our algorithm is to manage a big amount of data ( >1000 items ). The difference of time between two algorithms (let’s say O(x) vs O(x²)) for 10 elements is almost irrelevant.

Our work as a software engineers is to avoid unnecessary resource consumption and decrease the server costs.

The most important step when choosing a Data Structure is to know what kind of operations will be performed against that Data Structure.

Most common operations are Access, Search, Insertion and Deletion. Requirements may vary depending of each case but we base our research in those 4 as a first step.

Of course, the most valuable aspect of an algorithm is the programmer creativity. Let’s consider then, the following Data Structure table a cheatsheet for that.


List with PIO(n)O(n)O(1)O(1)O(n)
Hash tableO(1)/O(n)O(1)/O(n)O(1)/O(n)>=O(n)

*as long as we overdimension the hash table there will be less collisions and we will get the item easily.


My plan is to get more deeply into the listed Data Structures. If you find interesting any other Data Structure, please comment below. I will appreciate any suggestion.


3 consejos para salir de tu zona de confort


A todo el mundo que quiere dar la mejor de sí mismo o hace “autocoaching”, se les dice que lo primero que tienen que hacer es una lista de objetivos.

Personalmente me parece una buena idea, pero a veces nos perdemos en el día a día. Por ello, os propongo una alternativa (o complemento) para forzarte a ser la mejor versión de tí mismo cada día.

El ejercicio consiste en hacer 3 cosas al día. No te preocupes, las podrás hacer durante tu rutina diaria y no supondrán ningún impedimento a tu productividad, incluso todo lo contrario.

1- Haz algo que te dé miedo (o vergüenza):

¿Cuantas veces no has hecho algo que sabías que tenias que hacer por miedo o vergüenza?

(En verdad pienso que la vergüenza es otro tipo de miedo)

¿Cuantos proyectos no han salido de tu cabeza por miedo a fracasar?

¿Cuantas experiencias te has perdido por parecerte demasiado arriesgadas?

Fear is the mind killer

El miedo traba todos tus intentos de ser mejor persona y te mantiene estancado en tu zona de confort. Por otra parte, la combinación de adrenalina y endorfinas que generas cuando te enfrentas a tus miedos te darán la energía necesaria para completar todas las tareas que te hayas propuesto durante el día.

2- Haz algo que requiera esfuerzo:

¿Quieres dar la mejor versión de ti mismo? Pues vas a tener que hacer algunas cosas que no te gusten.

Y no, no me refiero a levantarte de la cama por la mañana. Me refiero a un esfuerzo significativo en tu vida diaria. Si vas al gimnasio, corre más kilómetros, levanta más peso o haz mas repeticiones. Si estas en el trabajo, realiza las tareas más rápido o esfuérzate más razonando el problema con el que estas tratando. Lo que sea pero trata de esforzarte cada día un poco más.

Para lograr lo que nunca has logrado, vas a tener que hacer lo que nunca has hecho.

No hay trucos con esto, si realmente quieres superarte a tí mismo vas a tener que esforzarte. No es fácil, no es cómodo pero vale la pena.

3- Haz algo que mejore tu presencia.

Esto es puro marketing, pero en la vida hay que saber venderse.

La presencia no es solo como vamos vestidos, sino también como manejamos el lenguaje corporal o como nos comunicamos.

Es esta tarea te propongo hacer, al menos, una cosa que mejore uno de los 3 aspectos que he mencionado, puede ser desde arreglarse por la mañana, mantener una buena postura durante todo el día o mejorar tus dotes comunicativas.

Cualquier cosa, que nos haga más atractivos a los ojos de los demás.

Es imposible no comunicar


Os dejo un vídeo que explica muy bien lo que podemos llegar a conseguir cuando salimos de la zona de confort:


5 razones por las cuales todo CTO debería seguir la Google IO

logo google io evento para cto
18 de mayo, el día en que Google organiza su conferencia anual más importante, la Google IO. En esta conferencia se presentan todas las novedades de Google, lo que hace que sea un evento de gran interés tanto para desarrolladores como para CTOs, pues así pueden anticipar sus desarrollos con este tipo de novedades.

Si todavía no estás convencido de por qué tienes que seguir la Google IO, con estas 5 razones cambiarás de opinión:
1- Conocer nuevas tecnologías. En el mundo del IT, es vital estar a la última en las tecnologías que se están lanzando y conocer cuales de ellas pueden ser útiles para tu empresa. Elegir la tecnología idónea es crucial para el desarrollo del producto y te ahorrará muchos de dolores de cabeza en el futuro.

2- Conocer tendencias. Todo CTO (y programador que se precie) debe conocer las tendencias de su sector, no solo para planificar los desarrollos, sino también para enfocar la estrategia de producto de la empresa. Conocer las nuevas tendencias del sector, nos proporcionará una ventaja competitiva ante la competencia, visión de negocio a largo plazo y la oportunidad de desarrollar productos que años atrás, eran impensables.

3- Salir de la rutina. A veces necesitamos cambiar de aires, conocer gente nueva o simplemente, hacer algo a lo que no estamos acostumbrados. Porque por ejemplo, no es lo mismo obtener toda la información de Google IO leyendo un blog o viéndolo por Streaming desde tu casa, que acudir a un evento. ¡Anímate a salir de tu zona de confort!

4- Networking. Una forma de ampliar tu red de contactos es interactuar con los asistentes de estos meetups. Nunca sabes a quien puedes tener al lado, puede ser un programador Junior o un crack del código. Sea cual sea la situación, si eres CTO, siempre viene bien hacer este tipo de contactos, ¡podría ser tu nuevo programador!.

5- Motivación. Al juntar las cuatro razones anteriores, solo puede resultar una cosa, crecimiento personal y profesional. Has descubierto nuevas tecnologías, te han comentado cosas que optimizarán tus procesos y tienes una libreta llena de consejos para mejorar. ¡A por ello!

Y tras esto solo puedo decir, ¡Sigue el evento por Streaming! A partir de las 19h.

Para todos aquellos que no lo visteis en el momento. Aquí tenéis el enlace de YouTube.


Uso de cookies

Este sitio web utiliza cookies para que usted tenga la mejor experiencia de usuario. Si continúa navegando está dando su consentimiento para la aceptación de las mencionadas cookies y la aceptación de nuestra política de cookies, pinche el enlace para mayor información.

Aviso de cookies