La libreria de Software GenericSuite

La libreria de Software GenericSuite

La librería de software GenericSuite

GenericSuite es una librería de software diseñada para el desarrollo de aplicaciones backend y frontend en Python y React.js, incluyendo funcionalidades de IA.

https://genericsuite.carlosjramirez.com/

 

¿Para qué sirve GenericSuite?

GenericSuite es un conjunto de utilidades frontend y backend creadas con ReactJS y Python para ayudar a desarrollar aplicaciones ágilmente.

Funciones:

  • Editor CRUD genérico: al tener un código central de creación-lectura-actualización-eliminación que se puede parametrizar y extender, no hay necesidad de reescribir el código para cada editor de tablas.
  • Menú genérico y generador de Endpoints.
  • Abstractor de base de datos: el backend puede utilizar DynamoDB o MongoDB como almacenamiento persistente. El acceso a DynamoDB se puede hacer mediante una sintaxis de estilo MongoDB.
  • Abstractor de Framework: para desarrollar Apps con FastAPI, Chalice o Flask indistintamente.

Click aqui para ver los Repositorios

 

GenericSuite para desarrollos de Inteligencia Artificial

GenericSuite AI es un conjunto de utilidades frontend y backend creadas con ReactJS y Python para ayudar a desarrollar aplicaciones que implementan AI.

Funciones:

  • Endpoint ai_chatbot para implementar conversaciones de NLP (Procesamiento de Lenguaje Natural) basadas en las API de OpenAI o Langchain.
  • Manejo de modelos OpenAI, Google Gemini, Anthropic, Ollama y Hugging Face.
  • Manipulación de modelos e incrustaciones Clarifai.
  • Visión artificial (OpenAI GPT4 Vision, Google Gemini Vision, Clarifai Vision).
  • Procesamiento de voz a texto (OpenAI Whisper, Clarifai Audio Models).
  • Procesamiento de texto a voz (OpenAI TTS-1, Clarifai Audio Models).
  • Generador de imágenes (OpenAI DALL-E 3, Google Gemini Image, Clarifai Image Models).
  • Indexadores vectoriales (FAISS, Chroma, Clarifai, Vectara, Weaviate, MongoDBAtlasVectorSearch)
  • Incrustadores (embeddings  de OpenAI, Hugging Face, Clarifai, Bedrock, Cohere y Ollama)
  • Herramienta de búsqueda web para los agentes de AI.
  • Herramienta de Web Scrapping y análisis de páginas web para los agentes de AI.
  • Lectores JSON, PDF, Git y YouTube.
  • Herramientas de traducción de idiomas para los agentes de AI.
  • Chats almacenados en la Base de Datos.
  • Atributos del plan de usuario, la clave API de OpenAI y el nombre del modelo en el perfil de usuario, para permitir que los usuarios del plan gratuito utilicen sus propios créditos de OpenAI.

Click aqui para ver los Repositorios

 

Un poco de Historia

Esta idea del editor CRUD genérico y los demás elementos generados con programación genérica a partir de configuraciones estructuradas lo aprendí a mediados de los años 80, trabajando para una empresa que ya manejaba esa idea utilizando los lenguajes y bases de datos de moda de la época (Clipper y dBase III), con las configuraciones generadas por un sistema llamado System Maker y almacenadas en la base de datos. Un concepto que -en mi opinión- estaba muy adelantado para su época.

En los años 1999 y 2000 hice mi propia versión del editor CRUD genérico en Microsoft ASP (Active Server Pages) para un CMS (Content Management System), algo como lo que se hace WordPress.

Durante la pandemia del año 2020, se me ocurrió crear una nueva App (FynApp) y comencé el desarrollo del editor genérico para frontend en React.js basado en Componentes de Clases, (más información aquí) y el backend en Python (más información aquí), con las configuraciones en estructuras especificadas en el mismo código.

A principio de 2023 comencé a convertir el editor genérico a React.js basado en Componentes Funcionales y Hooks, y las configuraciones en archivos JSON.

Durante la PyCon Colombia en junio de 2023, se me ocurrió la idea de llevar la programación genérica al backend, y desde ese momento comencé el desarrollo de los Helpers para manejar los CRUD y la generación automática de Endpoints y Menús desde las mismas configuraciones utilizadas por el editor CRUD genérico del frontend, en archivos JSON almacenadas en un repositorio común al frontend y backend.

La aparición de ChatGPT a finales de 2022 y todo el boom de la AI (Artificial Intelligence / Inteligencia Artificial) que eso desencadenó, me provocó mucha curiosidad y  ganas de incluir algo de eso en FynApp.

En julio de 2023 participé en el Google Vertex AI Hackathon de lablab.ai y eso me dio las ideas para crear FynBot: el asistente de inteligencia artificial para FynApp, basado en las API de OpenAI y posteriormente usando GPT Functions.

Entre agosto y noviembre de 2023 exploré e incluí la generación de imágenes y audio en el App.

En diciembre de 2023 decidí implementar la programación genérica utilizando las librerías de Langchain para Python, abrir la posibilidad de utilizar cualquier modelo LLM / NLP / Embeddings en mis desarrollos y no estar atado a un solo proveedor.

En febrero de 2024 comencé a extraer toda la programación genérica de FynApp y allí nació The GenericSuite. La primera versión se publicó a principio de marzo de 2024 y las librerías ya funcionales se publicaron en NPMJS y Pypi a principios de abril de 2024.

Click aqui para ver las Librerías

Esta es mi primera contribución a la comunidad Open Source.

FynApp: un App para lograr Deficit Calorico

FynApp: un App para lograr Deficit Calorico

FynApp: un App para lograr Deficit Calorico

FynApp es tener la nutrición en su bolsillo. Es un App para lograr Deficit Calorico, alcanzar los objetivos de pérdida de peso y mantener un mejor estilo de vida, basado en una nutrición adecuada y la toma de consciencia sobre los hábitos alimenticios.

Especificaciones Técnicas

En el Frontend destaca el Editor CRUD Genérico [GCE] es un componente de React para ayudar a desarrollar aplicaciones de back-office más rápido.

Al tener un código básico Create-Read-Update-Delete que se puede parametrizar y ampliar, no hay necesidad de reescribir el código para cada editor de tablas.

Lo hice antes en otros lenguajes de programación a lo largo de los años, como Microsoft ASP a principios de 2000.

La intención es transformarlo en un paquete NPM y Pypi.

El Backend puede usar DynamoDB o MongoDB como almacenamiento persistente.

Se utilizan algunos patrones de diseño de software, tales como método de fábrica, fachada, iterador, método de plantilla y decorador.

Lo más notable fue implementar el acceso a DynamoDB mediante una sintaxis de estilo MongoDB.

En la parte de Gitops/Devops, se hicieron Scripts y configuraciones para realizar despliegues en diferentes plataformas (servidores de desarrollo local, VPS, entre otros), con tecnologías de orquestación como Kubernetes, artefactos y gestión de repositorios con Jfrog, Docker, Gitlab y Gitlab Runners

Herramientas Utilizadas

 Esta aplicación fue construida usando:

Frontend

  • Python 3, Chalice, JWT
  • MongoDB Atlas, AWS DynamoDB
  • GenericSuite

GitOps / DevOps

  • AWS
  • Kubernetes, Docker
  • Gitlab CI/CD, Github
  • Jfrog
  • Linux, Bash

Mobile (próximamente)

  • Flutter

Live Demo

🔗 Enlace a la demo en vivo:

https://app-demo.fynapp.com/

 

Generación de un programa Rust y un BOT Telegram con ChatGPT

Generación de un programa Rust y un BOT Telegram con ChatGPT

En este artículo comparto mi experiencia con la generación de un programa Rust y un BOT Telegram con ChatGPT.

Terminé mi 2022 como debe ser: programando y aprendiendo.

En esta última semana decidí probar la tan cacareada AI de ChatGPT para aprender a programar algunos de los propósitos que me planteado para el 2023, por ejemplo: Rust y un BOT para Telegram.

¿Qué es ChatGPT?

«AI» es el acrónimo de Artificial Intelligence o Inteligencia Artificial en español.

ChatGPT es una Inteligencia Artificial desarrollada por OpenAI que ha causado mucho revuelo desde el 30 de noviembre de 2022 por la madurez de sus modelos de ML (Machine Learning): GPT-3, que realiza una variedad de tareas de lenguaje natural, Codex, que traduce el lenguaje natural a código de programación, y DALL·E, que crea y edita imágenes originales.

El objetivo de OpenAI es desarrollar y promover una IA segura y “amigable”.
El empresario estadounidense Sam Altman (ex presidente de la aceleradora de startups Y Combinator) cofundó OpenAI en 2015 con Elon Musk, quien abandonó el proyecto en 2020. Sam Altman se desempeña como CEO de la empresa con sede en San Francisco.

ChatGPT no es la primera, ni la única, ni la mas avanzada AI. Su mérito radica en ponerla en manos del público general de forma gratuita, aunque limitada, como un abrebocas de la revolución que se nos viene encima.

Generación de un programa en Lenguaje Rust con ChatGPT

Al intentar hacer un API en Rust para el manejo de una tabla de usuarios en una base de datos MongoDB, el resultado fue un poco frustrante.

Generé con ChatGPT prácticamente la totalidad de la API. El resultado fue bueno para animarme a aprender Rust, pero el programa generado a partir de la consulta a ChatGPT no funcionó.

Le pedí un programa completo que implementa operaciones CRUD (acrónimo de «Crear, Leer, Actualizar y Borrar», del original en inglés: Create, Read, Update and Delete) en una tabla de usuarios en MongoDB desde Rust, con cada operación en una función separada y la función main, todo en un único archivo .rs

Esto lo tuve que ir haciendo poco a poco para luego poder ir armando todas las partes.

Luego pedí implementar una API en Rust que maneje una tabla de usuarios en MongoDB con Endpoints para todas las operaciones CRUD y que siga el estilo REST, y que pueda ser llamada mediante Ajax en Javascript.

Lo hizo para una vieja versión de la dependencia de MongoDb para Rust, no me dio completamente la configuración del archivo Cargo.toml (en especial los `features` necesarios por ejemplo para el `serde`), no incluyó los `use` de todos los elementos necesarios (por ejemplo, para `tokio`), no incluyo los `struct` para los Form y Query en los `warp` que definen los Endpoints, entre otras muchas cosas.

Pase horas intentando arreglarlo para que fuera un PMV (producto mínimo viable) y al final me bloquee en la parte final del Endpoint para consultar un documento de la base de datos MongoDb.

Entendí algo importante: para un lenguaje de programación altamente tipado, que pudiera ser el sustituto de Lenguaje C, no es recomendable intentar aprender al estilo Learning-by-Example, en mi caso es necesario hacer algún curso, y luego meterle al Rust.

Generación de un Telegram BOT en Lenguaje Python con ChatGPT

Acá si obtuve un resultado muy satisfactorio por dos razones: ya sabía programar en Python y algunos años atrás intenté hacer este trabajo en PHP (más o menos en 2018, basado en este repo de Eleirbag89 y este artículo de Stackoverflow de how to get price from bitcoin to USD with PHP api) y de alguna manera ya sabía como iniciar el desarrollo del BOT, aunque en el tiempo cambiaron algunas cosas menores.

Según la Wikipedia, Un BOT es un programa informático que efectúa automáticamente tareas reiterativas mediante Internet a través de una cadena de comandos o funciones autónomas previas para asignar un rol establecido; y que posee capacidad de interacción, cambiando de estado para responder a un estímulo.

Inicialmente el proyecto tenía el objetivo de dar las cotizaciones del Bitcoin para luego llegar a tener un mecanismo de avisar cuando la criptomoneda llegara a un valor mínimo específico, enviando una alerta por medio del mismo Telegram.

Lo que me gusto de este ejercicio fue que un proyecto dormido por 4 años, al que le había invertido muchas horas de trabajo para finalmente dejarlo a un lado (y hasta perdí el código fuente por varias mudanzas de un país a otro, cambio de computadoras y no ponerlo en un repositorio Github) a poder desarrollarlo desde cero en 21 horas (2 días de trabajo prácticamente).

El resultado final se resume en estos elementos:

Repositorio en Github:

https://github.com/tomkat-cr/market_alert_bot

URL del Telegram BOT:

https://t.me/ocr_marketalert_bot

Y el Telegram BOT se ve algo así como:

Tips de la conversación con ChatGPT

Poco a poco me he ido haciendo amigo de esta AI…

La conversación fue en español completamente y ChatGPT lo habla muy bien.

Inicialmente le pedí una información general del desarrollo.

Como la versión gratuita de ChatGPT tiene limitaciones en el tamaño de las respuestas, poco a poco le voy pidiendo el resto de las cosas que se cortan.

Cuando se le pide el código en un lenguaje de programación específico, al final o en algún momento se le debe pedir también los archivos de configuración, los procedimientos de instalación, entre otras cosas, para evitar -por ejemplo- conflictos de versiones de dependencias.

Lo otro es que inicialmente le pedí que me diera el procedimiento para poner a trabajar el BOT en el servicio gratuito de Vercel, y hasta el momento no logré ponerlo a funcionar. Me di por vencido y me tocó poner una pregunta en StackOverflow a ver si alguien me ayuda a solucionar un problema con el forwarding de puertos entre el BOT en Phyton y la instancia Serverless de Vercel.

Al final fue una buena experiencia (no hay mal que por bien no venga), porque aprendí los dos modos de trabajo de los Telegram BOTs, el Polling y el WebHook, aprendí a desplegar aplicaciones en Fly.io, y lo más importante: al sentirme bloqueado, minimizado, derrotado por no poder hacer el despliegue en Vercel, en cuestión de horas busqué una solución viable con algo nuevo, aunque eso implique invertir tiempo en aprender y aprender y aprender más! Eso mismo me paso cuando Heroku finalizó su capa gratuita y me tocó mudar el backend de FynApp a Vercel y frontend a Github Pages.

CONCLUSION

fue una experiencia muy interesante y enriquecedora. Definitivamente el proceso creativo inicial de desarrollo se agiliza y me retó a terminarlo en tiempo record.

Sin embargo aun no voy a perder mi empleo al ser sustituido por una AI.

A esto le falta bastante. Mientras tanto, aprendamos a desarrollar Inteligencia Artificial y Machine Learning.

Acá les dejo dos artículos interesantes:

La cereza del pastel fue las correcciones que hizo mi mamá faltando media hora para terminar el 2022 cuando le mostré este Post. Fue algo hermoso e inesperado, además de quedar contratada para hacer la revisión de todos los Post para mi proyecto de Marca Personal.

Extracto de la Interacción con la AI

La conversación con ChatGPT para generar el Telegram BOT fue así:

Carlos:

dame la programacion necesaria para un bot de telegram en python

Para crear un bot de Telegram en Python, necesitarás hacer lo siguiente:

Asegúrate de tener Python instalado en tu computadora. Si aún no lo tienes, puedes descargarlo desde el sitio oficial de Python (https://www.python.org/downloads/).

Instala la biblioteca de Python para el API de Telegram llamada python-telegram-bot. Puedes hacer esto ejecutando el siguiente comando en tu consola:

Copy code

pip install python-telegram-bot

Crea una cuenta de desarrollador y un bot en el BotFather de Telegram.

El BotFather es un bot en Telegram que te permite crear y gestionar bots. Para crear un bot, debes hablar con el BotFather en Telegram y seguir las instrucciones que te da. Al final de este proceso, el BotFather te dará un token de acceso para tu bot. Guarda este token, ya que lo necesitarás más adelante.

Crea un nuevo archivo de Python y coloca el siguiente código en él:

Copy code

import logging

from telegram.ext import Updater, CommandHandler

logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)

def start(update, context):
    update.message.reply_text('Hola! Soy un bot de Telegram')

def main():
    # Creamos el Updater y le pasamos el token de acceso
    updater = Updater('TOKEN', use_context=True)
    # Añadimos un manejador para el comando /start
    updater.dispatcher.add_handler(CommandHandler('start', start))
    # Iniciamos el bot
    updater.start_polling()
    updater.idle()

if name == 'main':
    main()

Reemplaza la cadena 'TOKEN' en la línea updater = Updater('TOKEN', use_context=True) por el token de acceso que obtuviste del BotFather.

Ahora, puedes ejecutar el archivo de Python para iniciar tu bot. Si todo ha ido bien, tu bot debería estar en línea y responder a los comandos que envíes a través de Telegram.

Espero que esto te ayude a empezar a crear tu bot de Telegram en Python. Si tienes alguna pregunta o necesitas más ayuda, no dudes en preguntar.

…

Carlos:

agrega un handler para leer una api rest y devolver el resultado al usuario

Para agregar un manejador que lea una API REST y devuelva el resultado al usuario, puedes hacer lo siguiente:

Importa la biblioteca requests al principio de tu archivo de Python:

Copy code

import requests

Define una función que haga la llamada a la API REST y procese el resultado. En este ejemplo, asumimos que la API devuelve un objeto JSON y que queremos mostrar al usuario el valor del campo 'mensaje' del objeto:

Copy code

def leer_api(update, context):
    # Hacemos la llamada a la API
    response = requests.get('https://mi-api.com/recurso')
    # Procesamos el resultado
    if response.status_code == 200:
        # Si la llamada fue exitosa, obtenemos el objeto JSON
        resultado = response.json()
        mensaje = resultado['mensaje']
        update.message.reply_text(mensaje)
    else:
        # Si la llamada no fue exitosa, informamos al usuario
        update.message.reply_text('Ha ocurrido un error al leer la API')

Añade un manejador para el comando /leer_api que llame a la función leer_api cuando se ejecute el comando:

Copy code

updater.dispatcher.add_handler(CommandHandler('leer_api', leer_api))

Ahora, cuando el usuario envíe el comando /leer_api a través de Telegram, el bot hará una llamada a la API REST y enviará al usuario el valor del campo 'mensaje' del objeto JSON que recibió.

Espero que esto te ayude a añadir la funcionalidad que necesitas. Si tienes alguna pregunta o necesitas más ayuda, no dudes en preguntar.

…

Carlos:

agrega un handler para leer una api rest del weather ppara una ciudad y devolver el resultado al usuario

Para agregar un manejador que lea una API REST del tiempo para una ciudad y devuelva el resultado al usuario, puedes hacer lo siguiente:

Importa la biblioteca requests al principio de tu archivo de Python:

Copy code

import requests

Define una función que haga la llamada a la API REST y procese el resultado. En este ejemplo, asumimos que la API del tiempo que estamos usando es OpenWeatherMap y que queremos mostrar al usuario la temperatura actual en grados Celsius de la ciudad que se le indique:

Copy code

def obtener_tiempo(update, context):
    # Obtenemos el nombre de la ciudad del usuario
    ciudad = " ".join(context.args)
    # Validamos que se haya especificado una ciudad
    if ciudad:
        # Hacemos la llamada a la API del tiempo
        API_KEY = 'TU_API_KEY'  # Reemplaza por tu API key de OpenWeatherMap
        url = f'https://api.openweathermap.org/data/2.5/weather?q={ciudad}&units=metric&appid={API_KEY}'
        response = requests.get(url)
        # Procesamos el resultado
        if response.status_code == 200:
            # Si la llamada fue exitosa, obtenemos el objeto JSON
            resultado = response.json()
            temperatura = resultado['main']['temp']
            update.message.reply_text(f'La temperatura actual en {ciudad} es de {temperatura:.1f}°C')
        else:
            # Si la llamada no fue exitosa, informamos al usuario
            update.message.reply_text('Ha ocurrido un error al leer la API del tiempo')
    else:
        # Si no se especificó una ciudad, informamos al usuario
        update.message.reply_text('Por favor, especifica una ciudad')

Añade un manejador para el comando /tiempo que llame a la función obtener_tiempo cuando se ejecute el comando:

Copy code

updater.dispatcher.add_handler(CommandHandler('tiempo', obtener_tiempo))

Ahora, cuando el usuario envíe el comando /tiempo seguido del nombre de una ciudad a través de Telegram, el bot hará una llamada a la API del tiempo de OpenWeatherMap y enviará al usuario la temperatura actual en grados Celsius de la ciudad especificada.

Espero que esto te ayude a añadir la funcional

…

Carlos:
agrega un handler para leer tomar varios parametros del usuario y luego llamar a una api rest y devolver el resultado al usuario

Para agregar un manejador que lea varios parámetros del usuario, haga una llamada a una API REST y devuelva el resultado al usuario, puedes hacer lo siguiente:

Importa la biblioteca requests al principio de tu archivo de Python:

Copy code

import requests

Define una función que procese los parámetros del usuario y haga la llamada a la API REST. En este ejemplo, asumimos que queremos que el usuario nos proporcione dos parámetros: valor_1 y valor_2, y que queremos hacer una llamada a una API que multiplica estos dos valores y devuelve el resultado:

Copy code

def multiplicar(update, context):
    # Obtenemos los parámetros del usuario
    try:
        valor_1 = int(context.args[0])
        valor_2 = int(context.args[1])
    except (ValueError, IndexError):
        update.message.reply_text('Por favor, proporciona dos valores numéricos')
        return

    # Hacemos la llamada a la API
    url = 'https://mi-api.com/multiplicar'
    data = {'valor_1': valor_1, 'valor_2': valor_2}
    response = requests.post(url, json=data)

    # Procesamos el resultado
    if response.status_code == 200:
        # Si la llamada fue exitosa, obtenemos el resultado
        resultado = response.json()['resultado']
        update.message.reply_text(f'El resultado de multiplicar {valor_1} y {valor_2} es {resultado}')
    else:
        # Si la llamada no fue exitosa, informamos al usuario
        update.message.reply_text('Ha ocurrido un error al llamar a la API')

Añade un manejador para el comando /multiplicar que llame a la función multiplicar cuando se ejecute el comando:

Copy code

updater.dispatcher.add_handler(CommandHandler('multiplicar', multiplicar))

Ahora, cuando el usuario envíe el comando /multiplicar seguido de dos valores numéricos a través de Telegram, el bot hará una llamada a la API que multiplica estos valores y enviará al usuario el resultado de la multiplicación.

Espero que esto te ayude a añadir la funcionalidad que necesitas. Si tienes alguna pregunta o necesitas más ayuda, no dudes en preguntar.

…

Carlos:

como hago para hacer deploy de este programa en vercel y que responda al BotFather de Telegram

Para hacer deploy de tu programa de Python en Vercel y que responda al BotFather de Telegram, debes seguir estos pasos:

Asegúrate de tener una cuenta en Vercel y de haber instalado la CLI de Vercel en tu computadora. Si aún no tienes una cuenta en Vercel, puedes crearla en https://vercel.com/. Si aún no has instalado la CLI de Vercel, puedes hacerlo ejecutando el siguiente comando en tu consola:

Copy code

npm install -g vercel

Inicia sesión en Vercel desde la consola usando el comando:

$ vercel login.

Crea un archivo vercel.json en el directorio raíz de tu proyecto con el siguiente contenido:

Copy code

{
  "version": 2,
  "builds": [
    { "src": "*.py", "use": "@vercel/python" }
  ]
}

Este archivo indica a Vercel qué archivos deben ser procesados y con qué runtime. En este caso, estamos indicando que todos los archivos con extensión .py deben ser procesados con el runtime de Python de Vercel.

Crea un archivo .env en el directorio raíz de tu proyecto con el siguiente contenido:

Copy code

TOKEN=TU_TOKEN

Reemplaza TU_TOKEN por el token de acceso que obtuviste del BotFather cuando creaste tu bot. Este archivo contiene las variables de entorno de tu proyecto. En este caso, estamos definiendo la variable de entorno TOKEN que luego podremos usar en nuestro código para acceder al token de acceso del bot.

Ejecuta el comando vercel en la consola para hacer deploy de tu proyecto. Vercel te pedirá que selecciones un nombre para tu proyecto y que confirmes la configuración de deploy.

$ vercel

Una vez que el deploy haya finalizado, Vercel te proporcionará una URL.

Copia esta URL y pégala en la sección "Webhook URL" del menú de configuración del BotFather.

Luego, envía el comando /setwebhook al BotFather para que comience a enviar actualizaciones a tu bot.

$ curl -X POST https://api.telegram.org/bot/setWebhook -H "Content-type: application/json" -d '{"url": "https://project-name.username.vercel.app/api/webhook"}'

Con estos pasos, tu bot debería estar configurado y listo para recibir actualizaciones a través de Vercel. Si tienes alguna pregunta o necesitas más ayuda, no dudes en preguntar.

…

Carlos:

cuales comandos necesito para poder instalar telegram.ext y el programa anterior

Para instalar la biblioteca telegram.ext y ejecutar el programa de Python que te proporcioné anteriormente, necesitarás hacer lo siguiente:

Asegúrate de tener Python instalado en tu computadora. Si aún no lo tienes, puedes descargarlo desde el sitio oficial de Python (https://www.python.org/downloads/).

Instala la biblioteca de Python para el API de Telegram llamada python-telegram-bot. Puedes hacer esto ejecutando el siguiente comando en tu consola:

Copy code

pip install python-telegram-bot

Crea un archivo de Python y coloca el siguiente código en él:

Copy code

import logging

from telegram.ext import Updater, CommandHandler

logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)

def start(update, context):
    update.message.reply_text('Hola! Soy un bot de Telegram')

def main():
    # Creamos el Updater y le pasamos el token de acceso
    updater = Updater('TOKEN', use_context=True)
    # Añadimos un manejador para el comando /start
    updater.dispatcher.add_handler(Command

…

Carlos:

como hago para crear un pipenv con todo esto

Para crear un pipenv con la biblioteca python-telegram-bot y el código que te proporcioné anteriormente, debes seguir estos pasos:

Asegúrate de tener pipenv instalado en tu computadora. Si aún no lo tienes, puedes instalarlo ejecutando el siguiente comando en tu consola:

Copy code

pip install pipenv

Crea un directorio para tu proyecto y accede a él a través de la consola.

Ejecuta el siguiente comando para crear un pipenv y especificar que quieres usar Python 3.8:

Copy code

pipenv --python 3.8

Una vez que el pipenv haya sido creado, instala la biblioteca python-telegram-bot ejecutando el siguiente comando:

Copy code

pipenv install python-telegram-bot

Crea un archivo de Python y coloca el siguiente código en él:

Copy code

import logging

from telegram.ext import Updater, CommandHandler

logging.basicConfig(format='%(asctime)s - %(name)s - %(levelname)s - %(message)s', level=logging.INFO)

def start(update, context):
    update.message.reply_text('Hola! Soy un bot de Telegram')

def main():
    # Creamos el Updater y le pasamos el token de acceso
    updater = Updater('TOKEN', use_context=True)
    # Añadimos un manejador para el comando /start
    updater.dispatcher.add_handler(CommandHandler('start', start))
    # Iniciamos el bot
    updater.start_polling()
    updater.idle()

if name == 'main':
    main()

Reemplaza TOKEN por el token de acceso que obtuviste del BotFather cuando creaste tu bot.

Crea un archivo Pipfile en el directorio raíz de tu proyecto con el siguiente contenido:

Copy code

[[source]]
name = "pypi"
url = "https://pypi.org/simple"
verify_ssl = true

[dev-packages]

[packages]
python-telegram-bot = "*"

[requires]
python_version = "3.8"

…

MINE: NFT MarketPlace de bienes muebles físicos

MINE: NFT MarketPlace de bienes muebles físicos

MINE: MarketPlace de NFT para títulos de propiedad de bienes muebles físicos (vehículos, motos, botes, entre otros).

MINE es una plataforma que permite hacer transacciones sin necesidad de presencia física de los compradores y vendedores en las localidades o países donde se realice la operación, con transacciones de compra/ventas pagadas en criptomonedas, con compras protegidas para el resguardo de la seguridad tanto del comprador como del vendedor.

Esta solución está basada en tecnologías de la Web3, mediante la creación de una DApp desplegada en la Blockchain de Ethereum.

Hecho en conjunto con el GOF5 (Gang of Five) durante el Ethereum Developer Program 2022 de Platzi.

Características

  • Los Usuarios (compradores, vendedores) deben conectar su Wallet para:
    • Registrarse.
    • Autenticarse.
    • Registrar nuevos bienes para la venta.
    • Comprar bienes.
  • Adicionalmente deben tener datos de contacto para negociar bienes y los precios:
    • DNI / Cédula.
    • Nombre.
    • Apellido.
    • Teléfono.
    • Correo electrónico.
  • Habrá una exhibición pública de los bienes. Los observadores también necesitan una Wallet para consultar y ver.
  • Los Bienes serán mostrados por categorías.
  • La moneda para mostrar los precios de los Bienes será US Dollar y la de intercambio oficial será el ETH.
  • Inicialmente estará solamente disponible en Medellín, Colombia.
  • Se asociará una comisión a cada uno de los NFT registrados en la DApp para que cada vez que se transfiera este NFT envíe un porcentaje al propietario del Smart Contract.
  • Se cobrará una comisión por cada venta realizada.

¿Cuál problema soluciona el proyecto?

¿Te ha pasado que quieres comprar o vender un vehículo fuera de tu localidad y no encuentras las personas o herramientas necesarias para poder realizar la transacción?

¿Estás cansado de los Marketplaces en redes sociales que no entregan la información verdadera de lo que buscas, y si ofreces un producto no se le da la suficiente visibilidad?

¿Estás cansado de pagar altas comisiones por transferencias bancarias para pagar bienes?

¿Cómo solucionarlo?

MINE: Una plataforma que permite hacer transacciones sin necesidad de presencia física de los compradores y vendedores en las localidades o países donde se realice la operación, con transacciones de compra/venta pagadas en criptomonedas, con compras protegidas para el resguardo de la seguridad tanto del comprador como del vendedor.

Esta solución está basada en tecnologías de la web3, mediante la creación de una DApp desplegada en la Blockchain de Ethereum.

Impacto para la Sociedad

  • En Latinoamérica no hay un Marketplace de NFT de bienes físicos como este.
  • Ahorro de Tiempo: comprador y vendedor pueden hacer las transacciones sin salir de casa/oficina.
  • Confianza y credibilidad entre las partes: porque los Bienes son auditados por peritos certificados, y estos Peritos pueden ser escogidos por los compradores.
  • No pasar por bancos: evitando así intermediarios.
  • Evitar altos “fees” de grandes transacciones y/o transferencias internacionales.

Valor Agregado respecto a la Web2

  • Descentralización:
    • La lógica de negocios es un Smart Contract.
    • El Frontend del App no puede ser censurado.
    • Los datos no están bajo control de los desarrolladores.
    • La Blockchain donde está desplegado el Smart Contract es Ethereum.
    • El Frontend está construido un de código abierto.
  • Trazabilidad de bienes, transacciones, firmas de involucrados.
  • Transparencia.

Actores

Comprador:

  • Pone el dinero de la compra del Bien.
  • Debe tener los fondos en su Wallet.
  • Paga el impuesto.

Vendedor:

  • Dueño del Bien.
  • Debe cubrir los gastos de la publicación del contrato y minteo (emisión) del NFT, con las características especificadas más adelante.
  • Paga el fee (comisión) del Perito o la certificación.

Peritos / Certificadores:

  • Certificar la validez del Bien, luego podrá venderse.
  • Firma la transacción cuando se cambia el Bien de dueño en el mundo real.
  • Cobrar fee de transacciones.
  • Servicio de creación de documentos digitales: si un producto no tiene título de propiedad, se genera.
  • El perito es el responsable legal de la transacción.

Notario:

  • A nivel físico-legal, realiza el cambio de los documentos.
  • A nivel digital, firma la transacción con su dirección / Wallet.
  • Recibe los impuestos.

Administrador (nuestra Wallet):

  • Cobrar comisiones.
  • Manda a ejecutar transferFrom de la cuenta del comprador a la del vendedor.

Características del NFT

El NFT va a ser una foto del Bien.

Metadata:

  • Descripción, categorías, arreglo de fotos.
  • Aparte de la foto principal, puede haber fotos adicionales (ejemplo: moto, vehículo, bote: desde distintos ángulos).
  • Un apartado de fotos solo visible para el vendedor y el comprador que ya de su visto bueno de intención de compra, y de los peritos, en donde estará el documento de propiedad.

Posibles Problemas

  • Conversión de ETH a USD/COP u otra moneda, y viceversa.
  • NFT duplicados (que se publique el mismo Bien para la venta varias veces).
  • Más de un dueño.
  • Penalizaciones en caso de fraude en las propiedades.

Arquitectura

Planes a Futuro

  • Los bienes solamente podrán ser vendidos siempre que estén verificados por un Perito certificado. Los Peritos deben tener una certificación oficial para ejercer sus funciones, validados por las entidades reguladoras a nivel de la región donde ejerzan sus actividades. Para esto aparecerá una insignia al mostrar el Bien que indique tal condición.
  • Los Peritos serán los encargados de auditar y certificar que los Bienes existan y estén en regla. Sobre ellos recaerá la responsabilidad legal de legitimidad de los Bienes. Podrán interactuar con el sistema usando sus Wallets y ganando una comisión por las compras y las ventas.
  • Compra/venta de bienes inmuebles: propiedades raíz, locales comerciales, entre otros agregando a la Metadata dirección, coordenadas GPS, fotos de exteriores e interiores.
  • Compra/venta de activos virtuales: parcelas en el Metaverso, obras de arte NFT, entre otros. 
  • Compra/venta de Joyas.
  • Subasta de bienes y activos.
  • Expandir la operación a otros países de Latinoamérica.
  • Utilizar como medio de pago Stable Coins cómo Tether(USDT).
  • Fotos adicionales en la Metadata de los Bienes, así como las fotos privadas.
  • Encriptaciones de datos sensibles de los usuarios (PII) almacenados en el IPFS.
  • Mostrar los precios en moneda local (por ejemplo, COP).

Herramientas utilizadas

Frontend

  • ReactJs
  • Web3.js (Wallet connection)
  • Chakra-UI (maquetación)
  • Mocha (testing)
  • HTML
  • CSS
  • JavaScript
  • VS Code (coding & peer programming)

Backend

  • Solidity
  • Hardhat
  • Open Zeppelin
  • Chain.link (integración de tasa cambiaria entre ETH – y USDT)
  • Chai (testing)
  • VS Code (coding & peer programming)

Integraciones

  • Metamask (Wallet + autenticación + Ethereum provider)
  • IPFS / Infura (persistencia de datos)
  • Goerli (testnet)
  • Goerli PoW Faucet (faucet)

Repositorio

Live Demo

Equipo Desarrollador

Eimer Wilfer Castro Hincapié
🔗 https://github.com/ewcastroh

Carlos J. Ramirez
🔗 https://github.com/tomkat-cr

Javier García
🔗 https://github.com/stratoff

José Valentín Salina
🔗 https://github.com/josevsalina

Fidelina Arteaga
🔗 https://github.com/fidelinaarteaga

¿Cómo lo solucionaron en equipo?

Nuestra convocatoria como equipo fue bastante espontánea. Eimer convocó a Carlos, luego ambos convocaron en el canal #General del Discord del reto #EthDevProgram y así aparecieron Javier, José y Fidelina. Finalmente, el grupo adoptó el nombre GOF5 (Gang of Five).

Entre nosotros hay un espíritu de igualdad y se respetan las intervenciones de cada quién. Esto surgió de manera natural desde el principio.

Comenzamos a reunirnos para ver cuáles ideas teníamos. Cada uno expuso su idea, y con mente maestra íbamos agregando detalles y otras cosas que fueron apareciendo.

Dejamos aterrizar la idea un día o dos, y luego se sometió a votación. Nadie hizo presión, ni publicidad, ni lobby. No se compraron votos. No importó tampoco de quién fueron las ideas.

Acordamos comenzar a hacer reuniones diarias para poder alcanzar las metas. Las primeras reuniones duran menos de 1 hora para poner a funcionar la mente maestra y darle forma al proyecto. Luego de establecer el tablero Jira, comenzar a crear y asignar tareas en el Backlog, nos reunimos diariamente en Stand Ups de 15-20 minutos para hacer el seguimiento, viendo que se hizo el día anterior, que se planea hacer el día de hoy y la existencia de algún bloqueo.

Comenzamos a trabajar en el Whitepaper, en reuniones un tanto maratónicas (3-5 horas) pero muy productivas. Delimitamos el proyecto, describimos actores, procedimientos, y sobre todo, la parte conceptual: la historia, el impacto, valor agregado de la Web 3 sobre hacerlo en la Web 2, posibles problemas, marco legal, el pitch, las tecnologías, entre otras cosas.

En un momento dado perdimos la fe en el proyecto, porque llegamos a pensar que no tenía mucho sentido la parte conceptual respecto a las ventajas de la Blockchain vs las aplicaciones actuales de la Web 2.0 y la complejidad de los asuntos legales implicados en el traspaso de bienes, sin embargo, logramos establecer bien el valor agregado que podemos dar solucionando el problema con nuestra plataforma que facilitaría y daría seguridad en la compra/venta de bienes de los usuarios.

En otra sesión maratónica definimos el Pitch Elevator de 90 segundos, la presentación del proyecto, los logos para el Dapp y el grupo, y una maqueta con el diseño de las pantallas.

Ya con la agenda para las próximas 2 semanas más clara, comenzamos a trabajar en equipos para el Frontend, Backend y Operaciones.

Nuestro slogan oficial: “Resolvamos con lo que hay”.

Metodología de trabajo, Seguimiento y Entregables

Establecimos Scrum como metodología de trabajo ágil y Jira como herramienta para hacer el seguimiento.

Establecimos Sprint de 1 semana a partir del 23 de agosto de 2022.

Se hizo en 2 Sprint y al final de cada uno hubo un entregable:

Dapp de NFT Dinámico con Chainlink Keeper e IPFS

Dapp de NFT Dinámico con Chainlink Keeper e IPFS

Dapp de Ethereum NFT Dinámico con Chainlink Keeper e IPFS 

    NFT Dinámico con Chainlink Keeper e IPFS: Aplicación tipo Dapp para crear un NFT dinámico, que cambia su metadata dependiendo de ciertas condiciones que definamos, en este caso un lapso de tiempo. Utiliza servicio Keeper de Chainlink, IPFS, Hardhat, React, Faucet Goerli y Solidity.

    Este proyecto está basado en la clase de NFT Dinámicos dictado por Camilo Molano en el ámbito del Ethereum Developer Program de Plazi, versión 2022.

    https://platzi.com/clases/3235-ethereum-dev-program/52575-08_220712_eth/

    Forma parte de mi Development Portfolio.

    ¿Qué es Solidity?

    Solidity es un lenguaje de alto nivel orientado a contratos.

    Su sintaxis es similar a la de JavaScript y está enfocado específicamente a la Máquina Virtual de Ethereum (EVM).

    Solidity está tipado de manera estática y acepta, entre otras cosas, herencias, librerías y tipos complejos definidos por el usuario.

    Que es el Automation de Chainlink

    Chainlink Automation (previamente llamado Keeper de Chainlink) es una capa de computación off-chain descentralizada para automatizar las funciones de los contratos inteligentes e introducir nuevas prestaciones a las dApp.

    Los desarrolladores ya no tienen que llevar a cabo procesos de forma manual, ni confiar en servidores centralizados, ni llevar a cabo cambios en su protocolo para poder automatizar funciones on-chain cuando se cumplan ciertas condiciones: en vez de eso pueden delegar esa tarea a los Keepers de Chainlink.

    Enlace al producto Chainlink Automation: https://chain.link/automation 

    Que es IPFS

    IPFS o InterPlanetary File System, es un sistema de archivo descentralizado que busca garantizar la seguridad, privacidad y resistencia a la censura de tus datos.

    Es el mecanismo que se usa en la Web3 y Blockchain para hacer persistencia de archivos sin tener que utilizar servicios centralizados como AWS S3 Buckets.

    Github

    En enlace para el código fuente es:

    https://github.com/tomkat-cr/platziretoDNFT

     

     

     

      Pokémon Factory: contrato inteligente para generar Pokemones

      Pokémon Factory: contrato inteligente para generar Pokemones

      Pokémon Factory: contrato inteligente para generar Pokemones

      Pokémon Factory: contrato inteligente de Ethereum para generar Pokemones, con sus habilidades, tipos y debilidades. Desarrollado mediante el lenguaje Solidity.

      Fue el primer Smart Contract que desplegué, como parte del Ethereum Developer Program de Platzi.

      Forma parte de mi Portafolio de Desarrollo.

      ¿Qué es Solidity?

      Solidity es un lenguaje de alto nivel orientado a contratos.

      Su sintaxis es similar a la de JavaScript y está enfocado específicamente a la Máquina Virtual de Ethereum (EVM).

      Solidity está tipado de manera estática y acepta, entre otras cosas, herencias, librerías y tipos complejos definidos por el usuario.