viernes, 29 de mayo de 2020

Como instalar una librería en R

Cuando instalamos R y RStudio tenemos una serie de herramientas que nos permite hacer muchas manipulaciones sobre los datos que importamos a nuestros proyectos de R. Sin embargo, existen librerías externas que podemos instalar para darle mayores funcionalidades a nuestro ambiente de desarrollo de R.

Existen muchas diferentes librerías que podemos encontrar en internet para instalar como para hacer gráficos, manejar datos, generar modelos para predecir datos, etc.

Una librería muy popular que nos permite utilizar una gran cantidad de modelos para generar predicciones. Esta es caret. Para nuestro ejemplo vamos a ver cómo se puede instalar caret en nuestro ambiente de R. Las librerías que están disponibles las podemos instalar de la misma forma que vamos a instalar caret.

En nuestro RStudio vamos a digitar la siguiente instrucción



Damos enter y esperamos que se termine de descargar e instalar toda la información relacionada con esta librería.

Importante el nombre del paquete lo vamos a escribir entre comillas.

Cuando se termina la instalación debemos ejecutar la siguiente instrucción

En este caso va sin comillas.

Esta instrucción nos permite poner a disposición la librería en nuestro ambiente o proyecto.

Regresar

Etiquetas: , , , ,

JDK 14 Switch

Con JDK14 tenemos otra forma de usar la operación switch para seleccionar entre diferentes opciones. Esta es una característica preview, por lo que tenemos que asegurarnos de marcarla de esta manera para poder ejecutarla.  

Lo primero que vamos hacer es un proyecto nuevo con Apache Netbeans, donde vamos a tener el ejemplo de como podemos ver el switch en el JDK 8 y como se podría hacer con el JDK 14.

Como vemos tenemos una variable con el dato suministrado por el usuario. Para nuestro ejemplo que tipo de música le gusta.

Como estamos acostumbrados podemos ver el case el valor posible que selecciona el usuario, seguido de dos puntos. Esta sentencia nos permite tener un bloque de código donde agregamos las acciones del programa a seguir si es la opción elegida. Como podemos ver en la línea 27. Luego de esto simplemente agregamos un break para terminar nuestro switch.

Ahora como podríamos hacerlo en JDK14

La sintaxis es muy diferente pero el resultado es el mismo. Se ve más simple y fácil de leer. Cada uno de los posibles escenarios (case) van seguidos de -> con la instrucción que deseamos ejecutar si se selecciona una opción en particular.

Ejemplo

Etiquetas: , , , , ,

jueves, 28 de mayo de 2020

Como guardar un dataset como CSV con R

Trabajando con podemos hacer muchos tipos de manipulaciones de datos. Además, de crear predicciones basados en datos de prueba y datos para validar. Cuando tenemos los resultaos en algunos casos queremos u ocupamos guardar esa información en disco duro para hacer otras tareas con estos. 

Una opción es crear un CSV con los dataset resultantes. Vamos a ver un pequeño ejemplo de como podemos extraer los datos de R y pasarlos a un CSV file.

Lo primero que vamos hacer es abrir el RStudio.

Ahora vamos a importar algún documento csv para poder hacer diferentes manipulaciones. Seleccionar elementos, borrar variables, crear plots, etc. Lo que se quiere hacer con los datos.

Para poder hacer el ejemplo yo voy a crear un proyecto nuevo de R (no es necesario) para poder subir el ejemplo.

Los datos o documento CSV lo voy a almacenar en una variable llamada dt. Que seria la que quiero exportar.

Lo primero que tengo que hacer es convertir mis datos en un data frame usando la siguiente instrucción

finalFrame <- data.frame(dt)

 

finalmente tenemos que escribir el dataframe utilizando la siguiente instrucción

write.csv(finalFrame,file="result.csv")

lo que témenos dentro de las comillas es el path donde deseamos guardar nuestro documento. En mi caso lo voy almacenar en el mismo lugar donde esta el proyecto de R. El nombre del documento lo vamos asignar también dentro de las comillas.

Estas fueron las instrucciones que ejecute dentro de RStudio.

Realmente es muy simple poder exportar datos.

 Ejemplo


Etiquetas: , , ,

JDK 14 instance of

Dentro de los cambios que trae el JDK14 el instance of es uno de ellos. Esta instrucción nos funciona para verificar si un objeto es de un tipo específico y de esta manera poder convertirlo al objeto que necesitamos.

Usualmente se hacia en dos partes se valida con un if para determinar el tipo y luego dentro del if se hace el cambio de tipo de objeto. Primero vamos a ver como esto funciona en el JDK8 y luego como se puede solucionar con el JDK14

 

Como podemos ver en este ejemplo es como se vería en el JDK8. En la línea 18 se valida el tipo si es CellPhone y en la línea 20 se hace la transformación del tipo para poder utilizarlo en la línea 21.



Esta característica es un Preview por lo tanto para poder correrla se debe de habilitar utilizando “--enable-preview” cuando se compila y se corre.

Pero como podemos observar en el siguiente ejemplo en la línea 33 ademas de validar el tipo de dato se crea la variable de este tipo para poder ser utilizada en la línea 35.

En este caso sale como si fueran errores ya que es una nueva característica que esta en preview pero funciona perfectamente.

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: , , ,

lunes, 4 de mayo de 2020

Bulk Update Cosmosdb



En algunas ocasiones ocupamos actualizar una serie de documentos de manera fácil y rápida. Para evitar perder tiempo se puede hacer todos de una vez. La forma más simple que encontré fue usando un procedimiento almacenado utilizando javascript.

La forma de hacer esto es muy fácil. El procedimiento almacenado recibe un SQL con la búsqueda de los datos o documentos que deseamos actualizar. El procedimiento almacenado ejecutar el query y encuentra los documentos que deseamos actualizar. Con un simple ciclo recorremos los documentos encontrados y vamos actualizando uno por uno.

Vamos a ver como es el javascript



Para este Script se puede agregar más campos o propiedades que se quieren actualizar. Nada mas tenemos que guardar el SP y ejecutarlo.

Etiquetas: ,

viernes, 1 de mayo de 2020

Java - Hilos Sincronizados


Existen varias formas en las que podemos sincronizar los hilos en Java y poder logar que los datos generados estén correctos. La idea de sincronizar los hilos es que estos puedan utilizar los recursos compartidos de una forma ordenada y correcta.

Para este ejemplo utilizaremos ReentrantLock como objeto para bloquear los accesos ordenados de los hilos.

Lo que vamos hacer es un ejemplo muy simple que nos permite ejecutar dos hilos. Cada uno de los hilos va a restar números de una sola variable. Si esto lo hacemos sin la sincronización los resultados pueden ser erróneos. Por lo que vamos a sincronizarlos.

Lo primero que debemos hacer es crear un proyecto. Dentro de este proyecto de java vamos a crear una clase llamada Utils. Esta clase solo va a tener una variable estática que nos permite almacenar en momería un monto. El monto que utilizaremos es de 100.

Ahora lo que tenemos que agregar es una clase llamada SumThread. Dentro de esta clase agregaremos el código de bloqueo y la operación para restar las cantidades a la variable total.

Dentro del método run creamos un ciclo que recorre un arreglo llamado numbers, el cual contiene 3 números que son los que se restaran al valor total de 100.

Como podemos observar en el método run antes de hacer cualquier operación sobre la variable que deseamos proteger con la sincronización hacemos uso de un objeto llamado lock. Este objeto lock lo inicializamos en el Main y lo pasamos por medio del constructor de la clase. Este objeto cuanta con un método llamado lock que nos permite bloquear los recursos hasta que ya no estén en uso. (esto lo podemos ver en la línea 23)

El objeto lock es declarado en la línea 9 y para que este pueda funcionar correctamente lo tenemos que asignar en la línea 14 dentro del constructor de la clase usando el objeto lock que viene de la línea 12.

Todo el código que se encuentra entre la línea 24 y 31 son las operaciones que deseamos realizar sobre la variable total.

Cuando terminamos de utilizar la variable estática total debemos liberar el recurso utilizando el método unlock. De esta manera podemos permitir otros hilos utilizar esta variable.  (Esto lo podemos ver en la línea 34)

Ahora en la clase Main vamos a poner a correr nuestra aplicación. Lo primero es crear el objeto lock que vamos a pasar a los hilos (Esto está en la línea 15). Este objeto es de tipo ReentrantLock que viene del paquete concurrent de java (esto lo podemos ver en la línea 3).

Cada vez que inicializamos un hilo debemos pasar el objeto lock como podemos observar en la línea 19 y 20.

Ejemplo



Etiquetas: , , , ,