Añadir un indicador de avance de ejecución en App Scripts

Al ejecutar funciones en App Scripts es posible que la ejecución tome cierto tiempo, para lo cual es útil mostrar al usuario algún mensaje de avance para evitar que quiera trabajar sobre datos incompletos.

Para esto podemos usar los toast de app scripts que indican al usuario el estado del script:

// Mensaje de esto para el usuario
SpreadsheetApp.getActiveSpreadsheet().toast(‘Finalizamos!’, ‘Estado’, 2);

Para ver la demo completa ver la siguiente planilla:

Demo1 nrm.uy – Leer API
https://docs.google.com/spreadsheets/d/1ap2IQeQ73049NE6lj_oRDBFQ-Wjz0GDiZoXPkFf-a4I/

Código en Github del proyecto:
https://github.com/nrodriguezm/app-scripts-demo1/blob/master/Code.js

Crear un menu personalizado en planilla de Google Drive

Continuando con el ejemplo de como consumir una API externa usando app scripts en una planilla de Google Drive, vamos a agregar un menú personalizado que nos permita ejecutar el script desde la planilla para que el usuario no tenga que acceder al código del proyecto.

Para eso vamos a utilizar la función onOpen de las planillas que se dispara cuando el usuario abre la misma, luego vamos a insertar una entrada de menú:

// Preparamos menu para que el usuario pueda actualizar desde la planilla sin entrar al editor de codigo
function onOpen() {
// La función onOpen se ejecuta automáticamente cada vez que se carga un Libro de cálculo
var ss = SpreadsheetApp.getActiveSpreadsheet();
var menuEntries = [];

menuEntries.push({
name : “Actualizar Datos”,
functionName : “getDatosAPI”
});
menuEntries.push(null);

ss.addMenu(“Actualizar”, menuEntries);
}

Con este código logramos un menú como el siguiente:

Cuando el usuario hace clic en el menú personalizado de “Actualizar Datos”, se dispara la función de App Scripts “getDatosAPI”.

Para ver la demo completa ver la siguiente planilla:

Demo1 nrm.uy – Leer API
https://docs.google.com/spreadsheets/d/1ap2IQeQ73049NE6lj_oRDBFQ-Wjz0GDiZoXPkFf-a4I/

Código en Github del proyecto:
https://github.com/nrodriguezm/app-scripts-demo1/blob/master/Code.js

Leyendo datos desde una API en planillas de Google

Cuando trabajamos con planillas en la nube tenemos la posibilidad de leer datos desde nuestro sistema de gestión para tener la planilla sincronizada a la realidad de la operación.

Por ejemplo podemos traer la facturación, compras o costos de RRHH de nuestra empresa analizando los números en tiempo real, día a día sin esperar reportes manuales que pueden y suelen tener errores (olvidos, cambios en el formato, etc.).

Para lograr esto podemos utilizar App Scripts en las planillas de Google para leer una API. En el menú superior: Herramientas > Editor de secuencia de comandos

Vamos a definir una función auxiliar para llamadas a APIs externas que responden con JSON:

// Llamada a API externa
function getApiData(url,query) {

try {
var response = UrlFetchApp.fetch(url);
var responseData = response.getContentText();
var json = JSON.parse(responseData);
return json;
}
catch (e) {
Logger.log(e);
return [“Error:”, e];
}
}

El código quedará mas o menos así:

Con esto tenemos una función auxiliar para llamadas a APIs externas que responden con formato JSON.

Para ver la demo completa ver la siguiente planilla:

Demo1 nrm.uy – Leer API
https://docs.google.com/spreadsheets/d/1ap2IQeQ73049NE6lj_oRDBFQ-Wjz0GDiZoXPkFf-a4I/

Código en Github del proyecto:
https://github.com/nrodriguezm/app-scripts-demo1/blob/master/Code.js

 

 

Comercio, apertura global y productividad

El siguiente podcast es una interesante discusión acerca de qué impactos tiene sobre las sociedades que se abren al comercio.

Se discute el ejemplo de la apertura China a finales de los 90 con la explosión comercial desde y hacia los Estados Unidos, el aumento nñinimo de la productividad de la fuerza laboral norteamericana y los incentivos que genera en la innovación.

Relacionado al tema de por qué la antigua Roma no desarrollo una revolución industrial, cuando sus indicadores económicos en general eran comparables a los siglos 16 y 17 de Europa, se plantea que la entrada de China al mercado mundial generó una enorme presión por migrar la producción hacia una fuerza laboral barata e ilimitada en lugar de continuar el desarrollo de la productividad.

Llegando a finales de la segunda década del siglo XXI, la sociedad China ha elevado sus estándares de vida a niveles comparables a Occidente por lo que el incentivo de la fuerza laboral gratuita e ilimitada dejan de ser válidos y se debería volver a trabajar sobre la productividad.

A su vez se plantea que el modelo de comercio aperturista de los 80 y 90 provocó un error en las consecuencias supuestas por la apertura comercial de los años 2000, ya que la entrada de un pais pobre como China y de una escala mucho mayor al principal mercado (USA) no tenia precedentes.

a16z Podcast: Adjusting to Trade… and Innovation

 

 

¿Por qué no hubo una revolucion industrial en la antigua Roma?

Una de las grandes interrogantes en la historia económica es que tan cerca de tener una revolución industrial estuvieron los romanos.

Se sabe que entre los años 100 AC y 400 BC la antigua Roma contaba con las bases para dar los primeros pasos de una revolución industrial, con el motor a vapor entre los escritos de varios inventores romanos, al menos en modelos a pequeña escala en el siglo I.

Es cierto que otras tecnologías necesarias para poder producir motores industriales no parecen haber estado disponibles en la época por lo que la aplicación industrial de los mismos es cuestionable.

De toda formas, ¿pudo haber sido la disponibilidad de mano de obra a costo cero e ilimitada mediante la expansión del imperio y la esclavitud la razón por la que medios de producción industriales no fueron explorados? Hay que tener en cuenta que una cantidad importante de indicadores económicos y de estándares de vida durante el Imperio Romano no se volverían a ver hasta mil años después de su caída.

Hoy que vivimos en una época donde es normal pensar que vamos a tener mejor tecnología que nuestros padres no concebimos sociedades que declinen durante siglos. Esto también es una de los puntos para entender el rol de la iglesia luego de la caída del orden romano.

Estos son algunos de los puntos analizados por el siguiente artículo de Mark Komaya:

https://fee.org/articles/why-rome-declined-and-modern-europe-grew/

 

Productividad y el impacto humano

En Uruguay estamos en epocas de presupuesto y negociación salarial, por lo que la conflictividad está por las nubes, la más alta desde 1995.

Conflictividad laboral Uruguay 2015

Este problema esta presente en todo el mundo, basta ver la comparativa entre puertos del primer mundo como Rotterdam vs Oakland (San Francisco) donde el primero es un 80% mas productivo que el segundo. En Oakland y el resto de puertos de la costa oeste por el año 1970 con la introducción del contenedor hubo grandes conflictos y la nueva generación de automatismos promete generar nuevos conflictividad con el aumento de prductividad.

Resulta interesante ver como las situaciones de desplazamiento de la fuerza laboral no es un problema actual, ya pasamos por enormes migraciones de la fuerza de trabajo, está por verse si la introducción de las tecnologías de la información a la industria tiene una velocidad de impacto diferente o es una transición mas de las ya vividas.

 

Drones no tripulados para la industria y seguridad

Seguramenten en los próximos años comencemos a ver vehiculos autónomos (sin piloto o pilotado por computadora) en las calles de las ciudades del mundo, en algunas tal vez en no más de un año o dos.

Otras áreas que pueden tener un gran impacto en nuestras vidas gracias al manejo autónomo son algunas tan dispares como industrias de la construcción, turismo y seguridad.

En todas estas áreas son infinitas las aplicaciones imaginables para flotas automatizadas de drones que permitan tener supervisión y hasta traslado de objetos livianos en un comienzo.

Imaginar rondas de seguridad de drones durante las 24 horas con flotas coordinadas no parece raro, dando ojos móviles a los centros de monitore. Incluso para trabajos en catastrofes naturales y escenarios de violencia.

Un área que parece estar en fila a continuación del transporte y la medicina para ser revolucionada por el software es la construcción, ya se pueden ver algunos experimentos relacionados al uso de drones:

http://www.idsc.ethz.ch/research-dandrea/research-projects/aerial-construction.html

<iframe width=”560″ height=”315″ src=”https://www.youtube.com/embed/CCDIuZUfETc” frameborder=”0″ allowfullscreen></iframe>

NYC, educación en información uinversal

El día de ayer se anunció en la ciudad de Nueva York que se planea tener acceso universal en la educación pública en ciencias de la computación a todo nivel.

http://www1.nyc.gov/office-of-the-mayor/education-vision-2015-computer-science.page

La capacidad de pensar en el modelado de ideas y como instruir a una máquina para que haga el trabajo parece ser el nuevo mínimo educativo en la sociedad de la información. Las sociedades que no den acceso universal al siguiente nivel de educación se van a encontrar probablemente con una población equivalente a que en la actualidad no sepan leer y escribir.

Internet accesible desde los dispositivos móviles ha comenzado su etapa de instalación en todos los ámbitos de la vida, por lo que su impacto actual es insignificante comparado a lo que veremos en un par de décadas.

Situaciones como un chofer programando su recorrido o un administrativo utilizando un sistema de gestión para generar informes automatizados empiezan a ser cosa de todos los dias lo cual requiere la capacidad de abstraer la situación particular a la que se enfrenta para modelar la idea de forma que un sistema puede ejecutarla.

Primero fue la escritura, nos permitió recordar en forma nítida.
Luego la lógica, nos permitió pensar en como pensamos.Ahora el software, nos permite pensar a cualquier escala.

 

Google comienza a ser predictivo

Google tiene un problema y está trabajando para solucionarlo. Es excelente encontrando lo que buscamos pero no en saber lo que estamos necesitando encontrar antes de buscarlo.

Hasta que Google propuso la solución del PageRank para las búsquedas los motores como Yahoo fracasaban en lograr priorizar los resultados relevantes. Clasificar millones de sitios por categorias en un directorio curado a mano es una idea que no escala.

Pero la solución de Google parece haber movido el problema de lugar mas que solucionarlo en forma definitiva.

Mientras las computadoras estaban en un lugar físico y no en nuestros bolsillos, no buscabamos en el momento exacto en que tenemos una necesidad. Buscar en Internet requería de un momento específico, Internet era accesible desde un escritorio en nuestra casa o trabajo, para cuando llegabamos al mismo teniamos una idea formada de lo que necesitabamos buscar.

Hoy en día con los celulares nos encontramos en que podemos tener una inquietud y buscar en ese instante. Esto elimina el proceso mental que haciamos antes de llegar a la computadora, por lo que la misma debe darnos resultados con mucha menos información relevante.

Volvemos a la misma situación de Yahoo y su directorio. La solución propuesta por Google funcionaba en el contexto anterior, a partir de ahora no sabemos bien lo que necesitamos por lo que nuestra búsqueda debe ser realizada antes de saber que la necesitamos.

Aquí es donde entra en juego Google Now, ya estamos viendo algunos de sus efectos en distintas areas.

Por ejemplo en las fotos, Google sincroniza las mismas con nuestro Drive y procesa las imagenes para anticipar retoques, mejoras a tal punto que puede darnos la sugerencia de una foto única a partir de varias fotos:

panorama-600x117

Pueden ver un ejemplo de una panorámica construida por Google como sugerencia a varias fotos individuales. Antes de tener claro que queremos construir una panorámica en forma manual Google nos sugiere hacerlo.

Otro ejemplo, la geolocalización instantanea. Cuando queremos comunicar nuestra posición en un chat lo hacemos en forma descriptiva cuando nuestro celular tiene las coordenadas.

Para esto, Hangouts a comenzado a sugerir compartir nuestra ubicación cuando alguien nos pregunta donde estamos:

hangouts-geolocalizacion-google

Este es otro ejemplo de Google intentando ser predictivo, antes de que pensemos en buscar información nos sugiere la solución.

Tengamos en cuenta que este movimiento de Google hacia la anticipación es un acto de supervivencia y no un producto experimental, de no hacerlo alguien va a ocupar ese lugar y sus busquedas van a sufrir el mismo destino que los clasificados de los diarios.

Esperemos ver muchas otras sugerencias predictivas, como al ir o volver del trabajo, sugerencias de rutas u oportunidades de camino que puedan ser aprovechadas. Dada la predicción de clima y nuestro calendario opciones alternativas o previsiones a tomar.

Es solo el principio de un nuevo salto en la relevancia de la información. También se plantean una nueva cantidad de desafíos de privacidad ya que nuestros datos privados pasan a ser procesados sin opción por un tercero con intereses comerciales.

De regreso del trabajo para ver el partido de fútbol de las próximas horas es el momento exacto para recordarnos pasar a comprar X producto.

Devolvamos el fuego de prometeo al mundo

Los programadores robamos el fuego de prometeo y lo escondimos del resto del mundo.

En su momento el fuego fue eso, fuego, luego fue la escritura, hoy es la programación en su concepto amplio. Esto es, modelado de ideas, análisis e iteración. Codificar es solo una consecuencia, se puede programar con papelitos sin problema.

Las computadoras se están devorando todas las tareas sistemáticas y mecánicas, sea con robots o haciendo desaparecer el problema de raíz, esto es, la necesidad de tener el problema.

“Software is eating the world”. a16z.com

El siglo XXI va a destruir gran parte de los trabajos tradicionales, nos va a liberar de tareas mecánicas pero nos va a exigir algo nuevo. Adaptación constante, capacidad de aprendizaje y sistematización. Que tu robot haga los mandados,  pague las facturas y maneje el auto.

Para ser participes de este mundo sin trabajos pesados, vamos a tener que aportar nuestra creatividad, pero sobre todo poder manejar estos robots.

Entender un problema, modelarlo y delegarlo en un robot.

La educación de los conceptos abstractos no es exclusividad de las personas más hábiles para la matemática. Que un porcentaje bajo de la población pueda resolver una ecuación es una falla de la educación ya que no es algo exclusivo para unos pocos. Un niño de menos de 10 años puede resolver ecuaciones sin problema.

Es hora de que los programadores involucremos a los que no han podido participar de la construcción de este nuevo mundo, es un mundo donde debemos colaborar, trabajar en equipo, un mundo donde los secretos duran muy poco y donde una niña en Bangladesh tiene mejor acceso a información hoy que los estudiantes universitarios de Estados Unidos hace 25 años.