miércoles, 29 de octubre de 2014

RequireJS


Hay momentos en los que la cantidad de librerías JavaScript de terceros que estamos usando en nuestra aplicación es tan grande que se hace necesario poner un poco de orden, bien por legibilidad o por prestaciones para que la carga de las mismas se haga de una forma óptima. Para ello están los gestores de cargas de librerías, y entre ellos RequireJS.

Ya en su momento comentamos Bower y como nos iba a facilitar la vida para gestionar las dependencias de nuestro proyecto. Pues bien, una vez que ya tenemos las librerías hay que integrarlas en nuestro framework favorito y poder hacer uso de ellas.

Estupenda documentación para dar los primeras pasos aquí.

Para ver un poco de tripa vamos a usar el caso práctico de, y como su propio nombre indica reqtangular, la integración entre AngularJS y RequireJS. El primero como framework y el segundo como gestor de carga.

Todo pasa por descargarse la última versión de RequireJS y agregarla como hasta ahora hemos ido haciendo, es decir, que podríamos crear por ejemplo un directorio llamado libs y copiar dentro el fichero require.js.
A continuación hacer referencia en nuestro index.html de la siguiente manera:

<script src="libs/require.js" data-main="scripts/main.js"></script>

atención al atributo data-main, aquí está la madre del cordero, ya que es ahí y solo ahí donde vamos a gestionar el resto de dependencias. El contenido de main.js en reqtangular tiene un aspecto tal que así.

Observad que que todo lo que estamos haciendo es construir un objeto JSON que vamos a inyectar en require.config con el nombre y la ruta.

require.config({
paths: {
angular: '../../bower_components/angular/angular',
'angular-animate': '../../bower_components/angular-animate/angular-animate'
...

Aquí es donde a mano incluiremos cada una de las líneas, como estamos usando bower, el destino por defecto de las librerías al ser descargadas es bower_components.

Hay veces que los módulos que queremos montar no soportan la arquitectura AMD, o que un módulo depende directamente de otro. En ese caso recurrimos a la configuración shim. En nuestro main.js se puede entender un ejemplo de como 'angular-route' depende directamente de angular:

'angular-route': [
'angular'
]

Y finalmente para hacer ensamblar definitivamente la dependencia en AngularJS emplearemos ya la sintaxis que corresponde y podéis ver al final del fichero.

require([
'angular',
'app',
'angular-route',
...

Espero que os sirva de guía para poder empezar RequireJS sin que nos tiemblen las rodillas. ;)

Saludos!

lunes, 27 de octubre de 2014

AngularJS 2



Los días 22 y 23 de Octubre se han reunido en París los padres de AngularJS y máximas personalidades de frameworks relacionados para mostrar las últimas novedades y avances e intercambiar experiencias y opiniones en el ngEurope.

Se esperaba con máxima expectación la charla de Igor Minar @IgorMinar  ingeniero de Google a cargo del proyecto AngularJS y parece que no ha dejado indiferentes a los espectadores cuando se presentaron las directivas de diseño para lo que va a ser la versión 2, actualmente 1.3.

Los cambios no van a ser triviales y va a afectar sustancialmente la experiencia como desarrollador y usuario. Algunas de las líneas maestras para esta nueva versión van a ser:

  • Soporte para el estándar ES6, aunque se va a poder seguir usando la actual versión 5.
  • Mejoras en la modularidad.
  • Simplificación de la inyección de dependencias, declarativa en vez de imperativa.
  • Mejoras en el Templating y directivas.
  • Mejoras en la persistencia.
  • Integración de la librería diary.js para mejorar la gestión de mensajes logs.


Aquí podéis ver las diapositivas de la ponencia, donde resulta muy llamativo el cambio en la sintaxis del código y el anuncio de las defunciones de los controladores, DDO, $scope, Angular.module y jqLite... casi nada.

Habrá que estar atentos durante el tiempo que transcurra hasta la liberación de esta versión e ir asimilando los cambios que seguro serán para simplificar mas si cabe el desarrollo de aplicaciones web y móviles.

Saludos!


sábado, 25 de octubre de 2014

Cyclon.js


Para todos aquellos que trabajan con cacharros y experimentan con ellos ha legado Cyclon.js para facilitaros la vida. Una librería que soporta múltiples plataformas (Arduino, ARDrone, Open CV, Phillips Hue, etc...) que facilita la programación de los dispositivos automatizados, drones y demás, que están cada vez mas y mas extendidos.

Pues bien, ¿Qué tal si pudiéramos usar JavaScript para programarlos?.
He aquí un ejemplo extraído de la web:

var Cylon = require("cylon");
// Initialize the robot 
var robot = Cylon.robot({ 
     // Change the port to the correct port for your Arduino. 
     connection: { name: 'arduino', adaptor: 'firmata', port: '/dev/ttyACM0' }, 
     device: { name: 'led', driver: 'led', pin: 13 },

     work: function(my) { 
     // we do our thing here every((1).second(), function() { my.led.toggle(); 
     });
   }
  });
 // start working
 robot.start();

Este es un ejemplo para Arduino con protocolo Firmata y gracias al gestor de paquetes de Node integrarlo en nuestro entorno de desarrollo es tan sencillo como:

$ npm install cylon
$ npm install cylon-firmata 

Muchos mas ejemplos y documentación a tu servicio... humano.

Saludos!

 

viernes, 24 de octubre de 2014

Grunt




Grunt es una de esas herramientas que cuando las conoces y las integras en tu proyecto te das cuenta del tiempo que has perdido durante un desarrollo. Nos encontramos ante uno de los automatizadores de tareas mas conocidos para JavaScript junto con Gulp.

Se sirve de una numerosa lista, 3757 en este momento, de Plugins para solucionar una cantidad ingente de necesidades. Por ejemplo y mas básicas, levantar una instancia de la aplicación en un navegador, actualizar la vista del navegador ante cualquier cambio de fichero para agilizar el desarrollo.

Los primeros pasos para integrar esta herramienta, sencillos, como siempre Node y NPM para a continuación instalar recomendablemente de manera global el cliente Grunt.

npm install -g grunt-cli

Si no tenemos el fichero de configuración de Node en nuestro proyecto package.json tendremos que crearlo:

npm init

A partir de este momento ya somos libres de configurar nuestro fichero Gruntfile.js en el directorio raíz. Este es la piedra angular donde configuramos Grunt, importamos las dependencias a los plugins y definimos las tareas.

Aquí un ejemplo en la documentación. Y aquí el fichero Grunt del proyecto Reqtangular.

Y ahora, a ahorrar tiempo ;)

Saludos!

martes, 21 de octubre de 2014

Polymer


"Welcome to the future"

Con esta sugestiva frase nos reciben en la web del proyecto polymer y no se si será el futuro, pero desde luego es una aproximación al desarrollo orientado a módulos. Como podemos adivinar por el nombre debemos imaginar que nos encontramos ante un framework que nos va a permitir modelar aplicaciones desktop y móviles a partir de piezas individuales y autónomas llamadas elementos.

El propio framework nos va a proveer de un gran números de estos elementos preparados para usar. Y ensamblar en nuestro proyecto. Fundamentalmente la ventaja, además de un alto grado de escalabilidad es la reusabilidad de dichos elementos. Además de una amplia documentación para crear los nuestros propios.

Como ya hemos hablado un poco en este blog de Yeoman os recomiendo que usemos el generador oficial para comenzar un nuevo proyecto, así en muy pocos minutos podemos empezar a jugar con nuestro nuevo kit de piezas y construir un nuevo juguete.

El mismo enlace al proyecto nos muestra toda la documentación necesaria para la instalación y uso del mismo. Como siempre para NPM.

Finalmente os dejo el vídeo de instalación y uso para despegar en este  framework de desarrollo.

 

 Ahora manos a la obra...

Saludos!


lunes, 20 de octubre de 2014

Yeoman



¿Cuantas veces no hemos deseado disponer de una aplicación base para empezar un nuevo proyecto? Un artesonado, versátil con las tecnologías precisas perfectamente integradas listas para usar.

Para ello podemos, o bien, tirar de repositorio de proyectos antiguos para fijarnos como se hizo aquella vez, o bien investigar y pelearte con una nueva integración o buscar en el listado de mas de 1100 generadores en plataforma de Yeoman e incluso, ¿Por qué, no? crear nuestro propio generador para poder reusarlo tantas veces como nos haga falta. Ya se sabe el dicho en desarrollo "Si estás copiando y pegando mucho, algo no estás haciendo bien".

En el caso de Reqtangular, lo que empezó como una necesidad básica para crear módulos unitarios funcionales en un proyecto fundamentalmente AngularJS ya que cada vez que se iba a implementar una nueva funcionalidad el proceso siempre era copiar + pegar otro módulo y reescribirlo. Sin embargo con el generador la tarea se redujo a:

$ yo reqtangular:blankModule

Donde yo es la herramienta cli de yeoman, reqtangular el nombre del generador y blankModule el sub-generador.



Mediante una completa librería de prompting podemos obtener adicional y guiar el proceso de generación.

Y es que tremendamente sencillo usar esta herramienta. Instalamos Yeoman con el gestor de paquetes de Node.

$ npm install -g yo 

Y estamos en disposición de instalar en nuestro sistema uno de los mas de 1100 generadores, como por ejemplo:

$ npm install -g generator-reqtangular


El último paso sería lanzar el generador y obtener como producto nuestra nueva aplicación lista para usar. Creamos un directorio nuevo y dentro del mismo ejecutar: 

$ yo reqtangular 

et voilà! Listo para empezar.


Merece la pena dedicarle un rato, porque este tipo de herramientas ayudan a ahorrar muchas horas, quebraderos de cabeza y nos permiten normalizar código en grupos de trabajo.

Saludos!

viernes, 17 de octubre de 2014

Ionic




Ionic es uno de los frameworks para desarrollo de aplicaciones móviles mas recientes y se está postulando como una de las apuestas mas firmes para los próximos años.
En mi opinión el secreto del éxito se debe a la perfecta convivencia entre la mas que probada tecnología Apache Cordova con la mas que pujante AngularJS. Si a todo ello ha asentado sobre los firmes cimientos de Node en suma disponemos de todas las herramientas necesarias para desarrollar de manera ágil sacando partido de toda la potencia de AngularJS con la flexibilidad de Cordova.





Mas información técnica sobre Ionic en este completo artículo.

Para instalar el framework deberemos tener instalado previamente NodeJS, Android, iOS en función del empaquetado para el que queramos obtener la aplicación resultante. Uno de ellos o ambos, eso si, para empaquetar en iOS tendremos que tener en cuenta que requiere Mac OS X.

Ahora ya estamos en disposición de ejecutar el comando:

$ npm install -g cordova ionic

Y de una tacada instalaremos de manera global para nuestro sistema las dependenias para Cordova e Ionic. Y con ello todo el proceso de preparación de nuestro entorno de desarrollo ya está completado. Es cuestión de un ratito, pero merecerá la pena, os lo aseguro.

Hello world!

No hay nada mejor que para empezar a familiarizarnos con un nuevo framework.
Pues bien, donde queramos crear un nuevo proyecto ejecutaríamos:

$ ionic start myApp sidemenu

myApp, es el nombre que va a tomar nuestra aplicación y sidemenu es uno de los tipos predefinidos.

Genial, pues ya tenemos nuestra aplicación. El siguiente paso sería probarla. Y para ello podemos o bien, ejecutarla en un navegador, ideal para desarrollar "like a boss" con el comando dentro del directorio raíz de nuestra app:

$ ionic serve

O bien, lanzar la app en un emulador o un dispositivo.

$ ionic emulate android

o desplegar en un dispositivo que tengamos conectado por USB:

$ ionic run android

El resto está ya en vuestras manos. :)

Saludos!

jueves, 16 de octubre de 2014

AngularJS




El salto cualitativo que están experimentando estos últimos años los entornos de desarrollo basados en Javascript son brutales. Se ha establecido todo un ecosistema de frameworks además de AngularJS como son  Backbone, Knockout, Ember. Cada uno de ellos con sus peculiaridades y características. Aquí tenéis una completa tabla comparativa.

Hoy toca hablar un poco sobre AngularJS, un completo framework creado por Miško Hevery @mhevery, un empleado de Google que presentó en el año 2012 la versión 1.0.
El concepto es tan bueno que rápidamente es elevado a categoría de proyecto oficial tipo Open source con un mantenimiento continuo por parte de una inmensa comunidad y el equipo propio de desarrollo de Google.

En tan solo un par de años una gran multitud de desarrolladores que se adhiere y crece de manera exponencial el apoyo y las aplicaciones web / movil que ya lo integran.
Básicamente su éxito radica en la modularización y la organización del código en MVC y en dotar de "súper poderes" a nuestro código HTML, lo cual estructura y simplifica el desarrollo reduciendo el tiempo de producción y por ende los costes.

Como ocurre siempre, y mas puro estilo darwiniano, durante un tiempo convivirán, los mas débiles desaparecerán y los mas fuertes prevalecen. Y muy probablemente AngularJS sea uno de los que se establezcan, no solo por ser un framework robusto y bien estructurado, si no que además lleva la firma del todopoderoso Google.

Personalmente he tenido experiencia con Backbone y más recientemente AngularJS. Mas con este último, ya que el propio proyecto Reqtangular toma el nombre de la integración de RequireJS y AngularJS además de haber participado aplicaciones para móviles tambien en este framework.

Y es que nunca se sabe, pero a la vista de la reacción de la comunidad internacional tiene pinta de que vamos a tener framework de referencia para tiempo. La gente de lostiemposcambian nos explican mas a fondo las diferencias entre los tres mas usados actualmente.

Para aquellos que os empieza a picar el gusanillo aquí tenéis un enlace a un curso gratuito con vídeos y retos que os explicará los fundamentos básicos para empezar con esta joven pero prometedora tecnología. No está de mas estar preparado para cuando se produzca el desembarco masivo en nuestro país.

Saludos!







miércoles, 15 de octubre de 2014

Bootstrap



A estas alturas muchos de vosotros ya estáis familiarizados con es uso cotidiano de Bootstrap en vuestras aplicaciones, y es que desde que apareció allá por el año 2010 de la mano del equipo de Twitter no ha hecho mas que ganar adeptos.

Y es que la propuesta es simple pero terriblemente convincente. "Tú dime que quieres mostrar que yo lo muestro". Independientemente del navegador o el tamaño de la pantalla, el motor de Bootstrap organiza los elementos automáticamente y los distribuye de manera sencilla y elegante.

En los últimos años estamos advirtiendo un cambio en la apariencia y distribución y en parte esto es debido a la masiva influencia de esta herramienta. Ahora es muy común encontrar mono-páginas "landing pages" donde todo el contenido se muestra por bloques en una sola página. El aspecto se ha simplificado, los colores se hacen planos y las líneas mas definidas.

Poco a poco, como pasa siempre, se va haciendo de nuevo necesaria una transición a las nuevas tendencias estéticas de las webs / aplicaciones móviles. Y hoy por hoy no concibo otra alternativa al diseño responsivo.
Si estamos bajo un entorno Node JS, podemos incluir las dependencias en nuestro proyecto ejecutando desde el directorio raíz del mismo el comando:

$ npm install -S bootstrap

Y de esta manera la última versión quedará agregada. El parámetro S escribe la dependencia en nuestro fichero de gestión de paquetes propio del proyecto package.json


No soy diseñador web y por tanto no poseo conocimientos profundos en CSS, SASS o LESS como un especialista. Afortunadamente hay soluciones que nos van a permitir un punto de partida a la hora de enfrentarnos a la ardua tarea de estilizar nuestros desarrollos. Claro que para un acabado profesional siempre es imprescindible la colaboración de un diseñador, no se me vayan a enfadar los amigos diseñadores. Os queremos ;)

Podemos partir de una platilla completa y hacer pequeñas modificaciones, cual sastre a un traje de serie. Ventaja, está practicante listo para usar. Desventaja, pues que si no queremos emplear tanto esfuerzo en modificaciones como en hacer una de cero tendremos que ceñirnos en gran medida a los estilos y estructura de la platilla propuesta.

Hay sitios web con platillas gratuitas y las hay mas trabajadas y llamativas a muy bajo coste ya que podemos hacernos por menos de 6€ con una completa platilla para una web o para un panel de administración.

Por otro lado, si queremos dedicar mas tiempo a la construcción de las vistas en vez de partir desde una plantilla podemos estructurar con editores gráficos.
Existen multitud de plataformas para este fin, como se recogen en este blog personalmente he probado Bootply y DivShot y efectivamente el ahorro de tiempo / esfuerzo es mas que considerable.

Así que ya sabéis, los fríos sudores probando en los distintos navegadores el encuadre de los elementos de la web es cosa del pasado. Gracias a Dios.

Saludos!




martes, 14 de octubre de 2014

Vagrant



Como desarrollador cuantas veces no he imaginado disponer de un entorno configurado y listo para empezar a trabajar. Un entorno que fácilmente pueda ser desplegado para que los compañeros en un equipo puedan trabajar bajo un mismo ecosistema, disponer de otro SO para hacer pruebas o simplemente bichear nuevas tecnologías para estar siempre familiarizado con con lo último del sector sin perder tiempo instalando y configurando herramientas, frameworks, servidores de aplicaciones, etc.... ni guarrear nuestro equipo de trabajo.

Pues bien, para ello está Vagrant, una muy interesante solución que cubre a la perfección esta necesidad. Vagrant nos hace a los desarrolladores la vida un poco mas fácil. Funciona en convivencia con gestores de maquinas virtuales como MVware, VirtualBox u otros y prepara maquinas virtuales configurables para ser descargadas y desplegadas en nuestro gestor preferido.

Descargamos e instalamos el paquete de Vagrant, configuramos un sencillo fichero y definimos el script de despliegue.

Yo he llegado a Vagrant a través de una aproximación de los creadores de Ionic. Ionic es un completo framework basado en Apache Cordova/Phonegap para desarrollar aplicaciones para dispositivos móviles "Trans-plataforma" es decir, programamos una sola vez en HTML - JavaScript y empaquetamos a golpe de automatización los instalables para distintos sistemas operativos con el consiguiente ahorro de tiempo, esfuerzo, dinero.

Pues bien, el caso de uso podría ser, quiero empezar una aplicación para android y voy a usar Ionic.
Para empezar recomiendo siempre trabajar en Linux, por comodidad ya que, aunque es posible, evitaremos quebraderos de cabeza. Ahora que tengo mi sistema operativo, necesito instalar Node.Js con NPM, Git, Ant, JDK para Java 7 descargar el SKD de Android, Cordova y por último, pero no menos importante Ionic.
O bien... instalo Vagrant y VirtualBox, hago un checkout / clone del repositorio de Ionic-Box de Max Lynch @maxlynch uno de los creadores de Ionic y ejecuto los comandos.

$ vagrant up
$ vagrant ssh 


La primera vez tendremos que esperar a que se descargue y se instale y ya tengo todo lo disponible para, por ejemplo, empezar un nuevo proyectos a partir de un seed tecleando simplemente:

$ ionic start myNuevoProyecto

Así que, ¿Quién dijo miedo? Total, si se rompe todo, borro la máquina virtual y santas pascuas. ;)

lunes, 13 de octubre de 2014

Bower








Hace un tiempo empecé a usar esta herramienta y desde entonces es un pilar fundamental en cualquier desarrollo. Al alcance de un comando la posibilidad de buscar e instalar nuevas librerías en nuestro proyecto, además de dejarlas definidas en un fichero de configuración para, por ejemplo, no tener que subir a nuestro repositorio librerías de terceros.

Porque como dice la propia descripción en su web "Web sites are made of lots of things — frameworks, libraries, assets, utilities, and rainbows. Bower manages all these things for you." y hay un momento en que se hace necesario alguna ayuda para gestionar todos estos componentes. Como desarrollador no quiero emplear mas tiempo que el necesario en prestar atención a los múltiples elementos de los que pueda estar compuesto nuestro proyecto, lo que quiero es que aquella librería que necesito para una nueva feature venga a mi proyecto como por arte de magia y ponerme a programarla. ¿Y como se hace eso? pues muy facil.

Bower necesita que tengamos en nuestro sistema instalado Node y Git . Una vez tengamos estos prerrequisitos la instalamos tal que:

npm bower -g install

Donde el parámetro -g en bower se refiere a una instalación global, visible para todos los proyectos.
Ya tenemos bower instalado y ahora lo vamos a usar en nuestro proyecto, para ello nos situamos en el directorio raíz del mismo y lo inicializamos con el comando:

bower init

Con el que vamos a crear el fichero de configuración bower.json que mantendrá las especificaciones propias del proyecto y las dependencias que vayamos instalando. Basta con que sigamos las preguntas del prompt para facilitarnos la vida y ¡clin! se hizo la magia.

Ahora si por ejemplo necesito usar jquery en su última version, como siempre en el directorio raíz ejecutamos:

bower install jquery

y automáticamente se descargará en el directorio que se creará para tal efecto dentro del proyecto bower_components/.
Ya podríamos incluirla mediante la etiqueta <script> o lo que es mas recomendable a través de un gestor de carga de dependencias, como por ejemplo RequireJS.

En nuestro repositorio solo tendremos que hacer commit del fichero bower.json e ignorar el directorio bower_components ya que para restablecer las dependencias solo tendríamos que ejecutar en nuestro directorio el comando bower install de nuevo.

Espero que os haya resultado de ayuda. Saludos!





domingo, 12 de octubre de 2014

Git




En el año 2005 el afamado Linus Torvalds desarrolló junto con Junio Hamano el núcleo de un nuevo gestor de versiones y nace de la necesidad del manejo de grandes cantidades de ficheros muy distribuidos.

Partiendo de la base de que ya no se puede concebir el desarrollo software sin un gestor de repositorio y aunque es verdad que la primera experiencia con GIT es un poco confusa, sobre todo en mi caso que llegué desde SVN, una vez te haces con los conceptos básicos y la curva de aprendizaje se hace mas liviana te das cuenta de la cantidad de herramientas y potencia que ofrece GIT. Es como pasar de la caja para colorear, esa que tiene un ciervo en la cubierta de 8 a la de 32 colores. Todo un universo nuevo se presenta a nuestro alcance.

Por supuesto todo es cuestión de gustos, pero en mi caso la experienca con GIT es muy satisfactoria y no dejaría pasar la oportunidad de "bichearlo" para futuros proyectos.

La gente de CodeSchool se ha currado otro curso gratuito con los fundamentos basicos y como siempre con videos explicativos y ejercicios. Muy recomendable.

https://www.codeschool.com/courses/try-git

Además para ampliar información nada mejor que la fuente http://git-scm.com/

Para empezar a usar Git aquí está el enlace a la documentación:

http://git-scm.com/book/en/Getting-Started-Installing-Git

 Y para aquellos que os pica el gusanillo ya podéis ejecutar el comando:

git clone  git@github.com:codebusters/generator-reqtangular.git

para descargaros el código fuente de Reqtangular y aportar a la causa vuestras soluciones. ¡Reky os necesita!


Saludos!




sábado, 11 de octubre de 2014

Hola mundo!

Hola mundo!

Os presento Reqtagular. Un proyecto Open Source para generar nuevas aplicaciones web. De manera facil podemos generar estructuras base preconfiguradas para iniciar un nuevo proyecto basado en AngularJS y RequireJS entre otras tecnologías.
Pero además Reqtangular, dentro del espíritu de comundad open source pretende ser un punto de encuentro entre desarrolladores ávidos de aprender y compartir nuevas tecnologías.

Para este proyecto se están usando múltiples soluciones fundamentalmente basadas en NodeJS, AngularJS, RequireJS entre otras y con este blog se irán desgranando a modo de mini tutoriales de iniciación.