Friday, April 19, 2019

Redis - tus bases de datos favoritas en una

Las aplicaciones Software suelen usar herramientas para persistir datos buscando tiempos de respuesta optimizados de forma distribuida y escalable. En muchos casos, los desarrolladores tendemos a persistir datos temporales para estados u otra información que sólo durará por un tiempo, en otros integramos consultas en memoria o en caché usando otras aplicaciones o librerías.

Redis es un motor de base de datos basado en el almacenamiento en memoria, además de permitir la persistencia. A continuación revisaremos algunas características de Redis.

Redis, todo en uno


Usando Redis podemos tener una base de datos que actúa como caché y persistencia al mismo tiempo, así puedes dejar ese trabajo al mismo motor y no necesitas usar librerías externas u otra base de datos para manejar o diferenciar entre esos dos tipos de datos.

Esta herramienta también provee operaciones sobre los datos almacenados en memoria que son identificados como si fueran una variable hash soportando diversas estructuras bastante flexibles [1]. Para cada tipo de variable, Redis provee diferentes operaciones para su manipulación.

En resumen, Redis es una base de datos distribuida que administra datos en memoria, mejorando el performance de las respuestas y ofreciendo operaciones sobre esos datos. [2]

RediSearch


Si lo que necesitas es hacer búsquedas complejas sobre masivas cantidades de datos, puedes usar RediSearch que posee un engine optimizado y moderno que opera sobre Redis, está escrito en C y es comparable a otras herramientas como ElasticSearch. [3]

Usar en una red interna


A pesar de que usa un sistema para autenticar a las aplicaciones clientes, por su naturaleza distribuida, puede permitir muchos intentos sin bloquearse. Lo cual puede ser vulnerable usando técnicas de fuerza bruta para descubrir contraseñas.

Usos de Redis


Algunos de los usos más populares son los siguientes:
- Sistema cache con políticas de persistencia
- Sistema de colas
- Almacenar sesiones en memoria con tiempos de expiración.
- Cuando se requiera guardar un estado temporal, por ejemplo, en una arquitectura de microservicios
- Almacenar sesiones de usuario
- También puede ser usado para: un carro de compras, un juego online, avisar que un elemento está bloqueado o que hay un proceso en progreso.


Redis es flexible, rápido y escalable, entregando la libertad a las aplicaciones sobre el uso y las políticas con las cuales los datos son almacenados de acuerdos a los criterios de velocidad y tamaños que necesites.

Es recomendable para un extenso rango de tipos de aplicaciones, siempre y cuando resuelva algunos problemas que las otras bases de datos necesitan de más componentes para hacer lo que ya tenemos en uno.

[1] https://redis.io/topics/data-types
[2] https://redis.io/commands
[3] https://redislabs.com/blog/search-benchmarking-redisearch-vs-elasticsearch/

Sunday, April 14, 2019

Hacer una aplicación para una startup o una empresa grande requiere de muchas tareas necesarias antes de desarrollar la aplicación como obtener una infraestructura adecuada, revisar disponibilidad de máquinas, instalaciones, cableado, etc. ¿Cuántas de esas tareas entregan valor a lo que hace esa compañía?

La espera para obtener servidores puede tomar bastante tiempo, además de los dolores de cabeza  cuando dejan de estar disponible

Los desarrolladores a veces trabajan los fines de semana porque no hay infraestructura para escalar ni asegurar disponibilidad. Y ni hablar sobre los costes para obtener y mantener máquinas, transportarlas, hacer cableado, monitoreos, y otras tareas relacionadas.

Externalizar la infraestructura


Hay empresas que se han dedicado a proveer servidores y servicios para que podamos montar aplicaciones, ya no necesitamos todo un equipo para asegurar disponibilidad de las máquinas.

Los proveedores de Cloud, como AWS o Google Cloud, son los que se dedican a hacer ese trabajo por ti, optimizando recursos, electricidad, tiempos y costos. Desde hace un tiempo, tienes la opción de no preocuparte sobre la logística de comprar máquinas y obtener lo necesario para montar los servidores, ahora simplemente tienes que seleccionar lo que usarás con algunos clics y tener consciencia sobre cómo se hará la facturación.

Paga por lo que usas


¿Qué pasa si después de levantar mi infraestructura, todavía no usamos las máquinas?. En la nube,  tendríamos costo cero.

Esa es la filosofía cloud, incluso puedes tener una aplicación disponible y si nadie la usa llamando al servicio o visitando la página web, no hay cobro porque no ha sido utilizado. Obviamente, eso depende de la estrategia que uses al implementar la aplicación.

No es necesario gastar el dinero por algo que no usamos.

Útil para todos los tamaños


Una nueva empresa con recursos limitados puede comenzar con algo pequeño y a medida que va creciendo y obtienen mayores ingresos, pueden solicitar mayor capacidad de cómputo con algunos clics.

Muchas empresas ya se han movido y se están moviendo a cloud [1]. Es una estrategia generalizada debido a los costes y restricciones de infraestructura que se han enfrentado en muchos casos.

Tiempo de los desarrolladores


Los proveedores de cloud ofrecen servicios para que sea más fácil implementar buenas prácticas de programación como el Continous Integration y Delivery. También, los servicios cloud manejan la disponibilidad bajando y subiendo instancias a medida que sean necesarios. Asegurar la alta disponibilidad es posible y no hay excusas para no lograrlo.

Sin duda, hay otras habilidades de los desarrolladores que se están haciendo más necesarias, tenemos que actualizar nuestros conocimientos y modificar nuestros paradigmas.

¿Son necesarios los empleos de infraestructura?


Usando cloud no necesitaremos alguien que revise las conexiones, actualizaciones, estado de las máquinas y otros aspectos. Sin embargo, es vital revisar continuamente esas características de forma automatizada. La forma de trabajar está cambiando ¿No parece ser una más inteligente?

No te quedes atrás


La tendencia es clara, las empresas se están moviendo a este tipo de infraestructuras por diversas razones. Es importante entender los beneficios y los problemas de los servicios Cloud.

Los proyectos e innovaciones están al alcance de todos, ahora podemos tener más tiempo para hacer lo que necesitamos.

Friday, February 1, 2019

Metodologia Spotify

Últimamente se ha estado escuchando sobre una nueva metodología de desarrollo de software llevada a cabo por Spotify. Si, de la misma compañía que provee música con 4 millones de usuario de pago y 15 millones de usuarios en total.

Spotify posee 30 equipos en 3 ciudades distintas, números que obligan a cuestionar otros estándares ampliamente aceptados como los de Scrum y algunos usados por compañías grandes como Safe.

A continuación tenemos un resumen sobre algunos de sus principales puntos.

Squads


Los squads son como los equipos de Scrum. Un squad se encarga del desarrollo, test y entrega en producción. Tienen todas las herramientas para desarrollar su trabajo, contacto directo con Stakeholders y son los dueños de uno o más funcionalidades o productos.

El equipo autoorganizado decide las prácticas a seguir como las stand ups, code review, pair programming, retrospectivas, etc. Así como también tienen un cierto grado de autonomía sobre las tecnologías a utilizar (para desarrollar el producto, integración continua, entrega continua, etc.). La idea es otorgar independencia al squad con el fin de evitar bloqueos o asuntos que puedan demorar una entrega.

No hay team leads, pero si hay un product owner que se encarga de priorizar las tareas. ¿Quién se preocupa del crecimiento del equipo? Puede ser algo que define el propio Squad o los “chapters” que veremos más adelante.

Un agile coach puede estar ayudando a que el equipo use las mejores prácticas según su contexto y apoyar en aspectos claves como la motivación o la adaptación en un equipo.

Actualmente Spotify entrega libertad para que el Squad dedique el 10% de su tiempo para hacer lo que quieran, inventar un producto nuevo, aprender una nueva tecnología, etc.. También realizan una encuesta cada 3 meses para medir la mejora o sus esfuerzos.

Dependencias


Una tribu es un grupo de Squads que trabajan en una área parecida. Los squads de una tribu están en la misma oficina promoviendo la colaboración.

El líder de la tribu se encarga de proveer el mejor hábitat posible para los squad y las relaciones entre éstos. Una de las dependencias más comunes son los equipos de operaciones. Aunque un squad debería poseer el rol de operaciones, es importante tener un equipo encargado exclusivamente a eso y entregar las herramientas a los squads para que puedan lograr su autonomía..

Chapters y Guilds


Spotify propone autonomía con equipos independientes, pero también hay que aprovechar las instancias para compartir conocimiento y desarrollar habilidades comunes en la compañía. Un chapter es un equipo con habilidades similares dentro de una tribu.

Los liderazgos se ven a nivel de chapter porque tienen habilidades parecidas, el líder puede ser la persona con más experiencia o experticia sobre el rango de habilidades del chapter.

Un guild se puede ver como un grupo con intereses similares donde comparten conocimiento, habilidades, herramientas y prácticas. Las personas que integran un guild o chapter, son las mismas que participan en la entrega del producto siendo parte de un squad.

Architectura


Para hacer que las integraciones entre los diferentes squads sean más fáciles y coherentes, se considera el rol “System Owner” que se preocupa de la calidad, documentación, technical debt, escalabilidad y el proceso de release. Esta persona es parte de un squad.

El chief architect es quien se encarga de coordinar el trabajo de architectura en un alto nivel. Promoviendo la visión del producto, lineamientos de tecnologías o problemas futuros a mitigar.


La metodología o prácticas de Spotify están enfocadas en las entregas proporcionando una estructura con independencia y las instancias para coordinar y compartir habilidades que la aseguren. Podemos mirarla como una evolución de las prácticas ágiles con constantes cambios.

Sunday, January 13, 2019

Los desarrolladores de Software son inversionistas

¿Qué tan importante son los detalles para un desarrollador de Software?

¿Qué pasa si dejamos los casos bordes para el final, o hacer los arreglos cuando ocurra el error? ¿O decir que el performance no es importante hasta que parezca lento?

Ahora tú podrías estar trabajando en una aplicación que funciona en el escenario feliz donde el usuario no experimenta o no intenta usar todas las funcionalidades esperadas.

Comienzo rápido, después lento 


Al comienzo, un desarrollador puede entregar funcionalidades rápidamente, todo es nuevo y no hay obstáculos que lo detengan. 

A medida que la aplicación crece, emergen los errores, el performance disminuye, los requerimientos de seguridad se hacen críticos y ya no se puede entregar algo nuevo hasta arreglar todo lo anterior. ¿Fue una buena práctica preocuparse por los detalles al final?

El inversionista


Un programador es como un inversionista convencido de lo que necesita su empresa para progresar. 
Consciente del trabajo que tiene que entregar ahora y donde debe realizar los esfuerzos de inversión como la integración continua, automatizar deploys, pruebas automatizadas, capacitaciones, etc. El programador tiene que detenerse y pensar sobre lo qué está haciendo y cómo. ¿Es mantenible lo que estamos desarrollando? 

La solución temporal es permanente.

Ver el futuro 


¿Cómo puedes tener un diseño mantenible si no ves los cambios que vienen? Cada línea de código tiene implicaciones que pueden favorecer al equipo o no. No podemos avanzar a ciegas sin conocer la visión del producto y las nuevas funcionalidades que vienen. 


Quizás no puedas ver cuantos clientes van a usar tu aplicación y no tener claridad sobre lo que van a usar o querrán cambiar. Tal vez la arquitectura cambie. Pero si puedes ver qué tan estable, rápida, segura y mantenible sea el producto software en qué trabajas. 

Tuesday, November 20, 2018

Sobre el Teletrabajo

Despertar a cualquier hora, no preocuparse del transporte y entregar el estatus del proyecto usando un Chat. Comenzar a trabajar cuando te sientas inspirado después de leer las noticias y cuando te cansas, das un paseo o vas al gimnasio. Vuelves para aprender algo y continuar con el curso que tanto disfrutas. Después pasas tiempo junto a tus hijos, videojuegos, mascotas o amigos para finalizar el día en cama y avanzando en el proyecto cuando esta más fresca la temperatura. Incluso puede ser más cómodo trabajar sábados y domingos para tener libres los lunes y martes.

Así es el Teletrabajo


Un dìa cualquiera de teletrabajo. Planeas el día como te parezca mejor, además de ahorrar dinero y tiempo de transporte, también podrías evitar costosos arriendos. ¿Es un modelo factible? ¿Qué tipo de trabajos pueden implementarlo? ¿Qué sucede con el control?

Una tendencia


El mundo se mueve hacia ese modelo de trabajo. Recomendado para los trabajadores del conocimiento que necesitan un escritorio y conexión a Internet para generar valor. Los beneficios son personales y para las empresas, un desarrollador de Software o ingeniero puede emplear esas horas ahorradas en transporte para comenzar un proyecto de innovación o aprender sobre esa tecnología que puede salvar a la compañía. También dormir una siesta es mejor que pasar un día completo con sueño. La empresa ahorra espacio, infraestructura y obtiene personas motivadas a participar en la visión de la empresa.


Valores


La confianza es fundamental, además de contar con buenos sistemas de comunicación para el equipo de trabajo. Las reuniones principales se minimizan para cuando sean realmente necesarias o por motivos de coordinación.

Hay más tiempo para la educación continua y la curiosidad, características fundamentales de los trabajadores del conocimiento

No hay fórmulas mágicas y cada organización puede buscar las suyas.

Implementación


Cuando ingresa un empleado nuevo, es recomendable que se mantenga las primeras semanas con alguien más experimentado. También hay reuniones para conocer al equipo, o instancias distintas a una oficina para hacerlo.

En mi caso, nuestro equipo está eliminando las reuniones de estado (status) reemplazándolas por un chat para avisar sobre avances y problemas donde necesitemos orientación o ayuda. Las asistencias son obligatorias una vez a la semana y siempre hay una persona del equipo en la oficina. No podemos dar una mala imagen a los otros equipos de la compañía.

El Teletrabajo ya llegó


Nos estamos moviendo hacia esa forma de trabajar con sus ventajas [1] y desventajas [2]. Sin duda, para mi, los beneficios son mayores.

En países como Chile, se ha generalizado que el trabajo es una especie de tortura donde esperamos con ansias el viernes para poder descansar y hacer, por fin, algo por nuestras vidas. ¿Es necesario cumplir con las 8 horas de trabajo? Cuando en 5 horas a tu máxima capacidad, basta para cumplir con las metas, incluso cuando éstas son muy altas.

Un modelo de trabajo donde el ganar y ganar es para ambos.

[1] https://www.elconfidencial.com/alma-corazon-vida/2018-11-14/trabajo-futuro-sociedad-londres_1646490/
[2] https://www.fayerwayer.com/2018/11/teletrabajo-desconexion-chile/


Sunday, September 23, 2018

Spring - configurar usando annotations o XML

Si tuviera que elegir. ¿Qué tipo de configuración Spring sería mi elección?

Configuraciones xml


Los XML son útiles, pero hacen que el desarrollo sea más lento porque nos daremos cuenta en tiempo de ejecución de los errores, los cuales resolveremos uno por uno cada vez que arreglamos y volvemos a ejecutar. Un punto a favor es que no necesita modificar el código fuente.




Configuración anotaciones automáticas en clases


En el caso de las anotaciones usando @Autowired o @Component, ya estamos añadiendo conocimiento al POJO de que está usando Spring, Sin duda, levanta una aplicación rápidamente. Sin embargo, a medida que crece el número de beans, es más complicado tener un control sobre ellos. Además, estamos obligados a modificar el código fuente.



Configuración Java


Las configuraciones java usando, por ejemplo, @Configuration o @Bean, combina lo mejor de los dos mundos. Al igual que el xml, podemos declarar un bean especificando la forma de instanciar, además de obtener los conectores adecuados. También sabremos los errores de tipeo al momento de compilar. Aunque no necesitamos modificar el código fuente donde se encuentran las clases de los Beans, sí tenemos que crear configuraciones usando un proyecto Java, especificando la creación e inyección de beans manualmente.



Sin dudas Configuración de Java es la mejor según mi criterio. Primero no perdemos la idea de tener POJO’s que desconocen con quién se conectarán o el framework a utilizar, ademas tenemos mayor control para crear beans y rapidez para encontrar errores.

Saturday, September 22, 2018

Amazon, inspirando con bajos salarios


Hay historias que son inspiradoras, personas que a través de su esfuerzo han podido salir adelante, soportar el caos financiero y llegar a tener una fortuna.

Jeff Bezos, el genio fundador de Amazon tiene una de esas historias que influencian a cualquier soñador, ¿Cómo tenemos que ser? ¿Cómo comportarnos? Algunas respuestas están dadas por innumerables de articulos y noticias que tenemos de Jeff. La tecnología ha facilitado nuestras vidas, la eficiencia en su máximo esplendor.

Liderazgo y visión


Modelos de liderazgo sobrenaturales para alguien que piensa en el futuro ser humano. Un servicio eficiente, rápido y a un precio asequible. El mundo ama a Amazon, agradece a su fundador por evitarle los mediocres servicios que ya se estaba acostumbrando.

La fórmula para convertirse en el hombre más rico del mundo


Los informáticos sueñan con trabajar en Amazon, su infraestructura, tecnologías y campus son lo mejor del mundo. Pero en los almacenes donde están tus productos se vive un mundo diferente.

Jeff Bezos tiene una fortuna en base a la explotación de sus empleados estresados [1]. Entregando bajos salarios, condiciones laborales brutales y pocos beneficios, él se ha convertido en el hombre más rico del planeta

Las huelgas son comunes en diferentes países. El rendimiento es tan importante que los empleados tienen que trabajar con botellas donde puedan orinar sin dejar el almacén.

Denuncias


El senador Bernie Sanders de Estados Unidos ya envió un proyecto de ley para que pague decentemente a sus empleados, muchos de ellos dependen de los subsidios del gobierno para subsistir [2]. También una conocida comediante llamada Sarah Silverman publicó sus denuncias en Twitter,

En Alemania y España ya iniciaron huelgas para mejorar las condiciones laborales [3]

Mitigando la mala reputación


Jeff anunció que ofrecerá US $ 5.000 a los empleados que no les gusta la empresa y quieren renunciar [4]. Es evidente que no hay planes para mejorar las condiciones laborales y, sin duda, comprar Washington Post es una jugada para favorecer su imagen.

¿Qué pagamos?


Pagamos por un servicio eficiente y financiamos la riqueza de un explotador. No pretendo perjudicar a Amazon ni menos a Jeff, pero es fundamental conocer el costo que tiene la Kindle que tenemos en nuestras manos.


[1] https://www.eleconomista.com.mx/empresas/Jeff-Bezos-amasa-fortuna-gracias-a-la-explotacion-de-los-empleados-de-Amazon-20180722-0008.html
[2] https://www.fayerwayer.com/2018/09/bernie-sanders-jeff-bezos-ley/
[3] http://www.t13.cl/noticia/negocios/miles-trabajadores-amazon-inician-huelga-espana-y-alemania
[4] https://www.cnbc.com/2018/05/21/why-amazon-pays-employees-5000-to-quit.html