Aplicando lo aprendido (desarrollo)— Primera Parte.

Jorge Rubiano
5 min readAug 29, 2017

--

Me parece fascinante todo lo nuevo que sale día a día en el mundo del desarrollo y de la tecnología a nivel general, a veces el ritmo es abrumador e intentar está actualizado es desafiante.

He estado enfocado en el desarrollo de aplicaciones web, haciendo uso de HTML5, CSS3 y Javascript, en el backend con lenguajes como PHP, NodeJS/Javascript, Python entre otros, aprendiendo un poco sobre temas relacionados a Cloud lo cual ha redundado en la forma en que desarrollo.

En está serie de entradas deseo compartir lo aprendiendo en mi última experiencia de desarrollo.

Mi última experiencia aplicando lo aprendido.

Definitivamente aprender y apropiarse del conocimiento es aplicándolo en algo real, es lo que ha marcado mi experiencia a lo largo de mi recorrido en el área de la tecnología.

Algunos de los temas que deseaba aprender/afianzar eran:

  • Manejo de async/await (NodeJS)
  • Autenticación sin estado.
  • Autenticación vía redes sociales.
  • Progressive Web APP (PWA) / ServiceWorkers.
  • Manejo de una SPA (Single Page Application)
  • Uso de herramientas de pruebas automáticas (Cypress)
  • Uso de herramientas de detección de Bugs (LogRocket)

En esta primera entrada trataré el tema relacionado al manejo de async/await y al manejo de la autenticación sin estado, lo cual permite el escalamiento horizontal de la aplicación.

Juego Trivia

Vista Juego — Prueba PWA

Deseaba un proyecto que no fuera tan grande que consumiera mucho tiempo de desarrollo y tan sencillo que no alcanzará a abordar los temas anteriores, fue así que inicie el desarrollo de un Juego tipo Trivia, en el cual los usuarios compitieran versus a otros usuarios, los cuales pudieran acceder a través de sus cuentas de redes sociales.

Otro de mis objetivos era aplicar lo aprendiendo en el curso de Wesbos https://learnnode.com/ en el cual se explica conceptos como composición y uso de nuevas funcionalidades como async/await

Primera fase — Sistema de Administración

Vista creación de un juego

Deseaba que la actividad fuera lo más dinámica posible, es decir, que no sólo sea un juego de una sola temática si que no tuviera diferentes temáticas, y que cada una a la vez estableciera sus propios temas y preguntas, además de definir el tiempo en que la actividad estaría en funcionamiento, otro punto importante es la creación del ranking donde se muestra los usuarios que han obtenido mayor puntuación durante el tiempo en que la actividad estuviera disponible.

Vista Administración de Juego — Avance de un usuario

Cada vez que se creaba un nuevo juego, este tiene su propio administrador en el cual se pueden relacionar los temas, preguntas, configuración de tiempo y organización de grupos de trabajo, así como realizar el seguimiento del avance de cada usuario en el juego.

Haciendo uso de async/await

En el front-end del administrador no se manejo nada “especial”, se hizo uso de Boostrap para el manejo de las vistas, a nivel de Backend se manejó NodeJS, en esta ocasión la versión 8.0 (la versión actual con soporte LTS es v6 al momento de escribir esta entrada) en está versión ya se cuenta con la posibilidad del manejo de async/await

Uso de async/await

En el curso de Wesbos https://learnnode.com/ aprendí el manejo de estás nuevas funcionalidades, lo cual para mi fue algo asombroso, al inicio hacía uso de los denominados callbacks, lo cual a veces generaba el famoso Callback Hell luego la llegada de las Promesas ayudó a que esto sucediera en menor medida, async/await funcionan en base a las promesas, es decir, que una función que está antecedida de un await debe retornar una promesa, igualmente async le indica a la función contendrá llamadas a funciones con await.

Con el uso de async/await el código se ve mucho más legible y fácil de debuggear, combinándolo además con herramientas como supervisor y node — ispector el flujo de desarrollo fue genial.

Autenticación sin estado.

Uso de Redis

Para la autenticación hice uso del paquete PassportJS tanto la estrategia local para la administración de la aplicación, como las estrategias para redes sociales, pero se me presentaba un problema cada vez que hacía un cambio, como es bien sabido para que un cambio hecho en NodeJS surta efecto, el servidor debe reiniciarse, con supervisor ayudó en gran medida, ya que éste reiniciaba el servicio cada vez que se efectuaba el cambio, lo cual incurría que la aplicación perdía la sesión, y debía volverme a autenticar, investigando encontré la solución, la cual era no mantener la sesión en la aplicación sino en un tercero que fuera independiente de está, esto no sólo ayudaría en mantener la sesión sino que además garantizaría un fácil escalamiento de la aplicación.

Configuración Redis — sesión

Para lograr este objetivo hice uso de Redis, la cual se configura de forma sencilla el almacenamiento de la sesión, el almacenamiento de la sesión ayuda en gran medida a la dinámica de la actividad, ya que la autenticación el usuario sólo la debe realizar una sola vez (siempre y cuando no cierre la sesión o se haya cumplido el tiempo de vida de la sesión), al “instalar” la aplicación (más sobre este tema en posteriores entradas) el usuario podrá ingresar a la actividad y continuar su juego.

Esta ha sido la primera entrada acerca de la experiencia de mostrar como he aplicado lo aprendido, sé que algunos temas no son de gran impacto, no me considero experto pero deseo dar a conocer estos temas esperando que a alguien le sean de utilidad igual que lo han sido para mi.

Agradezco el tiempo tomado en leer este post estaré pendiente de cualquier pregunta y/o sugerencia.

Actualización

Ya está disponible la segunda parte.

Jorge Rubiano

--

--