acf domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/planetac/desa.planetachatbot.com/wp-includes/functions.php on line 6170all-in-one-seo-pack domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/planetac/desa.planetachatbot.com/wp-includes/functions.php on line 6170wp-user-avatar domain was triggered too early. This is usually an indicator for some code in the plugin or theme running too early. Translations should be loaded at the init action or later. Please see Debugging in WordPress for more information. (This message was added in version 6.7.0.) in /home/planetac/desa.planetachatbot.com/wp-includes/functions.php on line 6170The post 3 trampas en la ingeniería de Datos first appeared on Planeta Chatbot.
]]>Antes que nada debo aclarar que en este caso específico me refiero a serverless del tipo AWS Lambda. ya que actualmente existen una gran cantidad de soluciones efectivas en las distintas clouds que son serverless pero enfocadas a Data workflows como Data flow o AWS Glue.
Las principales ventajas de los servicios serverless (como Lambda) son el fácil despliegue de la lógica de negocio en un «contenedor» listo para escalar de forma automática y a demás lo barato que puede ser pagar unicamente por el tiempo de ejecución, pero…
Es justo allí donde está la trampa, porque hasta ahora todas las ventajas que trae consigo serverless suena genial pero que sucede cuando la pequeña lógica de negocio que utilizamos al inicio dentro del serverless empieza a crecer en tamaño y en complejidad?
Anteriormente mencionamos que el costo de serverless es únicamente por el tiempo de ejecución, pero que sucede si el tiempo de ejecución es tan largo que el servicio casi nunca esta en modo «reposo» o sin consumo de recursos. Y luego claro para poder solventar la complejidad de los pipelines empezamos a crear más y más apps serverless con dependencias entre sí.
Aunado a todo esto, reintentar la ejecución de un pipeline que ha fallado ya sea parcial o completamente, tomando en cuenta todas estas dependencias es en la mayoría de los casos una tarea manual y muy desgastante.
¡Boom!
Sí, boom… cuando explota la infraestructura porque es casi imposible repararlo, imposible seguir creciendo y muy muy difícil mantenerlo.
Muchos de ustedes habrán sentido ya esa satisfacción de deployar finalmente la última pieza de su genial pipeline, luego de meses de trabajar en ella y arreglar los errores, finalmente está funcionando y los stakeholders están satisfechos con el servicio que se completó.
Parece que ya no hay mucho más que hacer acá, hasta que se requieran cambios o agregar características nuevas al servicio.
¡Cuidado!
Esta es una trampa que sucede principalmente en proyectos o equipos que están en sus comienzos y tienen demasiado trabajo. Y entonces pensamos que es suficiente con guardar los logs de los distintos procesos y dejamos para después la integración de un verdadero sistema de monitoreo.
Estrategias para monitoreo hay muchas, lo importante es darles el tiempo adecuado para analizar en que partes del proyecto es crucial tener un monitoreo activo que pueda ayudarnos a prevenir o al menos a identificar rápidamente los errores que posiblemente ocurrirán.
La mayoría de las veces tardamos mucho más tiempo buscando una solución a un error que montando un sistema de monitoreo que agilizará la solución de estos errores, incluso es muy probable que podamos evitar las consecuencias de un error que puede impactar muchos otros sistemas con tan solo montar alertas adecuadas en el sistema de monitoreo.
Aunque el tema de la gobernanza de datos no es algo nuevo, aún se nos hace difícil acostumbrarnos a darle el tiempo necesario a establecer y mantener una gobernanza de datos adecuada.
Así que empezaremos por identificar si en su infraestructura existe una gobernanza de datos o no.
Los principales síntomas de una falta de gobernanza son los siguientes:
Algunas de las consecuencias de la falta de gobernanza son por ejemplo tener una gran cantidad de data duplicada dentro del data lake debido a que la falta de orden hace casi imposible identificar estos duplicados. Cuando hablamos de Big Data esta duplicación puede impactar directamente en los costos no solo de almacenamiento de datos sino también en costos de ejecución ya que mientras más data tengas, más tardan los procesos en transformar y por ende gastan más recursos.
Gobernanza es el proceso de manejar la disponibilidad, usabilidad, integridad y seguridad de los datos en un sistema, basado en estándares internos y políticas de control de los datos.
Algunas de las estrategias para implementar o mejorar la gobernanza de datos son las siguientes:
¿Un Data Domain?
Es una colección de información y procesos relacionados a esa información que son independientes de otras colecciones o procesos y se consume por medio de su propia interfaz.
En base a lo comentado, estas son algunas de las conclusiones que he obtenido:
The post 3 trampas en la ingeniería de Datos first appeared on Planeta Chatbot.
]]>The post Introducción a la detección de Objetos con Python y SimpleCV first appeared on Planeta Chatbot.
]]>SimpleCV es un framework open source para desarrollar aplicaciones de Computer Vision. con el podremos tener acceso a una gran cantidad de librerías de Computer Vision como OpenCV, sin tener que aprender a profundidad sobre formatos de archivos, espacio de colores, manejo de buffer y otros.
En Resumen SimpleCV es utilización de Computer Vision de manera fácil.
La página de la librería es simplecv.org alli podemos encontrar los paquetes de instalación, documentación y ejemplos prácticos sobre como utilizarla. En este caso para poder reconocer las formas vamos a utilizar principalmente una función de SimpleCV llamada “FindBlobs()”.
la palabra BLOB viene de las iniciales de Binary Large OBject que se refiere a un grupo de pixeles conectados en una imagen. El termino Large o Largo indica que únicamente los objetos de cierto tamaño serán tomados en cuenta y los que no cumplan con esta especificación se tomará como “Ruido” y simplemente se ignorará.

Tomada de: Real-Time Traffic Camera AnalysisEn la anterior imagen del lado derecho podemos notar en blanco las diferencias en color respecto al fondo y del lado izquierdo podemos notar los BLOBS que han cumplido con las características que necesitamos.
Existen tres procedimientos principales en el análisis de BLOB:
Extracción:
En esta parte del procesamiento se encuentran los pixeles conectados entre si osea pixeles vecinos que coinciden con las especificaciones, para lograrlo usualmente se utilizan algoritmos como el algoritmo Grass-Fire Recursivo o el algoritmo Grass-Fire Secuencial, en esta ocasión no profundizaremos al respecto.
Representación:
La siguiente etapa es la de representar las características de los pixeles que hemos extraído anteriormente, esto se hace por medio de números que indica la cantidad de características y luego puede ser comparado por medio de un método para asegurarse de que cumple con las características propuestas, por ejemplo si es un rectángulo, los pixeles deben representar cuatro lineas intercontectadas, dos paralelas entre si horizontalmente y dos paralelas entre si verticalmente.
Clasificación:
Por último la representación anterior se compara directamente con un prototipo para verificar que realmente concuerda con las características que queremos filtrar, por ejemplo en el caso anterior compararíamos los pixeles con un conjunto de pixeles que representan un rectángulo.

Bien, comprendiendo como funciona la detección de BLOB en imágenes podemos empezar a utilizarlo.
planetachatbot.com
Para poder utilizar SimpleCV de nuevo se nos facilitan mucho las cosas pues podemos descargar el paquete completo de requerimientos y archivos de la librería especificos para el sistema operativo que utilices:
Luego de la descarga simplemente seguimos los pasos de la instalación dejando lo que nos sugieren por default.
Para verificar que todo esté instalado correctamente vamos a probar el siguiente código, que toma la imagen de la cámara y la muestra en pantalla:
import SimpleCV display = SimpleCV.Display() #crear la ventana para mostrar la imagen cam = SimpleCV.Camera(1) # inicializar la camara normaldisplay = True # opción de mostrar solo un segmento de pantalla si es false while display.isNotDone(): # ciclo hasta que detengamos el programa if display.mouseRight: # si el hacemos click derecho cambiar de modo normaldisplay = not(normaldisplay) print "Modo de Ventana:", "Normal" if normaldisplay else "Segmentado" img = cam.getImage().flipHorizontal() # obtenemos una imagen de la camara if normaldisplay: # si esta en modo normal img.show() #mostrar la imagen else: # modo segmentado segmented.show() #mostrar la imagen
Si todo esta correcto deberías ver una ventana con la imagen que la cámara esta captando.
Ahora si, estamos listos para el código de detección:
import SimpleCV display = SimpleCV.Display() #crear la ventana para mostrar la imagen cam = SimpleCV.Camera(1) # inicializar la camara normaldisplay = True # opcion de mostrar solo un segmento de pantalla si es false while display.isNotDone(): # ciclo hasta que detengamos el programa if display.mouseRight: # si el hacemos click derecho cambiar de modo normaldisplay = not(normaldisplay) print "Modo de Ventana:", "Normal" if normaldisplay else "Segmentado" img = cam.getImage().flipHorizontal() # obtenemos una imagen de la camara dist = img.colorDistance(SimpleCV.Color.BLACK).dilate(5) # separamos los colores que estamos obteniendo en la imagen segmented = dist.stretch(220,255) #tratamos de sacar los colores blancos blobs = segmented.findBlobs() #buscamos objetos o BLOBs en la imagen if blobs: #Si encontramos BLOBs circles = blobs.filter([b.isCircle(0.2) for b in blobs]) # filtramos unicamente los objetos con forma de circulo if circles: img.drawCircle((circles[-1].x, circles[-1].y), circles[-1].radius(),SimpleCV.Color.BLUE,3) # dibujamos el circulo encontrado rect = blobs.filter([b.isRectangle(0.1) for b in blobs]) # filtramos por rectangulos if rect: x_position = rect[-1].x-rect[-1].width()/2 #obtenemos la posicion en x y_position = rect[-1].y-rect[-1].height()/2 #obtenemos la posicion en y img.drawRectangle(x_position, y_position, rect[-1].width(), rect[-1].height(),SimpleCV.Color.BLUE, 3 ) # dibujamos el rectangulo #Lo siguiente que hacemos es el mismo procedimiento pero en vez de obtener objetos con colores claros obtendremos objetos con colores oscuros dist2 = img.colorDistance(SimpleCV.Color.WHITE).dilate(5) segmented2 = dist2.stretch(200,255) # tratamos de sacar los colores oscuros blobs2 = segmented2.findBlobs() if blobs2: circles2 = blobs2.filter([b2.isCircle(0.2) for b2 in blobs2]) if circles2: img.drawCircle((circles2[-1].x, circles2[-1].y), circles2[-1].radius(),SimpleCV.Color.RED,3) rect = blobs2.filter([b2.isRectangle(0.8) for b2 in blobs2]) if rect: x_position = rect[-1].x-rect[-1].width()/2 y_position = rect[-1].y-rect[-1].height()/2 img.drawRectangle(x_position, y_position, rect[-1].width(), rect[-1].height(),SimpleCV.Color.RED, 3 ) if normaldisplay: # si esta en modo normal img.show() # mostrar la imagen else: # modo segmentado segmented.show() # mostrar la imagen segmentada
Si todo fue bien, podrás ver círculos y rectángulos detectados en la imagen.

Aquí puedes encontrar la documentación de la librería:
http://simplecv.readthedocs.io/en/latest/
Aquí puedes encontrar el código de la librería y ejemplos:
The post Introducción a la detección de Objetos con Python y SimpleCV first appeared on Planeta Chatbot.
]]>The post Desarrollando un Chatbot Básico en 10 minutos first appeared on Planeta Chatbot.
]]>A veces la mejor forma de empezar es intentándolo, algo simple y funcional que en el mismo desarrollo te vaya enseñando y a la vez dando ideas sobre lo que podrías conseguir después.
Para este tutorial vamos a utilizar Telegram como plataforma para nuestro chatbot y Python como lenguaje de desarrollo para poder lograr nuestro objetivo rápido y sin tanto esfuerzo.
Ok primero necesitamos un Token para utilizar nuestro bot, para eso nos vamos a Telegram y buscamo al “BotFather”, le enviamos el comando /newbot

Entonces preguntará cuál es el nombre del Bot y cual es el ID (hay que tomar en cuenta que el ID/Username del bot no se puede repetir, por lo que hay que escoger un ID único, usualmente al final lleva la palabra Bot), en la última pregunta nos respondera con el Token y un Url para ir a la conversación con nuestro bot.
El Token se mira algo asi como esto: 123456:ABC-DEF1234ghIkl-zyx57W2v1u123ew11, de ahora en adelante simplemente usaremos <token> para referirnos a ello.
Ahora copia el Token y págalo en algún lugar seguro, próximamente vamos a utilizarlo.
Si aún no tienes Python instalado puedes ir a https://www.python.org/ para descargarlo e instalarlo.
En el medio hay una gran cantidad de APIs útiles para Python y Telegram-Bots, si quieres saber un poco mas sobre ello puedes ir a:
https://github.com/python-telegram-bot/python-telegram-bot
En esta ocasión vamos a utilizar este API que es bastante completo y fácil de usar:
https://github.com/datamachine/twx.botapi
Primero lo instalamos por medio de pip.
pip install twx.botapi
Ahora, Necesitamos un API que nos diga el clima en la ubicación que solicitaremos, para ello utilizaremos Open Weather Map:
https://github.com/csparpa/pyowm
pip install pyowm
Y para utilizarlo es necesario un API KEY que puedes obtener aquí:
http://openweathermap.org/appid
De ahora en adelante nos referiremos al api key como <OWMKEY>
Este API nos proporciona datos como nubosidad, viento, temperatura y algunos otros detalles acerca del clima en la ubicación que le enviemos.
# -*- coding: utf-8 -*-
import sys
from time import sleep
from twx.botapi import TelegramBot, ReplyKeyboardMarkup #Telegram Bot API
import traceback
from pyowm import OWM #API del Clima"""
Inicializamos nuestro Bot y el API del Clima
"""
TOKEN = <token>
OWMKEY = <OWMKEY>bot = TelegramBot(TOKEN)
bot.update_bot_info().wait() #Esperamos por un mensaje entrante
print bot.username
last_update_id = 0
def process_message(bot, u): #Este es el procedimiento que se ejecuta al llegar un mensaje
#Vamos a utilizar un Teclado customizado
keyboard = [['Get Weather']] #Al teclado le agregaremos un Boton de Obtener el clima
reply_markup = ReplyKeyboardMarkup.create(keyboard) #Aqui creamos el teclado
if u.message.sender and u.message.text and u.message.chat: #Si el mensaje tiene un chatID y un contenido de texto entonces lo identificamos como texto
chat_id = u.message.chat.id
user = u.message.sender.username
message = u.message.text
print chat_id
print message
if message == 'Get Weather': #Si el usuario esta enviando el comando correcto para obtener el clima entonces preguntamos su ubicación
bot.send_message(chat_id, 'please send me your location')
else:
bot.send_message(chat_id, 'please select an option', reply_markup=reply_markup).wait() #Si no contiene el comando entonces mostramos las opciones de nuevo
elif u.message.location: #Si el mensaje contiene una ubicación entonces generamos el clima en ese sitio
print u.message.location
chat_id = u.message.chat.id
owm = OWM(OWMKEY) #inicializamos el API del clima
obs = owm.weather_at_coords(u.message.location.latitude, u.message.location.longitude) #creamos un observation
w = obs.get_weather() #creamos un objeto Weather como w
print(w) # <Weather - reference time=2013-12-18 09:20, status=Clouds>
l = obs.get_location() # creamos una ubicacion respecto al objeto weather
status = str(w.get_detailed_status())
placename = str(l.get_name())
wtime = str(w.get_reference_time(timeformat='iso'))
temperature = str(w.get_temperature('celsius').get('temp'))
bot.send_message(chat_id, 'Weather Status: ' +status +' At '+placename+' ' +wtime+' Temperature: '+ temperature+ 'C') #Enviamos la respuesta con el clima
bot.send_message(chat_id, 'please select an option', reply_markup=reply_markup).wait() #enviamos de nuevo el teclado para que lo muestre en pantalla
else:
print u bot.send_message(chat_id, 'please select an option', reply_markup=reply_markup).wait() while True: #Este loop sirve para esperar por los mensajes entrantes
updates = bot.get_updates(offset = last_update_id).wait() #esperamos y obtenemos el mensaje
try:
for update in updates: #obtenemos los datos del mensaje
if int(update.update_id) > int(last_update_id): #si el mensaje que estamos recibiendo es nuevo entonces, procesarlo
last_update_id = update.update_id
process_message(bot, update) #lo enviamos a la función que lo procesa
continue
continue
except Exception:
ex = None
print traceback.format_exc()
continue
Ahora podemos guardarlo y ejecutarlo
Si todo fue correctamente entonces obtendrás algo como esto:

Genial! ahora es momento de que leas un poco mas y agregues algunas imágenes e interacción al bot, pero por ahora tenemos nuestro nuevo y reluciente BOT funcionando y siendo útil!
Si quieres saber un poco más sobre este API para bots de telegram puedes ir a la página de la documentación en:
https://pythonhosted.org/twx/twx/botapi/botapi.html
También aquí puedes encontrar algunos ejemplos del API del clima:
https://github.com/csparpa/pyowm/blob/master/pyowm/docs/usage-examples.md
Espero te sea útil!
The post Desarrollando un Chatbot Básico en 10 minutos first appeared on Planeta Chatbot.
]]>The post Las 3 mejores plataformas para tu chatBot first appeared on Planeta Chatbot.
]]>Esta nueva herramienta tiene mucho camino por delante, hasta se prevé que los bots podrían reemplazar parcialmente las apps que utilizamos actualmente, las razones de esto son varias, pero en resumen los bots se enfocan en la interacción casi humana con el usuario, lo cual nos facilita grandemente el camino para alcanzar nuestro objetivo como usuarios.

Desde conocer el estado del clima hasta buscar el GIF idóneo para la ocasión, actualmente existe una gran variedad de bots que realizan distintas funciones.
Si quieres saber qué es lo que ya existe allá afuera puedes ingresar a thereisabotforthat.com, en este search engine se puede buscar por categoría y por plataforma.
Pero entonces viene la pregunta del millón:

A continuación te presento las plataformas más populares actualmente, sus ventajas y desventajas y algunas referencias que te ayudarán a decidir cuál es la ideal para el propósito de tu bot.

Telegram es un cliente de mensajería multiplataforma creado por el emprendedor Ruso Pavel Durov, actualmente tiene 100 millones de usuarios activos mensualmente, distribuidos en todo el mundo y sigue en constante expansión con un millón de nuevos usuarios cada semana. Telegram se destaca por enfocarse en la privacidad del usuario por medio de ciertas medidas de seguridad, cuestion que la mayoría de clientes de mensajería omiten.
Ventajas
La principal ventaja de este cliente de mensajería es la flexibilidad para su desarrollo ya que tiene clientes de código abierto, APIs públicas, compatibilidad con diversidad de lenguajes de programación y sus protocolos son de fácil acceso.
La comunicación es bastante sencilla, en ocasiones el usuario ni si quiera tiene que teclear pues el bot le sugiere justo lo que busca, incluso se pueden desarrollar juegos multiusuario y variedad de formas de interacción.

Desventajas
La cantidad de usuarios no es tan grande comparada con el gigante Whatsapp con un billón de usuarios.
Creación/Desarrollo
Para poder crear tu bot en Telegram primero debes obtener el token que te proveerá el BotFather, (si, como la película basada en la novela, the Godfather, incluso el avatar es similar al personaje principal).
Y luego debes decidir entre la variedad de librerías en distintos lenguajes que te ayudarán a desarrollarlo. En geekytheory.com puedes encontrar un tutorial para crearlo paso a paso.
Aquí un tutorial de como crear un bot en minutos con telegram y python (código incluido):

Como bien sabemos, Facebook se ha logrado posicionar por bastante tiempo como la plataforma de redes sociales más popular en el mundo, esto hace que a su vez su cliente de mensajería instantánea sea de los más populares no solo en cantidad de usuarios sino en rango de edades.
Muchas empresas han optado por utilizar Facebook como una herramienta publicitaria para sus servicios e incluso hay empresas que trabajan directamente desde Facebook, creando una demanda en crecimiento de desarrolladores y/o administradores de bots.
Ventajas

La principal ventaja de Facebook es la cantidad de usuarios activos mensualmente (alrededor de 1 billón) y su amplio rango de edades (desde 15 hasta 65 años de edad), aumentando la cantidad de posibles servicios o utilidades que podrían necesitar estos usuarios por medio de un bot.
Existen varias herramientas para crear bots en Facebook como octaneai.com que facilitan en gran medida su creación y uso adecuado, cualquier persona, aún sin conocimientos de programación, puede crear un bot muy útil para sus clientes en poco tiempo.
Desventajas
La interacción con los bots es aún bastante básica, la misma está basada en “mensajes estructurados” por medio de listas de imágenes con botones, esto hace que la experiencia del usuario no sea tan buena. Sin Embargo esto está en constante desarrollo.
Creación/Desarrollo
Para empezar con tu bot primero es necesario crear una página de Facebook que será la que estará directamente ligada al bot, luego se puede utilizar una herramienta como octaneai.com que crea el bot y lo enlaza para poder empezar a configurarlo con condicionales de preguntas y respuestas para el usuario.

Slack es una herramienta de mensajería enfocada en la comunicación corporativa, una de las más populares en su ámbito, que nos permite crear grupos, conversaciones privadas y canales para facilitar la comunicación en un equipo de trabajo.
Una cualidad que sobresale es su integración con una gran cantidad de herramientas como; Dropbox, Google Drive, Twitter, Skype y otros, logrando que el usuario tenga todo lo que necesita en un mismo lugar.
Ventajas
Ya que Slack está enfocado en el área de trabajo podemos asumir que gran parte de los usuarios están dispuestos a pagar por el servicio de un bot que les sea útil, abriendo esa posibilidad de cobro por servicio.
Los usuarios de Slack lo utilizan un promedio de 140 minutos diarios y permanecen conectados alrededor de 10 horas diarias, lo cual sobrepasa los promedios de uso de otros clientes de mensajería por lo que se tiene una mayor posibilidad de necesitar un servicio o herramienta extra como un bot.

Desventajas
Los Usuarios de Slack están orientados a herramientas de oficina ya que principalmente usan esta plataforma en el trabajo, por lo que los bots de ventas de artículos personales, entretenimiento y servicios fuera del trabajo no estarían bien enfocadas para sus usuarios.
Creación/Desarrollo
Para crear un bot en Slack es necesario registrarse y obtener el Token que después se utilizará para la autenticación, luego de esto hay que escoger el lenguaje en el que se desarrollará y empezar a programarlo.
La librería bootkit de Howdy.ai es una herramienta bastante útil ya que nos ahorra gran parte del trabajo, en devopensource.com podremos encontrar un tutorial para crear nuestro bot desde cero.
Para poder crear un bot exitoso tenemos que tomar en cuenta una serie de factores que determinarán en que plataformas lo lanzaremos, los más importantes son:
Si empiezas en esto de los Bots estas páginas te serán muy útiles:
The post Las 3 mejores plataformas para tu chatBot first appeared on Planeta Chatbot.
]]>