Entradas

IA: Algoritmos genéticos y computación evolutiva.

Imagen
Puedes leer mi artículo original en: https://medium.com/@FerCortesF/gen%C3%A9tica-y-computaci%C3%B3n-qu%C3%A9-son-los-algoritmos-gen%C3%A9ticos-208e0e91bb86 

Existe un tipo de computación que basa su forma de trabajar en analogías con sistemas biológicos. ¿Si la naturaleza tiene mecanismos para resolver problemas, por qué no inspirarnos en ellos? A este tipo de computación, inspirada en lo biológico, la denominamos: computación bio-inspirada. La forma en la que la naturaleza ha llegado a resolver los problemas ha sido mediante la evolución biológica, la cual posee unos mecanismos muy potentes, que son los responsables de la biodevirsidad en todos los niveles. Por lo tanto, era cuestión de tiempo aplicar esto a la computación para la resolución de problemas.


Por lo tanto tiene sentido aprovechar los mecanismos de la evolución, de una forma simplificada, para resolver problemas. Como una gran simplificación, la naturaleza se encarga de optimizar individuos a su entorno natural y esta op…

Empate técnico: React vs Angular 2

Lo primero que hay que tener claro es lo siguiente: React de por sí NO es un framework y Angular 2 SÍ. Pero, entonces, ¿por qué compararlos? son dos formas de trabajar y de hallar soluciones con un nexo en común: un modelo de interfaces basado en componentes.

NOTA: Este artículo lo publiqué originalmente en: https://medium.com/@FerCortesF/el-empate-en-las-caracter%C3%ADsticas-de-react-y-angular-2-c18f9c0c9247
Comodidad vs Libertad Para mí, este punto es un empate. Angular  2 aporta la comodidad de tener un framework completo que dispone de todas las herramientas necesarias para llevar a cabo una aplicación, permitiendo que te despreocupes de tener que buscar la forma de implementar funcionalidades, lo que hace que todo tengas que hacerlo "a su manera". Mientras que React aporta la flexibilidad y la libertad de seleccionar las herramientas con las que deseas trabajar, aumentando así la carga de decisiones tecnológicas que tomar. Esta filosofía permite ir reemplazando librerías…

Apache Cordova: Descarga y visualización de PDFs

Imagen
A partir de un caso de uso real me surge la necesidad de descargar PDFs y visualizarlos en una aplicación multiplataforma llevada a cabo con Apache Cordova y AngularJS. Para probar cómo podía llevarlo a cabo realicé un pequeño ejemplo en el que se descarga y almacena un PDF en la aplicación y su visualización.

Puedes descargar el código aquí 

Objetivo Aplicación de Apache Cordova junto con AngularJS que permita descargar al dispositivo un PDF y visualizarlo. Plugins necesariosInAppBrowser https://github.com/apache/cordova-plugin-inappbrowserFile https://github.com/apache/cordova-plugin-fileFileTransfer https://github.com/apache/cordova-plugin-file-transferDevice https://github.com/apache/cordova-plugin-device UtilidadInAppBrowser - Permite la apertura de nuevas ventanas del navegador, incluso permite la llamada al navegador del sistema.File - Rutas del sistema de archivos.FileTransfer - Descarga del PDF.Device - Conocer en qué plataforma estamos trabajando. Compatibilidad Andro…

AngularJS - Introducción: Inyección de dependencias

Imagen
La Inyección de Dependencias(DI - Dependency Injection) es un pilar fundamental de AngularJSy es que la DI se relaciona con la forma en la que se hacen referencias desde el código, pero, ¿qué es? La Inyección de Dependencias es un patrón de diseño orientado a objetos. Este patrón nos dice que los objetos necesarios en una clase serán suministrados y que por tanto no necesitamos que la propia clase cree estos objetos. 
El framework de AngularJS  gestiona la inyección de dependencias, por lo tanto, nuestras dependencias, como por ejemplo de servicios, serán suministradas por AngularJS. Por ello, al crear un componente de AngularJS se deben especificar las dependencias que esperamos y será el propio framework el que nos proporcione los objetos que se solicitan. Por ejemplo, si necesitamos utilizar un servicio en un controlador, al crear el controlador debemos especificar nuestra dependencia del servicio y no intentar crear un objeto del servicio. En este ejemplo se puede ver que el co…

AngularJS - Introducción: Módulos (Modules)

Imagen
En los lenguajes de alto nivel por lo general se tiene una característica muy importante: la modularidad (por ejemplo: namespace en C# o package en Java). Sin embargo, ¿qué ocurre en Javascript con la modularidad? No existe, Javascript mantiene un espacio global para todo. ¿Qué implicaciones tiene esto? Que a medida que crezca nuestro código más sencillo es que se produzca una colisión de nombres de variables, funciones...
AngularJS pretende solucionar los problemas con la modularidad de Javascript. Para ello AngularJS implementa el concepto de módulos, permitiendo la asociación de recursos a cada uno de los módulos. De esta forma, el framework nos proporciona una herramienta para poder realizar un división lógica de responsabilidades.
¿Qué es un módulo? Un modulo es un objeto de AngularJS que actúa como contenedor de recursos y partes de la aplicación: Controladores, servicios, filtros, etc. [1]. En la siguiente imagen, obtenida de un vídeo de Dan Wahlin [2], se puede ver qué puede d…

Javascript: Jugando con fechas

A menudo ocurre que al escribir código obviamos ciertas características del lenguaje con el que se trabaja. Más todavía en Javascript dado que tenemos muchos caminos diferentes para llegar a un punto, por ejemplo, definiendo funciones[1]. En estos casos cada uno tiene sus manías para determinadas situaciones, pero al hacerlo podemos obviar ciertas especificaciones o comportamientos del lenguaje.
Debido a esto, el otro día me encontré con un problema en Javascript en el cuál se encontraban fechas, que no se habían modificado, con la fecha 1/1/1970. Las fechas venían en String por lo que era necesario transformarlas a objetos Date. Tras mucho depurar llegué a ver que en un punto (una directiva de AngularJS para fechas) estaba creando el objeto fecha de la siguiente forma: "new Date(fchEnString)" ¿Problema? Que no se comprobaba si el parámetro era null, aunque sí que existía una comprobación posterior acerca de si el objeto creado era una fecha válida.Sin embargo,existían caso…

AngularJS - Introducción: Servicios

La idea de AngularJS es mantener los controladores para el enlace de datos y reducir su carga lógica, es decir, AngularJS pretende separar responsabilidades. Por lo tanto, los encargados de tareas comunes y de la mayor parte de nuestra lógica de negocio con los datos serán los servicios. Formalmente, los servicios son objetos singleton que realizan tareas comunes a varias partes del sistema.
Esto se puede ver fácilmente con un ejemplo. Necesitamos obtener información mediante una petición HTTP. La petición podría realizarse desde el controlador, sin embargo, esto consigue un código excesivamente acoplado y sin ninguna separación entre responsabilidades. Si la petición HTTP la sacamos del controlador y la encapsulamos en un servicio habremos conseguido separar las responsabilidades. Es más, si deseamos realizar la misma petición desde otro lugar de la aplicación simplemente debemos utilizar el servicio que hemos creado.

En el siguiente ejemplo se puede ver un servicio que está siendo …