Autenticación con correo y contraseña en Ionic con Firebase – Parte 1

Firebase contiene un conjunto de productos, tanto herramientas como infraestructura, que nos permiten desarrollar rápidamente el backend de nuestra aplicación, en otras palabras, es un BaaS (Backend as a Service) construido sobre la infraestructura de Google Cloud. Entre los productos que nos brinda tenemos base de datos de tiempo real, almacenamiento de archivos en la nube, mensajería, reporte de errores, hosting, configuración remota, autenticación, entre otras.

firebase-ionic

Hoy vamos a ver cómo crear una aplicación con Ionic, que utilice el servicio de autenticación de Firebase. Este servicio de autenticación nos brinda varios métodos de autenticación, hoy sólo vamos a utilizar correo electrónico y contraseña.

Seguir leyendo “Autenticación con correo y contraseña en Ionic con Firebase – Parte 1”

Anuncios

Genericidad en Swift

La genericidad es una de las características más poderosa de Swift, como también lo es en otros lenguajes de programación; nos permite definir estructuras de datos de tipo seguro (type-safe) y funciones sin tener que comprometernos con un tipo de dato en específico, aunque podemos definir algunas reglas.

Este tipo de funcionalidad nos permite reutilizar código, sobre todo, algoritmos relacionados al procesamiento de datos.

¿Para qué la genericidad?

Vamos a ver con un ejemplo, qué tipo de problemas la genericidad nos ayuda a resolver.

Supongamos que queremos desarrollar una estructura de datos Pila (Stack) que podamos utilizar con cualquier tipo de datos, la cual va a tener los métodos clásicos, poner un elemento en la pila (push) y extraer un elemento de la pila (pop). Vamos a asumir que Swift no soporta genericidad.

Seguir leyendo “Genericidad en Swift”

Generadores de Ionic 2

Otro comando importante del CLI de Ionic, que no vimos en el primer post, es generate, el cual nos ayuda a crear páginas y servicios para la aplicación.

En este post vamos a utilizar generate para crear un ejemplo de página de inicio de sesión. Para crear el proyecto vamos a utilizar el comando start como vimos en posts anteriores, para ello ejecutamos en la consola:

ionic start --v2 ejemplo tabs

En la consola, entramos en la carpeta “ejemplo”, recien creada por el comando start, y crearemos la página donde vamos a colocar el formulario para iniciar sesión. Vamos a utilizar generate para crear la página, de la siguiente manera:

ionic generate page login

Seguir leyendo “Generadores de Ionic 2”

Cómo utilizar plugins de Cordova en Ionic 2 con Ionic Native

En este post vamos a ver cómo podemos utilizar los plugins de Cordova con Ionic 2. Hemos mencionado varias veces Cordova y que Ionic depende de Cordova para desplegarse de forma nativa, ¿qué quiere decir esto exactamente?

Una de las desventajas de crear aplicaciones web para dispositivos móviles es que, al contrario de las aplicaciones nativas, no tienen acceso a funcionalidades nativas de los dispositivos como por ejemplo, la cámara, el GPS, la galería de fotos, funcionalidades de redes sociales de forma nativa y muchas otras.

Es aquí cuando Cordova viene al rescate. Cordova agarra todo el HTML, CSS, recursos y JavaScript de tu aplicación (en el caso de Ionic 2 sería tu aplicación basada en Angular 2) y lo coloca en un contenedor nativo, dependiendo de la plataforma, este puede ser iOS o Android, y provee un API de JavaScript, con el cual, desde nuestro código de la aplicación podemos acceder a las funcionalidades nativas del dispositivo.

Seguir leyendo “Cómo utilizar plugins de Cordova en Ionic 2 con Ionic Native”

¿Qué pasó con mis “for” estilo C en Swift 3?

Ayer Apple anunció en el WWDC la disponibilidad de Xcode 8 beta para los desarrolladores y con ella Swift 3.

Si has tenido un tiempo de probar algún código escrito con una versión anterior de Swift es probable que hayas encontrado algunos errores inesperados, inesperados si no has estado al tanto de la evolución de Swift por estos meses.

Creo que los errores más comunes que nos vamos a encontrar en código viejo, cuando migremos a Swift 3, son las cosas que iban a marcarse obsoletas para esta versión. Una de ellas es la sintaxis del for estilo C.

for estilo C

Ya desde la versión 2.2 de Swift, Xcode nos venía alertando que esta sintaxis iba a ponerse obsoleta en versiones futuras. Si aún tienes instalado Xcode 7.x puede probarlo en un Playground:

Xcode alertando sobre for estilo C
Xcode alertando sobre for estilo C

Seguir leyendo “¿Qué pasó con mis “for” estilo C en Swift 3?”

Principio Open-Closed en Swift

En este post vamos a ver un ejemplo de diseño que no cumple con el principio Open-Closed y una versión del mismo ejemplo que sí cumple con el principio.

Principio Open-Closed (OCP)

Los principios SOLID son cinco principios básicos del diseño y la programación orientada a objetos, uno de los cuales es el principio Open-Closed

Una descripción más detallada de este principio la pueden encontrar en un artículo de Robert C. Martin “Uncle Bob”, coautor del Manifiesto Ágil, titulado The Open-Closed Principle.

Bertrand Meyer acuñó este principio en 1988 de la siguiente manera:

Software entities (classes, modules, functions, etc.) should be open for extension, but closed for modification.

Y en su artículo, Uncle Bob nos explica que:

Los módulos que cumplen con el principio open-closed tienen dos atributos principales:

  1. Están “abiertos para extensiones” (Open).
    • Esto significa que el comportamiento de un módulo puede ser extendido. Que podemos hacer que un módulo se comporte de nuevas y diferentes maneras a medida en que los requerimientos de la aplicación cambien, o para satisfacer nuevas aplicaciones.
  2. Están “cerrados para modificaciones” (Closed).
    • El código fuente de dicho módulo es inviolable. Nadie está autorizado a cambiar dicho código.

Seguir leyendo “Principio Open-Closed en Swift”

Opcionales en Swift

El otro día un amigo me comentaba que estaba implementando un juego para probar Swift por primera vez y me contaba que estaba teniendo problemas entendiendo algunas cosas de los opcionales (optionals) en Swift. Pensé que era un buen tema para escribir un pequeño post y de paso generar un poco de documentación en Español, lo cual es uno de los principales propósitos de este blog.

Opcionales

Según la documentación de Swift,

Los opcionales se utilizan en situaciones donde el valor puede estar ausente.

Este concepto no existe en Objective-C, en el cual es permitido incluso enviar un mensaje a nil. Lo más cercano a representar ausencia de valor es retornando nil en métodos que de otra manera deberían devolver un objeto, pero esto solo funciona con objetos y no con enumeraciones, estructuras y tipos básicos de C para los cuales generalmente se utiliza NSNotFound para representar ausencia de valor; en dependencia del tipo, algunos desarrolladores también utilizan 0, -1, NSIntegerMax y cosas parecidas.

Seguir leyendo “Opcionales en Swift”

Selector, su evolución en Swift

Antes de ver la evolución de los selectores en Swift, veamos qué es un selector en Objective-C.

Los selectores en Objective-C son del tipo SEL y es la manera mediante la cual podemos identificar/seleccionar un método y luego poder ejecutarlo en un objeto.

Las formas más comunes de obtener un selector son a través de la directiva @selector y la función NSSelectorFromString, veamos como se utilizan ambas:

SEL selector1 = @selector(calcularArea);
SEL selector2 = NSSelectorFromString(@"calcularArea");
SEL selector3 = @selector(avanzar:);
SEL selector4 = NSSelectorFromString(@"avanzar:");

En las líneas 1 y 2 representamos a un método que no tiene argumentos “calcularArea” y en la 3 y 4 representamos a un método con un argumento “avanzar:”.

Seguir leyendo “Selector, su evolución en Swift”

Enumeraciones en Swift

Enumeraciones es otro tema que quería tratar antes de continuar con la serie de tutoriales de Gorilla Rush.

Como seguramente saben de otros lenguajes de programación, una enumeración define un tipo común para un grupo de valores que están relacionados entre sí.

Sintaxis

La sintaxis para definir una enumeración es:

El siguiente ejemplo, muestra una enumeración que agrupa las posiciones en el campo de béisbol:

Como pudieron ver, se utiliza la palabra clave case para definir los valores de la enumeración, aunque de igual manera pueden colocar múltiples valores separados por coma en una misma línea como se muestra en el siguiente ejemplo, donde definimos una enumeración con los días de la semana:

En otros lenguajes de programación se les asigna a cada valor de la enumeración un valor entero, en Swift las enumeraciones son más flexibles ya que no tienes que obligatoriamente proporcionar un valor a los valores de la enumeración y si decides hacerlo, este valor puede ser una cadena, un caracter, entero o punto flotante; este valor en Swift se conoce como valor “raw”.

Seguir leyendo “Enumeraciones en Swift”

Protocolos en Swift (básico)

Antes de continuar con la serie de tutoriales sobre como crear un juego como Gorilla Rush, me pareció útil escribir un par de post acerca de algunas características de Swift, las cuales vamos a utilizar en los tutoriales.

En esta ocasión voy a hablar acerca de protocolos. Los protocolos probablemente sea algo nuevo para ti, pues si tienes experiencia en lenguajes como C# o Java seguramente has utilizado o leído sobre interfaces… bueno, eso es lo que un protocolo es en Swift.

No vamos a entrar en muchos detalles en este post sobre qué es una interfaz o protocolo, o cuándo usarlos o cuándo no, sobre esto hay bastante documentación en la web. Vamos en enfocarnos más en cuál es su sintaxis en Swift y algún que otro ejemplo.

En Swift, un protocolo es como un plano, que define métodos, propiedades y otros requerimientos que responden a una tarea en particular. Puede ser adoptado por una clase, estructura o enumeración con el objetivo de brindar una implementación a estos requerimientos. Cualquier tipo que implemente un determinado protocolo se dice que implementa (o se ajusta) a ese protocolo.

Sintaxis

Un protocolo se define de forma muy similar a una clase, estructura o enumeración:

Para que un tipo pueda adoptar/implementar un protocolo, debe colocar el nombre del protocolo luego del nombre del tipo separados por el signo de dos puntos como parte de su definición, el tipo puede implementar más de un protocolo colocándolos separados por coma:

Si una clase hereda de una super clase, coloca primero la superclase y luego los protocolos que implemente separados por coma:

Ejemplo

Antes de continuar veamos un ejemplo.

  1. Primero definimos el protocolo Hablar el cual contiene un método, decirHola(nombre: String).
  2. Definimos la clase Persona que va a adoptar/implementar el protocolo Hablar.
  3. Brindamos una implementación al método decirHola(nombre: String) en la clase Persona.
  4. Este método sólo va a imprimir el texto “Hola” seguido del valor que se le pase a través de la variable nombre que es de tipo String.
  5. Creamos dos variables con los nombres juliana y geykel, ambas guardan una referencia a un objeto de tipo Persona.
  6. Finalmente invocamos el método decirHola en ambas variables y el resultado que veremos serán dos lineas, la primera: “Hola Geykel.”, y la segunda: “Hola Juliana.”.

Propiedades

En Swift un protocolo puede también requerir al tipo que lo implemente, definir propiedades, especificando el nombre y el tipo de la propiedad y si la misma servirá sólo para obtener un valor o si además permitirá establecer un valor.

El siguiente ejemplo muestra los dos casos:

La primera propiedad especifica que puede tanto establecer un valor como devolver un valor, y la segunda sólo devolver.

En la definición de propiedades en un protocolo no se especifica si son propiedades cuyo valor es calculado o si sólo es una propiedad para almacenar un valor; es responsabilidad del tipo que implemente el protocolo decidir esto.

En el siguiente ejemplo veremos un caso de propiedad calculada:

  1. Definimos el protocolo NombreCompleto el cual provee una definición de la propiedad nombreCompleto: String { get } la cual sólo puede ser utilizada para devolver un valor debido a que no contiene un set.
  2. Definimos la clase Persona que implementa el protocolo NombreCompleto.
  3. Definimos dos atributos de la clase Persona, nombre y apellidos de tipo String.
  4. Creamos un inicializador (conocido en otros lenguajes como constructor) el cual inicializa los atributos de la clase Persona.
  5. Ahora implementamos la propiedad nombreCompleto que adoptamos del protocolo NombreCompleto.
  6. Como desarrollador de la clase he decidido que el valor retornado por esta propiedad es calculado y es el resultado de concatenar el valor de los atributos nombre y apellidos.
  7. Creamos una variable llamada juan la cual guarda una referencia a un objeto de tipo Persona, este objeto fue creado utilizando el inicializador que definimos en el paso 4.
  8. Llamamos a la función print para visualizar el valor de la propiedad nombreCompleto el cual es “Juan Pérez”.

Esto es todo lo que quería cubrir en este post, es más que suficiente para cubrir las bases para la serie de tutoriales sobre Gorilla Rush.

Hay mucho más sobre protocolos en Swift, incluso algunas funcionalidades que no había visto antes en lenguajes como Java y C#. Si deseas conocer más puedes consultar la guía de Swift en el sitio para desarrolladores en Apple.