miércoles, 21 de abril de 2021

Desarrollar un Crawler simple con C#

 

Lo primero que tenemos que hacer es un proyecto nuevo con Visual Studio. En mi caso vamos a usar Visual Studio 2019. El proyecto lo vamos a desarrollar usando C#. Vamos a hacer un Console app el cual le vamos a llamar SimpleCrawler.



El proyecto va a hacer. netcore 3.1

Cuando el proyecto esta listo vamos a buscar en NuGet el paquete HtmlAgilityPack y lo vamos a instalar. 



Con este paquete instalado lo primero que vamos a hacer en la clase Main es importar las librerías necesarias para crear nuestro crawler


Ahora vamos a ver como se construye el código para ir navegando en el contenido de la página web. 



Ahora, en la línea 12 tenemos que copiar el URL de la página web que deseamos escanear. Con esto vamos a crear un cliente Http para leer el documento web como se puede ver en la línea 14. Ya en la línea 16 obtenemos el contenido del documento de Html. Este al final lo podemos obtener como si fuera una variable string.

Ahora si ya con esto listo en la línea 18 creamos un objeto de tipo HtmlDocument del paquete AgilityPack. El cual nos va a permitir convertir el documento que tenemos de tipo string a un objeto de tipo AgilityPack. Esto lo cargamos en la línea 19.

Para poder leer todos los links usamos la línea 21 el cual usa el document que creamos anteriormente y cargamos todos los nodos. De estos nodos que cargamos vamos a seleccionar únicamente los anchor (links).

En la línea 23 vamos a recorrer todos los resultados encontrados en la línea 21 y vamos a ir uno por uno mostrando el contenido de cada uno de estos. Usando la propiedad OuterHtml que tenemos en la línea 24.

Lo que nos da como resultado lo siguiente 



Aquí podemos ver todos los links que tiene la página web. Ahora cada uno podría hacer lo que necesita con estos links.

Podemos recordar que con este paquete podemos buscar cualquier tipo de nodo que tenemos en los sitios web.

¿Qué es un Crawler? 


Etiquetas: , , ,

jueves, 14 de enero de 2021

Dos opciones para almacenar datos de manera local en proyectos .netcore

 



Buscando algunas alternativas rápidas para almacenar datos en un proyecto que estaba realizando encontré LiteDB una base de datos que podemos agregar a nuestros proyectos y manejarla de manera local. Claro todos o muchos ya conocemos SQLite que podemos usarla para el almacenamiento de datos con el mismo principio.

Una de las razones por las que quería buscar otra alternativa a SQLite era que la última versión con la que había trabajado no permitía crear bases de datos encriptadas o con contraseña. Sin embargo, encontré que la versión 3 se puede usar contraseñas para manejar la base de datos.

Bueno cual es la diferencia entre estas dos bases de datos. Lo primero que debemos saber es que SQLite funciona no solo para .net podemos usarla en otros lenguajes de programación como Java. Además, es muy popular para el desarrollo de disipativos móviles. Esta base de datos nos permite guardar la información junto a nuestra app sin tener que instalar un gran motor de base de datos. Es muy rápida y podemos almacenar muchos datos.

Los datos son almacenados en como cualquier otra base de datos basada en SQL y las consultas o transacciones en general utiliza el lenguaje de SQL para poder manipular los datos. Por otro lado, se puede usar en varios sistemas operativos.

Ahora por otro lado LiteDB es también una base de datos que se puede manejar empotrada en las aplicaciones como SQLite. Pero esta base de datos es un poco más similar a mongo. Podemos utilizar Json para almacenar la información dentro de nuestra base de datos.

Una desventaja que tiene esta base de datos es que solo funciona para proyectos .net pero puede correr en cualquier sistema operativo que deseamos. Con las pruebas que he realizado en esta base de datos es muy rápido a la hora de guardar y leer los datos. Al podemos utilizar Json hace que muchas veces manipular ciertos tipos de datos sea más sencillo, ya que no tenemos que crear las estructuras y se puede cambiar fácilmente en cualquier momento.

Me gusta mucho la idea que permite utilizar contraseñas y además tiene varias formas para proteger la información. Cuando creamos la información de conexión podemos seleccionar cual algoritmo de seguridad queremos usar para que esta proteja nuestra base de datos.

LiteDB cuenta con un administrador de base de datos con el que podemos explorar los datos de manera fácil y simple. Para poder usarla solo se debe de instalar una librería usando nuget. Como muchas otras bases de datos de este tipo también se crea un único archivo para administrar la información que deseamos guardar.

Finalmente, esta última base de datos también soporte lenguaje de SQL y expresiones de Linq para poder tener acceso a la información o manipularla en general. Yo de momento estoy usando LiteDB que me parece muy interesante y más fácil de usar para este tipo de proyectos, pero creo que se puede lograr el mismo resultado con SQLite (esta es mucho más popular). Al final seleccionar alguna de las dos depende del gusto de cada uno y puede que explorar cuanta documentación tenga ayude a tomar la decisión.  

Donde podemos encontrar estas bases de datos

Litedb

SQLite


Etiquetas: , , ,

jueves, 10 de diciembre de 2020

Dapper - SQL

 


Tratando de mejorar el rendimiento de una aplicación encontré este framework buscando alternativas a Entity Framework. Algunos queries que se crean con EF son complejos y demandan cierto rendimiento de la aplicación.  

Después de comprar algunos resultados haciendo las mismas consultas entre EF y Dapper se encuentran cosas interesantes como que se reduce la cantidad de recursos con Dapper. Cada uno de los queries que se crearon redujeron su tamaño en memoria, cargando los mismos datos.

Dapper lo que hace es mapear los resultados de las consultas de SQL en objetos de C#, los cuales luego se pueden utilizar para hacer cualquier otra cosa que se quiera.

Vamos a ver como utilizarlo creando un proyecto y una base de datos de SQLite.

 



Ahora lo que tenemos que hacer es crear una tabla en la nueva base de datos de SQLite



Vamos a usar una única table con 4 registros para nuestro ejemplo.

Lo que debemos hacer ahora es una clase POCO con las propiedades de la tabla. En nuestro ejemplo solo ocupamos el id y el producto. Con esto ya podemos mapear nuestros datos a una clase POCO.


Tenemos que utilizar las librerías que instalamos y algunas otras. Como se puede ver hacemos un using de Dapper.



El código para las consultas lo vamos a hacer en la clase Main


Como se puede ver en el primero script hacemos un SELECT de todos los datos que tenemos. Creamos la conexión de SQLite para poder hacer la consulta de datos. Luego simplemente usamos la clase POCO para correr y mapear los datos resultantes del Query. Luego como se puede ver en el ciclo for los datos se pueden manipular fácilmente.

Pero también tenemos la opción de pasar parámetros a las consultas de SQL. Como se ve en el siguiente ejemplo tenemos el parámetro @id el cual es la llave de nuestra tabla. En este caso solo se va a retornar un solo dato.


Para poder pasar los parámetros se pasan con el query y el nombre de los parámetros con el valor que se necesita.

Dapper es un Framework simple pero poderoso para poder cargar los datos de las bases de datos a objetos de POCO. Este, además, requiere de menos memoria que EF. Por otro lado, nos permite utilizar lenguaje de SQL para hacer las consultas que en lo personal me parece más fácil para consultar las bases de datos SQL.

Puede encontrar más información aquí 


Etiquetas: , , ,

lunes, 31 de agosto de 2020

WebSocket Client con C#

 

La tecnología de websocket se ha hecho muy popular y es que realmente nos permite hacer algunas cosas muy fáciles como la posibilidad de habilitar una conexión desde nuestra aplicación web para poder transportar datos.  

En este caso vamos a ver como crear un cliente WebSocket con C#

Vamos a crear una aplicación de console. Mi proyecto tiene el nombre de WebSocketClient. Con el proyecto listo ya podemos iniciar a escribir nuestro código para conexión.

Lo primero que debemos hacer es importar algunas librerías para poder crear la conexión.


using System;
using System.IO;
using System.Net.WebSockets;
using System.Text;
using System.Threading;

Vamos a usar el servicio gratuito de WebSocket que tenemos en esta página http://www.websocket.org/echo.html

Como se puede observar lo primero que vamos a declarar es la variable url que contiene la dirección del WebSocket

   public class Program
    {
        private const string url = "ws://echo.websocket.org";

        public static async System.Threading.Tasks.Task Main(string[] args)
        {
            //Iniciamos un cliente websocket para conectarnos con el servidor
            using (var websocket = new ClientWebSocket())
            {
                //Asignamos el url del servidor de websocket y nos conectamos
                await websocket.ConnectAsync(new Uri(url), CancellationToken.None);

                Console.WriteLine("Message to the server");
                var info = Console.ReadLine();//Mensaje que se quiere enviar al servidor
                //Enviamos el mensaje que capturamos desde la consola
                await websocket.SendAsync(Encoding.UTF8.GetBytes(info), WebSocketMessageType.Text, true, CancellationToken.None);

                //Creamos un arreglo de bytes para recibir la información del servidor
                var buffer = new ArraySegment<byte>(new byte[2048]);
                WebSocketReceiveResult serverResponse;
                using (var ms = new MemoryStream())//Vamos almacenar todos los fragmentos de datos en este objeto en memoria.
                {
                    do
                    {
                        //Vamos a recibir datos pequeños hasta que recibamos todo el mensaje. 
                        serverResponse = await websocket.ReceiveAsync(buffer, CancellationToken.None);
                        ms.Write(buffer.Array, buffer.Offset, serverResponse.Count);
                    } while (!serverResponse.EndOfMessage);

                    if (serverResponse.MessageType == WebSocketMessageType.Close)
                        Environment.Exit(0);//Si el socket se cierra salimos de la aplicación 

                    ms.Seek(0, SeekOrigin.Begin);
                    using (var reader = new StreamReader(ms, Encoding.UTF8))
                        Console.WriteLine(await reader.ReadToEndAsync());
                }

            }
        }
    }

Con un bloque using creamos un objeto de tipo ClientWebSocket que nos permitirá la conexión con el servidor. Para poder iniciar la conexión se tiene que pasar la dirección del servidor al método connectAsync.

La variable info nos permite almacenar cualquier dato que el usuario quiera pasarle al servidor. Luego se pasa al método sendAsync para ser enviado.

En el caso de recibir datos es un poco más complicado. Para esto vamos a recibir tamaños pequeños de información. Almacenándolos en un arreglo de bytes como podemos ver en la variable buffer. Si lo que el servidor nos envía es mayor se va a ir almacenando en la variable ms. En memoria hasta tener toda la información completa. Por eso utilizamos un ciclo.

Cuando tenemos toda la información en la variable ms se debe convertir a un StreamReader que luego la pasaremos en un texto. Esto es lo que al final estamos esperando, como resultado se muestra lo leído en la consola de nuestra app.

Ejemplo


Etiquetas: , , , , ,

domingo, 17 de mayo de 2020

Cross-Platform desktop apps con Electron, C#, Blazor y Visual Studio

Crear aplicaciones para diferentes sistemas operativos en algunas ocasiones es complicado, sin embargo, utilizando las tecnologías web se pueden crear aplicaciones de escritorio que puedan ser utilizadas en diferentes sistemas operativos de manera simple.

Las herramientas que vamos a necesitar para poder crear estas aplicaciones web para escritorios serían las siguientes

  • Npm
  • Nodejs
  • VisualStudio 2019
  • Blazor
  • C#
  • Html
  • Css
  • Javascript
  • .netcore 3.1


Lo primero que vamos hacer es un proyecto nuevo con Visual Studio 2019. Este proyecto debe ser un proyecto Blazor (claro que con electron se pueden crear otro tipo de tecnologías web para las apps).


Después de seleccionar el proyecto vamos a darle un nombre. En mi caso le voy a dejar el nombre de firstApp. Finalmente le damos clic a crear para que se construya nuestro proyecto. Para este primer proyecto no vamos a cambiar nada, lo vamos a correr para ver nuestra aplicación web corriendo. Como podemos observar es una aplicación web normal, aquí es donde vamos a crear toda nuestra lógica/interfaz de usuario.

En este momento ocupamos agregar una librería desde nuget. La cual es electronNet.API

Cuando esta librería esta instalada debemos hacer unos pequeños cambios a nuestra aplicación. Primero vamos a ir a Startup.cs y vamos a agregar esta instrucción Task.Run(async () => await Electron.WindowManager.CreateWindowAsync());


El siguiente paso es ir a Program.cs donde ocupamos agregar una pequeña instrucción. Dentro del método CreateHostBuilder agregamos la línea webBuilder.UseElectron(args);

Ahora estamos listos para convertir nuestra app en un Electron app. Lo que se tiene que hacer en este momento es instalar el electronCLI. Esto lo podemos hacer usando el cmd o con la terminal de Visual Studio. En cualquiera de los dos casos tenemos que ubicarnos donde se encuentra ubicado nuestro proyecto.

Yo voy a usar cmd, en mi caso esta ubicado en la siguiente dirección 


Y ahora corremos esta instrucción dotnet tool install --global ElectronNet.CLI --version 8.31.2

Debemos esperar a que se termine de instalar (es importante notar que para el momento de este blog la versión era 8.31.2) nada más de ajustar la versión del CLI para el momento de instalación.

Ya casi estamos listos para poder correr nuestra app de Electron. Por el momento tenemos que correr la siguiente instrucción “electronize init”. Esto crea una serie de configuraciones que permiten que nuestra app se corra como una aplicación Electron. Cuando se termina igual dentro del cmd vamos a correr esta otra instrucción “electronize start” ya con esto vamos a poder ver nuestra app corriendo como si fuera una aplicación de escritorio.

 


 

 Ejemplo


Etiquetas: , , , ,

jueves, 7 de mayo de 2020

MongoDB y C#

Vamos a crear una aplicación en VS2019 MVC que pueda conectarse de manera fácil a una base de datos de mongo.

Para este ejemplo vamos a utilizar una base de datos de Atlas que nos permite tener una sola de 500MB gratis. Ya si se desea tener mayor capacidad o más bases de datos se requiere de pagar por el uso de estas.

Bueno en este momento vamos a crear una aplicación de MVC con VS2019.

Después de crear el proyecto nuevo debemos instalar los siguientes paquetes desde Nuget



Lo que tenemos que hacer ahora es crear un folder nuevo llamado Repository. En este folder vamos a crear las clases necesarias para poder interactuar con nuestra base de datos. Primero desarrollaremos una interfaz con los métodos base para las operaciones sobre la base de datos, estas operaciones serian buscar documento, borrar documento, actualizar documento y agregar documentos. El nombre de nuestra interfaz seria IMongoInteraction.

Para poder construir el código necesario de cada una operación debemos crear una clase llamada MongoInteraction esta clase debe implementar la interfaz. Dentro de esta clase vamos a construir el código necesario para poder interactuar con la base de datos.

Nosotros vamos a trabajar con un documento que lo podemos definir en una clase POCO que en nuestro caso llamamos MongoDocument (esta puede tener cualquier otro nombre). Para este ejemplo la clase no tiene propiedades, sin embargo, para poder trabajar ya con mongo debemos agregar las propiedades que deseamos guardar en los documentos.

MongoInteraction requiere un constructor el cual nos permite inicializar la conexión de la base de datos, agregar el nombre de nuestra base de datos y la colección que deseamos usar para manipular los documentos.

 

En este momento la manipulación de los documentos es muy fácil y siempre vamos a utilizar el objeto _collection que ya tiene todo lo necesario para poder trabajar sobre la colección de datos.

Como podemos observar en la línea 23 para borrar un documento hacemos uso de _collection y el método DeleteOneAsync, este ultimo requiere de un filtro para saber cuales datos queremos borrar. Lo mismo con el método de buscar lo único que se necesita es el filtro. Ahora para poder crear un documento debemos crear un objeto de la clase MongoDocument (POCO) que tiene los atributos del documento y enviar esto al método InsertOneAsync. Finalmente, el método para actualizar o remplazar un documento requiere primero el filtro del documento que deseamos reemplazar y la información del nuevo documento que se quiere usar de ahora en adelante. Ya con esto podemos hacer las operaciones en la colección de mongo.

 

Ahora nos vamos a ir al controlador Home donde vamos a ver como llamar las operaciones para trabajar con nuestra base de datos. En la línea 17 creamos una variable que nos permite manejar la clase con las operaciones en todo el controlador. Como se puede ver en el constructor de la clase se pasa por referencia un objeto de tipo IMongoInteraction, este es el que se asigna en la línea 23.

Con todo esto preparados seguimos a la línea 26 donde tenemos un método llamado Index. Aquí se puede observar en la línea 29 como creamos el filtro para cargar datos de nuestra colección de mongo. Se define el filtro y se pasa al método de buscar en la línea 30. Este nos debe retornar un objeto de tipo MongoDocument. Para cualquier otra operación se debe crear un filtro igual que en la línea 29 claro cambiando lo que se desea filtrar, es decir, cualquier otra propiedad o propiedades.

Nos queda pendiente un último paso para poder utilizar mongo, el cual debemos desarrollar en la clase Startup

En este paso se debe agregar la línea 24 donde usando la variable service agregamos un objeto de IMongoInteraction, esto usando el método AddSingleton. Nada mas recordar que para este objeto se debe pasar la conexión string para nuestro ejemplo lo estamos llamando del appsettings.

De esta manera tenemos una aplicación web con acceso a una base de datos de mongodb.


Ejemplo


Etiquetas: , , ,

viernes, 4 de octubre de 2019

CosmosDB Singleton


Hace unos días me toco trabajar en proyecto grande con cosmosDB. Inicialmente cada petición que tenia se establecía una conexión y al terminar se terminaba la conexión. Con el incremento de peticiones al servicio Rest iniciamos a tener errores con el Socket. La conexión la tenía implementada con TCP.

Por lo que cambie la conexión del API a utilizar un singleton para poder eliminar el problema.

Vamos a ver como podemos hacer el singleton para un proyecto de Rest API con C# y cosmosDB.
Primero vamos hacer un proyecto nuevo de MVC para crear nuestro Rest API.


Con el proyecto listo lo primero que vamos hacer es una carpeta nueva que se llama services. Aquí vamos a guardar las clases y la interfaz que nos permitirá hacer las consultas a nuestra base de datos.


En la interfaz ICosmosDBServices lo que debemos agregar son los métodos que van a realizar las operaciones en cosmosDB. En nuestro ejemplo tenemos métodos para buscar información agregar documentos y borrar, pero podríamos hacer todos los que necesitamos.


namespace CosmosDBSingleton.Serivces
{
    public interface ICosmosDBService
    {
        dynamic FindDocument(string documentid);
        Task<dynamic> CreateNewDocumentAsync();
        Task<bool> ReplaceDocument();
    }
}

La clase CosmosDBServices la vamos a usar para desarrollar los métodos que se definieron en la interfaz. Para nuestro ejemplo solo usaremos en método de buscar. Pero se pueden crear todos.


public class CosmosDBService : ICosmosDBService
    {

        private readonly DocumentClient _client;
        private readonly FeedOptions _queryOptions;

        public CosmosDBService(string endpointUrl, string primaryKey)
        {
            var connectionPolicy = new ConnectionPolicy()
            {
                ConnectionMode = ConnectionMode.Direct,
                ConnectionProtocol = Protocol.Tcp,
                EnableEndpointDiscovery = true
            };
            _client = new DocumentClient(new Uri(endpointUrl), primaryKey, connectionPolicy);
            _queryOptions = new FeedOptions { MaxItemCount = 1000, EnableCrossPartitionQuery = true };
        }

En esta clase también vamos a definir un objeto de conexión a la base de datos. Que tiene de nombre _client. El constructor de la clase requiere que se le pase el endpoint de conexión y la llave de seguridad de la base de datos para poder crear esta conexión. Dentro del constructor configuramos alguna información de la conexión y establecemos la conexión a la base de datos.

En este momento ya podemos usar la conexión de la base de datos para consultas borrar o actualizar documentos.

Como vemos el método FindDocument requiere de un parámetro para hacer la consulta y ya con esto podemos iniciar la consulta de documentos a la base de datos.


 public Task<dynamic> CreateNewDocumentAsync()
        {
            throw new NotImplementedException();
        }

        public dynamic FindDocument(string documentid)
        {
            var query = new SqlQuerySpec()
            {
                QueryText = "SELECT top 1 * FROM c where c.id=@id",
                Parameters = new SqlParameterCollection() { new SqlParameter("@id", documentid) }
            };
            var crossQueryInSql = _client.CreateDocumentQuery<dynamic>(UriFactory.CreateDocumentCollectionUri("cosmosdb database", "cosmosdb collection"), query, _queryOptions).ToList();
            return crossQueryInSql.FirstOrDefault();
        }

        public Task<bool> ReplaceDocument()
        {
            throw new NotImplementedException();
        }

        public async Task<bool> OpenConnection()
        {
            await _client.OpenAsync();
            return true;
        }

Ahora nos debemos ir a la clase Startup donde crearemos la conexión a cosmos. Usando la configuración de los appsettings pasamos la información requerida a la clase de cosmosDBServices.


 public void ConfigureServices(IServiceCollection services)
        {
            services.Configure(options =>
            {
                // This lambda determines whether user consent for non-essential cookies is needed for a given request.
                options.CheckConsentNeeded = context => true;
                options.MinimumSameSitePolicy = SameSiteMode.None;
            });

            services.AddSingleton(InitializeCosmosClientInstanceAsync(_config.GetSection("CosmosDBSettings")));

            services.AddMvc().SetCompatibilityVersion(CompatibilityVersion.Version_2_1);
        }

services.AddSingleton(InitializeCosmosClientInstanceAsync(_config.GetSection("CosmosDBSettings")));

Dentro de esta clase creamos un método llamado InitializeCosmosClientInstanceAsync el cual recibe la información del appsettings con la información de cosmosdb. Ahora lo que debemos hacer es crear una instancia de CosmosDBService con los settings y retornar el objeto listo con la información de la conexión. De esta manera vamos a tener una conexión única para hacer las operaciones a cosmosdb.


  private static ICosmosDBService InitializeCosmosClientInstanceAsync(IConfigurationSection configurationSection)
        {
            string endpoint = configurationSection.GetSection("CosmosDBAPi").Value;
            string key = configurationSection.GetSection("CosmosDBKey").Value;

            var cosmosDbService = new CosmosDBService(endpoint, key);
            cosmosDbService.OpenConnection().GetAwaiter().GetResult();
            return cosmosDbService;
        }


appsettings


Después de esto los errores con las conexiones y los sockets se terminaron.


Etiquetas: , , , , , ,

viernes, 6 de septiembre de 2019

Rest API con C#


Vamos a ver como llamar un Api usando C#, en este caso usando una aplicación de .netcore.

Lo primero que vamos hacer es crear una aplicación de Console app con Visual Studio 2019. En mi caso tiene de nombre TestDummyApi y vamos a utilizar un endpoint con datos para hacer testing. Podemos encontrar el Api aquí http://dummy.restapiexample.com/

Con el proyecto listo vamos a crear dos clases Poco para guardar y leer los datos del Api

La clase EmployeesPoco que nos permite leer los datos que vamos a recibir del Api.

La clase EmployeePoco que nos permite crear un objeto con los datos que deseamos enviar al Api para guardarlos.


Ahora muy fácil. Debemos de ir a el administrador de paquete (Nuget)

Tenemos que buscar el paquete system.net.http que nos va a permitir hacer las llamadas de los Apis.

Ahora lo tenemos que instalar en el proyecto que estamos trabajando.

Con esto podemos crear el using que vemos en la línea 10 con un objeto de tipo HttpClient para hacer las llamadas de los endpoints. Ahora todo el código que vamos hacer para el uso de los Apis lo agregamos entre las llaves de la línea 11 y 13.

Antes de continuar debemos agregar una librería nueva que nos permite convertir datos de objetos a json y de json a objetos.

Con esto ya estamos listos para desarrollar nuestra app


Usando el objeto de client podemos hacer llamado a un metodo GetStringAsync, este requiere que se le envie el URL donde vamos a usar los datos. El resultado de este Api nos retorna una lista de empleados.

Usando el foreach vamos a recorrer la lista que nos retorno el Api podemos recorrer toda la lista. En este momento podemos ver todos los datos que tiene el Api. En nuestro ejemplo lo que vamos a visualizar es el nombre de cada uno de los empleados pero se puede ver el resto de los datos.

Ahora si vamos a invocar el método de post

Lo primero que tenemos que hacer es el objeto que deseamos guardar en el servicio del Api. En este caso el objeto es de tipo EmployeePoco, asignamos los valores de las propiedades. Luego este objeto lo convertimos en un json que al final es los datos que deseamos enviar. Esta información se asigna a la variable data.

Usando el método PostAsync del objeto client que ya tenemos vamos a poder enviar esta información. Este método requiere como primer parámetro el endpoint que se ocupa para almacenar datos. Como segundo parámetro le enviamos la información que se ocupa almacenar. Usamos el método ReadAsStringAsync para ver el json resultante como un string.

De esta manera podemos usar Rest APIs con c#


Ejemplo

Etiquetas: , , , ,

viernes, 9 de agosto de 2019

Visual Studio 2019 – Crear Proyecto de Web MVC


Para hacer un proyecto web usando VS2019 podemos utilizar la versión gratuita con la que no vamos a tener ningún problema y se puede desarrollar todo tipo de proyecto.

Al momento de abrir VS2019 vamos a ver la siguiente ventana


Al lado izquierdo vamos a tener los proyectos recientes en los que hemos trabajado y al lado derecho las opciones para crear o descargar proyectos con lo que deseamos trabajar. Para este ejemplo vamos a dar clic al botón de “Create a new project” para iniciar nuestro proyecto web.

Después de esto vamos a ver la siguiente ventana


Ahora debemos dar clic sobre el tipo de proyecto que dice ASP.Net Core Web Application. Con esta opción seleccionado ya podemos dar clic al botón de next.


En este momento debemos de darle el nombre al proyecto que deseamos desarrollar. Además, de seleccionar el folder donde vamos a guardar nuestro nuevo proyecto.

Ya estamos listos para dar clic al botón de Create.

La siguiente ventana que vamos a ver seria esta


En esta ventana vamos a poder seleccionar la versión del .Net Core que queremos utilizar para correr nuestra aplicación, entre otros formatos que le podemos dar. En este caso vamos a seleccionar el que dice Web Applciation (Model-View-Controller). Finalmente, damos clic al botón Create. Ahora esperamos que VS2019 termine de construir nuestro proyecto.


Cuando este proceso termina ya estamos listos para trabajar en nuestra nueva aplicación web.


Otros artículos que pueden ser de su interés

Etiquetas: , , , , , , , ,

martes, 18 de junio de 2019

Devintersection Jueves 13 junio 2019


Jueves 13 de junio del 2019 ultimo día de la conferencia dev intersection. Realmente fue super interesante todo lo que vimos en tan corto tiempo

Key Note
Con Brad Green



Iniciamos con un key note sobre angular con las nuevas herramientas que tiene y la gran cantidad de aplicaciones que se han desarrollado con esta tecnología. Es simplemente increíble. Cosas super interesantes el comando de ng update en el CLI que nos permite actualizar la aplicación de una manera fácil y sin que tengamos que hacer nada. Esto permite fácilmente la continuidad de nuestra aplicación con una migración limpia y simple.

Otra característica muy importante es que la nueva versión de angular 8 permite crear aplicaciones más pequeñas. Haciendo que se carguen más rápido para el usuario.

El framework es un OpenSource que vive en github el cual el equipo de Google lo clona a G3 antes de trabajar en las nuevas versiones, en este punto se hacen todas las pruebas necesarias para que la versión que liberen este en las mejores condiciones para producción.

Ya esta por salir la versión Angular 9 con muchas nuevas características para que las apps sean mejores.

Increase your .net productivity and streamline Azure development with Visual Studio 2019
Con Allison Buchholtz y Kendra Havens


Cosas que están saliendo nuevas para el VS2019 son refactor en los ciclos de foreach para mejorar estas estructuras.

Los if son otras estructuras con las que están implementando mejoras.

Las interfaces vienen con mejoras para fácilmente mover propiedades de una clase a una interfaz. Además, si esta no existe se crea de manera automática.

Las expresiones regulares vienen con colores nuevos para poder visualizarlas con mayor facilidad. Con esto se pueden evaluar las expresiones regulares y mostrar posibles errores.

Vienen nuevas características como la capacidad de editar el archivo de configuración más fácil, se puede agregar validaciones de compilación propias como en que orden se quieren crear las clases. Por ejemplo, abstract public class.

Con más y nuevos colores para la sintaxis. Además de nuevas opciones para unit testing.

Cognitive services - Machine Learning for developers
Chris Noring



Con los servicios de machine learning de Azure cualquier desarrollador puede crear aplicaciones con implementaciones de ML.

Por medio de servicios de Rest podemos crear ejecutar las tareas de ML y obtener una respuesta. Existen algunos límites para uso gratuito, pero sigue siendo más cómodo usar estos servicios que desarrollarlos, buscar el equipo de especialistas, hospedar los servicios, etc.

Podemos usar los servicios tal cual están, pero si se requiere de algunas cosas diferentes se pueden mejorar por nosotros mismos. Lo primero que debemos hacer es tratar de ver si lo que ya tenemos nos funciona y usarlo ya después si requerimos algo más se pueden adaptar.

Key note
John Papa

En el Keynote final lo que podemos rescatar es que tenemos herramientas para trabajar de manera colaborativa con VS2019 y trabajar dos o mas al mismo tiempo sobre el mismo archivo.

Todas las herramientas de git están integradas con VS2019 y permite hacer todas las tareas desde el IDE.

Y finalmente super importante es que se requieren muchos especialistas en el área de IA. Al parecer un campo que no requiere de mucha preparación si la persona es desarrolladora. Conocimiento que se puede aprender fácilmente. Esperando que el futuro sea Quantum Computer….

¿Quieres aprender java y C#?

Etiquetas: , , , , , ,