Pop

Curso .NET Core en C# - 1.Introducción - Visual Studio 2019

1.Introducción

  • Hola a todos. En este nuevo curso, analizaremos todos los conceptos básicos, intermedios y avanzados de ASP.NET Core que nos ayudan a crear aplicaciones web basadas en datos.Al final de este curso, podremos realizar todas las operaciones de un CRUD, es decir, crear, leer, actualizar y eliminar datos  utilizando SQL Server como nuestra base de datos.
  • En este curso veremos:
    • ASP.NET Core
    • ASP.NET Core MVC
    • ASP.NET Identity Core para seguridad
    • Entity Framework Core para acceso a datos
  • Alguno de los beneficios de de ASP.NET Core:

    • ASP.NET Core es un marco multiplataforma, de alto rendimiento y de código abierto para crear aplicaciones modernas, basadas en la nube y conectadas a Internet.
    • ASP.NET Core es un rediseño de ASP.NET 4.x.
    • ASP.NET Core ha sido rediseñado desde cero y ofrece los beneficios y características que comento en el vídeo: 


  • Es recomendable para seguir este curso conocer:
    •  HTML básico, CSS y C#. No es necesarios ser un experto. Todo lo que necesitas es  tener conocimientos básicos.
    • El conocimiento previo de MVC es útil pero no es obligatorio. 

Curso .NET Core en C# - 2.Preparación del entorno de trabajo - Visual Studio 2019

2.Preparación del entorno de trabajo

  • Hola a todos. En este nuevo curso, analizaremos todos los conceptos básicos, intermedios y avanzados de ASP.NET Core que nos ayudan a crear aplicaciones web basadas en datos.Al final de este curso, podremos realizar todas las operaciones de un CRUD, es decir, crear, leer, actualizar y eliminar datos  utilizando SQL Server como nuestra base de datos.
  • En este segundo capítulo preparamos el entorno de trabajo para poder comenzar a programar. Los dos enlaces que os dejo nos ayudarán para este propósito: 
  • En el vídeo os explico como instalar todo lo necesario para configurar nuestro entorno de trabajo. Además creamos nuestro primer proyecto:
  • Os dejo parte del código generado al crearnos nuestro primer proyecto .NET Core 2.2:
    • Clase Program:
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore;
using Microsoft.AspNetCore.Hosting;
using Microsoft.Extensions.Configuration;
using Microsoft.Extensions.Logging;

namespace Ejemplo1
{
    public class Program
    {
        public static void Main(string[] args)
        {
            CreateWebHostBuilder(args).Build().Run();
        }

        public static IWebHostBuilder CreateWebHostBuilder(string[] args) =>WebHost.CreateDefaultBuilder(args).UseStartup<Startup>();
    }
}

  • Clase Ejemplo1:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Threading.Tasks;
using Microsoft.AspNetCore.Builder;
using Microsoft.AspNetCore.Hosting;
using Microsoft.AspNetCore.Http;
using Microsoft.Extensions.DependencyInjection;

namespace Ejemplo1
{
    public class Startup
    {
        // This method gets called by the runtime. Use this method to add services to the container.
        // For more information on how to configure your application, visit https://go.microsoft.com/fwlink/?LinkID=398940
        public void ConfigureServices(IServiceCollection services)
        {
        }

        // This method gets called by the runtime. Use this method to configure the HTTP request pipeline.
        public void Configure(IApplicationBuilder app, IHostingEnvironment env)
        {
            if (env.IsDevelopment())
            {
                app.UseDeveloperExceptionPage();
            }

            app.Run(async (context) =>
            {
                await context.Response.WriteAsync("Hello World!");
            });
        }
    }
}

Chatbot con inteligencia artifical en tensorflow (1/4)

1. Chatbot con inteligencia artifical  en tensorflow 

  • Hola a todos.En esta ocasión comenzamos  un tutorial para crear y entrenar  nuestro propio chatbot  que se comportará con inteligencia artificial. Para crear un chatbot, o realmente hacer cualquier tipo de tarea de aprendizaje automático, el primer trabajo que tenemos que hacer es adquirir datos para el entrenamiento.Después  necesitamos  estructurarlos y prepararlos para que se formateen para "la entrada" y "la salida"para que un algoritmo de aprendizaje automático puede digerir. 
  •  La estructura de Reddit es en forma de árbol. Para un chatbot, esto significa que necesitamos separar las cosas para ser un comentario y luego una respuesta. El comentario es la entrada y la respuesta es la salida deseada. En Reddit, no todos los comentarios tienen respuestas, y puede ser que muchos comentarios tengan varias respuestas.Nos basaremos en las puntuaciones de los comentarios  para elegir la mejor respuesta para nuestro chatbot. El comentario es la entrada, la respuesta es la salida deseada. 
  •  Lo que haremos es insertar los datos de los comentarios en una base de datos. Todos los comentarios vendrán cronológicamente, por lo que todos los comentarios serán inicialmente el "padre" y no tendrán un padre propio. Sin embargo, con el tiempo, habrá respuestas, y después podremos almacenar esta "respuesta"asociada a un padre en  la base de datos.
  • En el siguiente vídeo explico estas ideas:
.
  • Ejemplo de un json de los comentarios:
 {
 "author":"Arve",
 "link_id":"t3_5yba3",
 "score":0,
 "body":"Can we please deprecate the word \"Ajax\" now? \r\n\r\n(But yeah, this _is_ much nicer)",
 "score_hidden":false,
 "author_flair_text":null,
 "gilded":0,
 "subreddit":"reddit.com",
 "edited":false,
 "author_flair_css_class":null,
 "retrieved_on":1427426409,
 "name":"t1_c0299ap",
 "created_utc":"1192450643",
 "parent_id":"t1_c02999p",
 "controversiality":0,
 "ups":0,
 "distinguished":null,
 "id":"c0299ap",
 "subreddit_id":"t5_6",
 "downs":0,
 "archived":true
 }

Machine learning con Visual Studio 2019 - Ejemplos varios

ML.NET Varios ejemplos

  • Hola a todos.En este ocasión traigo un ejemplo sobre como empezar a utilizar machine learning con visual studio 2019. Hoy en día está de plena actualidad pero nunca está de más decir que Machine Learning es una disciplina científica del ámbito de la Inteligencia Artificial que crea sistemas que aprenden automáticamente.
  • En el ejemplo podemos ver:
    • Cómo entrenar, construir y generar modelos para machine learning.
    • Cómo predecir  los pronósticos de ventas del próximos mes utilizando el modelo ML entrenado.
    • En el ejemplos se implementó como una aplicación web única y monolítica utilizando ASP.NET Core Razor.
    •  La aplicación también está utilizando una base de datos de SQL Server para el catálogo de productos y la información de pedidos.
    •  Si desea utilizar un SQL Server real o una base de datos SQL de Azure, solo necesita cambiar la cadena de conexión en la aplicación.
  • En el siguiente vídeo podéis ver el ejmplo del que os hablo:

Machine learning con Visual Studio 2019 - Instalación y ejemplo

ML.NET Instalación y primer ejemplo

  • Hola a todos.En este ocasión traigo un tutorial sobre como empezar a utilizar machine learning con visual studio 2019. Hoy en día está de plena actualidad pero nunca está de más decir que Machine Learning es una disciplina científica del ámbito de la Inteligencia Artificial que crea sistemas que aprenden automáticamente.
  • El proceso de aprendizaje automático es similar al de la minería de datos. Ambos sistemas buscan entre los datos para encontrar patrones. Sin embargo, en lugar de extraer los datos para la comprensión humana –como es el caso de las aplicaciones de minería de datos– el aprendizaje automático utiliza esos datos para detectar patrones en los datos y ajustar las acciones del programa en consecuencia. Los algoritmos del aprendizaje automático se clasifican a menudo como supervisados ​​o no supervisados. Los algoritmos supervisados ​​pueden aplicar lo que se ha aprendido en el pasado a nuevos datos. Los algoritmos no supervisados ​​pueden extraer inferencias de conjuntos de datos
  • En el siguiente vídeo podéis ver como instalo y empiezo a trabajar con esta tecnología en visual studio 2019:

Patrones de diseño software 13. Patrón comportamiento Iterator

13. Patrón comportamiento Iterator

  • Hola a todos.Seguimos con  nuestro  curso dedicado a los patrones de diseño software.Los patrones de diseño son unas técnicas para resolver problemas comunes en el desarrollo de software y otros ámbitos  referentes al diseño de interacción o interfaces.
  • En esta ocasión veremos el patrón de diseño Iterator. En diseño de software, el patrón de diseño Iterador, define una interfaz que declara los métodos necesarios para acceder secuencialmente a un grupo de objetos de una colección.El patrón surge del deseo de acceder a los elementos de un contenedor de objetos (por ejemplo, una lista) sin exponer su representación interna
  • El modelo de clases que utilizaremos para este ejemplo es el siguiente:
  • En el siguiente  vídeo tenéis un ejemplo de este patrón de diseño
  • Os dejo el código de las diferentes clases vistas en el vídeo:
    •  Clase IteradorOrdenador.cs
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Iterator
{
    public class IteradorOrdenador
    {
        private ArrayList ordenador;
        private int posicion;

        public IteradorOrdenador(Ordenador o)
        {
            this.ordenador = o.datos;
            posicion = 0;
        }

        public Boolean existeSiguiente()
        {
            if (posicion < ordenador.Count)
                return true;
            else
                return false;
        }

        public Object siguiente()
        {
            object valor = ordenador[posicion];
            posicion++;
            return valor;
        }
    }
}

    •  Clase Ordenador.cs
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Iterator
{
    public class Ordenador
    {
        public ArrayList datos;

        public Ordenador()
        {
            datos = new ArrayList();
        }

        public Ordenador dameValor(int pos)
        {
            Ordenador o = null;
            if(pos<datos.Count)
                return (Ordenador)datos[pos];

            return o;
        }

        public void añadirValor(string valor)
        {
            datos.Add(valor);
        }

        public int dimension()
        {
            return datos.Count;
        }

        public IteradorOrdenador iterador()
        {
            return new IteradorOrdenador(this);
        }
    }
}
    •  Clase Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Iterator
{
    class Program
    {
        static void Main(string[] args)
        {
            Ordenador lista = new Ordenador();
            lista.añadirValor("Pentium 1");
            lista.añadirValor("Pentium 2");
            lista.añadirValor("Pentium 3");
            lista.añadirValor("Pentium 4");
            IteradorOrdenador iterador = lista.iterador();

            //Recorrido con el iterador
            while (iterador.existeSiguiente())
                Console.WriteLine(iterador.siguiente());

            Console.ReadLine();
        }
    }
}

Patrones de diseño software 12. Patrón comportamiento Strategy

12. Patrón comportamiento Strategy

  • Hola a todos.Seguimos con  nuestro  curso dedicado a los patrones de diseño software.Los patrones de diseño son unas técnicas para resolver problemas comunes en el desarrollo de software y otros ámbitos  referentes al diseño de interacción o interfaces.
  • En esta ocasión veremos el patrón de diseño Strategy. El patrón Estrategia (Strategy) es un patrón de diseño para el desarrollo de software. Se clasifica como patrón de comportamiento porque determina cómo se debe  realizar el intercambio de mensajes entre diferentes objetos para resolver una tarea. El patrón Strategy permite mantener un conjunto de algoritmos de entre los cuales el objeto cliente puede elegir aquel que le conviene e intercambiarlo dinámicamente según sus necesidades.
  • El modelo de clases que utilizaremos para este ejemplo es el siguiente:

  • En el siguiente  vídeo tenéis un ejemplo de este patrón de diseño
  • Os dejo el código de las diferentes clases vistas en el vídeo:
    •  Interface IConexion
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Strategy
{
    interface IConexion
    {
        string conectar();

        Boolean conexionEstablecida();
    }
}

    •  Clase GestionarConexiones.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Strategy
{
    class GestionarConexiones
    {
        private IConexion conexion;

        public void ConexionesOracle()
        {
            this.conexion = new Oracle();
        }

        public void ConexionesSQL()
        {
            this.conexion = new SQL();
        }

        public string conectar()
        {
          return  this.conexion.conectar();
        }

        public Boolean conexionCorrecta()
        {
            return this.conexion.conexionEstablecida();
        }
    }
}

    •  Clase Oracle.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Strategy
{
    class Oracle : IConexion
    {
        Boolean conexionCorrecta = false;

        public string conectar()
        {
            conexionCorrecta = true;
            return "Conectando con BBDD ORACLE";
        }

        public Boolean conexionEstablecida()
        {
            return conexionCorrecta;
        }
       
    }
}

    •  Clase SQL.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Strategy
{
    class SQL:IConexion
    {
        Boolean conexionCorrecta = false;

        public string conectar()
        {
            conexionCorrecta = false;
            return "Conectando con BBDD SQL";
        }

        public Boolean conexionEstablecida()
        {
            return conexionCorrecta;
        }
    }
}

    •  Clase Program.cs
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Strategy
{
    class Program
    {
        static void Main(string[] args)
        {
            GestionarConexiones gesConex = new GestionarConexiones();
            gesConex.ConexionesOracle();
            Console.WriteLine(gesConex.conectar());

            if (!gesConex.conexionCorrecta())
            {
                gesConex.ConexionesSQL();
                Console.WriteLine(gesConex.conectar());
            }

            Console.ReadLine();
            
        }
    }
}

Tutorial dialogFlow. Como crear un chatbot con inteligencia artificial(3/3)

3. Como crear un chatbot con inteligencia artificial

  • Hola a todos.En esta ocasión continuamos trabajando con Dialogflow. Para los que no lo conozcáis, se trata de un paquete para crear interfaces de conversación en sitios web, aplicaciones de dispositivos móviles, plataformas populares de mensajería y dispositivos de IoT. 
  • Nosotros estamos creando  un chatbot para atender las reservas de un restaurante.En esta ocasión aprendemos a realizar peticiones a la API/REST que tiene disponible esta plataforma para interactuar  desde nuestras diferentes aplicaciones. En nuestro caso el punto de entrada de la API es: https://api.dialogflow.com/api/query?v=20150910
  • Con estas consideraciones, podemos pasar a ver el vídeo donde explico como hacer las peticiones a la API de dialogflow.
  • La petición POST echa en el ejemplo (sin los datos de autenticación) es la siguiente:

{
  'event':{'name': 'welcome'},
  'timezone':'Europe/Madrid',
  'lang':'es',
  'sessionId':'1233845'
}

  • y la respuesta recibida es:
{
"id": "463aaa28-d99b-4d06-83f1-158d2259f98c",
"timestamp": "2019-05-05T11:53:51.364Z",
"lang": "es",
"result":{
"source": "agent",
"resolvedQuery": "welcome",
"action": "input.welcome",
"actionIncomplete": false,
"parameters":{},
"contexts":[],
"metadata":{"intentId": "7b2a8b96-40b0-432f-88d8-3c0ccd4303b9", "webhookUsed": "false", "webhookForSlotFillingUsed": "false",…},
"fulfillment":{
"speech": "Hola futuro cliente",
"messages":[
{"type": 0, "speech": "Hola cartera con patas"}
]
},
"score": 1
},
"status":{
"code": 200,
"errorType": "success"
},
"sessionId": "1233845"
}

Patrones de diseño software 11. Patrón comportamiento Memento

11. Patrón comportamiento Memento

  • Hola a todos.Seguimos con  nuestro  curso dedicado a los patrones de diseño software.Los patrones de diseño son unas técnicas para resolver problemas comunes en el desarrollo de software y otros ámbitos  referentes al diseño de interacción o interfaces.
  • En esta ocasión veremos el patrón de diseño  Memento, que es un patrón de diseño cuyo   objetivo principal es mantener los diferentes estados que puede tener un objeto, permitiendo la recuperación de los mismos en el tiempo.Es decir su  finalidad es almacenar el estado de un objeto (o del sistema completo) en un momento dado de manera que se pueda restaurar en ese punto de manera sencilla. Para ello se mantiene almacenado el estado del objeto para un instante de tiempo en una clase independiente de aquella a la que pertenece el objeto (pero sin romper la encapsulación), de forma que ese recuerdo permita que el objeto sea modificado y pueda volver a su estado anterior.
  • El modelo de clases que utilizaremos para el ejemplo es el siguiente:
  • En el siguiente  vídeo tenéis un ejemplo de este patrón de diseño.
  • Os dejo el código de las diferentes clases vistas en el vídeo:
    • Clase Caretaker
using System;
using System.Collections;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Memento
{

    //Clase para la gestión de objetos del tipo Memento
    class Caretaker
    {
        
        private ArrayList fechas = new ArrayList();
        public void agregarMemento(Memento m) { fechas.Add(m); }
        public Memento dameMemento(int index) { return ((Memento)fechas[index]); }
    }
}

    • Clase Horas.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Memento
{
    class Horas
    {
  
        private DateTime fecha;

        public  Memento guardarFecha()
        {
            return new Memento(this.fecha);
        }


        public  void restaurarFecha(Memento memento)
        {
            this.fecha = memento.DameFecha();
        }

        public DateTime dameFecha()
        {
            return fecha;
        }

        public void asignarFecha(DateTime f)
        {
            this.fecha = f;
        }
    }
}
    • Clase Memento.cs

using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Memento
{

   //ESta clase 
    class Memento
    {
  
        private DateTime fecha;

         public Memento(DateTime tiempo)
        {
            this.fecha = tiempo;
        }
        public  DateTime DameFecha()
        {
            return this.fecha;
        }
    }
}
    • Clase Program.cs
using System;
using System.Collections.Generic;
using System.IO;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace Memento
{
    class Program
    {
        static void Main(string[] args)
        {
            
            //instaciamos la clase que gesitiona nuestros mementos
            Caretaker caretaker = new Caretaker();
            // Creamos nuestros respectivos backups.
            Horas c1 = new Horas();
            c1.asignarFecha(DateTime.Now);

            System.Threading.Thread.Sleep(5000);

            Horas c2 = new Horas();
            c2.asignarFecha(DateTime.Now);

            //guardamos elementos
            Memento m1 = c1.guardarFecha();
            caretaker.agregarMemento(m1);
            caretaker.agregarMemento(c2.guardarFecha());

            //obtenemos los valores
            Memento memento1 = caretaker.dameMemento(0);
            Memento memento2 = caretaker.dameMemento(1);
            DateTime f1 = memento1.DameFecha();
            DateTime f2 = memento2.DameFecha();

            Console.WriteLine(f1.ToString());
            Console.WriteLine(f2.ToString());
            Console.ReadLine();

        }
    }
}

Tutorial dialogFlow. Como crear un chatbot con inteligencia artificial(2/3)

2. Como crear un chatbot con inteligencia artificial

  • Hola a todos.En esta ocasión continuamos trabajando con Dialogflow. Para los que no lo conozcáis, se trata de un paquete para crear interfaces de conversación en sitios web, aplicaciones de dispositivos móviles, plataformas populares de mensajería y dispositivos de IoT. 
  • Nosotros estamos creando  un chatbot para atender las reservas de un restaurante.En esta ocasión veremos el concepto de contexto. En una comunicación entre dos personas, el Contexto es el conjunto de circunstancias en las cuales se produce la conversación (lugar , tiempo etc.), para no perder el contexto en una conversación siempre es importante tener información de la frase anterior para seguir teniendo una comprensión en el mensaje
  • Con estas consideraciones, vamos a configurar los contextos en DialogFlow. En el siguiente vídeo podemos ver un ejemplo:


Curso .NET Core en C# - 34.Creamos nuestro propio log

34.Creamos nuestro propio log Hola a todos. En este curso, analizaremos todos los conceptos básicos, intermedios y avanzados de  ASP.NET...