WebOps

Ayer asistí a otra clase de skillshare, Web Operations, ofrecida por Alexis Lê-Quôc cofundador de Datadog. Las operaciones Web son las que se aseguran que el acceso al producto sea permanente. Generalmente el ciclo de integración continua entrega pequeños releases en cada iteración pero una vez entregadas, ¿qué pasa si algo falla?

El ciclo propuesto por Alexis incluye nuevas fases complementarias que promueven la reacción rápida y la gestión sencilla de dichos incidentes:

Medir

Se almacenan los cuatro datos básicos: cpu, memoria, acceso a disco, tráfico de red. Herramientas:

  • Ganglia: Incluye interfaz web, gráficos que se pueden descomponer, integración con Nagios y soporte para Grid. También hay modulos específicos para el kernel de Linux.
  • Collectd: No genera gráficos pero tiene cerca de 90 plugins para diferentes operaciones esta escrito en C para reducir el consumo de recursos sobre la máquina monitoreada.

Log

Los eventos de log deben tener significado, es decir, deben poder ser analizables respecto al tiempo sin producir Terabytes de mensajes basura. Creo que es importante incluir el identificador del hilo dentro del formato de logging. También es una buena idea documentar un estándar de logging (tipo, forma, datos incluidos) para el equipo de desarrollo, eso hace que luego se pueda obtener información a partir de los archivos de log más fácilmente. Cada lenguaje tiene sus herramientas de logging, en java me gusta más logback en lugar de log4j.

Monitorear

Para monitorear los cambios en las medidas o los eventos que se registran en log existen alternativas como Graphite -En este post muestran como usarlo desde java- y ERMA. La idea es definir métricas que sean fáciles de comprender y que tengan en cuenta la forma general en la que se comporta la aplicación, por ejemplo no solo revisar los datos instantáneos sino usar derivadas o integrales para obtener información más cercana y menos alarmante.

Alertar

Estas herramientas deben notificar al equipo en caso de que las métricas muestren que hay cambios importantes -aka se esta incendiando el barco-. Una nota interesante es que si no se tiene planeado hacer algo en caso de que salte cierto tipo de alerta es mejor borrar la alerta porque de lo contrario el equipo deja de prestarle atención a TODAS las alertas, así que se pierde la idea de que el producto esta en riesgo y se asume que ese es el estado natural de las cosas.

El vetusto Nagios (estándar de la industria) tiene un fork interesante, Icinga que compite en todos los aspectos y parece estar más abierto a los aportes de la comunidad.

Corregir / Escalar

Siempre que una alerta se presenta un humano debe intervenir, la idea es tener un contacto primario 7*24 y uno secundario en caso de que no responda el primario (con una espera de unos 15-20 mins), Alexis sugiere rotar la responsabilidad del contacto entre los miembros del equipo. Otro consejo muy razonable es tratar de que los perfiles del equipo sean desarrollador / operador de sistema para que las personas vean como se “divierte” alguien cuando el sistema se derrumba a las 2 am además de generar conciencia respecto a la calidad de las entregas.

En caso de no poder solucionar el problema es necesario escalarlo, para ello es importante poder contactar al responsable (generalmente al desarrollador en cabeza del equipo) mediante el bug tracker o directamente.

Investigar

Una vez se pasa la emergencia debe venir una investigación (por lo general en los sistemas en los que he trabajado se termina con la corrección) para determinar no solo el origen del problema sino las condiciones que lo causaron y las implicaciones del arreglo que se hizo.

Para ello es importante revisar en la linea de tiempo antes de que el sistema se degradó por completo, hay que tener cuidado con la hora del sistema y empezar donde y cuando el problema se detectó inicialmente.

Lilith es una herramienta para revisar archivos de log generados por Commons Logging, Log4j y Logback. Tambien es útil documentar en la wiki del proyecto las evidencias encontradas.

Analizar

Con las evidencias recolectadas se hace un análisis iniciando con la técnica de los 5 ¿porqué?, empezando desde donde se detectó el problema sin detenerse demasiado en los detalles puntuales de % de cpu, memoria usada, etc. La idea es poder reconstruir de forma coherente la cadena de hechos que llevo al sistema a comportarse como lo hizo sin caer en un juego de acusaciones entre los miembros del equipo.

Cambiar

El resultado del análisis debe ser una serie de acciones de cambio (metodológicas, de configuración de herramientas, de afinamiento de métricas, etc) que permitan evitar incidentes similares o que arreglen de forma definitiva el problema, la idea es que no se hagan cambios en caliente sobre el sistema (Ad hoc changes) pero si son necesarios luego del análisis sean documentados e incorporados correctamente.

Finalmente, el consejo es montar las herramientas para hacer el seguimiento del ciclo completo (supongo que también enterar a los miembros del equipo) y lanzar unas pocas métricas básicas que se deben afinar, aumentar o corregir a medida que el producto esta en producción. La presentación de Alexis está disponible en prezi.

Anuncios

#Colombia: ¿Rezagados en la revolución del comercio digital?

Disclaimer: Este artículo fue escrito por Francisco Navarro a quién tuve el placer de conocer en una cena ayer y quién muy amablemente me ha permitido publicarlo.

Ya nos rezagamos en la primera parte y estamos peligrando que nos deje la segunda. El internet ha sido un acelerador, abriendo la puerta a la revolución digital a través de conectividad entre gente y sistemas. Es también un dinamizador económico. Hasta ahora, la gran creación de valor apalancada en la utilización masiva de herramientas digitales se ha dado en países desarrollados que tienen una penetración alta tanto en computadores personales como conectividad rápida y confiable al internet. Entre los principales beneficios por participar activamente en esta revolución se destaca el fomento del emprendimiento que contribuye a generar y crear nuevos conceptos y empresas y facilita la movilidad social.

La evolución económica basada en la digitalización considera tres tipologías importantes: 1. La primera encapsula el “e-commerce” tradicional; la facilitación de transacciones a través de mercados virtuales (tal como un eBay lo permite) 2. La segunda se refiere a la digitalización de información 3. La tercera se refiere a la creación de mercados puramente virtuales, donde la información es monetizada (donde pagamos por productos netamente digitales, principalmente contenidos en conocimiento, información, entretenimiento, Amazon.com; itunes.com y plataformas similares sumadas a las múltiples aplicaciones para dispositivos móviles, proveen torrentes de contenido en forma digital: Libros, música, videos, juegos, noticias, mapas etc.).

En Colombia estamos atrasados en la primera tipología. Aunque la penetración de internet ha incrementado en los últimos años, nuestro ecosistema virtual sigue siendo dominado por portales de información. No hemos creado la oportunidad para generar un dialogo y acción interactiva entre usuarios y proveedores de bienes y servicios y desaprovechamos la posibilidad de comenzar a transaccionar con el potencial que permite la tecnología. Las causas raíces las atribuyen a dos temas principales: 1. Falta de un sistema confiable, eficiente y asequible de logística (ej. Correo y entregas puerta a puerta) a nivel nacional para permitir transacciones anónimas. 2. Cultura de inseguridad; Desafortunadamente padecemos de un problema de desconfianza en Colombia. No confiamos a los sistemas digitales– ej. Nadie se arriesga a poner su tarjeta de crédito en el internet, ya sea porque nunca le llega el pedido, porque cree que se le van a robar el número de la tarjeta, o porque se cree que el riesgo de contraparte es demasiado alto.

Estos temores son válidos pero las tecnologías actuales permiten solucionarlos – mientras el costo se siga percibiendo mayor que el beneficio nunca lograremos avanzar en este aspecto. Tampoco confiamos en los comprobantes electrónicos. Seguimos teniendo una dependencia de sellos, notarizaciones y recibos físicos. La regulación se demora en adaptarse y la cultura empresarial Pública y privada ponen una tremenda resistencia a la validez y legalidad de información, contratos, facturas, acuerdos etc, transmitidas por medio digital.

Y ¿porque nos debería importar? Importa y mucho, las economías virtuales permiten una mayor “eficiencia” de Mercado donde vendedores y compradores logran encontrarse con facilidad. Igualmente incrementa la velocidad (frecuencia) de estas y reduce el esfuerzo (costo) que se requiere en una interacción y/o transacción. Precios e indicadores pueden actualizarse en tiempo real; y el acceso abierto, no discriminatorio a la información asegura transparencia y acceso equitativo a los negocios en red.

Sin estos elementos nuestras economías siguen dependiendo de transacciones físicas y solo se podrán mover a la velocidad máxima con la cual productos y clientes entren y salgan de tiendas de bienes y servicios.
La utilización de la web para la gestión de transacciones económicas permite además la creación de mercados secundarios (como por ejemplo Mercado Libre, Amazon, ebay etc) que logran expandir y crear (casi que espontáneamente) valor económico desde un mundo virtual reuniendo de manera casi instantánea, multiplicidad de actores económicos en un contexto de oferta, demanda y negociación.
Los factores mencionados anteriormente impactan el desempeño económico del país. La conectividad digital es hoy la mejor estrategia para formación y educación en negocios, es también un vehículo altamente eficaz para establecer relaciones comerciales accediendo a nuevos mercados y constituye el medio más rápido para desarrollar el emprendimiento nacional.

En USA hemos visto una caída rápida en los costos requeridos para montar un negocio gracias a las puertas que ha abierto el comercio electrónico. Cuando antes se necesitaba $250,000 dólares montar una tienda, ahora se puede lanzar un negocio virtual con menos de $20,000 dólares. Similarmente el tiempo requerido para establecer un negocio ha pasado de un año a menos de dos meses. Como resultado hemos visto un resurgimiento de compañías .Com, que están retando y rompiendo con los modelos tradicionales de negocios. Vale la pena comentar que esto se acompaña con un ámbito sofisticado de inversionistas que logran magnificar los éxitos de estas nuevas compañías.

En Colombia al desaprovechar las ventajas de la revolución digital, el emprendimiento (una creación de negocios) se limita a: 1. Emprendimiento Corporativo (compañías grandes y establecidas que buscan expandir su líneas de negocios) 2. Emprendimiento de nuevos negocios con inversión de altos recursos. 3. La creación de muy pequeños negocios tradicionales (Brick and mortar) que difícilmente traspasan los límites de la auto subsistencia.

Existen esfuerzos respetables de Colciencias, El Tecnoparque, Ventures Colombia, etc. pero no los suficientes para alterar el comportamiento económico del país. Adicionalmente hay una falta de capital que limita el desarrollo de conceptos e innovación que de lo contrario podrían despegar teniendo acceso a capital de riesgo, y retar a los modelos de negocios ya establecidos (y quizas atrasados dado el dominio de industrias por pocas compañias). Sobre este mismo punto, capital de riesgo no existe; conocimiento de los protocolos y educación alrededor de las normas y expectativas que vienen con la búsqueda, obtención y utilización de capital de riesgo – esto resulta en malentendidos con los emprendedores, que se luego se niegan a compartir información privada con el inversionista y/o sostienen un alto nivel de desconfianza que lastimosamente termina en un final desafortunado para proyectos basados en innovación tecnológica

¿Qué debemos hacer?

La buena noticia es que se nos está presentando una segunda oportunidad para integrarnos al mundo virtual. El héroe de la historia es el teléfono celular y el acceso a mensajes de texto (SMS) y el internet inalámbrico (Móvil, 3g y WiMax). La alta penetración de teléfonos celulares permite que ciudadanos de diversas situaciones socioeconómicas y geográficas puedan participar en una economía virtual: Primero desaparece el problema de acceso ya que casi todo el mundo tiene un celular. Segundo el celular permite transaccionar – de comunicación de móvil a red, y a través de sistemas de prepago o de cuenta celular, un método probado y confiable para “participar” económicamente en la economía virtual. Tercero, muy pronto los celulares proveerán componentes de autenticación de transacciones que permitirán superar muchísimas de las barreras de seguridad. Finalmente, serán los dispositivos móviles los que generarán datos, mediciones y métricas en tiempo real.

El gran obstáculo que se presenta es que las compañías de celular controlan la’’ tubería digital’’ y eventualmente pueden dificultar la dinámica económica de los negocios en medio virtual. Sin embargo, la competencia y la negociación deberán activar en beneficio del consumidor y con una buena apropiación de cultura digital Lograremos ver el florecimiento de un mundo virtual y con ello los beneficios sociales y económicos que vienen con él.
De lo que Colombia construya implemente y aplique en materia de conectividad; cultura digital; acceso masivo a los computadores y dispositivos conectados por IP; y la creación e impulso a modelos de negocio basados las transacciones digitales dependerá el salto para salir del atraso, y alcanzan los beneficios, el empleo y prosperidad que hoy permite el universo digital

#grails y los plugins pegajosos

Hace algún tiempo empecé a trabajar en una aplicación usando grails 2.0.0.M4 luego de actualizarla a 2.0.0 cada vez que corria una tarea tipo test-app obtenía un mensaje como:

You currently already have a version of the plugin installed [svn-1.0.1]. Do you want to update to [svn-1.0.0.M1]? [y,n]

que es muy molesto (generalmente abandono la consola y se quedaba esperando a que respondiera) entonces, aun cuando busqué directamente el plugin y no lo encontré supuse que era un problema de dependencias transitivas, para comprobarlo solo es necesario usar el comando dependency-report que genera un html con las dependencias, en mi caso los plugins fixtures y resources dependían del svn, asi que procedí a instalar las versiones actualizadas, sin embargo, obtenía el mismo mensaje y ahora otro más:

You currently already have a version of the plugin installed [resources-1.1.1]. Do you want to update to [svn-1.1.6]? [y,n]

sucede que los plugins no sólo son declarados en el application.properties, también pueden ser declarados como dependencias en el BuildConfig.groovy (para poder cargarlos en el scope apropiado y evitar dependencias) así que la solución fue editar BuildConfig.groovy:

grails.project.dependency.resolution = {
...
 plugins {
        compile ":hibernate:$grailsVersion"
        compile ":jquery:1.6.1.1"
        compile ":resources:1.1.6"

        build ":tomcat:$grailsVersion"
        
        runtime (":fixtures:1.1") {
            excludes ":svn:1.0.0.M1"
        }
        
    }
}

y listo, quizás un clean y una actualización de dependencias sean necesarios después de modificar el BuildConfig.groovy del proyecto antes de

Peticiones #https desde #java: illegal_parameter

En un test case necesité hacer una petición httpS (http commons client) pero como resultado siempre obtenía la siguiente excepción:

javax.net.ssl.SSLException: Received fatal alert: illegal_parameter

Sucede que la implementación de java 1.7 openjdk-7 (7~b147-2.0-0ubuntu0.11.10.1) parece que no puede hacer correctamente el handshake necesario para terminar la operación (los detalles exceden mi conocimiento al respecto) sin embargo la solución rápida es cambiar el JDK usado (en netbeans Tools->Java Platforms) por una implementación Java de Sun Oracle en mi caso Java(TM) SE Runtime Environment (build 1.6.0_26-b03). Documento esto solo para que en producción no me pase (Estoy seguro de que va a pasar pero con algo de suerte encuentro la razón rápidamente y lo arreglo sin mucho ruido).

Cómo conseguir el primer millón de usuarios

Ayer asistí a una clase de skillshare titulada “Learn How to Get your First Million Users” ofrecida por Mike Geer miembro fundador de Badoo (unos 120 millones de usuarios en todo el mundo). La charla fue ofrecida en la iglesia Metro Baptist ubicada en Manhattan (no sé cuantas iglesias en Colombia permiten encuentros sobre tecnología pero seria medianamente interesante averiguarlo).

La clase fue rápida y entretenida (unos 90 mins) con algunas diapositivas y espacio para preguntas entre cada slide, algunas impresiones sobre los tips que presentó Mike:

  • Comprar bases de datos de usuarios puede ser peligroso. Cuando se compran 50 mil correos es probable que el dinero que se paga no sea el único costo asociado a los datos.
  • Es mejor observar el comportamiento de los usuarios que preguntarles todo el tiempo como se sienten. Supongo que dada la cantidad de herramientas que hay para hacer tracking de la actividad de los usuarios es mejor no desanimarlos ni quitarles tiempo con encuestas que probablemente estén algo desviadas en sus respuestas.
  • Si es necesario explicar el producto en el homepage entonces no es un buen homepage. Aconsejan hacer una pagaina de inicio tan sorprendente como sea posible porque saben que muchas personas juzgan el libro por la caratula.
  • La ruta aconsejada para lanzar un producto es: Alpha privado con pocos usuarios, Beta semi privado con invitaciones y luego una entrada a producción tan pronto como el producto esté listo, sin embargo nos recuerda que en ninguno de sus lanzamientos ha seguido este consejo.
  • Usar las apis publicas para evitar el sindrome de “pueblo fantasma”. Cuando un producto está empezando tiene pocos usuarios, esto genera la impresión de visitar un “pueblo fantasma” donde se llega una vez y no se retorna, para evitarlos sugiere usar importación de contacto a través de APIs públicas como linkedin, facebook, google+, foursquare, etc.
  • Usar la información indirecta proporcionada por el usuario, cada vez que un usuario hace alguna acción dentro del sitio es posible encontrar una tendencia que puede dar origen a una nueva funcionalidad
  • Cada funcionalidad debe cumplir con al menos dos de estas tres condiciones: Ser viral, Ofrecer un retorno de inversión directo o Ser interactiva para los usuarios.
  • El contenido como los articulos, reportes, blogs y las relaciones públicas generan algunos cientos o quizás miles de usuarios, pero si se quiere hablar de decenas, centenas de miles o milloones es necesario identificar el aspecto viral del producto para explotarlo de manera adecuada.

Hasta aquí la charla, ahora espero poder llegar a escribir otro post acerca de como aplique algunos de éstos tips y quién sabe, quizás decir como alcancé mi primer millón de clientes.

Espacios de trabajo en #NYC

Una de las cosas interesantes de NYC es que se encuentran muchos espacios de trabajo, existen varios espacios para hacer coworking y una multitud de sitios con wifi libre.

Por ahora solo hemos accedido a tres lugares, el cafe Casa Java (jejeje no conozco un PHP o un .Net café aún…pero…no digo que no existan), Juan Valdez (algo caro incluso para los estándares locales):

y el mejor de todos por ahora es el Wixlounge (10 W18St second floor). Solo es necesario llegar (14th Street – Union Square (New York City Subway), cruzar la plaza y tomar la 18St hacia el oeste) y registrarse en una libreta, no cobran, el wifi es bastante bueno, el espacio es amplio y tienen agua y cafe gratis. En el sector se puede encontrar buena comida a un precio muy asequible. Abren de 10:00 a 18:00 y luego generalmente hay algunas charlas extra hasta las 20:00.

Disclaimer: fotografía cedida amablemente por @wlemus

Conociendo NYC

He tenido problemas de insomnio recientemente, no logro conciliar el sueño hasta después de las 3 am. W (mi novia) duerme como un bebé y me dijo hace un par de días -cuando mi modo ninja accidentalemente la despertó- que buscara algo interesante para hacer…lo hice…Se llama Just Contract Me (Solo Contrata Me) y ahora estamos en NYC. Espero poder hacer JCM – SCM aquí.

Si la unidad de medida de área para los bogotanos es Cundinamarca (24,210 km2) la unida de medida para la temperatura es la Bogotá (+/-10 C) y puedo decir que la temperatura es de unos -1 Bogotás. jejeje saludos.