Angular 2 es oficial!.

Noticias emocionantes para los seguidores del proyecto Angular y los desarrolladores front-end en general: Angular 2 tiene versión oficial!.

Angular 2
The Angular2 Shield

 

Comparto acá algunos excelentes recursos de Angular 2:

 

 

Los pasos de la metodología de desarrollo ‘Agile’ y sus responsables

El método de desarrollo de software ágil intenta reducir la complejidad de los proyectos de software actuales e incrementar su flexibilidad. El desarrollo de software ágil tiene muy en cuenta los cambios solicitados y responde de manera flexible a los nuevos requisitos surgidos durante el transcurso del proyecto.

Los pasos del proceso Agile son los siguientes:

  • Diagnóstico (Product Owner, StakeHolders, Agile Manager):  Incluye el análisis de los requerimientos y la tormenta de ideas.
  • Diseño (Product Owner, StakeHolders, Scrum Master):  Incluye la documentación del diseño y el prototipado.
  • Desarrollo (Scrum Master, Team Members):  Incluye la construcción, las pruebas, la revisión y la clarificación. Es un proceso iterativo.
  • Aseguramiento de Calidad (Scrum Master, Team Members):  Incluye la identificación y la resolución de defectos.
  • Despliegue (Team Members, Product Owner):  Incluye la puesta en producción y el soporte post-venta.
Pasos de Agile
Pasos de la metodología Agile.

 

Generar Servicios RESTful a partir de Modelos de Datos

Al momento de desarrollar aplicaciones, casi siempre el punto de partida es la creacion del modelo de datos (y la base de datos). Una vez que tenemos un hogar para nuestras data, el siguiente paso natural es querer generar servicios RESTful para que sean consumidos por nuestras aplicaciones clientes; bien sea un website o un app móvil.

Es entonces cuando nos encontramos con muchísimas opciones para el desarrollo de nuestros servicios. Plataformas, tecnologías, lenguajes de programación, entre otros. Sin duda alguna, puede ser complicado y tardado el comenzar a desarrollar nuestras API’s. En este post trato de comentar mi experiencia con diferentes servicios de generación automática de servicios REST.

Pero primero un disclaimer: Ningún generador nos va a proveer de servicios perfectamente personalizado y según las necesidades particulares. La idea es darnos un comienzo rápido con las conexiones a la BD, el manejo de rutas y la selección de datos de nuestras tablas. Esto quiere decir que las uniones y transformaciones de datos quedan de nuestra parte.

Sin mas preambulos, les dejo las opciones que he probado:

Apiplug: Apiplug es un SAAS (Software Como Servicio) que ofrece la generacion de API’s partiendo de un esquema definido o una BD existente, por un precio. Las opciones de tecnologías justo ahora varían entre PHP5+Laravel5.1, PHP7+Laravel5.2, NodeJS+Express y Python3+Django. Tambien ofrecen ayuda para desplegar los proyectos y como extra, puedes generar un proyecto Android que haga uso de tu recién generado API.

Dashboard de Apiplug
Dashboard de Apiplug

Apigility: Apigility es un proyecto de Zend Framework que debes correr en una intancia de WAMP/XAMPP antes de que puedas llegar a las pantallas de generacion. Una vez allí, ofrece exactamente lo requerido con muy buenas posibilidades de personalización. EL detalle: Naturalmente, el proyecto generado es exclusivamente en PHP.

En futuras actualizaciones, agregare un par de opciones mas a la lista.

Big Data: El ecosistema básico en las empresas.

Es bien sabido que en la actualidad, cuando hablamos de Big Data, no nos referimos a una sola herramienta (aunque a muchos nos venga el nombre ‘Hadoop’ a la mente). En este corto post, listo algunas de las herramientas mas básicas y comunes en despliegues empresariales de soluciones Big Data:

El Stack de una solución Big Data clásica. (Sin Spark).
El Stack de una solución Big Data clásica. (Sin Spark).

El ecosistema básico

  • Hadoop: La herramienta base de cualquier solución Big Data. Fundamentado en el procesamiento paralelo usando una tecnica llamada ‘Map-Reduce’ y un sistema de archivos distribuidos denominado ‘Hadoop File-System (HDFS)’. El origen de su nombre es todo un misterio…
  • Hive: Desarrollado en Facebook para facilitar la tarea de programar tareas Map-Reduce para hacer consultas en Hadoop. Permite consultar la data usando HQL (ANSI SQL con algunas modificaciones). De esta manera, se disminuye la dificultad al obtener resultados de la data.
  • Sqoop: Permite realizar tareas de importación de datos desde diversas bases de datos relacionales, encargándose de la conversión tipos de datos y de las transformaciones que sean necesarias.
  • Spark: Desarrollado para superar las deficiencias de Map-Reduce, Spark ofrece resultados mucho mas rápidos usando el mismo cluster que Hadoop. Su mayor ventaja es que el procesamiento es en la memoria y no en el disco. Ademas, tiene sus propios módulos de SQL e Inteligencia Artificial.

Para conocer un poco mas de la historia y evolución de estas herramientas, recomiendo el siguiente articulo: https://medium.com/@markobonaci/the-history-of-hadoop

Estructuras de datos, algoritmos y construcciones de código que necesitarás para una entrevista de software.

Si pronto tienes una entrevista o sesión de programación en vivo, aquí hay algunas herramientas básicas que todo programador debe tener en su arsenal a la hora de una entrevista que involucre programación en vivo:

Estructuras de Datos y Tipos de Dato Abstractos

  • Array (Arreglos)
  • Linked Lists: Sencillos y Dobles
  • El ADT ‘List’ (Listas)
  • Árboles: Binarios y BSTs
  • El ADT ‘Set’ (Conjunto)
  • Tries
  • Heaps
  • Los ADT Stack, Queue y Priority Queue
  • Grafos: dirigidos, no dirigidos, diferentes representaciones y sus ventajas
  • Hashtables: estrategias de resolución de colisiones, funciones hash y sus ventajas
  • El ADT ‘Map’
  • Algoritmos

Búsqueda Binaria

  • Algoritmos de Ordenado: Selection Sort, Insertion Sort, Bubble Sort, Quicksort, Mergesort, Heapsort
  • Algoritmos de Busqueda: Depth-first search, Breadth-first search, Dijkstra’s
  • Recorrer Arboles: pre-order, post-order, in-order, level-order (BFS)
  • Tecnicas Algoritmicas: Brute force, Divide and conquer (e.g. Mergesort), Greedy, Dynamic Programming (avanzado)
  • Problemas NP-hard

Elementos Basicos de Programacion en JAVA

  • Los básicos, por supuesto (bucles, condicionales, funciones, etc)
  • Entrada y Salida: desde archivos y desde la línea de comandos
  • Las clases ‘String’ y ‘Character’
  • Convertir entre tipos de datos
  • Diseno orientado a objetos: Herencia y Polimorfismo, Clases y Objetos, static and non static, modificadores de acceso (public, private, protected)
  • La librería java.util (y sus clases contenedoras)
  • El patrón del ‘Iterador’ (intermedio)
  • Generación y manejo de excepciones
  • Programación dirigida por eventos
  • Clases internas y anónimas.
  • Expresiones Lambda(avanzado)

Preguntas comunes en entrevistas de programacion.

  • Diseno orientado a objetos, usando cualquier estructura de datos.
  • Manipulación a nivel de bit para representar enteros.
  • Acertijos de Teoría de Juegos: «muddy children», volcano eruptions.
  • Estimar límites: «Cuántos pollos hay en Chicago?»

Recursos online para prepararnos.

  • HackerRank. Un website con infinidad de retos de programación y algoritmos.
  • PRAMP. Un website que ofrece entrevistas de programación de prueba. Gratis!

Programación funcional vs procedimental: Un enfoque Big Data.

Recientemente, durante un conversación sobre Big Data, Hadoop y el análisis de data, surgió el tema de los lenguajes funcionales en los mismos. Es bien sabido que los lenguajes funcionales son ideales para Big Data, pero no nos quedaba claro porqué. Buscando un poco, ésta respuesta de SO nos dió más luces al respecto:

As a consequence, a purely functional program always yields the same value for an input, and the order of evaluation is not well-defined; which means that uncertain values like user input or random values are hard to model in purely functional languages.

Podemos resumir en que: Los lenguajes funcionales siempre arrojarán un valor para determinada entrada (La orden de evaluación no está bien definida). Ésto es totalmente deseable para la computación distribuida y el Big Data, puesto que la idea es asegurar una salida consistente en todos los nodos donde se procese.

Para saber un poco más al respecto, les recomiendo ésta lectura.

Por otro lado, recomiendo muchísimo ésta la especialización en SCALA, (un lenguaje funcional que corre en el JVM) dictado por la École Polytechnique Fédérale de Lausanne en Coursera.

Android: Aplicación sencilla con back-end en Firebase.

Firebase es una plataforma para el desarrollo de aplicaciones web y aplicaciones móviles adquirida por Google en 2014. En este Post realizaremos algunas un tutorial para hacer uso de los beneficios de FireBase.

Aplicación de registro y lectura de mensajes desde el servidor.

Una aplicación Android puede operar perfectamente sin acceso a información a través de internet. Éste tipo de aplicaciones se conocen como aplicaciones “Autónomas” o “Standalone”. Ejemplos de éste tipo de aplicaciones hay muchos: Calculadoras, Alarmas, Editores, Juegos. Sin embargo, muchas de las aplicaciones requieren de algún tipo de acceso a internet (bien sea para realizar alguna conexión a bases de datos, o consumir un servicio web). En esta guía veremos cómo realizar (y hospedar en la nube) nuestro desarrollo a nivel de servidor (backend) en Firebase.
Firebase Logo

El tutorial completo se encuentra en el documento drive adjunto!.

Compartir consultas de prueba para Servicios REST con Postman

Postman es una excelente aplicación/extensión de navegador gratuita, que permite realizar consultas a servicios REST desde una agradable (y muy personalizable) interfaz gráfica.

Postman Logo

Su headline es:

Postman helps you develop APIs faster.

Postman UI Screenshot
Postman UI

La verdad es invaluable a la hora de desarrollar API’s, pues facilita las actividades de probar endpoints, cambiar parámetros, seleccionar métodos, configurar tipos de contenido (Content-Type's) y realizar pruebas automatizadas en base a la respuesta del backend.

Una funcionalidad que me ha resultado imprescindible al momento de desarrollar API’s en equipos de desarrollo extendidos, es la capacidad de Postman de guardar y compartir las «Colecciones» (Agrupaciones de consultas, incluyendo rutas, métodos y contenido) con nuestros colaboradores. Acá les dejo los pasos para realizarlo:

  1. Iniciar sesión en Postman Web. https://app.getpostman.com/dashboard
  2. Guardar las consultas en colecciones (y opcionalmente, en carpetas)
  3. Ubicar la colección deseada, hacer click en el menú de puntos al lado
  4. En la lista desplegable, seleccionar «Share»
  5. Seleccionar «Run in Postman Button»
  6. Compartir el botón en nuestro site o Wiki corporativo.

El resultado final es algo del estilo:

Botón Postman en Wiki
Botón Postman en Wiki

Espero les sea útil!

Gestión de proyectos con Kanban en Taiga.io

Taiga.io es una herramienta SAAS para la gestión Ágil de proyectos. Permite trabajar con Scrum o con Kanban. La recomiendo ampliamente para equipos de desarrollo de software, ya que permite optimizar las comunicaciones, las interacciones y entregas rápidas.

image
Kanban en Taiga
image
Scrum en taiga

Lo mejor: Es gratis para proyectos públicos. Si deseas proyectos privados, tienen diversos planes según conveniencia…

Actualizar Android Studio a V2.0

Android Studio 2.0 ya está disponible, y ahora que es estable, se puede actualizar de manera segura a la nueva versión. Tiene algunas características interesantes, pero la más importante es que ahora los emuladores son mucho más rápidos de usar cuando corremos nuestras aplicaciones.

Aquí está el proceso para actualizar:

1. Inicia Android Studio. Debes ver una ventana emergente explicando que existe una versión nueva. Haz click y deberías ver esta pantalla:

1
Selecciona «Actualizar y reiniciar» para comenzar el proceso.

2. Durante la actualización, es posible que veas la siguiente ventana:

2
Si aparece, solo selecciona «Siguiente».

3. Android studio comenzará a Descargarse.

3
Deja que finalice de actualizar.

4. Deberías ver esta ventana emergente la primera vez que abras Android Studio después de actualizar:

4
Elige la primera opción para que tus configuraciones se mantengan.

5. Puede que veas esta pantalla.

5
Te está recomendando que deberías usar la ultima versión del JDK. Sugiero que actualices (es gratis).

Ésta es la última versión del JDK, directo desde Oracle: http://www.oracle.com/technetwork/java/javase/downloads/jdk8-downloads-2133151.html

6
Último JDK.

6. También puede que veas esta pantalla:

7
Selecciona «Actualizar».

7. Verás la siguiente ventana:

8
Selecciona el android-sdk-license y deja que la instalación finalice.

8. Por cada proyecto existente que abras luego de actualizar, verás esta ventana emergente aparecer:

9
Selecciona «Actualizar» y deja que haga su trabajo.

9. Eventualmente verás esto en pantalla:

10
Selecciona «Fix Gradle wrapper and re-import project». Una vez finalizado, estás listo para comenzar a desarrollar!.

10. Aunque no es absolutamente necesario, sugiero borrar y crear nuevamente cualquier emulador AVD (Android Virtual Devices) que tengas configurado. De ésta manera nos aseguramos de contar con los beneficios de emulación añadidos.

Listo! A programar…