WebAssembly lo cambiará TODO

¿Qué es WebAssembly?

Un formato binario de bajo nivel creado bajo un estándar y al paraguas de la colaboración de varias compañias tecnológicas. Al ser abierto y basado en la integración con el omnipresente Javascript permite ofrecernos muchas ventajas en muy distintos ámbitos.

Qué cosas cambiará está cambiando:

Serverless

Actualmente la ejecución de funciones serverless, se basan generalmente en entornos basados en dockerizar para aislar entornos. Aunque muy eficientes y rápidos, estamos hablando de entornos que tardan milisegundos en iniciarse y consumen megas de recursos. Esas mismas funciones en WebAssembly se inicializan en microsegundos y consumiendo unos KB.

El coste y rapidez hacen presagiar que será un buen camino en los entornos de serverless , Cloudflare ya ha empezado a ofrecer este tipo de funciones serverless.

Librerías Javascript

Los miles de frameworks Javascripts existentes deben lidiar con el rendimiento y las funcionalidades para poder ofrecer la mejor experiencia en el frontend o en el backend (node.js). El uso de WebAssembly integrado en partes críticas de los frameworks puede consolidar y acelerar partes importantes que aporten rendimiento y fiabilidad a todas la librerías. WebAssembly ha nacido para potenciar Javascript, no para sustituirlo y este es uno de los puntos donde lo veremos extenderse en los próximos años.

Portabilidad de aplicaciones a web

Existen millones de proyectos desarrollados en múltiples lenguajes que suelen basar sus compiladores o runtimes en C o lenguajes de bajo nivel. Mediante la compilación a WebAssembly mucho del código fiable puede aprovecharse para ejecutarse de forma ubicua en cualquier engine moderno de navegador.
Una industria que está empujando en esta dirección son los videojuegos,
poder portar juegos desarrollados en C++ a Web abre un nuevo mundo de posibilidades a la industria.

Ejecución multiplataforma

La ejecución de aplicaciones multiplataforma ha sido el santo grial del desarrollo de software. Java, Velneo, Python y otros, han nacido con el propósito de simplificar el desarrollo en multiplataforma. Pero lidiar con el reto de la multiplataforma complicaba la mantenibilidad o mermaba el rendimiento.

WebAssembly no es solo web, durante los últimos meses se está definiendo WASI, un interface de WebAssembly con el sistema, lo que una vez estandarizado se podrá «compilar» y ejecutar directamente en sistemas operativos que soporten dicho interfaz. Esto simplificará la compilación multiplataforma de una forma notable, al mismo tiempo que se acerca a rendimientos de ejecución nativa.

Nos esperan años apasionantes, donde el software será más ubicuo, más seguro, más portable y más eficiente.

Un buen nombre de fichero

Cuando creamos un fichero que va a circular por emails, webs, ftps, google drive y el mundo en general, es importante pensar el nombre para evitar problemas y unificar criterios.

Consejos:

  1. Evitar espacios, usar guiones
    En navegadores o urls los espacios los convierte a %20 y se hace complicado de gestionar. Se aconseja sustituir con guiones.
    Correcto: visualms-instalable-23.exe
    Evitar: visualms instalable 23.exe
  2. Evitar mayúsculas
    En distintos sistemas operativos, la mayúscula y minúscula significan cosas distintas, es bueno tener siempre minúsculas para evitar tener el fichero duplicado con nombres iguales.
    Correcto: visualms-informe-anual-2018.pdf
    Evitar: VisualMs-Informe-Anual-2018.pdf
  3. Descriptivo
    Intentar que el fichero sea descriptivo, que no necesite tener información adicional para saber que significa.
    Correcto: visualms-gastos-davidgu-enero-2018.pdf
    Evitar: gastos.pdf
  4. Evitar símbolos (/\*?_<>)
    Algunos símbolos pueden significar algo en otros sistemas y puede provocarnos problemas de conversión. En el caso del guión bajo, puede ofrecer confusión en hiperenlaces que suelen estar subrayados y además, según Google, no es bueno para SEO.
    Correcto: visualms-resumen-fiesta-25-05-2018.avi
    Evitar: visualms->resumen_fiesta-;-).avi
  5. No usar tildes
    Quizá resulte raro, pero nuestros ficheros pueden pasar por sistemas que no gestionan bien las tildes o incluso pase por alguna persona «rara» que no entiende el idioma de Cervantes.
    Correcto: informacion-formulario-camion.png
    Evitar: información-formulario-camión.png

Son consejos, no son verdades absolutas, úsalos con moderación 😉

Enlaces de interés:

https://developers.google.com/style/file-names

https://www.csudh.edu/web-services/web-standards/file-folder-naming/

El idioma de las aplicaciones

Nuestra necesidad

Durante los últimos meses estamos implantando internamente nuevas aplicaciones desarrolladas en Velneo. Por otro lado necesitamos conectarlas con otras aplicaciones de terceros que usamos en diferentes departamentos ( Google Apps, WordPress, Twitter, Zendesk, etc ).

Esta situación nos obligaba a marcar una estrategia de futuro en la comunicación entre aplicaciones.

Debíamos buscar una forma de comunicar cualquier aplicación entre sí, da igual si está en web, en escritorio o en móvil. Buscábamos un solo idioma para que se comuniquen nuestras aplicaciones.

Idioma elegido

Después de evaluar las opciones existentes todas nos llevan hacia las siglas REST / JSON

Al ser un servicio tipo REST  tenemos la garantía de que funcionaremos sobre HTTP/HTTPS con todas las ventajas que ello conlleva.

Nos decantamos por JSON respecto a XML por varios motivos :

  • Es muy sencillo y ligero
  • Fácilmente legible por máquinas y humanos 😉
  • Parece el estándar del futuro para comunicación de aplicaciones (WordPressGoogle Glass, Zendesk, Twitter )

Como creamos nuestro API

API-VERPLo primero que debíamos hacer era crear un API que permitiera que otras aplicaciones consumieran nuestras aplicaciones, para ello con el vJavascript de Velneo creamos una aplicación capaz de generar de forma dinámica todo el API en base a un proyecto de Velneo. Esta aplicación no solo nos genera los puntos de acceso, sino una web dinámica con toda la documentación del API

Para darle salida a la aplicación usamos el componente vModApache y configuramos el Apache para añadirle cache, compresión y encriptación.

Con este proyecto, cualquiera de nuestras aplicaciones de Velneo V7 tenían un API dinámico en base a las tablas y búsquedas ya creadas.

Como consumimos nuestro API

Necesitábamos obtener información de nuestras aplicaciones, en unos casos que Google Apps pudiera obtener diferente información de nuestro vERP, para ello desarrollamos scripts en Google Apps Script que acceden a nuestro API  y le consultan la información que necesita. El resultado devuelto en JSON se procesa de una forma muy sencilla y se realizan las operaciones necesarias.

Por otro lado nuestra web necesitaba mostrar información privada en los sitios que funcionan con WordPress. Desarrollamos un plugin en PHP que se conectaba a nuestro API para obtener información y mostrarla al visitante.

Desde los centros de soporte en Zendesk se consulta nuestro API para mostrar información de nuestro vERP en tiempo real

Desde Google Script se generan emails con los indicadores clave de la empresa calculados en diferentes aplicaciones

Que más cosas

Existen cientos de servicios web que ofrecen funcionalidades mediante sus APIs REST JSON

Nuestra idea es comunicar toda esta «nube» de aplicaciones con un mismo idioma, lo que nos permite ser más ágiles en cuanto a la implementación y mantenimiento de nuevos servicios.

La calidad del software es responsabilidad de toda la empresa

Normalmente pensamos que la calidad de un software es responsabilidad exclusiva del departamento de desarrollo, ellos son los responsables de programar y de hacer un producto de calidad.

Pero en realidad el resto de departamentos son complices de la calidad del producto:

  • Si el departamento de soporte presiona para cambios rápidos y sin probar, no esta ayudando a la calidad.
  • Si la dirección estratégica de la empresa va en el camino de más y más funcionalidades, no esta ayudando a la calidad.
  • Si los comerciales piden incorporar en tiempo record las nuevas funcionalidades que tiene la competencia, no esta ayudando a la calidad.
  • Si el departamento de diseño exige que se incorporen imagen y videos super atractivos sin importar los recursos, no esta ayudando a la calidad.

¿Quien lucha por dedicar tiempo a la calidad de las apps?

Todo el equipo tiene que ser consciente que existen muchos trabajos relacionados con la programación que nos ayudan a tener un producto de calidad.

  • Mejorar la usabilidad
  • Refactorizar código
  • Quitar código obsoleto
  • Actualizar librerías
  • Mejorar la velocidad de los procesos
  • Realizar pruebas de carga
  • Automatizar procesos de prueba

Estos trabajos consumen mucho tiempo y toda la empresa debe darse cuenta que son necesarios para que el producto mejore día a día.

La calidad de un producto debería nacer desde la estrategia de la empresa e ir descendiendo por los departamentos hasta su aplicación directa en los departamentos más técnicos. No es un trabajo aislado de unos locos de la programación.

Life is soft 2012

Los pasados días 15 y 16 de Noviembre se realizó en Madrid el evento anual de software empresarial organizado por Velneo

Las sensaciones han sido geniales y he podido saludar a viejos amigos de la comunidad Velneo, compartir unos minutos y charlar de los proyectos en los que están involucrados.

Después de las 26 charlas ( Si! 26 charlas de 22 ponentes distintos ) me quedo con muchas cosas interesantes que espero ir desgranando y disfrutando durante los próximos meses.

Se ha hablado de Velneo, pero sobre todo de como hacer software empresarial sostenible, ganar dinero y disfrutar en el camino.

El viernes al llegar a casa me di cuenta que la palabra «crisis» no se nombro en todo el evento y no la escuche por ninguna de las personas de la comunidad. Todo el mundo esta motivado para empujar en estos tiempos que nos han tocado vivir.

Las ponencias no solo se han centrado en «programar», sino en todo lo necesario para que una empresa de software tenga éxito!

Dinero, diseño, rentabilidad, neuromarketing, reutilizar, comunicación, conectividad, agilidad, movilidad, interfaz, etc.

Enlaces interesantes para recordar el #lis2012

La nube aporta mejoras en el desarrollo de software

Durante los últimos meses la nube entra por todos lados, cada rincón de la empresa de software es susceptible de viajar a la nube.

Hay muchos ámbitos donde puede aportarnos soluciones mejores y más económicas.

Pruebas

Una de las áreas donde el Cloud esta ayudando es el área de pruebas, ya que permite arrancar una máquina limpia de manera rápida, ejecutar las pruebas y eliminarla.
Todo el trabajo de instalación de sistemas operativos desaparece. El coste de una hora de una máquina incluyendo licencias de sistema operativo  suele ser inferior al euro. Hacer eso en local lleva mucho más tiempo y dinero.

Esclavos en la nube

Si usas integración continua con Jenkins, es muy cómodo tener los esclavos en la nube. Estas máquinas son las encargadas de realizar la compilaciones, verificaciones,  pruebas funcionales, etc. En nuestro caso usamos múltiples esclavos para los diferentes sistemas operativos y sus diferentes sabores.

El ahorro más importante viene en que podemos arrancar las máquinas esclavas a demanda, ahorrándonos el coste de tenerlas siempre encendidas. También es muy sencillo cambiar los recursos de las maquinas en función de las necesidades.

Más madera

Otro de los puntos fuertes son las pruebas de carga, estos proveedores te permiten contratar monstruos de la computación. Se pueden montar pruebas de carga con varios equipos de 64 núcleos con cientos de Gigas de RAM. Es posible probar el rendimiento en grandes infraestructuras por unos pocos euros.

Seguridad

En cuanto a la seguridad de las máquinas, es eficaz mantener una política dura en la configuración del firewall del proveedor de Cloud, con lo que no tendremos problema en la configuración o reconfiguración individual de cada máquina virtual.

Como alternativas tenemos experiencia en Amazon Ec2 y Arsys Cloud builder, pero existen decenas de proveedores que pueden ofrecer un buen API para la gestión de las máquinas.

Fechas fijas en tus iteraciones

Las fecha de fin de iteración suele coincidir con la liberación del producto y sus entregables. Es una fecha en la que deben confluir el trabajo y resultados de mucha gente.

Si esta fecha no es fija tenderá a retrasarse, es una ley del universo.

Siempre existe algún motivo:

  • «No he probado esto, necesito dos días más»
  • «Con un par de días puedo añadir esta novedad»
  • «No me dio tiempo a acabar esa tarea, dame dos días más»
  • «Déjame un día más, puede salir tal funcionalidad sin probar»
  • «Necesito un día más para hacer un vídeo de las novedades»

Con una fecha fija e inamovible conseguirás:

  • Dejar menos cosas para última hora.
  • Todas los stakeholders tendrán información fiable de la liberación.
  • Perderás menos tiempo y conflictos en decidir si retrasar o no retrasar.
  • Por mucho que cambies la fecha, nunca tendrás una versión perfecta.
  • Generalmente las cosas importantes se hacen primero, nadie quiere quedarse pillado a última hora.
  • Unos días antes debe estar todo listo, lo que no este, saldrá en la siguiente iteración. No debe haber agobios de última hora por cosas planificadas.
  • Nadie se quedará sin vacaciones o sin fin de semana por un retraso.
  • Con el tiempo y experiencia los últimos días antes de la salida serán los más tranquilos.
  • Retrasar la fecha de esta iteración es el primer paso para destrozar la organización de la siguiente.
  • Cuanto antes puedas marcar las fechas de las siguientes iteraciones será más sencillo planificar cuando se solucionaran las incidencias pendientes.

En la teoría marcar una fecha y cumplirla es fácil, en la práctica todos los integrantes del equipo tienen que estar involucrados en que la fecha es inamovible.

La excelencia en este aspecto es tener la fecha fija, pero saber que ante una fuerza mayor podrás cambiarla.

Evalúa tu iteración

Evalúa tus cartas antes de la siguiente iteración - http://www.lafotodeayer.com/Una de las claves del éxito de las iteraciones en los equipos de desarrollo es que la organización y las personas aprenden a realizar las cosas de una forma mejor y más eficiente.

Sin una evaluación posterior de cada iteración, el aprendizaje desaparece y el ciclo iterativo pierde su sentido.

Lo más adecuado es evaluarte, decir en voz alta y clara que te ha gustado de tu trabajo y lo que se puede mejorar.

La evaluación no pretende castigar

La evaluación no es un examen para castigarnos, se trata de ser un poco mejores. El equipo tiene que ir sintiendo que en cada iteración se hacen las cosas mejor, con más calidad y en menos tiempo.

Evalúame!

Se puede evaluar cualquier cosa

  • La asignación de tiempos
  • La propia metodología
  • Las reuniones
  • Los desarrollos
  • Las herramientas
  • Los entregables

Se trata de revisar las cosas «repetibles», para hacerlas un poquito mejor en cada paso.

Miedo a reconocer los errores

Lo primero que tenemos que quitarnos de la cabeza es el miedo a reconocer los errores y que nuestros compañeros nos examinen. Si no reconocemos las cosas mejorables será difícil conseguir nuevos logros.

Una evolución no una revolución

Del mismo modo que evaluamos muchos elementos, en la siguiente iteración debemos centrarnos en  solucionar los más importantes o los que más nos han perjudicado. No esperes que tu siguiente iteración solucione todos tus problemas.

Los cambios masivos pueden causar una revolución y pueden provocar daños colaterales en tu equipo.

Las iteraciones infinitas

Siempre tendrás cosas que evaluar o mejorar, quizá tu equipo ya funciona bien, pero el entorno ha cambiado y realizando las cosas de otra manera podrás tener un mejor resultado.

Si no ves mejoras en tus procesos, es hora de que cambies de trabajo y busques algo que te estimule más 😉

En casa de herrero, comida de perro

Hasta unas semanas internamente solíamos decir «en casa de herrero, cuchillo de palo«, cuando nos referiamos al hecho de que seguíamos usando algunas aplicaciones internas desarrolladas con Velneo 6.x.

Estas aplicaciones con más de 10 años de vida y con una exitosa trayectoria necesitaban una renovación para beneficiarse de las últimas tecnologías.

Gracias al impulso de mi compañero Domi, durante estas últimas semanas se ha dado un importante paso a la sustitución por aplicaciones desarrolladas con Velneo V7.

Llevábamos años usando aplicaciones desarrolladas con Velneo V7 en combinación con algunas antiguas con éxito, pero ya llegaba la hora de que comiéramos nuestra propia comida de perro de una forma general.

Nuestra filosofia es una combinación de Open Apps con adaptaciones con herencia.

Algunas de las Open Apps que estamos usando son :

El cambio no solo sirve para renovar las aplicaciones, sino que nos estamos mudando a la nube con todas las aplicaciones del grupo. Usamos un servidor en el Cloud de Velneo con lo que nos hemos liquidado todos los gastos de servidor, licencias, copias de seguridad, sais, AC, etc.

Normalmente tenemos una media de 75 enganches a 15 instancias distintas. Y hemos conseguido la felicidad de los maqueros y los linuxeros de la empresa que trabajan con las aplicaciones corporativas directamente desde su sistema operativo preferido.

Nuestro objetivo con este cambio no puede ser otro que «Evolucionar en tecnologías para innovar en software» 😉

Control de cambios para Velneo 6.x con Perforce

Perforce como herramienta de control de cambiosCuando se trabaja en equipo es muy cómodo tener un lugar centralizado donde almacenar y gestionar las distintas modificaciones en tus desarrollos.

Los SCM o herramientas de control de cambios permiten centralizar y gestionar los cambios de un proyecto software.

Existen muchas herramientas para gestionar el control de cambios ( Git, Subversión, etc ). Nosotros llevamos usando Perforce durante años.

Ventajas que más nos gustan de Perforce:

  • Solución muy visual (P4V) que permite iniciarse rápidamente en la gestión de cambios
  • Multiplataforma
  • Servidor muy robusto
  • Fácilmente integrable con Jenkins
  • Configuración Cliente/Servidor por TCP
  • Muy útil para gestión de cambios en mapas de velneo 6.x, documentos, imágenes o cualquier tipo de archivo

Actualmente para pequeños equipos de desarrollo existe una versión gratuita para 20 usuarios / 20 workspaces, lo que permite disfrutar de la herramienta con todas sus funcionalidades.

Es importante crear una correcta estructura de tu repositorio (Branches (ramas) y Trunk (tronco) ) que te permitan controlar todas las versiones y parches para ayudar a tener un buen ciclo de desarrollo

Video de explicación de Perforce