viernes, 1 de mayo de 2015

Testeando proyectos y experimentos


Hoy quería hacer mención de una herramienta muy interesante para el desarrollo de aplicaciones (más allá de la programación con Haxe). Sirve para desarrollar y sobretodo probar aplicaciones en un entorno remoto y virtual. Quizás ya hayan utilizado entornos de este tipo anteriormente (Existen muchos paquetes de máquinas virtuales, en lo particular tengo experiencia  con VMware y últimamente he jugado un poco con VirtualBox +  Vagrant). Pero fue Koding el que ha llamado mi atención estos días.





Koding es un un entorno de desarrollo basado en arquitectura de nube. No solamente nos permite “testear” una aplicación, sino también desarrollarla (incluso en conjunto con otras personas). Si conoces de que estoy hablando, puedes omitir el párrafo siguiente.


Para los que siguen sin saber de qué hablo, veamos un poco más en detalle:


El entorno de desarrollo típico de un programador consta de varias “capas” digamos a saber:


El hardware (soporte físico)
El sistema operativo (Windows, Linux, etc.)
El lenguaje de programación (C++, Php, Haxe, Java, etc.)
El editor de código (Flashdevelop, Eclipse, Intellij Idea, etc.).


Bien. Hasta aquí es lo que conocemos la mayoría de los que venimos escribiendo código desde hace tiempo como un entorno “Local” de desarrollo, es decir, nuestra computadora con todas esas cosas instaladas y listas para programar.



Al momento de iniciar nuestro proyecto y testearlo , el entorno de desarrollo se convierte en  uno de “prueba”...pero no ha cambiado (misma cpu, mismo sistema operativo, etc).


Ello, en ciertas circunstancias, puede ocasionar que nuestras pruebas sobre la aplicación no sean del todo fidedignas o reales digamos ya que su comportamiento esta siendo puesto a prueba en una situación muy específica (Nuestro entorno solamente, comparado con los millones distintos que hay afuera).


Virtual Box
Obviamente ahí es donde los desarrolladores comienzan con los dolores de cabeza porque su aplicación “funciona bien” (dentro de su pc, su entorno) y “se cuelga” en la pc del cliente. Incluso en un grupo de trabajo con varios desarrolladores que están trabajando en el mismo proyecto se pueden dar condiciones en las que para mí un cierto segmento de código funcione y para otro no.


Ni que hablar cuando nuestro proyecto debe de funcionar en muchas plataformas distintas (Pc, Teléfonos, Tv, etc). Deberíamos tener un modelo de cada uno de ellos para verificar que todo funcione bien? Imposible.
DOSBox


De ese concepto, nació la idea de una Máquina Virtual, que no es otra cosa que simular el comportamiento de una determinada cpu, sistema operativo o entorno de aplicación, dentro del nuestro en un ambiente “aislado” o encapsulado.


Pero no todo es ideal, incluso en el mundo de las máquinas virtuales. Existen varias cosas a tener en cuenta cuando se utiliza una VM.



Fedora dentro de una caja con VMware
Sin entrar en detalles, solo diré que dependiendo de la arquitectura y sistema operativo que queramos emular, puede ser una verdadera devoradora de recursos. Debemos estar conscientes en todo momento que para emular un determinado entorno, vamos a “restarle” recursos a nuestra propia computadora para que la “virtual” los utilice. Si nuestra PC ya tiene algunos años, puede que le “cueste” emular otra máquina con características similares dentro suyo. Obviamente nos vamos a dar cuenta de ello en un principio, ya que el rendimiento global de nuestro sistema se verá afectado en mayor o menor medida (No tanto en capacidad de almacenamiento o memoria, ya que son emulados físicamente con accesos reiterados al disco, pero sí en la capacidad de proceso).

Una lista de "Cajas" listas para usar con Vagrant: http://www.vagrantbox.es/

Instalando una Caja windowsXP con Vagrant


Otro problema son los desarrollos cliente/servidor que deben funcionar a través de internet (cloud o nube). En la mayoría de los casos tenemos pocas opciones para probar que todo funcione:


  • Instalando de forma Local un conjunto de Servidores (Web, Php, Sql, etc).


Es una solución poco realista y muy traicionera. Puede que para proyectos pequeños funcione bien, pero va a estar muy ligada a nuestro sistema operativo y arquitectura de hardware. Los servidores locales comparten procesos y memoria con nuestra aplicación y ello dificulta por ejemplo conocer el rendimiento o los potenciales problemas de seguridad que puedan surgir. También es complicado (pero no imposible) para el programador hacer demostraciones del proyecto al usuario final (un cliente digamos).
Otro inconveniente es el manejo de versiones, opciones de configuración, o simplemente comenzar desde cero nuevamente. Llevaría tiempo volver a instalar de a uno los paquetes y configurar los servidores para dejarlos listos.


  • Instalar un pseudo entorno de servidores como por ejemplo xampp.


Más viable que la anterior ya que nos ahorra mucho tiempo al tener todo empaquetado listo para funcionar. Se configura de manera sencilla y en poco tiempo. Muy eficaz a la hora de instalar complementos como Joomla! o Magneto. Como el anterior, muy limitado (por nuestro propio entorno) a realizar pruebas de rendimiento o demostraciones.


  • Rentar un servicio hosting o utilizar uno gratis.


Mucho mejor que las opciones anteriores, pero con algunos inconvenientes también. Puede que para muchos no lo sea, pero si estamos comenzando a programar, pagar un servicio mensualmente para solo dedicarle unas horas por día...Bueno, están los gratis! Pero, dependiendo de qué tipo de servicio necesitemos, quizás no encontremos uno gratuito.
Más allá de lo económico, modificar ciertos parámetros con servicios de hosting puede ser una pesadilla (hay que comunicarse con los administradores, deben de aprobarlo, etc..) ni que hablar si del lado del servidor se necesita ejecutar un servicio que no viene incluido al rentar el hosting. Por otro lado, las pruebas de rendimiento o demostraciones serán algo sencillo de implementar y analizar.




Hemos repasado los conceptos básicos de trabajar con Máquinas Virtuales y Servidores. Ahora bien, qué hace a Koding tan especial pensarán ustedes.


Bueno, en principio como ya adelanté es entorno de desarrollo basado en arquitectura de nube. Tenemos que:


Por un lado da soporte a Máquinas virtuales (Linux).




Un Ide para desarrollar en varios lenguajes como Ruby, Go, Java, NodeJS, PHP, C, C++, Perl, Python..Haxe. y Soporte para Ides externos (Intellij Idea, PhpStorm, Sublime, etc)

Mc en una terminal + Editor de Php



Algunas herramientas de colaboración como chat, mensajes, pizarrones (whiteboards), y la posibilidad de compartir todo el entorno en tiempo real.
Establecer permisos en forma gráfica (obviamente chmod funciona)



Todo ello dentro de una sola ventana del Navegador.




Podemos tener nuestro trabajo alojado en GiT por ejemplo o cualquier otro tipo de Repositorio e integrarlo sin problemas.


Podemos destruir nuestra VM y crear una nueva en minutos con toda la configuración necesaria y lista para comenzar a trabajar nuevamente. Hacer experimentos y volver a cero..etc.

Apache, Php, Phyton y Ruby ya vienen instalados



Llevándolo más allá, al ser una máquina virtual con Linux pre instalado, cualquier aplicación/herramienta o comando que estemos acostumbrados a utilizar con este sistema operativo, funcionará dentro de nuestra VM sin problemas (excepto por las que dependen de una la interfaz gráfica obviamente).


Vim, Mc, htop, emacs..la lista es demasiado larga.


Incluso tienen su propio manager de paquetes llamado Kpm (Koding Package Manager) que nos facilita enormemente la tarea de instalar servidores, frameworks, etc.


Desde la consola podemos ver los paquetes soportados invocando: kpm list

kpm nos va a ahorrar mucho tiempo
No hay soporte para Haxe todavía..pero eso no es un problema como verán más abajo.


Claro está que esta gente no come aserrín y el servicio que brindan es pago para algunas de las funcionalidades más avanzadas (como compartir nuestro entorno o tener una VM un poco mas potente, o más espacio en disco, etc).

Espacio en Disco. Puede Agrandarse hasta 6Gb
gratuitamente haciendo un poco de spam :D



Cosas a tener en cuenta utilizando el servicio gratis:


Solamente podemos utilizar una VM por cuenta.
El espacio así como la capacidad de procesamiento están limitadas.
No se puede dejar la VM encendida constantemente (Luego de 60 minutos de inactividad se apagará)
No podemos compartir el trabajo.


Pero mucho puede hacerse con la versión gratis (y espero que siga así). Veamos cómo se comporta haxe ahí dentro:


Primer paso: Instalación


Desde la consola: sudo apt-get install haxe
La otra opción es con el instalador que se encuentra en la página de OpenFL y seguir los pasos.
Instalará el compilador, librerías básicas, las herramientas (haxelib) y neko.




Luego sudo haxelib setup, creamos las variables de entorno para nuestro usuario

Una vez hecho esto, los pasos para instalar las librerias externas (openfl, lime, etc) es similar a lo que ya hemos visto con la diferencia de que al estar corriendo bajo linux, debemos tener permisos de escritura en el directorio /usr/lib, que se logra anteponiendo el comando sudo a cualquier instrucción (o loguearse como root).

Por ejemplo : “sudo haxelib run openfl setup”

Si utilizamos el paquete de instalación que se encuentra en la página de openfl, la cosa va mucho mas rápido, aunque los resultados son los mismos.


Testeamos que todo vaya bien..



Perfecto! Compilemos algo de prueba: En mi caso, cloné desde GiT el directorio con los ejemplos que hemos visto hasta ahora..



Editando en la solapa superior..compilando y ejecutando en la inferior



Todo funciona correctamente, pero veamos un ejemplo un poco más divertido:



Seguro ya lo conocen..y compiló sin una queja.
Debajo, simplemente edito el index.html del servidor para que apunte al archivo generado.

Abro el Navegador y apunto hacia el servidor web..




El Resultado..



Por el momento y en mi opinión, este tipo de estructuras para el trabajo en forma remota son interesantes pero les falta un largo camino todavía. Pueden utilizarse en proyectos chicos de forma autónoma, pero a la hora de analizar (y sobre todo depurar) código quizás no se encuentren a la altura o dependan de otras herramientas (externas al entorno). 

Ello no quita de que sea una alternativa para tener en cuenta. Como lugar de trabajo experimental es ideal. Vale la pena probar o no?