Archivo

Archivo para la categoría ‘General’

GraphQL y cliente Vue.js

viernes, 4 de octubre de 2024 Sin comentarios

Proyecto GraphQL

Un servicio GraphQL es un lenguaje de consulta y un runtime para ejecutar esas consultas, diseñado para proporcionar una alternativa
más flexible y eficiente a los servicios web API tradicionales como REST. Permite a los clientes solicitar exactamente los datos que necesitan y nada más, lo que contrasta con los endpoints fijos y las estructuras de respuesta rígidas de REST.
A destacar:
1) Endpoint único: a diferencia de REST, donde cada recurso tiene un Endpoint separado, GraphQL expone un endpoint único a través del
cual se realizan todas las consultas.

2) Basado en esquemas: GraphQL define un esquema sólido y con seguridad de tipos que especifica las consultas, mutations y tipos disponibles, lo que garantiza respuestas predecibles.

3) Consultas especificadas por el cliente: los clientes deciden qué campos incluir en su solicitud, minimizando la obtención excesiva
(obtener demasiados datos) o la obtención insuficiente (obtener datos insuficientes).

Ventajas sobre la web API (REST):

1)Obtención de datos eficiente: los clientes pueden solicitar solo los campos necesarios, lo que reduce el tamaño de la carga útil y optimiza el rendimiento.

2) Solicitud única de recursos anidados: en REST, la obtención de datos relacionados puede requerir múltiples solicitudes; GraphQL permite
consultar recursos anidados en una sola petición.

3) Tipado de datos: Schema garantiza una documentación clara y una verificación de errores en el momento de la consulta, lo que reduce
la ambigüedad y los errores.

4) API sin versión: REST a menudo requiere control de versiones (por ejemplo, v1, v2), pero GraphQL evoluciona sin crear nuevos puntos
finales, ya que los clientes solo consultan lo que necesitan.

5) Flexibilidad mejorada: los clientes tienen control total sobre los datos que se devuelven, lo que proporciona más flexibilidad que
las rutas REST predefinidas.

6) Menos tiempo de codificación para los desarrolladores: los desarrolladores backend se centran en definir un esquema,
mientras que los desarrolladores frontend eligen qué consultar, lo que reduce el esfuerzo de coordinación.

<template>
  <div>
    <h1>Books List</h1>
    <div v-if="loading">Loading...</div>
    <div v-if="error">{{ error.message }}</div>
    <ul v-if="books.length > 0">
      <li v-for="book in books" :key="book.id">
        <strong>{{ book.title }}</strong> by {{ book.author }} ({{ book.publishedYear }})
        <br />
        Genre: {{ book.genre }}
      </li>
    </ul>
  </div>
</template>

<script>
import { ref, onMounted } from 'vue';
import { ApolloClient, InMemoryCache, gql } from '@apollo/client/core';

export default {
  setup() {
    // State management using Vue 3 Composition API
    const books = ref([]);
    const loading = ref(true);
    const error = ref(null);

    // Create an Apollo Client instance
    const client = new ApolloClient({
      uri: 'http://localhost:5001/graphql', // Your .NET Core GraphQL endpoint
      cache: new InMemoryCache(),
    });

Por su lado, Vue.js es un framework open source de JavaScript, que nos permite la creación de interfaces de usuario y aplicaciones de una sola página (single-page application o SPA, en inglés), de una forma muy sencilla. Fue creado, o desarrollado, por un ex empleado de Google, Evan You, en el año 2014. Con respecto a otros frameworks, la curva de aprendizaje es baja, si conoces los fundamentos de JavaScript. Además, es muy sencillo de utilizar ya que podemos utilizar este framework simplemente con la inclusión de sus dependencias mediante CDN.

{lang: 'es'}

10 razones para usar los patrones CQRS y Mediator

martes, 2 de abril de 2024 Sin comentarios

La combinación de Clean Architecture con los patrones CQRS (Command Query Responsibility Segregation) y Mediator proporciona un enfoque poderoso para el diseño de software. En esta sinergia, la Clean Architecture establece una sólida estructura modular y una clara separación de responsabilidades, lo que facilita la comprensión y el mantenimiento del sistema a lo largo del tiempo.

El patrón CQRS divide las operaciones de lectura (queries) de las operaciones de escritura (commands), permitiendo optimizar cada una para su función específica y mejorar la escalabilidad y el rendimiento del sistema. Por otro lado, el patrón Mediator actúa como un intermediario entre los diferentes componentes del sistema, reduciendo las dependencias directas y promoviendo la comunicación a través de mensajes.

  1. El patrón CQRS (Command Query Responsibility Segregation) promueve la separación de las operaciones de lectura (queries) y escritura (commands), lo que facilita la gestión de la complejidad en el acceso a datos.
  2. Al separar las operaciones de lectura y escritura, se pueden optimizar las consultas de lectura para mejorar el rendimiento y la escalabilidad del sistema.
  3. El patrón Mediator actúa como un mediador entre los componentes del sistema, lo que facilita la comunicación entre ellos y reduce la dependencia directa.
  4. Utilizando Mediator en conjunto con CQRS se mejora la modularidad y la mantenibilidad del código, ya que se fomenta la implementación de pequeños componentes independientes.
  5. Al aplicar CQRS y Mediator en el acceso a datos, se puede implementar una arquitectura más flexible y adaptable a los cambios, debido a la separación de responsabilidades y la eliminación de acoplamientos fuertes.
  6. CQRS permite simplificar la lógica de negocios al separar claramente las operaciones de lectura y escritura, lo que facilita la implementación de reglas de negocio específicas en cada capa.
  7. Mediante la implementación de comandos y eventos en el patrón CQRS, se pueden gestionar de manera eficiente las operaciones transaccionales y garantizar la consistencia de los datos en todo momento.
  8. El uso de Mediator facilita la implementación de patrones de diseño como inyección de dependencias, lo que simplifica la configuración y la gestión de las dependencias entre componentes.
  9. CQRS y Mediator permiten mejorar la escalabilidad del sistema al distribuir la carga de trabajo de forma eficiente entre los diferentes componentes, mejorando así el rendimiento y la capacidad de respuesta.
  10. En resumen, la combinación de CQRS y Mediator en el acceso a datos proporciona una arquitectura robusta y flexible que facilita el desarrollo, la prueba y el mantenimiento de aplicaciones, permitiendo una mayor eficiencia y adaptabilidad a los cambios en los requisitos del negocio.
{lang: 'es'}

Programación en tiempo real y protocolos TCP / IP

jueves, 15 de febrero de 2024 Sin comentarios
Vs 2022 TCPServer / TCPClient

La programación en tiempo real con .net 8 / C# y protocolos TCP/IP permite desarrollar aplicaciones que requieren respuestas inmediatas y precisas en entornos críticos. Al utilizar C# para implementar el código, se aprovechan las características de este lenguaje orientado a objetos, como la facilidad de mantenimiento y la gestión automática de la memoria.

En este contexto, el protocolo TCP/IP se convierte en el puente de comunicación, garantizando la fiabilidad y la entrega ordenada de datos entre dispositivos. En el código C#, la clase TcpClient y TcpListener facilitan la implementación de conexiones TCP, mientras que la gestión de hilos permite manejar las operaciones en tiempo real de manera eficiente.

Este el el código de ejemplo creado en dos proyectos de consola. Tenemos el proyecto TCPServer, que a partir de un IPEndPoint crea un TCPListener  al que los TCPClient en otro proyecto de consola llaman.

Es crucial establecer una comunicación eficiente entre los nodos para garantizar la sincronización precisa. Utilizando el espacio de nombres System.Net.Sockets, se pueden implementar mecanismos de lectura y escritura asíncronos para optimizar el rendimiento y mantener la capacidad de respuesta en tiempo real.

En resumen, la combinación de C# .net y protocolos TCP/IP ofrece un entorno propicio para el desarrollo de aplicaciones en tiempo real, proporcionando una base sólida para sistemas que requieren alta velocidad y precisión en la transmisión de datos.

{lang: 'es'}
Categories: General Tags: , ,

Desentrañando el Poder de CI/CD en Desarrollo de Software

martes, 2 de enero de 2024 Sin comentarios
ci / cd

La Integración Continua (CI) y la Entrega Continua (CD) han revolucionado la forma en que se desarrolla y entrega el software.
En el corazón de estas prácticas se encuentra la idea de automatización y eficiencia, allanando el camino para ciclos de desarrollo más
rápidos y lanzamientos más confiables, en ingeniería de software.

La CI implica la fusión constante de código, permitiendo que pequeñas contribuciones sean integradas y probadas automáticamente.
Herramientas como Jenkins y Travis CI han demostrado ser esenciales en este proceso, garantizando que cada cambio se ajuste sin problemas al código existente.

La CD, por otro lado, amplía la CI al automatizar la entrega del software en entornos de prueba o producción.
GitLab CI y Jenkins, por ejemplo, facilitan la implementación continua, permitiendo que el software sea entregado sin problemas una vez que ha pasado por las pruebas necesarias.

Estas prácticas han alcanzado su máximo potencial con el auge de las tecnologías de contenedores, donde Docker y Kubernetes han emergido como los pioneros. La orquestación eficiente de contenedores permite una entrega más rápida y escalabilidad.

En resumen, CI/CD ha dejado de ser una opción y se ha convertido en una necesidad para equipos de desarrollo ágiles y modernos. Con un flujo de trabajo CI/CD bien implementado, el desarrollo de software se vuelve más colaborativo, rápido y fiable, proporcionando a las empresas la capacidad de adaptarse rápidamente a las cambiantes demandas del mercado.

{lang: 'es'}

Machine Learning y ML.Net

miércoles, 19 de enero de 2022 Sin comentarios

La definición más básica de tecnologías de la información es la aplicación de la tecnología para resolver problemas empresariales u organizativos a gran escala. Inicialmente han sido en el ámbito del cálculo, tareas recursivas o procesamiento de gran número de datos, donde se puedan sacar ventajas de la computación. Cuando las tecnologías llevan a un dispositivo a adquirir y aplicar conocimiento y llevar a cabo comportamiento inteligente, entonces hablamos de inteligencia artificial, permitiendo así construir sistemas inteligentes para diferentes áreas de aplicación.
Para ello, estos sistemas inteligentes requieren combinar distintas tecnologías, abarcando desde la generación o captura de datos, el procesamiento de los datos con infraestructuras de computación adecuadas, la analítica de los datos, y el soporte al aprendizaje automatizado o la toma de decisiones.

Un campo de la inteligencia artificial es machine learning. Entendemos por machine laerning, conseguir que las computadoras hagan predicciones sin ser programadas explícitamente. Machine learning se usa para resolver problemas que son difíciles (o imposibles) de resolver con programación basada en reglas (por ejemplo, instrucciones if y bucles for). Un paso más en machine learning, aprendizaje automático, es cuando se introducen redes neuronales, que permiten que este aprendizaje automático sea más profundo y más complejos los conceptos que pueda aprender, se habla entonces de Deep Learning.

En esta entrada, nos referimos a ML.Net, que Microsoft lanzó en 2018 como preview, un marco de machine learning gratuito, multiplataforma y de código abierto diseñado para llevar el poder de (ML) a las aplicaciones .NET para una variedad de escenarios.
ML.NET es algo más que una biblioteca de Machine Learning que ofrece un conjunto específico de características; ofrece una API de alto nivel y un marco integral que no solo aprovecha sus propias características de ML sino que también simplifica otras bibliotecas y tiempos de ejecución de infraestructura de ML de nivel inferior.

En este ejemplo, se ha usado la bb.dd Northwind, que consiste en las operaciones de una empresa de exportación / importación en el sector de la alimentación, como catálogo de pedidos, y usar SVD (singular value decomposition) / One Class-Matrix Factorization, como modelo que muestre un ranking de productos a recomendar para los items en el pedido. La web puede verse en https://northwindml.azurewebsites.net/.

{lang: 'es'}