Plugins Utiles para Gulp

He aqui una lista de plugins que nos podrían brindar mucha ayuda a la hora de comenzar un proyecto web (FrontEnd) o posiblemente cualquier tipo de proyecto, al final del dia es una herramienta muy utilizada por frontend developers pero puede ser adaptada para cualquier otra cosa, solo hay que tener los plugins correctos a mano y saber como utilizarlos claro para sacarles el mayor provecho.

Sigue leyendo

Visualizador MongoDB (Proyecto)

MongoDB como base de datos se ha estado convirtiendo en algo muy común hoy dia, la mescla con la misma con nodejs al parecer ha caído en gracia a la comunidad de desarrolladores y no solo nodejs sino cualquier otra tecnologia muchos desarrolladores han comenzado a usarla mucho y probar con ella.

MongoDB una base de datos no relacional (nosql) donde no tienes un esquema fijo para almacenar tus datos parece ser un mundo lleno de fantasias, hasta el punto donde tu proyecto pasa a producción y te cansas de estar usando su shell (Que es muy poderoso) para cualquier minima cosa, incluso solo ver un documento y en acciones es un poco difícil leerlo.
Sigue leyendo

Iniciando con Gulp

El automatizar procesos siempre ha sido una de las tareas de los ingenieros y en el área de software no es la excepción a la regla. Con el auge hoy día de los super sets de JavaScript (CoffeScript y demás) y preprocesadores de Css (Sass, less y demás) se convierte algo tedioso e inhumano estar procesando esos archivos manualmente cada vez que es realizado un cambio en uno de estos, así que para ese tipo de tareas y/o tareas particulares que nuestros proyectos requieran lo podremos lograr con lo que hoy se conocen como “Task runners” ahi es donde Gulp hace su entrada.

En este tutorial estaremos viendo uno de los mas nuevos en esta área y es Gulp Es relativamente nuevo pero una vez llego a la vista de los desarrolladores muchos han entrando en una relación seria con este producto.
Sigue leyendo

Queue Job AMQP (RabbitMQ) y Api web usando Nodejs (Hapi)

En este tutorial estaremos viendo como crear un job worker Cliente y Servidor del mismo, usando HapiJs (Nodejs Framework) y RabbitMQ como nuestra cola de trabajo.

Esto de las colas de trabajos es muy util a la hora de quitarle carga a nuestras aplicaciones y volverlas asíncronas en torno a cuando se realiza se realiza una petición de realizar cierta acción que podría comprometer el rendimiento de nuestra aplicación, se puede decir que es una forma de comunicar sistemas.

Las colas de trabajos suelen usarse mucho cuando nuestros sistemas tienen que interactuar con sistemas de terceros y los cuales no tenemos el control de disponibilidad / rendimiento cosa que si le agregamos la capacidad de trabajar procesos en background con una cola nuestra aplicación no sufrirá ningún inconveniente si estas aplicaciones de terceros esta dando problemas.
Sigue leyendo

Angular Logo

Service & Factory Angular

Como todo proyecto organizado no podemos tener toda la logica y/o funcionalidades core en controladores y mucho menos en vistas, AngularJs tiene el concepto de Servicio esto lo implementan de 2 formas, Service y Factory, ambos podrian ser usados del la misma manera pero es bueno tener en cuenta como funcionan para así sacarles el mas provecho.

Antes de hablar de service y demás cosas es bueno saber que AngularJS maneja el concepto/funcionalidad de inyección de dependencia (dependency injection), Angular utiliza esto a la hora de requerir cierto componente desde cualquier parte de la aplicación este es inyectado a nuestro controlador (Digamos). Este concepto lo usamos desde el principio, un ves decimos en nuestro controlador:
Sigue leyendo

Angular Logo

Compartir data entre controladores AngularJS

Algo que sucede bastante mientras se esta usando AngularJS es querer que 2 controladores interactuen con la misma data, esto se puede hacer de varias maneras, o con un servicio o una factoría (La verdad es la misma forma de hacer digamos).

Ejemplo:

Digamos que tenemos un template con su app test con 2 controladores main y main2 y ambos estan pintando la variable service.message.

HTML

<div ng-app='test'>
    
    <div ng-controller='main'>
        
        {{ service.message }}
        
    </div>
    
    <div ng-controller='main2'>
        
        <p>{{ service.message }}</p>
        
        <input type="text" ng-model='service.message'/>
    </div>
    
</div>

JavaScript

    var app = angular.module('test',[])

    app.controller('main',function($scope,ServiceTest,serviceFactory){
        $scope.service = ServiceTest.data;
    })
    
    app.controller('main2',function($scope,ServiceTest,serviceFactory,){
        $scope.service = ServiceTest.data;
    })
    
    app.service('ServiceTest',function(){
        this.data = {
            message : "From service init"
        }
    })

    app.factory('serviceFactory',function(){
    
        return {
            message:"nice"
        } 
    });

Para ambas formas funcionara de la misma manera, una vez inyectemos el service o la factoría tendremos la referencia de la misma variable y si cambiamos el valor de dicha variable sera reflejado en ambos lugares por que es la misma referencia.

Referencia

Codigo completo

Fabric logo

Fabric ( Python command line tool )

Hace unos poco dias mientras subia unos cambios de una aplicación me puse a buscar una herramienta que me pudiera ayudar con la automatización de esto de “subir cambios” y “desplegarlos” claro hecho en python o relacionado y encontre varias pero Fabric fue la que mas me llamo la atención, así que Fabric sera.

Que es Fabric?

Fabric es una libreria hecha en python para darnos facilidad al realizar tareas via “command line” y ssh, es como trabajar con “bash script” pero con python (Super poderes) y a eso agregarle mas Super poderes. En si fabric no es una herramienta para hacer “despliegues” o manejar procesos ni nada por el estilo pero tiene la capacidad para serlo y muchos la usan para ese tipo de cosas en conjunto con “SuperVisord” pueden hacer una buena combinación.

Instalación

pip install fabric

Que Puede hacer fabric

  • Ejecutar tareas en servidores remotos
  • Ejecutar tareas tanto como un single user o un sudo user
  • Puede ser ejecutado sobre varios servidores la misma tarea
  • Puede ejecutar tareas tanto en paralelo como en secuencia (Uno de tras de la otra)
  • Tiene la capacidad de abortar tareas si algo inesperado sucede

Ejemplos

Hello word

#fabfile.py
def hello():
    print "Hola mundo"

Para ejecutar esta tarea con fabric es simplemente ir a directorio donde esta dicho archivo y ejecutar fab.

#simplemente
fab hello

#o espesificar el archivo de esta forma
fab hello -f fabfile.py

Todo bien hasta aqui e imprime mi “Hola mundo“, ahora si quiero que este mismo hola mundo se ejecute en diferentes servidores lo que tengo que hacer es lo siguiente.

#simplemente
fab hello -h localhost,remotehost.net,remotehost.dev

#o espesificar el archivo de esta forma
fab hello -f fabfile.py -h localhost,remotehost.net,remotehost.dev

Hecho esto su “script” se ejecutara en los sevidores proporcionados, esto fabric lo hace via ssh por lo que les pedira la clave de cada uno de esos servidores, una opcion para evitar esto es relizar un login ssh sin clave.

Hello Server

Este ejemplo lo que hara sera ejecutar un comando en cada uno de los servidores que ejecutemos nuestro “script”.

#fabfile.py

def hello_server():
    run("uname -a")

El ejecutarlo sera igual que el ejemplo anterior.

#simplemente
fab hello_server -h localhost,remotehost.net,remotehost.dev

#o espesificar el archivo de esta forma
fab hello_server -f fabfile.py -h localhost,remotehost.net,remotehost.dev

Para ejecutar un comando en nuestro servidor remoto|local tenemos 2 opciones:
run(“comando”) Ejecutar un comando.
sudo(“comando”) Ejecuta un comando como super user.
local(“comando”) #Todo ver diferencias.

Ejemplo Completo

Digamos que realizamos algo en una app en desarrollo y queremos que produccion tenga esos cambios.

#fabfile.py

from fabric.api import run,env,prompt
from fabric.colors import red,green

env.hosts = ['localhost']

app_dir = "/var/www/superapp/"
env_dir = "/var/www/superapp/env/"

def activate_env():
    cd(env_dir)
    local("source bin/activate")
    print(green("Entorno activado"))

def load():
    local("git pull origin master")
    print(green("Pull realizado"))

def test():
    local("command to test your code")
    print(green("Aplicación probada"))

def reload_app():
    local("tumbar la aplicación previa e iniciarla nuevamente")

def deploy(message):
   
    print(message)

    cd(app_dir)
    
    load()
    
    test()

    result = prompt("Quiere reiniciar la aplicacion?[si/no]")

    if result == 'si':
        reload_app() 

Para ejecutar esto:

#simplemente
fab deploy:"mensaje"

Este ejemplo digamos que activa el entorno virtual (virtualEnv 😀 ), obtiene los cambios de un control de versiones, prueba el código y re inicia la aplicación con los nuevos cambios.

Los comandos utilizados

cd – Este es utilizado como el mismo comando por consola.
red / green – Estos comando retornan texto de dicho color y para ser imprimidos en la consola.
prompt – Detiene la ejecución y le pide al usuario que introduzca algún valor.

La variable env.hosts es utilizada para ya no tener que decir fab -H host1,host2,host3 sino que simplemente coloco ahi los targets a donde quiero ejecutar la tarea.

Referencia

Pagina oficial

Docs