viernes, 30 de abril de 2021

Desarrollar un Crawler simple con Python

 


Para poder desarrollar el Crawler con Python lo primero que debemos hacer es instalar la librería llamada scrapy. Esta librería la podemos instalar usando pip. Con esta librería ya instalada vamos a crear un documento de Python llamado simpleCrawler.py

Dentro de este documento vamos a crear una clase llamada Crawler 

import scrapy

class Crawler(scrapy.Spider):
    name = 'SimpleCrawler'
    start_urls = ['https://crawler-test.com/']

    def parse(self, response):

        links = response.xpath("//a")
        for link in links:
            link = link.xpath("@href").extract()
            print(link)
            yield

Como podemos observar lo primero que vamos tener es el import de la librería scrapy luego vamos a heredar a la clase Crawler scrapy.Spider.

En este caso el código es muy simple. Le vamos a dar un nombre al crawler con la variable name y luego le pasamos el URL que deseamos escanear con la variable start_urls.

Luego definimos una función que se llama parse que espera como parámetro el response de la carga del url.

Como podemos observar la variable links contiene todos los elementos de tipo anchor de la página que escaneamos.

Después de esto dentro del ciclo vamos encontrando cada uno de los Urls que tiene el sitio web y lo imprimimos para mostrarlo en el console.

Para poder ver el resultado debemos correr el siguiente comando scrapy runspider simpleCrawler.py

Esto nos da como resultado



Etiquetas: , , , ,

sábado, 17 de abril de 2021

Bootstrapstudio

 


A la hora de hacer una aplicación existen diferentes componentes los cuales deben de ser de mucha calidad para que nuestras apps funcionen de la mejor manera. Siempre prestamos mucha atención a el diseño de la base de datos, la arquitectura de nuestras aplicaciones, etc. Y creo que todos los programadores sabemos lo importante que es el desarrollo de la interfaz gráfica.

Al final los usuarios lo único que saben y ven es la interfaz gráfica. Claro que esperan que la app sea rápida y que funcione de manera adecuada, pero uno de los aspectos más importante es que sea muy amigable con el usuario. Esto es un factor clave.

Muchos programadores no somos realmente buenos a la hora de hacer las interfaces graficas y requerimos de ayuda de diseñadores gráficos que nos brinden las ideas más modernas y una experiencia de usuario única para nuestras apps.

Puede que alguno recuerde lo que era crear interfaces de usuario desde cero usando aplicaciones de drag & drop que nos permitía de manera visual crear interfaces rápidamente. Bueno esta herramienta Boostrapstudio nos permite hacer esto.

Me parece una herramienta increíble ya que además de permitirnos la posibilidad de crear interfaces de manera visual también tiene una serie de templates o estructuras predeterminadas que podemos usar para ir construyendo nuestra aplicación.

Otra de los aspectos positivas que pude encontrar es que es muy amigable y su interfaz es sumamente fácil de usar. Tiene herramientas para ir acomodando de manera visual todos los elementos y esto genera el HTML y el css por nosotros. Pero no se limita a únicamente a esta tarea, ya que cuanta con herramientas para generar Minify de los html y javascript.

Tiene opciones para ir desarrollando componentes de SEO y puede ayudarnos a genere SASS si es que lo deseamos. Los cambios se pueden ir guardando con forme progresa el desarrollo de nuestra aplicación. Hoy en día que podemos hacer aplicaciones HTML que pueden correr como desktop, web y móviles nos da una gran facilidad para la creación de interfaces.

Cuando vamos desarrollando nuestra aplicación podemos ir viendo cómo va quedando la versión de diferentes tamaños, ya que se crea una versión responsive de nuestra app.

Esta herramienta tiene integrado Boostrap y Font awesome lo que nos permite ir agregando iconos, imágenes y los diferentes componentes de boostrap en nuestra app.

En el sitio web podemos encontrar muchos tutoriales para ver cómo utilizar la herramienta de una forma correcta y simple. además de un área donde explica todas las configuraciones y herramientas con las que cuenta la herramienta.

BoostrapStudio cuenta con dos licencias una estándar que cuesta $39 con la que se puede obtener la versión gratis por un año y la otra licencia que es LifeTime que cuesta $69 con la que se puede obtener las actualizaciones de por vida.

Personalmente me parece una excelente herramienta si estamos trabajando en el desarrollo de interfaces graficas. Se puede usar un demo gratuito en la pagina que demuestra como funciona esta herramienta. Para los que no somos tan expertos en el desarrollo gráficos nos permitirá hacer interfaces profesionales mucho mas fácil.

BoostrapStudio

Etiquetas: , , , ,

miércoles, 10 de marzo de 2021

GraphQL


Es una nueva forma para consultar datos a trabajes de APIs. Hace unos días me toco trabajar con un API que trabaja con esta nueva forma, al inicio fue un poco complicado, pero después de la implementación del cliente las cosa se hacen mucho más simple.

Esta tecnología le da la oportunidad al usuario de controlar mejor los resultados que espera ya que se pueden hacer queries o consultas que se envían por medio de la petición del http donde se envía justamente lo que queremos y las columnas con los datos que esperamos.

Esto permite que por medio de un solo endpoint o conexión del API podemos realizar muchas consultas diferentes que se adapten a la necesidad del usuario en lugar de los resultados estándares que usualmente estamos esperando. Con una implementación de un API un poco más tradicional se tienen que hacer muchos tipos de peticiones para cada uno de los tipos de datos que se desean.

Otra razón muy interesante para utilizar esta tecnología es que podemos ir cambiando nuestros APIs de una forma más simple sin tener que ir creando versiones. Ya que al final el usuario es quien decide que datos quiere en su resultado y además la consulta que quiere pedir.

Esta tecnología fue desarrollada por Facebook para utilizarlos de manera interna en su entorno. Con el tiempo ha ido ganando terreno y otras empresas lo han estado desarrollando. GraphQL esta disponible para ser desarrollado con muchos diferentes lenguajes de programación.

Además, existe mucha documentación con la que podemos aprender como usarlo y cómo implementarlo para nuestros servicios.

El query y los datos que deseamos enviar se escriben en algo muy similar a JSON y este es el que va adaptando los datos que el resultado va generando, al final vamos a tener un resultado de JSON basado en nuestras consultas.

Vamos a tener una organización de tipos que nos permite ir construyendo la consulta y de esta forma evitar el uso de múltiples endpoints. Lo que hace mucho más simple la construcción de nuestros APIs y la implementación para los usuarios.

Podemos encontrar más información aquí.


Etiquetas: , , ,

domingo, 17 de enero de 2021

¿Qué es Flutter?

 


Flutter es un software de desarrollado para crear interfaces graficas. Este es open-source y esta desarrollado por Google. Permite hacer interfaces para diferentes sistemas operativos. Inicialmente fue desarrollado para móviles lo cual soportaba Android y iOs. Actualmente también se pueden desarrollar interfaces para Windows, Linux, Mac y web.

Flutter utiliza una serie de componentes gráficos que permite crear interfaces de muy alta calidad para los diferentes dispositivos. Permite el desarrollo de interfaces nativas para las diferentes plataformas donde se puede correr.

Este kit de desarrollo de software utiliza Dart como lenguaje de desarrollo. El cual es muy fácil de aprender si vienes de lenguajes como Java, C++ o C#. La curva de aprendizaje realmente no es muy grande, después de instalarle y ver un poco la documentación uno puede rápidamente trabajar con este nuevo lenguaje.

Una gran ventaja que tiene es que su rendimiento es de una aplicación nativa en las diferentes plataformas. Por lo que se pueden hacer aplicaciones de mucha calidad de manera rápida. Además, es independiente de IDE por lo que podemos seleccionar con cual deseamos trabajar en una lista de opciones con las que contamos.

Yo me di a la tarea de crear una app usando Flutter en Android Studio. Esta app este hecho solo para Android y iOs. Lo interesantes es que tiene un solo código base para ambas aplicaciones. Algunas pequeñas configuraciones se pueden hacer en cada app (Android o iOs) pero realmente es lo mínimo. El framework se encarga de construir y compilar cada aplicación desde el código de Dart que uno esta desarrollando.

Además, con el framwork de Flutter ya se cuanta con una gran cantidad de iconos y diferentes componentes gráficos que podemos usar sin tener que instalar ninguna librería. Ya el framework cuanta con todo esto para hacer el desarrollo más simple.

Cuenta con una gran cantidad de widgets que nos permiten hacer cualquier cosa que necesitamos en nuestras aplicaciones ya sea para móviles como para otras plataformas. De momento no he tratado de hacer una aplicación para desktop, pero me imagino que no hay mucha dificultad para pasar la app que tengo a cualquier otra plataforma.

La documentación con la que cuenta Flutter también es muy extensa por lo que no tendríamos dificultad para poder iniciar a trabajar con este kit de desarrollo. La documentación explica el flujo de desarrollo, los diferentes componentes y como poder publicar las aplicaciones que deseamos enviar a Google Play o Apps Store.

Lo único que debemos saber es que para publicar la app para iOs se requiere una Mac con Xcode para poder generar el ejecutable y subirlo al App Store. En el caso de Android ocupamos instalar el Android SDK.

En general me parece que es una excelente herramienta para poder desarrollar aplicaciones móviles. En algún momento cerca estaré tratando de desarrollar aplicaciones web o desktop para ver que tal la experiencia. Me gusta mucho lo fácil que es el desarrollo con Dart y lo fácil que es crear aplicaciones nativas para diferentes plataformas de manera muy fácil.

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

lunes, 24 de agosto de 2020

Visual Studio Code y Python

 

Python es un lenguaje de programación muy popular hoy en día y la verdad es que podemos programar casi que, en cualquier IDE o editor de texto, pero porque no hacerlo fácil y de una manera que nos beneficie. Bueno usando Visual Studio Code que también hoy en día es una herramienta muy popular lo podemos lograr ya que además cuanta con librerías que nos ayudan a la hora de programar Python.

Primero debemos instalar Python. Si no lo tenemos o no sabemos cómo hacerlo podemos ver este post.

Ahora lo que tenemos que hacer es descargar VS Code desde este sitio web

Cuando tenemos estos dos instalados en nuestra maquina tenemos que ir a la barra de herramientas al izquierdo.


Se tiene que buscar Python. Se tiene que instalar la primera que nos sale, la cual es de Microsoft.


Luego buscamos la extensión de anaconda (si queremos usar anaconda)

Y finalmente instalamos Visual Studio Intellicode


Esta ultima nos ayuda con nuestro código de Python. Nos da ayudas y nos permite autocompletar nuestro código.

Ya con todo esto instalado se tiene que seleccionar el intérprete de Python que instalamos


Para seleccionar el interprete se tiene que ir a la línea de comandos que tenemos en la parte superior como se puede observar en la imagen. La podemos abrir dando clic sobre la esquina inferior izquierda en VS Code o con “control shift p” luego se escribe Python interpreter y nos da la opción para selección la ubicación donde esta instalado nuestro interprete de Python.

De esta manera podemos iniciar a escribir código de Python con VSCode

 

Etiquetas: , , , ,

jueves, 28 de mayo de 2020

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

sábado, 20 de julio de 2019

Una estrategia para desarrollar nuestra app


Hace algún tiempo vimos esta estrategia para desarrollar aplicaciones con el que podemos ahorrar tiempo y dinero, la cual tiene mucho sentido seguir cuanto uno esta iniciando con alguna idea.


Como vemos la idea es iniciar desarrollando nuestra aplicación con html o hacer una aplicación web. Con esto podemos de manera fácil distribuir nuestra app en cualquier dispositivo y aprovechando las grandes ventajas que nos da el html.

Con un solo código base podemos hacer que nuestra app que puede ser usada en diferentes sistemas operativos y diferentes tamaños.  Cuando queremos hacer cambios no tenemos que esperar que los usuarios realicen las actualizaciones ya que esto ocurre en nuestro servidor.

Con el uso de html podemos hacer casi cualquier cosa que deseamos, pero si ya se requiere por alguna razón crear las aplicaciones móviles nuestro segundo paso es pensar en aplicaciones hibridas.

Algunos desarrolladores se quejan un poco de posibles problemas de rendimiento que pueden dar las aplicaciones hibridas, pero tenemos muchas ventajas y si contamos con poco tiempo y presupuesto este es el camino correcto. Una de las grandes ventajas es que tenemos un solo código base y contamos con algunas características extras que no podríamos tener con la primera etapa de html. Podemos usar las apis para controlar características de los dispositivos móviles. Otro detalle importante es que los desarrolladores no necesitan conocimientos en los diferentes lenguajes y plataformas para desarrollar las apps.

Ahora en la ultima etapa de nuestro desarrollo ya tenemos que analizar si se requieren cosas muy especificas para cada una de las plataformas que deseamos desarrollar y las implementaciones hibridas no nos permiten usar.

En estos casos ya tendríamos códigos bases diferentes y posiblemente equipos de desarrollo diferentes o se requiere de personal con conocimientos en estos lenguajes de programación con lo que podría aumentar los costos y tiempo en corregir problemas, crear nuevas características, que las apps sean iguales para todas las plataformas, etc.

Lo más fácil es lanzar una app web que nos permita también medir nuestro publico y ver la evolución de nuestra app con esto tomar decisiones si vale la pena continuar invirtiendo dinero en aplicaciones más especializadas para móviles.

Con el paso del tiempo se tiene que ver qué características se ocupan que no se puedan desarrollar con una aplicación web que requiere de nuestro tiempo para desarrollar aplicaciones más específicas para móviles.

¿Quieres aprender java y C#?

Etiquetas: , , , , , , , , ,

jueves, 18 de julio de 2019

Algunos Frameworks para desarrollo móvil


Existen muchas opciones que tenemos disponibles hoy en día para desarrollar aplicaciones móviles. De las cuales todas nos dan formas diferentes de solucionar lo que estamos buscando. La estrategia es muy similar, pero tienen algunas características diferentes.

Cuando tenemos que tomar la decisión de cual framework debemos usar lo primero que debemos buscar es a lo que estamos mas acostumbrados a trabajar. Realmente todo depende de que deseamos hacer y con cual equipo de trabajo lo queremos hacer.

Actualmente contamos con iOS y Android como los principales sistemas operativos en el mercado, pero con una cantidad de formas y frameworks para el desarrollo increíble donde cada uno dice que es el mejor por a o b razones.

En este momento yo no voy a tratar de indicar cual es mejor que otra ya que como mencione anterior mente depende de muchas variables para poder decir cual es mejor o peor. Pero si dar una lista que con las que se podría iniciar una investigación y ver cual se ajusta mejor a cada equipo de trabajo.

Primero tenemos una lista basados en Java

Oracle MAF: Podemos escribir nuestro código en Java usando JDeveloper. Es muy fácil de usar y podemos usarlo para compilar en iOS y Android

Gluon: Se escribe con Java y podemos usarlo con diferentes IDEs como por ejemplo con Netbeans. También compila iOS y Android

Codenameone: Se escribe con Java y tiene una particularidad este se debe subir a los servidores de codenameone para compilar nuestra app. Que se puede compilar para iOS y Android.

Itel Multi-OS: Se escribe el código con Android, se puede usar el Android Studio y este también puede compilar a iOS.

Xamarin: Se escribe el código con C# y se puede compilar para iOS y Android.

Apache Cordova: Se usa Javascript para escribir el código y se puede compilar para iOS y Android

IONIC: Se escribe el código con Javascript y se puede compilar para iOS y Android

Flutter: Este es de Google y el código se escribe con Dark. Crea apps para iOS y Android

Esto es para mencionar algunas, pero existen muchas más opciones para escribir nuestras apps. Lo importante es trabajar con las que nos sintamos más familiarizados y los que tengan los frameworks que se ajusten más a nuestro equipo de desarrollo.

Podríamos usar esta técnica https://compuarticulos.blogspot.com/2019/02/como-seleccionar-el-lenguaje-o-proyecto.html para seleccionar nuestro ambiente de desarrollo móvil.

Etiquetas: , , , , , , , , , , , , , , , ,

martes, 16 de julio de 2019

Crear el patrón de diseño master-slave con Azure y SQLServer


La nube tiene una gran capacidad para aumentar o disminuir los recursos dependiendo de cuanto necesiten nuestras aplicaciones y nos da la libertad de configurar todo a nuestro gusto. Tanto las bases de datos como las aplicaciones, máquinas virtuales, etc.

Hace un tiempo tenía que desarrollar una aplicación que requería de alto rendimiento y una distribución geográfica en América, Asia y Europa. Con Azure esto lo podemos hacer de forma fácil.
Con este patrón de diseño de base de datos podemos tener una base de datos master que podemos usar para escribir y actualizar los datos que requerimos y otros slaves que podemos usar para lectura. 

En el caso de mi aplicación la parte de lectura era lo más demandante por lo tanto se dejaron 4 bases de datos para esta tarea y de esta manera se aumento el tiempo de respuesta de nuestra aplicación.

Primero se requiere tener una cuenta en Azure. Después debemos crear un servidor de SQL en alguna región que las tenemos disponibles en Azure.

Con la base el servidor listo creamos una nuestra base de datos. Lo siguiente es crear los servidores en las otras regiones que se necesiten. Ya con esto listo podemos iniciar la sincronización de nuestras bases de datos con un simple clic.

Para poder ver el menú de sonorización vamos a ir a la base de datos que deseamos usar como principal en Azure.

vamos a dar clic al menú de Geo-Replication.

La selección de las bases de datos para lectura es por medio de un clic

Como vemos en la imagen anterior tenemos una base de datos que es la primaria o master con la cual podemos escribir/actualizar datos. Y luego tenemos las secundarias que las podemos usar para leer y las tenemos en diferentes regiones.

En el menú de “Target Regions” es donde podemos seleccionar a cuáles regiones queremos replicar nuestra base de datos.

A partir de esto punto ya tenemos todo listo para que nuestros datos estén disponibles en diferentes regiones en el mundo.



Etiquetas: , , , , , ,

viernes, 12 de julio de 2019

Microservices


Esto no es un concepto nuevo, pero continúa siendo muy poderoso para poder desarrollar aplicaciones. La idea radica en separar las funciones por dominio, es decir, crear procesos que estén relacionados como por ejemplo la autenticación de usuarios. Vamos a tener una base de datos para los usuarios con todo lo necesario para autenticarlo al sistema, además de un endpoint (API) que nos permite consultar y hacer las operaciones necesarias para esta tarea.


Como vemos en este ejemplo separamos las tareas y datos en dominios para poder agruparlas por sus características similares o iguales. Si queremos trabajar cien por ciento como microservicios debemos hacer una base de datos separada para cada uno de los servicios también. Ahora yo he visto algunas empresas que desarrollan una única base de datos y crean APIs para cada una de las tareas.

Esta implementación tiene muchas ventajas a la hora de desarrollar nuestras aplicaciones
  • Los tiempos de publicación de las aplicaciones son menores
  • Se pueden aislar los errores más fácilmente y se puede encontrar directamente en el servicio donde está ocurriendo
  • La publicación de un servicio no afecta a los otros servicios
  • Los tamaños de las aplicaciones son mucho más pequeñas.
  • No tenemos que publicar todos los servicios a la vez
  • Se mantiene una total independencia del desarrollo por cada dominio
  • Cada servicio podría ser desarrollado por diferentes equipos y diferentes lenguajes
  • Con los cambios tan acelerados de la tecnología esto nos permite actualizar los servicios poco a poco.
  • Cualquier cambio requerido se hace directamente en el servicio especifico


Algunas desventajas que podemos tener
  • Dependiendo donde y como se instalen los servicios los costos pueden aumentar
  • Con el crecimiento de servicios puede aumentar la dificultad de administración de los mismos.
  • Dependiendo de la cantidad de servicios hacer pruebas podría ser complicado
  • Dependiendo de la cantidad de servicios podríamos tener problemas con rendimiento de la aplicación ya que tendría que llamar muchos servicios para hacer una tarea.
  • La comunicación entre servicios puede ser compleja y la integración de los datos.


Desde mi punto de vista la implementación de microservicios es muy útil y facilita mucho la distribución de las aplicaciones. Se podrían enfrentar retos con la integración de datos y la comunicación entre los servicios. De todas maneras, esto no es algo que todas las empresas deben de seguir todo depende del tipo de aplicación que se este desarrollando y de la infraestructura que se cuente. Por otro lado, se pueden hacer híbridos entre arquitecturas para logar optimizar recursos, tiempo de desarrollo, testing, etc. y hacer lo que realmente es necesario para cada empresa.  

Etiquetas: , ,

jueves, 4 de julio de 2019

Trabajo colaborativo con Visual Studio 2019


Ya era necesario una herramienta tan interesante como el live share de Visual Studio 2019. Es simplemente increíble.

Esta herramienta nos permite compartir nuestra solución entre compañeros de manera remota y de una manera sumamente simple. Esta herramienta nos permite compartir nuestra solución, pero no es nada más enviar el código a otros, esto nos permite trabajar en la misma solución al mismo tiempo. 

Podemos ver los cambios mientras están ocurriendo y quien esta haciendo los cambios.

Hace unos días lo intentamos entre 4 compañeros y funciono muy bien sin problemas. Y cuando uno corre la solución también se ejecuta donde los otros que están viendo la solución.

Para poder usar esta herramienta ocupamos Visual Studio 2019 o Visual Studio Code. En mi caso usamos Visual Studio 2019.

En la esquina superior derecha vamos a ver la nueva opción

Debemos de dar clic al botón y con esto vamos a tener una serie de opciones.

Si no les sale de una vez la siguiente pantalla pueden dar clic al botón que dice More Info en el siguiente banner.


Ahora si para poder compartir nuestra solución debemos compartir este link con las personas que van a ver mi solución. La otra opción es directamente sobre el banner dar clic al botón de Copy Again. Pasamos el link y ya casi estamos listos para compartir nuestra solución.

Ahora si la persona que va a trabajar con nosotros debe abrir en el browser el link con lo que va a poder ver una pantalla como esta 

Y en este punto debe seleccionar si quiere abrir la solución con Visual Studio Code o con Visual Studio 2019.

De esta manera se abre la solución a las personas que van a colaborar con mi proyecto.

Finalmente, para terminar la sesión solamente vamos nuevamente al menú de la parte superior de la derecha y damos clic en End Live Share Session



Etiquetas: , , , ,

domingo, 23 de septiembre de 2018

Como la globalización ayuda al crecimiento del desarrollo de software nacional y se puede posicionar en todo el mundo en cuestión de minutos


INTRODUCCIÓN
La tecnología se ha convertido en un factor importante en las empresas, donde ahora todas depende de esto para poder brindar sus productos o servicios. Cosas como páginas en Facebook, páginas web, sistema de producción, etc., son de uso diario en prácticamente cualquier negocio actualmente.

La globalización hace que las empresas puedan usar recursos de otros países para obtener beneficios con la distribución de los éstos en diferentes lugares del mundo.

En lo personal, tengo alrededor de 10 años de experiencia trabajando con desarrollo de software para empresas posicionadas en todo el mundo, lo cual no es algo nuevo, pero la facilidad de exportar o mover productos de software hoy en día es mayor que nunca. 

En nuestro país muchas veces podemos percibir que a nivel tecnológico estamos un poco más atrás que otros países del mundo, pero es de rescatar que esto no pasa con el desarrollo de software. Por ejemplo, herramientas nuevas y las presentaciones de éstas pueden ser descargadas el mismo momento en el que son publicadas a nivel global. Mientras algún administrador de desarrollo está presentando la nueva versión de alguna herramienta de software en Estados Unidos, ésta se puede estar viendo y descargando en tiempo real en Costa Rica o cualquier otra parte del mundo.

Pero esto no termina aquí, cuando se habla propiamente del desarrollo de aplicaciones gracias a las nuevas plataformas tecnológicas con las que se cuenta, una persona puede hacer un requerimiento en cualquier momento y desde cualquier lugar del mundo y trabajarla en otra parte de manera remota. En el momento en que esto está listo, es sólo cuestión de minutos para tener este requerimiento funcionando en todo el mundo.

DISTRIBUCIÓN DE EQUIPOS
Gracias a los avances en software es posible tener equipos de desarrollo distribuidos en cualquier parte del mundo sin tener contacto físico entre los participantes y todos pueden trabajar en equipo como si estuvieran ubicados en el mismo lugar.

Algunas empresas tienen personas en diferentes zonas horarias para poder tener un soporte 24/7 de sus sistemas y de esta manera brindar mejores servicios a los usuarios que también pueden estar distribuidos por el mundo.

Así también, barreras como el idioma para el desarrollo de software ya no existen. Se puede diseñar y distribuir cualquier sistema en muchos idiomas de manera simple y rápida. Incluso, se tienen plataformas como las de Google que pueden traducir cualquier página web en segundos a cualquier idioma.

INTERNET
El internet forma parte vital de este proceso y por eso es importante el soporte de las naciones en el mejoramiento de las velocidades y estabilidad del mismo.

Como ha sido posible apreciar en Costa Rica, las velocidades del internet han tendido al aumento constante, mientras que los precios han ido disminuyendo.

Lo anterior, brinda la posibilidad a las personas de trabajar desde sus casas o cualquier otro lugar.

Las empresas realmente no requieren de instalaciones físicas para poder contratar servicios de desarrollo de software en cualquier lugar del mundo.

En nuestro país también se ve el creciente mercado para las personas que están en esta área de trabajo.

COSTA RICA Y EL DESARROLLO DE SOFTWARE
El desarrollo de software del país ha crecido lo suficiente para decir que en el año 2002 representaba el 0,28% del PIB de Costa Rica mientras que para el año 2012, diez años después, representó el 1,31%.

“Hoy día, la economía de Costa Rica genera más servicios de software (como paquetes informáticos, apps y animaciones digitales) que exportaciones de café” (Cordero, 2013)
El crecimiento de software como servicio está tomando cada vez más poder y convirtiéndose en un servicio muy importante para nuestra sociedad.

TECNOLOGÍAS DE PUNTA
Con la globalización y el internet tenemos acceso a casi todas las tecnologías que están saliendo en el mercado para desarrollo de sistemas. Por ejemplo, Google con su framework para aplicaciones web llamado Angular permite que cualquier persona en el mundo tenga acceso a descargar las actualizaciones que realiza Google cada 6 meses para mantener este lenguaje de computadoras actualizado, con una característica muy importante, que es gratuito para cualquier empresa o persona.

Siguiendo con el ejemplo anterior, lo que se debe esperar para estar con la tecnología de punta es alrededor de 10 minutos mientras se descarga, las actualizaciones en nuestra máquina.

Según informes del periódico La Nación (Cordero, 2017), 37 empresas costarricenses tienen presencia fuera de este país, encontradas en 79 sedes alrededor del mundo. Para el 2014, Camtic contabilizaba 897 empresas relacionadas al sector digital.

Existen muchas plataformas que permiten la compra de servicios modernos desde cualquier parte del mundo. En el mercado podemos ver tres grandes empresas compitiendo por brindar los mejores servicios para empresas y personas a nivel global, con lo que podemos mencionar a Microsoft con su nube llamada Azure, Amazon con su nube llamada AWS y Google con su servicio de nube.

Microsoft Azure cuenta con servicios para las empresas de cualquier tamaño, sean tanto empresas pequeñas, como medianas y grandes. Esta nube ofrece servicios de alta tecnología para empresas de cualquier tipo en el mundo.

Amazon Web Services también cuenta con una gran serie de servicios para pequeñas, medianas y grandes empresas, brindando tecnologías de calidad y modernas a tan sólo un clic en cualquier parte del mundo.

Google Cloud ofrece servicios para pequeña, mediana y grande empresas que demandan alta tecnología.

Con esto, tenemos tres empresas que brindan plataformas para empresas o desarrolladores de todo el mundo con un clic de distancia. Ofrecen diferentes servicios y precios que se van ajustando a cada una de las necesidades.

Lo anterior permite que cualquier empresa nacional o extranjera tenga la posibilidad de contar con los más altos estándares y plataformas de desarrollo del mundo, sin quedar ni un paso atrás ante otros países, lo cual es muy atractivo sobre todo considerando que muchas naciones compiten en desventajas en otras áreas cuando requieren de materias primas o algún otro tipo de insumo. Para el desarrollo de software podemos tener los insumos (lenguajes, plataformas, etc.) necesarios en el momento requerido.

Con el avance tan rápido tecnológico, todas las empresas y personas pueden estar al día con las tecnologías necesarias para poder innovar y crear las herramientas para que sus negocios sean exitosos.

Con estas tres plataformas tenemos la posibilidad de brindar los sistemas a nivel global desde cualquier ubicación. Se cuenta con centros de datos en las regiones más importantes del mundo para poder brindar soluciones rápidas en cualquier lugar y todo desde un clic de distancia.

Esto facilita el desarrollo y publicación de software a cualquier parte del mundo. Desde Costa Rica podemos publicar software que puede estar siendo utilizando digamos en China. Por ejemplo, el desarrollo de aplicaciones móviles, se pueden desarrollar en cualquier lugar y en el momento de ser publicadas en las tiendas éstas pueden ser vistas y utilizadas por cualquier persona.

Podemos tomar como ejemplo la aplicación Flappy Bird. Esto fue desarrollado por un hindú, el cual es un juego que rápidamente se posicionó como uno de los más atractivos en el mercado generando US$50 mil diarios, diseñado para dispositivos Android. Tanto la plataforma como el lenguaje para el desarrollo de este tipo de aplicaciones son gratuitas con una inversión únicamente de $30 para crear una cuenta en Google Play y el tiempo de aprendizaje.

Los costos del desarrollo de software han disminuido, actualmente existe una gran comunidad de software libre que permite el uso de sus herramientas, lenguajes, código, ideas, etc., permitiendo reducir los costos de producción. Actualmente se podría desarrollar con inversiones únicamente en el personal técnico y en las plataformas que estemos utilizando para poner nuestro software disponible.
Las tres nubes que mencionamos anteriormente también ofrecen muchos servicios gratuitos que se pueden usar para iniciar y poner los sistemas a funcionar, ya sea como demos o al inicio del negocio cuando se podría contar con menos recursos económicos. Muchos de los servicios gratuitos son limitados, pero brindan un buen punto de inicio para las empresas.

Las empresas que están trabajando día a día en brindar nuevas y mejores soluciones también están generando contenido para capacitar a los usuarios de estas tecnologías. Estas capacitaciones se pueden encontrar en diferentes formatos como tutoriales de texto, videos, conferencias, etc. Muchas de estas conferencias se pueden seguir por demanda el mismo día que se están presentando, lo que hace que el tiempo de espera para utilizarlas podamos decir que no existe, que es nulo.

Un ejemplo de que ya no existe barreras con el desarrollo de software es cómo la siguiente figura muestra el crecimiento que ha tenido en las exportaciones del país, el cual representaba un 33% de las exportaciones para el 2013. (Brenes 2013).

Esto además quiere decir que el personal costarricense está altamente capacitado para poder trabajar con las tecnologías modernas de desarrollo de software. Costa Rica se está posicionando como un buen socio de negocios para tercerizar servicios. Un 60% de los proyectos que se venden fuera de nuestro país son para el mercado estadounidense, representando así el mayor socio comercial para este sector.

NIVEL DE CONOCIMIENTO
Actualmente está creciendo las personas que quieren y saben cómo desarrollar sistemas de información. En este momento existe muchos entrenamientos, cursos, tutoriales, etc., en línea que permiten a las personas generar conocimiento en las tendencias tecnológicas y desarrollo de software prácticamente para desarrollar cualquier cosa que se requiera. Igualmente, existe mucho entrenamiento formal como en universidades que imparten este tema para que las personas puedan especializarse en este tipo de disciplina.

Muchas personas ya pueden crear sus propios programas o apps para celulares, web, y otros sin tener que asistir a una institución de manera formal para aprender esta disciplina. Sin embargo, día con día se está mejorando las técnicas y esto demanda mayor preparación y conocimiento por lo que las empresas están creando conferencias y certificaciones a nivel global para mejorar a los desarrolladores en diferentes disciplinas que demanda un poco mas de habilidades en el área.

La reducción de las tecnologías para el desarrollo de software tanto en su precio como en los costos de adquirir el conocimiento ayudan a que las personas puedan obtener estas habilidades. Por ejemplo, Microsoft cuenta con una plataforma gratuita especializada en educar a todas las personas que lo desean en las áreas de bases de datos, desarrollo de aplicaciones móviles, juegos y desarrollo de páginas web. Cualquier persona con acceso a internet puede ir a Microsoft Academy y usar sin restricción cualquier curso que desee.

Así también, se tiene empresas como Google y Amazon generando conocimiento y compartiéndolo por todo el mundo para aumentar la capacidad necesaria para crear las tecnologías de mañana.

CONCLUSIONES
El desarrollo de software en nuestro país se ha incrementado de gran manera gracias a las habilidades que los costarricenses han adquirido con el paso del tiempo y el proceso de la globalización. Nuestra apertura por aprender nuevos conocimientos como idiomas, cultura, etc., nos permite salir al mercado global ofreciendo software casi que sin ninguna restricción.

Las nuevas plataformas para el manejo e instalación de software hacen que este mercado sea alcanzable para casi cualquier persona. Vemos que de esto han tomado ventaja muchas empresas y están vendiendo software de alta calidad dentro y fuero del país. Tenemos una gran plataforma de servicios de software que se venden a empresas extranjeras gracias al gran talento del costarricense.

Como vemos, para poder vender un producto de este tipo, lo que requerimos es una computadora e internet y ya estamos listos para desarrollar cualquier producto con las mejores tecnologías del mercado y se puede posicionar en cualquier lugar en cuestión de minutos.

REFERENCIAS
1.        CORDERO SANCHO, MONICA: “Servicios de software en Costa Rica representan el 1,3% de la producción local”. El Financiero, Diciembre, 2013, Disponible en: https://www.elfinancierocr.com/tecnologia/servicios-de-software-en-costa-rica-representan-el-13-de-la-produccion-local/KRWAF4ETORHSPCJIIBMWNIHDEI/story/
2.        CODERO, CARLOS: “37 empresas informáticas ticas tienen sedes fuera de Costa Rica”, La Nación, Noviembre 2017, disponible en: https://www.nacion.com/economia/negocios/37-empresas-informaticas-ticas-tienen-sedes-fuera/H4RDGRVYBZENDJDIF3UXSM57CI/story/
3.        BRENES QUIROS,  CÉSAR AUGUSTO Y MORALES CHAVARRÍA, SERGIO: “Más empresas extranjeras tercerizan servicios con sello tico”. El financiero, Mayo 2013, disponible en: https://www.elfinancierocr.com/negocios/mas-empresas-extranjeras-tercerizan-servicios-con-sello-tico/D6NJOC3PUZCTJM62WULQKIK2MI/story/

Etiquetas: , , , , , ,

lunes, 12 de febrero de 2018

Desarrollando una aplicación con poco presupuesto…

Vamos hacer una lista con algunos recursos en la web que podemos usar para poder desarrollar una aplicación web cuando contamos con poco presupuesto. Ahora existen muchos recursos gratis y de pago para poder poner tus productos web a funcionar. Vamos hacer una lista de opciones eso no quiere decir que son las únicas, pero para la implementación de un sistema es una opción.

Primero vamos a usar Netbeans que es gratuito como nuestro IDE de desarrollo, ya que para todo nuestro backend vamos a usar Java. Con Java vamos a desarrollar los servicios de REST para conectarnos con los datos de la aplicación.

Como base de datos podemos usar MySQL que también tenemos una versión gratis y la podemos montar en amazon aws que nos da 25 GB gratis de espacio para nuestros datos. Se podría usar también DynamoDB en amazon aws que podemos usar también 25GB gratis.

Luego para ejecutar nuestros servicios de Rest podemos usar Azure donde podemos crear 8 sitios gratis en cada zona de Azure. Lo que nos da un buen número de servicios Rest que podríamos crear. También nos proporciona una conexión de HTTPS para cada uno de los sitios web.

Ahora si nos toca hacer la parte grafica de nuestra pagina web. Para esto podemos usar Angular que también es gratis. Como IDE podemos usar Visual Studio Code que es gratis también. Con este podemos desarrollar todo nuestro frontEnd. Podeos usar Bootstrap para agregar algunos componentes y bueno existen muchos templates de css gratis que se pueden usar para crear la página web.

Para crear nuestro sitio web podemos usar FireBase que nos ofrece una opción gratuita para nuestras páginas web y nos ofrece una conexión de HTTPS con un dominio que nosotros compremos.

Existen algunos nombres de dominios gratuitos, pero es mejor comprar alguno con el nombre que deseamos de todas maneras tienen un precio muy económico.

Para manejar nuestras imágenes podemos usar Cloudinary que también nos ofrece 300 000 imágenes y videos de manera gratuita. Además, que tiene un montón de opciones para administrarlas.

Sin olvidar que vamos a necesitar un servidor de correos para poder enviar mensajes desde nuestra aplicación web. Podríamos usar mailjet como nuestro servidor de SMTP que nos permite enviar 6 000 correos por mes.


Existen muchos recursos gratis que podemos usar, pero estos nos dan la oportunidad de iniciar un sistema web sin tener que invertir mucho dinero en las primeras etapas. 

Etiquetas: