Video Post #19: Atrévete con Deep Learning.¿Qué son los tensores?

Paloma Recuero de los Santos    21 mayo, 2020

Seguimos con nuestra miniserie “Atrévete con el Deep Learning: principios básicos al alcance de todos”. En el vídeo anterior ya vimos cómo una de las mayores ventajas de las redes neuronales era su capacidad de manejar de forma eficiente datos no estructurados. Hoy os hablaremos de cómo lo hacen, e introduciremos el concepto de tensor.

Si eres de los que prefieren leer, puedes encontrar el contenido del vídeo en este post:

¡Sigue nuestra Playlist!
Vídeo Posts Big Data + IA

‘Scale This Up’ Podcast – 1×5 Entrevista a Jesús Pérez-Llano (TedCas)

María Crespo Burgueño    21 mayo, 2020

Estamos viviendo unos días complicados y excepcionales que nos obligan a adaptarnos a una nueva realidad en todos los sentidos de nuestra vida. La crisis del COVID-19 ha propiciado que se apliquen medidas de distanciamiento social y confinamiento, pero ¿qué ocurre con los sectores e industrias que requieren el contacto entre personas, tanto físico como a través de instrumentos o aparatos?

Entrevista a Jesús Pérez-Llano

La Inteligencia Cognitiva juega un papel fundamental en todo esto. Jesús Pérez-Llano, CEO y fundador de TedCas, una startup vinculada a Wayra España, lleva años trabajando con esta tecnología en quirófanos, permitiendo a los cirujanos controlar los equipos de manera autónoma. Utilizan imágenes en alta resolución, un software personalizado y sistemas de reconocimiento de voz y manos libres que permiten el control instantáneo en entornos operativos estériles.

Durante la pandemia, TedCas ha estado presente en hospitales permitiendo a las familias estar en contacto con pacientes y médicos, recibiendo noticias de primera mano por parte de profesionales. Además, con su tecnología han conseguido que los médicos del Hospital Universitario Rey Juan Carlos de Madrid puedan realizar revisiones a tanto a pacientes que han sido dados de alta tras ser hospitalizados por COVID-19 como a aquellos que presentan otras patologías y tienen que acudir al hospital para poder realizar su seguimiento. De esta forma, a través de videollamadas se ha favorecido el contacto cero entre contagiados y personas libres del virus.

Tras 6 años involucrado en hacer crecer su startup y poder ir superándose día a día junto a su gran equipo de profesionales, Jesús Pérez-Llano responde en este episodio a preguntas como:

  • ¿Qué es TedCas?
  • ¿En qué sectores están trabajando?
  • ¿Cómo funciona esta tecnología?
  • ¿Qué ha aportado esta startup a la forma de trabajar en los hospitales durante la pandemia?
  • ¿Qué papel puede desempeñar la Inteligencia Cognitiva en esta nueva normalidad?

En este podcast hemos contado con la participación de:

  • Jesús Perez-Llano, CEO y fundador de TedCas.
  • Gonzalo Martín-Villa, director global de IoT y Big Data en Telefónica Tech.
  • Lorena Pingarrón, Jefe de Servicio de cirugía maxilofacial del Hospital Universitario Rey Juan Carlos.
  • Gabino Jiménez, paciente ingresado por neumonía COVID-19.

Con María Crespo, periodista y presentadora del programa; José María Venturo Ventureira, técnico del podcast y comunicación interna en Telefónica; y Cristina Martín Roales-Nieto, comunicación corporativa en Telefónica.

Escucha el episodio en tu plataforma favorita

Si te interesa el mundo de la innovación y emprendimiento, visita la página web de Wayra y síguenos en LinkedInTwitter e Instagram.

El COVID-19 como evangelizador de cloud

Hugo de los Santos    20 mayo, 2020

Somos muchos en el sector de la tecnología los que estamos viendo el COVID-19 como evangelizador de cloud. A raíz del confinamiento se han acelerado las curvas de adopción de soluciones en la nube. ¡Estas semanas han supuesto avanzar cinco años en el tiempo!

Al principio cloud se ha hecho necesario para apoyar el teletrabajo y, después, para poder seguir conectados a clientes y proveedores, tratando de garantizar la continuidad del negocio y minimizar el impacto en ventas. Todo esto va a seguir siendo clave pero, pasadas ya unas semanas, ha llegado el momento de empezar a pensar en el pos-COVID y solidificar los cambios adoptados.

A la hora de “resetear” sus compañías y que éstas sean “COVID responsive”, los CIO y CDO tienen que gestionar y dar respuesta en sus comités ejecutivos a tres tipos de retos:

  1. Tiempo de recuperación esperado para su industria/sector.
  2. Etapa de transformación digital en la que se encuentran frente al promedio de su sector.
  3. Área prioritaria para esa industria para impulsar su recuperación empresarial.

Aquellos partners, como Telefónica, que los ayuden a mantenerse por delante de la competencia, ser más resilientes para manejar el tiempo de recuperación y adaptarse a la “nueva normalidad” formarán, más que nunca, parte de este nuevo e inexplorado viaje que entre todos tenemos que descubrir

 Infografía: Manuel Carballo y Fernando Rodríguez

Imagen: Pixabay

1 comentario en El COVID-19 como evangelizador de cloud

La gestión de la felicidad en la empresa

Juan Luis Manfredi    20 mayo, 2020

Reconozco que me da respeto escribir sobre este asunto, porque si uno bucea por las redes sociales y los programas de autoayuda, encuentra multitud de mensajes vacíos de significado real.

Las promesas del tipo “tú puedes conseguirlo, si te lo propones” no adquieren sentido en las organizaciones si estas no aseguran los fundamentos, los básicos.

Lo escribo en estas primeras líneas para que quede claro: no hay gestión de la felicidad sin un salario digno. Tampoco la hay sin la capacidad de conciliar, el reparto justo de tareas, la designación de jefes con atributos, la estimulación del liderazgo y no el tributo a la jerarquía, la capacidad de establecer un diálogo sincero, la transparencia en la toma de decisiones y otros elementos principales en la dirección de personas.

La infelicidad afecta a los resultados

Con este sustento, ahora sí, me refiero a la gestión de la felicidad como una capacidad directiva que debe contemplarse en los proyectos emprendedores y en las empresas ya consolidadas. Porque existe abundante literatura que encuentra correlación entre la felicidad de los empleados y la cuenta de resultados.

Se concreta en la motivación y el deseo de permanecer en el puesto de trabajo, la multiplicación de las iniciativas al margen de las obligaciones, la tolerancia al fracaso, porque existe un clima de creatividad e innovación, así como otros criterios de mejor desempeño profesional.

A título de anécdota, existen aún más evidencias del impacto negativo de la infelicidad del empleado: desatención de las tareas, huelgas de celo, expansión de rumores que hunden el clima laboral, entre otras.

Por este motivo, encuentro relevante ocuparse de la felicidad de los empleados y los colaboradores en tres ejes de gestión.

1. Entorno laboral amigable

El primer eje es la construcción de un entorno laboral amigable y asentado sobre una cultura saludable.

Consiste en el refuerzo de las actitudes positivas, que tanto directivos como empleados respetan. Entre ellas destacan las siguientes:

  • Transparencia de los procesos de decisión y los criterios de selección de jefes de proyectos.
  • Realización de evaluaciones periódicas de los resultados, en función de las tareas asignadas y los recursos dados.
  • Señalar cuáles son las ambiciones a medio plazo, para que cada uno sepa cuál es el rumbo elegido.

Se puede, aún más, concretar en dos acciones:

Autonomía

La primera se basa en el diseño de puestos y operaciones que sean autónomos y no estén inundados de microtareas burocráticas («rellene cada día este formulario con las llamadas realizadas»).

La autonomía personal da capacidad de autoorganización y estimula el liderazgo distribuido, así como la obtención de competencias transferibles de un proyecto al siguiente.

Respeto a la diversidad

La segunda clave es el respeto a la diversidad y el abandono de prácticas que imponen un comportamiento, una opción política o de credo.

Un ejemplo comprensible para todos: no, a todos no nos interesa el partido de la Champions, disponer de fruta saludable en la máquina de comida, una salida al campo con el equipo de trabajo o eliminar el azúcar del café común. Demos libertad.

2. Crítica constructiva

El segundo elemento que considero es la crítica constructiva. Es un reto a todas luces, porque requiere grandes dosis de paciencia, autocontrol y mensaje positivo.

Se construye sobre la base del autoconocimiento y el desarrollo de la empatía: con quién tengo más o menos sintonía para que me traslade sus preocupaciones. No, no todo el mundo confía en ti. Porque el paso esencial para la crítica constructiva es la confianza y la relación personal directa.

Está bien tomar un café en la máquina, pero el liderazgo en este asunto de la felicidad consiste en sentarse con cada uno de los empleados y preguntarles qué tal están y cómo puede la organización ayudarlos a sentirse mejor.

A menudo, es un asunto menor en la gestión de operaciones y asequible en términos económicos. Una pequeña ayuda, como entrar o salir antes un día concreto de la semana, revertirá en aspectos positivos. ¿Se lo has preguntado?

3. Pautas de mejora

El tercer instrumento para la gestión de la felicidad es el establecimiento de pautas de mejora sistemática.

En las organizaciones no conviene plantear iniciativas que en realidad son fogonazos, ocurrencias del directivo que no ha contrastado nada con su equipo o que genera expectativas que no puede cumplir.

Divido este punto entre las pautas personales y las propias de la empresa. Entre las primeras, señalo la capacidad de disponer y reglamentar los tiempos: cuándo se producen las reuniones, cuándo se evalúa el proyecto, cuándo se puede presionar con los plazos de entrega.

La gestión del tiempo crea sensación de control al empleado e incrementa su facultad para priorizar, descartar o emprender nuevas iniciativas.

En este sentido, multitud de estudios avalan que la cesión de tiempo, por ejemplo, a las ONG o a actividades de corte social, de la mano de la empresa, redunda en mejores resultados económicos: ¿puede tu empresa donar alguna parte de su tiempo a la ONG del barrio?

Por último, es personal la capacidad de ejecutar la desconexión digital. A un empleado 24×7 le faltará lucidez y criterio cuando haya que acelerar y apretar los plazos.

En cuanto a las pautas de la empresa, la felicidad se mide por la explicación de la diferencia entre la recompensa obtenida y la esperada, el impulso del liderazgo distribuido, que permite que cada uno desarrolle sus habilidades directivas y pueda promocionar, así como la formación continuada. Está demostrado que a la felicidad se llega por el aprendizaje.

Como apunte final, una recomendación: huye de la autoayuda barata, descarta cualquier medida psicológica no desarrollada por profesionales y no caigas en el lado oscuro de la felicidad. Tus empleados y colaboradores se merecen la mejor experiencia subjetiva diaria.

¿Es posible diagnosticar el COVID-19 con Deep Learning?: «Tosa, por favor»

Enrique Blanco    20 mayo, 2020

Identificar sonidos es una tarea que el ser humano hace de manera muy eficiente y, durante los últimos años, los ordenadores están ganando cada vez más experiencia en la misma tarea.

Con la emergencia de la COVID-19 están surgiendo una varios proyectos que intentan identificar si una persona está afectada por esta enfermedad; uno de los ejemplos es hacer uso de las toses y/o sibilancias respiratorias tanto de sujetos afectados y sanos para poder hacer una clasificación. Conseguir un gran número de muestras es algo imprescindible para poder encaminar la consecución de un modelo robusto.

¿Cómo se podría abordar un problema de este tipo? Una de las maneras de discretizar la naturaleza u origen de los sonidos es mediante clasificación de imágenes. Para ello, en esta prueba de concepto vamos a hacer uso de la potencia de  modelos convolucionales ya entrenados y, mediante fine-tuning, conseguir buenas precisiones en nuestra tarea ahorrando tiempo de entrenamiento. Esto nos permite no sólo abordar sonidos relacionados con los efectos del SARS-CoV-2 en el sistema respiratorio, sino cualquier sonido convenientemente etiquetado.

En busca de un dataset

Nuestra meta, como hemos comentado, es clasificar sonidos en base a unas etiquetas ya asignadas. El problema actual reside en la ausencia de datasets. No contamos con un dataset de calidad, única y exclusivamente compuesto por toses, que nos permita determinar la afección que sufre una persona.

El único dataset que tenemos disponible hasta ahora es uno liberado por la farmacéutica Pfizer, llamado Sick Sounds, que se puede encontrar en el siguiente enlace.

Este dataset separa a los audios entre personas enfermas y no enfermas en dos directorios distintos. Sin embargo cuando uno profundiza en los audios obtenidos, se ve que las clases están un poco desbalanceadas y que los audios catalogados como «sujeto no enfermo» en realidad no son audios de toses, sino de música, risas, conversaciones y un largo etcétera de diferentes situaciones.

A pesar de esta inconveniencia, podemos tomar este dataset como una primera referencia para intentar ver si conseguimos una buena precisión clasificando audios usando Redes Neuronales Convolucionales.

Extracción de características

Hay muchas características qué podemos usar para entrenar un modelo. En lo referente al campo de speech recognition, podemos usar los Mel-Frequency Cepstral Coefficients (MFCC). Lo mejor de este tipo de coeficientes es que nos dan una buena representación del audio original.

Sería conveniente también tener más información más allá de las características obtenidas de MFCC, pero las redes llamadas WaveNet pueden ser muy difíciles de entrenar y también de ejecutar. Por ello vamos a usar espectrogramas.

Espectrogramas

En investigación de audios, un espectrograma se considera como una representación gráfica de un audio que tiene la frecuencia en el eje de ordenadas y el tiempo en eje de coordenadas y una tercera dimensión – con colores – que representa la intensidad del sonido para cada tiempo y cada frecuencia. Aquí tenemos un ejemplo de un espectrograma.

Figura 1. Mel-frequency Sprectrogram sample. Fuente.
Figura 1. Mel-frequency Sprectrogram sample. Fuente.

Lo mejor del uso de los espectrogramas es que nos permite cambiar de un problema de reconocimiento de audio a un problema de reconocimiento de imágenes. Pasar de audio a imagen es bastante sencillo. Aquí tenemos un simple script que nos permite obtener el espectrograma de un audio, usando la librería librosa.

Fine-tuning con Redes Neuronales Convolucionales

Una vez que hemos conseguido que nuestros audios queden representados como imágenes, podemos proceder a su clasificación haciendo uso de redes neuronales. Para ello vamos a usar una red convolucional ya entrenada.

Si tuviéramos que entrenar una red convolucional desde cero nos llevaría bastante tiempo realizar está tarea y dada la calidad de nuestro dataset con total seguridad acabaríamos con un problema de sobreajuste en nuestros datos.

Para ello vamos a usar Transfer Learning, el cual nos permitirá hacer uso de una red neuronal ya entrenada con datasets similares y re-entrenar unas pocas capas densas al final de toda la parte convolucional, basadas en nuevas categorías.

Google lanzó en su día un modelo presentado llamado Inception entrenado para clasificar imágenes del ImageNet dataset. De hecho la gente de Tensorflow facilita un script para poder hacer un fine-tuning de inserción con nuevas categorías.

Para obtener este script simplemente ejecutamos el siguiente comando:

$ curl -O \
https://raw.githubusercontent.com/tensorflow/tensorflow/r1.1/tensorflow/examples/image_retraining/retrain.py

Una vez que tengamos todas nuestras imágenes de espectrogramas ordenadas en carpetas en función de si el sujeto está enfermo o no, podemos lanzar nuestro re-entrenamiento:

$ python retrain.py \
  --bottleneck_dir=bottlenecks \
  --how_many_training_steps=40000 \
  --model_dir=inception \
  --summaries_dir=training_summaries/basic \
  --output_graph=retrained_graph.pb \
  --output_labels=retrained_labels.txt \
  --image_dir=melspectrograms/train

Tras haber entrenado nuestro modelo durante una media hora, se ha obtenido una precisión aproximada del 78%. La precisión, como puede verse, es mejorable.

Figura 2. Evolución de la precisión (arriba) y función de pérdida (abajo) para train y test dataset.
Figura 2. Evolución de la precisión (arriba) y función de pérdida (abajo) para train y test dataset.

Usemos nuestro modelo: construyendo un frontal web

Se ha trabajado en la construcción de un Frontal Web muy rudimentario que nos permita servir a través de un navegador audios que nos permita dar los siguientes pasos:

  1. Transformar audios a imágenes (espectrogramas);
  2. Testearlos contra nuestra red neuronal;
  3. Obtener por terminal un score de salud del individuo con la estructura.
{
    "Diagnóstico": "sick" | "not sick", 
    "score": any float in interval 0.0 - 1.0
}

La estructura de la prueba de frontal es la siguiente:

|-- melspectrograms
|   |-- train
|       |-- sick
|           |-- ... .png
|       |-- not sick 
|       	|-- ... .png
|   |-- validation
|       |-- sick
|	        |-- ... .png
|	    |-- not sick 
|	        |-- ... .png
|-- inception
|   |-- classify_image_graph_def.pb
|-- bottlenecks
|-- static
|-- templates
|-- app.py
|-- retrain.py
|-- retrained_graph.pb
`-- retrained_labels.txt

Nos vamos a centrar en el script app.py nos permitirá entender cómo procesar un audio, transformarlo a imagen y servirlo a nuestro modelo en tiempo real.

from flask import Flask
from flask import request
from flask import render_template, jsonify
import os, sys
import librosa
import numpy as np
import matplotlib.pyplot as plt
import librosa.display
import tensorflow as tf
import logging
logging.getLogger('tensorflow').disabled = True

app = Flask(__name__)

Definimos la única ruta de nuestra simple webapp:

@app.route("/", methods=['POST', 'GET'])
def index():
    # Unpersists graph from file
    # Cargamos el modelo
    with tf.gfile.FastGFile("retrained_graph.pb", 'rb') as f:
        graph_def = tf.GraphDef()
        graph_def.ParseFromString(f.read())
        tf.import_graph_def(graph_def, name='')
    if request.method == "POST":
        with tf.Session() as sess:
            # Alimentamos image_data como input al grafo para predicción
            softmax_tensor = sess.graph.get_tensor_by_name('final_result:0')
            f = open('./file.wav', 'wb')
            f.write(request.get_data("audio_data"))
            f.close()
            # Procesamos el dato de audio facilitado al frontal
            y, sr = librosa.load(request.files['audio_data'])

            # Let's make and display a mel-scaled power (energy-squared) spectrogram
            S = librosa.feature.melspectrogram(y, sr=sr, n_mels=128)

            # Convertimos a log scale (dB). utilizaremos la potencia de pico como referencia.
            log_S = librosa.amplitude_to_db(S, ref=np.max)

Ahora podemos guardar, para cada muestra de audio que se suba al frontal, una imagen de frecuencias.

            # Make a new figure
            fig = plt.figure(figsize=(12,4))
            ax = plt.Axes(fig, [0., 0., 1., 1.])
            ax.set_axis_off()
            fig.add_axes(ax)

            # Display the spectrogram on a mel scale
            librosa.display.specshow(log_S, sr=sr, x_axis='time', y_axis='mel')

            # Make the figure layout compact
            image_path = 'testing/tmp.png'
            plt.savefig(image_path)
            plt.close()

Ahora, con la imagen generada, sólo tenemos que testearla contra el modelo y obtener una etiqueta en base a lo aprendido durante el entrenamiento.

            # Read in the image_data
            image_data = tf.gfile.FastGFile(image_path, 'rb').read()

            # Loads label file, strips off carriage return
            label_lines = [line.rstrip() for line
                            in tf.gfile.GFile("retrained_labels.txt")]

            predictions = sess.run(softmax_tensor, \
                    {'DecodeJpeg/contents:0': image_data})

            # Sort to show labels of first prediction in order of confidence
            top_k = predictions[0].argsort()[-len(predictions[0]):][::-1]
            
            payload = {
                "diagnosis": label_lines[top_k[0]], \
                "score": predictions[0][top_k[0]]
            }
            # Mostramos por consola el resultado del diagnóstico
            print(payload)
    
        return render_template('index.html', request="POST")
    else:
        return render_template('index.html')

if __name__ == "__main__":
    app.run(debug=True, \
            threaded=True, \
            port="5000")

Para iniciar la webapp, dentro del entorno virtual correcto, símplemente ejecutamos:

$ python app.py

Tras ejecutar este comando se levantará un servidor al que se puede acceder a través de la ruta http://localhost:5000/

Aquí se incluye un vídeo con una breve demo.

Vídeo. COVID-19 Cough Detector PoC.

Conclusiones

Con unos conocimientos básicos de Python, Tensorflow y de Transfer Learning hemos podido clasificar un dataset de sonidos de manera rápida con una precisión cercana al 80%.

Con un modelo ya entrenado, hemos esbozado un frontal muy simple que nos permite hacer servir grabaciones desde el micrófono de nuestro navegador a nuestro motor para poder predecir una score de enfermedad en base a lo obtenido tras el entrenamiento.

El código se encuentra disponible en el siguiente repositorio de GitHub de LUCA.

Siguientes pasos

  • Se tendría que encontrar un dataset real de toses y sonidos respiratorios que nos permita construir un modelo de mejor calidad.
  • Trabajar en un mejor fine-tuning del modelo para mejorar la precisión.
  • Investigar WaveNet como una opción para entrenar un nuevo modelo.

Para mantenerte al día con LUCA visita nuestra página web,  suscríbete a LUCA Data Speaks o síguenos en TwitterLinkedIn YouTube.

Transformación digital: es momento que su empresa acelere

Alvaro Sandoval    19 mayo, 2020

Las grandes empresas son cada vez más digitales y con ello aportan a la transformación no solo de su negocio, sino de todo un país.

Fueron las primeras en ver los beneficios que las TIC generan al interior de sus organizaciones y por eso han avanzado mucho en este camino. Ahora el reto es no detenerse.

Desde Movistar Empresas estamos listos para apoyarlas con las soluciones que requieren.

Foto creada por rawpixel.com – www.freepik.es

Cómo realizar peticiones API REST a los servicios ocultos de Tor desde un APK de Android

Rafael A. Ortiz    19 mayo, 2020

Nos encontrábamos desarrollando una prueba de concepto en el Área de Innovación y Laboratorio como parte de la arquitectura necesaria para crear un servicio oculto de Tor. También necesitábamos una aplicación móvil para interactuar con ese servicio oculto a través de una API de JSON. Sin embargo parece ser que no hay muchas maneras (bien documentadas) de conseguir esta tarea que parece, en principio, sencilla. Vamos a compartir nuestras notas aquí por si alguien más quisiera ver cómo añadir este soporte a su aplicación.

Si no te interesa la parte de conocimientos previos, avanza un poco más y ve directamente al apartado “Implementación” que encontrarás más abajo.

Contexto

Primero, echemos un vistazo a los diferentes bloques de construcción que necesitaremos para realizar peticiones a un servicio oculto desde nuestra aplicación. En las explicaciones se da por sentado que se tienen nociones básicas de desarrollo de aplicaciones para Tor y Android.

Orbot, NetCipher y el Proyecto Guardian

Orbot es una aplicación gratuita para Android que actúa como un proxy Tor para tu dispositivo. Algo así como si ejecutaras el servicio Tor en tu teléfono, igual que lo harías en cualquier otro sistema Linux. Orbot ha sido desarrollado por el Proyecto Guardian, que crea y mantiene muchas aplicaciones para Android enfocadas en la privacidad. Son el equipo que está detrás de Tor Browser para Android (aprobado oficialmente), así como del combo Orfox+Orbot que vino antes.

Sin embargo, obligar a un usuario a instalar y ejecutar Orbot antes de ejecutar su aplicación no es una experiencia nada grata. Para solucionar esto, se creó NetCipher. NetCipher proporciona, entre otras cosas, una clase de utilidad OrbotHelper que permite a la aplicación comprobar si Orbot está instalado, instar al usuario a que lo instale fácilmente y ejecutar automáticamente Orbot en segundo plano cuando se inicia la aplicación. El proceso es análogo a cuando el paquete del navegador Tor lanza un servicio Tor en segundo plano.

Sin embargo, no es exactamente lo mismo. El actual navegador oficial de Tor para Android elimina NetCipher y Orbot como requisito, y opta por incluir Tor en la propia aplicación. Esto da a los usuarios del navegador Tor una experiencia sencilla e integrada en las diferentes plataformas. Sin embargo, usaremos Orbot ya que su integración es mucho más simple que añadir un demonio Tor a nuestra aplicación.

Volley Library and ProxiedHurlStack

En la página de gitlab de la biblioteca NetCipher se pueden ver los ejemplos proporcionados para muchas bibliotecas HTTP de Android diferentes. Los principales métodos soportados son HttpUrlConnection, OkHttp3, HttpClient y Volley. También hay ejemplos de implementaciones para cada una de estas técnicas.

Por desgracia, estos ejemplos y los artefactos asociados a ellos para otros clientes HTTP no funcionan a la primera. La mayoría de ellos no se han usado prácticamente en, por lo menos, un año, y parece que el método estándar de implementación de Tor ha pasado de NetCipher+Orbot (análogo al proxy de tu instalación FireFox local a través de Tor) a un servicio Tor integrado en el propio APK (análogo al paquete del navegador Tor).

Tras algunos intentos, resulta que en realidad no se necesita el artefacto info.guardianproject.netcipher:netcipher-volley para que Tor funcione en la aplicación. Si echamos un ojo a la fuente de StrongHurlStack.java se puede ver que es bastante sencillo de reimplementar. También dimos con este post de stackoverflow que describe el mismo concepto. El ejemplo no incluye un SSLSocketFactory como lo hace el StrongHurlStack, pero podemos confiar en Tor para que proporcione la encriptación de extremo a extremo y la seguridad de identidad que proporcionaría SSL. Para los servicios ocultos de Tor, SSL es redundante.

Implementación

Para este proceso, asumimos que el usuario ya tiene una API accesible como servicio oculto en somesite.onion.

Las dependencias que hay que añadir al archivo build.gradle del nivel de aplicación son las siguientes:

dependencies {
    implementation 'com.android.volley:volley:1.1.1
    implementation 'info.guardianproject.netcipher:netcipher:2.1.0
}

Asegúrate de actualizar las versiones a las últimas disponibles en el momento de la implementación.

A continuación, crea un archivo y una clase ProxiedHurlStack.java como se describe tanto en los ejemplos de NetCipher como en el post de stackoverflow y añádelo a tu proyecto.

package your.app.here;

import com.android.volley.toolbox.HurlStack;
import java.io.IOException;
import java.net.HttpURLConnection;
import java.net.InetSocketAddress;
import java.net.Proxy;
import java.net.URL;

public class ProxiedHurlStack extends HurlStack {
    @Override
    protected HttpUrlConnection createConnection(URL url) throws IOException {
        Proxy proxy = new Proxy(
                Proxy.Type.SOCKS,
                InetSocketAddress.createUnresolved("127.0.0.1", 9050)
        );
        return (HttpURLConnection) url.openConnection(proxy);
    }
}

Ahora en nuestro archivo MainActivity.java podemos importar todas las bibliotecas correspondientes.

package your.app.here;

import com.android.volley.Request;
import com.android.volley.RequestQueue;
import com.android.volley.Response;
import com.android.volley.VolleyError;
import com.android.volley.toolbox.JsonObjectRequest;
import com.android.volley.toolbox.Volley;

import org.json.JSONObject;

import info.guardianproject.netcipher.proxy.OrbotHelper;

Después, lanzamos una petición a init() e installOrbot() desde nuestro método onCreate()para ejecutar Orbot en segundo plano. Si Orbot ya está instalado, init() devolverá true y pedirá a Orbot que se conecte a la red Tor. Pero si Orbot todavía no está instalado, init() devolverá false y el usuario será redirigido a la Play Store para que instale Orbot. Cuando finalice la instalación, la aplicación le dirá a Orbot que cree una conexión a la red Tor.

@Override
protected void onCreate(Bundle savedInstanceState) {

    // ... other actions here ...

    if (!OrbotHelper.get(this).init()) {
        OrbotHelper.get(this).installOrbot(this);
    }
}

Ahora podemos hacer una petición vía JSON a nuestro servicio oculto. Debes añadir la parte siguiente, sin importar desde dónde envíes peticiones a la API.

JSONObject jsonBody = new JSONObject("{\"your payload\": \"goes here\"}");
RequestQueue queue = Volley.newRequestQueue(this, new ProxiedHurlStack());
String url = "http://somesite.onion/your/api/endpoint/here";

JsonObjectRequest jsonRequest = new JsonObjectRequest(
    Request.Method.POST, url, jsonBody,
    new Response.Listener<JSONObject>() {
        @Override
        public void onResponse(JSONObject response) {
            // do something with the response
        }
    },
    new Response.ErrorListener() {
        @Override
        public void onErrorResponse(VolleyError error) {
            // do something with the error
        }
    }
);

queue.add(jsonRequest);

¡Y eso es todo! Ahora puedes probar tu aplicación y ver las peticiones que realiza la API a tu servicio oculto.

Cómo medir la productividad en el teletrabajo

Juan Carlos Estévez    19 mayo, 2020

El teletrabajo puede representar una reducción de costes en infraestructura para las empresas, además de contribuir al desarrollo de la transformación digital en la empresa y la adaptación de trabajo a los tiempos que corren. Así, es fundamental contar con herramientas que guíen a las organizaciones acerca de cómo medir el teletrabajo.

De acuerdo con el artículo 13 del Real Decreto del Estatuto de Trabajadores de España, en donde se aborda la ley de teletrabajo, el trabajo a distancia es aquel que corresponde a «la prestación de la actividad laboral que se realice de manera preponderante en el domicilio del trabajador o en el lugar libremente elegido por este”.

Antes de comenzar la relación laboral con la empresa, esta opción de trabajar a distancia debería presentarse por escrito en un contrato de trabajo a distancia, con el fin de regularla.

Dentro de este contrato de trabajo a distancia, la empresa debe determinar las condiciones, costes y equipamiento para que sus trabajadores puedan llevar a cabo sus labores de forma óptima.

En resumen, el teletrabajo no solo es un desafío tecnológico, sino que genera cambios en la cultura empresarial, en donde el enfoque ya no es solo en las horas presenciales, sino sobre todo en el cumplimiento de tareas y procesos.

¿Cómo medir el teletrabajo?

Para responder esta pregunta, hay que referirse tanto a las herramientas diseñadas para optimizar el teletrabajo como a los indicadores de productividad.

1. Indicador de productividad

Este índice está relacionado con el número de horas que se entienden como productivas dentro del horario laboral, es decir, mide las horas efectivas de trabajo.

Tras la publicación del Real Decreto-ley 8/2019, la implementación del control horario es obligatorio para las empresas desde el 12 de mayo de 2019, hace más de un año, lo que también aplica para quienes realizan teletrabajo.

La mejor alternativa en este caso es fichar desde un dispositivo, ya sea móvil u ordenador, a través de un código o un patrón, y de forma individual o colectiva. De esta forma, se puede llevar un registro de las horas de trabajo productivas y regularizar el pago de horas extras.

Fichar durante el teletrabajo no solo es conveniente para que la empresa conozca exactamente las horas de la jornada laboral, sino también como una medida de protección para los colaboradores, para que no realicen horas de más.

2. Indicador de actividad

El indicador de actividad da cuenta de la cantidad de horas que trabaja el empleado desde que comienza su actividad hasta que la termina. No siempre coincide con el horario laboral y es diferente de las horas productivas, ya que no mide directamente las horas efectivas de trabajo.

Con este indicador se puede determinar cuántas horas se mantiene activo el trabajador dentro de su jornada laboral.

Consejos para medir el teletrabajo

Una vez identificados estos indicadores, se recomienda medir la productividad, teniendo como referencia las siguientes pautas:

1. Establecer objetivos claros

Es fundamental que las tareas sean organizadas de la forma más clara posible. Si la entrega de trabajo es sucinta y responde a una meta clara, será más simple evaluar si se cumplió o no.

Para ello existen herramientas gratuitas como Trello, que sirve para gestionar tareas en relación con su estado de desarrollo: hecha, en proceso y terminada; y también para determinar fechas de entrega y responsables que puedan entregar feedback y determinar objetivos.

2. Mantener la comunicación en los equipos

La clave es que los trabajadores se mantengan conectados a sus compañeros y a sus jefes. Para esto, existen múltiples aplicaciones. Una de las más usadas es Slack, que integra mensajería instantánea, correo electrónico y la posibilidad de acceder a otras herramientas para videollamadas, como Zoom o Skype.

Estas herramientas permiten que el equipo sienta que está trabajando en equipo, aunque se encuentre en lugares distintos.

Esto es importante también para evaluar la calidad del tiempo trabajado. A través de aplicaciones de videollamadas, como Teams, se pueden hacer reuniones online y determinar cómo se está aprovechando el tiempo para mejorar la productividad y el rendimiento de los trabajadores.

3. Controlar los horarios

También es fundamental llevar una medición de la jornada laboral. En este caso, se recomienda usar una herramienta de geolocalización, para que el trabajador pueda ir anotando el tiempo que dedica a sus tareas desde cualquier lugar, mantener un registro de fichaje, planificar y optimizar rutas, entre otras cosas.

Al final del día se puede revisar la jornada de todos los trabajadores, lo que permite gestionar turnos e incluso vacaciones.

En conclusión, al aumentar la digitalización de las empresas, afrontar el teletrabajo se vuelve más sencillo. En este escenario, sería deseable una ley de teletrabajo que regule todos estos aspectos.

De este modo, más allá de la calidad de la herramienta de medición, será el establecimiento de metas claras y procesos específicos lo que derivará en el éxito del teletrabajo, siempre que se cumpla con la normativa vigente.

NetDevOps: el nuevo ingeniero de red

Leandro Pavón Serrano    19 mayo, 2020

En este blog llevamos ya años publicando acerca de DevOps, DataOps, AIOps y la semana pasada mismo un compañero escribía sobre DevSecOps. Ahora se une a esta familia el concepto NetDevOps o NetOps.

Cuando el equipo responsable de desarrollar, explotar y mantener servicios digitales desea aplicar una integración y despliegue continuos (CI/CD), la infraestructura de red puede convertirse en un cuello de botella en términos de tiempo. Y esa circunstancia repercutiría negativamente en la agilidad deseada para el desarrollo e implementación de nuevas funcionalidades.

La transformación de las redes

Precisamente tendencias como SDN e Intent-Based Networking tratan de hacer más ágiles y dinámicas las redes LAN y WAN. En los últimos tiempos estamos asistiendo a una transformación de las redes también.

Cada año más empresas adquieren equipamiento de red que permite su configuración automatizada. Sin embargo, en muchos casos aún no se aprovecha todo el potencial de las nuevas funcionalidades y no se integra al equipo de red con los equipos de sistemas para romper los silos.

En los próximos años el perfil de ingeniero de red responsable de la red corporativa evolucionará hacia el ingeniero NetOps o NetDevOps. Y es que tendrá que adquirir habilidades y capacidades para integrarse en equipos DevOps, de forma similar a como lo están haciendo ya los administradores de sistemas.

Conocimientos y habilidades de un ingeniero NetDevOps

¿Cuáles son las habilidades y conocimientos que debe adquirir el ingeniero de red para convertirse en un profesional NetDevOps?

  • Comprensión de las fases que componen el ciclo de vida del software.
  • Capacidad para operar los equipos de red a través de NETCONF, RESTCONF y REST API.
  • Conocimiento de los entornos de red en plataformas cloud como AWS, Azure o Google Cloud.
  • Habilidad para desarrollar piezas de software en Python, que permitan automatizar tareas en la red «Network as code«.
  • Familiaridad con herramientas que se emplean en desarrollo de software como control de versiones y aplicarlo a las configuraciones de la red.

La infraestructura de red vista como los “cimientos de cristal”

Merece la pena recordar que en muchas empresas la infraestructura de red se considera una especie de cimientos de cristal. Proporciona la conectividad sobre la que descansan los servicios, la comunicación, la seguridad, la información, etc., pero, al mismo tiempo, se percibe como un elemento frágil sobre el que conviene no hacer muchos cambios. A veces, simplemente actualizar los equipos de red se convierte en un drama, sin hablar ya de integraciones con otros sistemas o migraciones por cambio de fabricante.

Actualmente el ingeniero de red cuenta con conocimientos sobre fundamentos de redes y protocolos de routing, pero además debe conocer los comandos con los que operar los equipos. Desde hace muchos años existen sistemas de gestión de red, en su mayoría basados en protocolo estándar SNMP, para gestionar los equipos de forma gráfica y automatizar ciertas tareas, pero para muchos operadores la consola de comandos de los equipos sigue siendo imprescindible.

NetDevOps requiere un cambio cultural

En un equipo DevOps se rompe con la estanqueidad entre los departamentos de desarrollo de software y administradores de sistemas. Se aboga por una mayor colaboración y trabajo en equipo que permita entregar resultados a los clientes con mayor flexibilidad y agilidad. El equipo NetDevOps se suma a esa nueva forma de trabajar. Se trata de eliminar los tradicionales silos departamentales, proceso que con frecuencia requiere de un cambio cultural y forma parte de la transformación digital de los entornos corporativos.

Los fabricantes promueven el nuevo ingeniero de red

Los fabricantes de equipamiento de red están impulsando este cambio. Así, por ejemplo, Cisco sorprendió al anunciar el pasado 24 de febrero el adiós a las clásicas certificaciones CCNA, CCNP y CCIE y presentar la nueva familia de certificaciones DevNet.

Otro ejemplo es el de Juniper, que llama a este perfil Network Reliability Engineer (NRE), al trasladar el concepto de Site Reliability Engineering (SRE) de Google al ámbito de las redes. En su web es posible encontrar gran cantidad de recursos formativos, que incluyen un laboratorio web para ayudar en el proceso de transformación de un ingeniero de red tradicional al nuevo ingeniero de red.

Imagen: Ewan Bellamy

Posts patrocinados: ¿funciona esta estrategia para marcas y blogueros?

Edith Gómez    19 mayo, 2020

Los posts patrocinados son contenidos en los que dos partes bien diferenciadas salen beneficiadas; por un lado, los blogueros e influencers y, por otro, las marcas o anunciantes. Para los primeros supone una vía de financiación atractiva, mientras que para las marcas significa visibilidad, de forma que la probabilidad de que su conversión aumente será mayor.

Para aprovechar al máximo esta opción, ya seas un bloguero o una marca, debes saber qué es un contenido patrocinado, para qué sirve, quiénes están involucrados en esta colaboración y cómo cerrar un acuerdo de este tipo.

¿Qué es un post patrocinado?

Un post patrocinado es un artículo que un bloguero publica en su blog, mencionando a una marca o hablando de algunos de sus servicios a cambio de una comisión.

Actualmente, estos artículos forman parte de la estrategia de contenidos de marcas reconocidas, que buscan llegar a su público objetivo por diferentes medios (redes sociales, blogs de un nicho específico, newsletters, etc.).

Y es que a través de un post patrocinado se consigue llegar a un público específico, de forma poco intrusiva, aportando valor al contenido y primando la relevancia para satisfacer al lector.

Es preciso saber que la contratación de un artículo patrocinado se puede hacer mediante dos vías:

  1. Contactando directamente a través del correo electrónico, teléfono, redes sociales, etc. con el bloguero.
  2. A través de plataformas especializadas, como Coobis, Publisuites o GetInfluencer, que facilitan esta gestión.

Beneficios de los posts patrocinados

Dentro de una estrategia de marketing de contenidos, los posts patrocinados aportan beneficios tanto al bloguero como a la marca.

Ventajas para el bloguero

Si un bloguero decide abrir las puertas a los posts patrocinados en su sitio web, estas son las ventajas que obtendrá:

  • Aumentará sus ingresos (la publicidad en Adsense ya no será su vía más recurrente).
  • Ofrecerá contenido de calidad, siempre que acepte colaboraciones con marcas del mismo nicho.
  • Podrá decidir y redactar él mismo la temática del artículo. Esto es fundamental para dirigirse a su público con el tono y la forma adecuada.

Ventajas para la marca

El panorama es diferente para una marca o anunciante. Sus beneficios son los siguientes:

  • Mejor posicionamiento orgánico.
  • Más visibilidad y permanencia en el tiempo.
  • Atracción de tráfico cualificado y, por tanto, mayor posibilidad de aumentar las conversiones.
  • Mejor reputación de marca.
  • Incremento de posición en Google, siempre que no se abuse de las palabras clave y se empleen adecuadamente, siguiendo una estrategia SEO.

En cuanto a esto último, en una estrategia SEO se consiguen resultados a medio plazo. No obstante, los contenidos patrocinados pueden ser una inyección para acelerar el proceso y conseguir resultados antes.

¿Este tipo de contenidos puede perjudicar al SEO?

Esta es una pregunta recurrente, porque, en el caso de los blogueros, piensan que al añadir enlaces dofollow en los artículos hacia una página de servicios o hacia la home de una marca, a la larga Google podría penalizarlos.

Pero esto son solo suposiciones. Igual que la estrategia win-win de posts invitados se realiza con total normalidad entre blogs y revistas, los posts patrocinados son también una buena práctica, siempre que se sigan algunos consejos.

Es decir, hay que elegir bien el blog donde se quiere aparecer. Debes pensar si ambos tratáis temas relacionados, porque de lo contrario Google notará que ese enlace no es natural ni relevante. Otro factor importante es que el contenido sea de valor y de interés para el público. De esta forma, Google no penalizará a ninguno.

Consejos para negociar posts patrocinados

Si eres un anunciante o marca y quieres negociar un post patrocinado, estas son las recomendaciones que debes seguir:

Elige el sitio adecuado en función de la temática

Si una marca, pongamos el caso de un fotógrafo, quiere contratar un post patrocinado para aumentar su visibilidad, mejorar su posicionamiento orgánico o para ganar notoriedad de marca, debe elegir un medio lo más específico posible y que esté relacionado con la temática de su negocio.

Por ejemplo, un sitio idóneo sería un blog de una agencia de diseño, donde la fotografía es un tema relacionado con sus servicios. ¿De qué le serviría al fotógrafo realizar un acuerdo con un blog sobre medioambiente?

Presta atención a la autoridad de dominio del blog

Como anunciante, una de las métricas en la que deberías fijarte es la autoridad de dominio (DA), para valorar la calidad del sitio. Cuanto más alta sea, mejor.

Selecciona a un bloguero capaz de generar engagement

Lo ideal es que el bloguero sea quien elabore el contenido, siguiendo los acuerdos establecidos previamente con la marca. Comento esto porque muchas plataformas ponen como requisito hacer ellas el contenido.

Además de que la temática del blog esté relacionada con tu negocio, debes cerciorarte de que el bloguero genera engagement con su audiencia (no sirve únicamente tener miles de seguidores) y que publica con frecuencia.

Indica qué enlaces dofollow y nofollow quieres que aparezcan en el post

Lo habitual es que aparezca un enlace dofollow y algún que otro nofollow. Esto es importante, porque Google penaliza aquellas webs cuya proporción de enlaces dofollow supera de forma desmesurada a los nofollow.

Establece un presupuesto para esta estrategia

Antes de ponerte en marcha con esta estrategia de posts patrocinados, es fundamental establecer cuánto quieres gastar y tener presente que los resultados llegarán a medio y largo plazo.

Para que te hagas una idea, un post patrocinado suele suponer una inversión que va de los 50 euros hasta miles de euros. Todo dependerá del número de visitas de la página donde quieres promocionarte, su número de seguidores en redes, sus suscriptores, la autoridad del sitio web, su posicionamiento en buscadores o el nivel de engagement con su audiencia.