viernes, 3 de octubre de 2014

REDIS


Redis básicamente es una "BD" key/value, donde lo mas normal es guardar mensajes que puedan desecharse, que no sean muy importantes, y la ventaja sobre otra BD es que es super rapida pues esta en memoria.

Suscribirse a un canal y publicar

Esto es muy útil para "escuchar" cuando ciertas llaves (canal) cambie. El código en Node sería, para escuchar:

const redis = require('redis');
const client = redis.createClient();

//el canal que queramos, puede ser por usuario, general, etc
client.subscribe('pubsub');

//escuchamos el canal, cuando algo se reciba, lo procesamos
client.on('message', function(channel, message){
    console.log('Recibiendo mensaje');
    console.log(message);
});

console.log('Trabajando');

Y para probar, en el mismo redis console (redis-cli) lanzamos un mensaje al canal:

PUBLISH pubsub "mensaje"

Y el node lo recibe sin hacer más!

Fuente: http://stackoverflow.com/questions/4441798/how-to-use-redis-publish-subscribe-with-nodejs-to-notify-clients-when-data-value

Desde PHP: http://xmeng.wordpress.com/2011/11/14/pubsub-in-redis-using-php/

Múltiples BD

Redis puede tener muchas BD, por default 16, y esto sirve para no mezclar llaves de diferentes temas, o hasta para cuando se quiere hacer un flush, solo se hace sobre la BD que se quiere.

No hay manera de identificarla por nombre aun :( pero podemos llevar un registro en Node (o donde sea) que diga que la BD 1 es de, sesiones por ejemplo.

Para cambiarse de BD default (0) hacemos: SELECT <x>

viernes, 19 de septiembre de 2014

UBUNTU - MySQL - AWS - Conexión remota


En un servidor AWS le di salida al puerto de mysql pero no me podía conectar desde afuera (si ya se, no debería porque no es seguro :P ), entonces modifique el /etc/mysql/my.cnf y comente la línea de bind-address, reinicie el servicio y voilá!

jueves, 18 de septiembre de 2014

GRUNT - Handlebars


https://github.com/gruntjs/grunt-contrib-handlebars

'use strict';

module.exports = function(grunt) {

    grunt.registerTask('default', ['watch']);

    // Project configuration.
    grunt.initConfig({
        pkg: grunt.file.readJSON('package.json'),
        handlebars: {
            compile: {
                options: {
                    namespace: 'handlebars'
                },
                files: {
                    './js/templates/templates.js' : ['./hbs/*.hbs']
                }
            }
        },
        watch: {
            handlebars: {
                files: [
                    './hbs/*.hbs'
                ],
                tasks: 'handlebars'
            }
        }
    });

    grunt.loadNpmTasks('grunt-contrib-handlebars');
    grunt.loadNpmTasks('grunt-contrib-watch');
};


GRUNT - Iniciando


Grunt es un script runner, su funcionalidad mayor es ahorrarnos el estar ejecutando diferentes comandos para generar nuestra aplicación.

En el Grunt, metemos toda la compilación, revisión de errores y hasta pruebas del sistema. Desde la compilación de JADE, Handlebars, uglify, concatenación hasta las pruebas en Mocha/Jasmine, pasando por deploy en directorios de producción o desarrollo (se recomienda un Grunt de desarrollo y un Grunt para producción)

http://gruntjs.com/

El que siempre vamos a incluir es el watch, que lo que hace es monitorear ciertos directorios y ejecutar tareas cuando haya un cambio en el o los directorios que se están monitoreando.

https://github.com/gruntjs/grunt-contrib-watch




miércoles, 10 de septiembre de 2014

BOOTBOX - Alertas y modales, dependiente de jQuery


Bootbox es un buen plug-in para mostrar alertas y modales, dependiente de jQuery.

Hace realmente lo mismo que se puede hacer con el plug-in modal (el normalito de siempre), pero la ventaja es que ya esta hecho, y solo se llama con javascript simple.

Fuente:

http://bootboxjs.com

Ejemplo:

var mensaje = {
                    message : "¿Desea eliminar el registro?",
                    buttons :{
                        cancel:{
                            className:"btn-danger",
                            label:"Cancelar",
                            callback:function(){
                                console.log("cancel");
                            }
                        },
                        confirm:{
                            className:"btn-success",
                            label:"Confirmar",
                            callback:function(){
                               console.log("success");
                            }
                        }
                    }
                }
                bootbox.dialog(mensaje);

martes, 9 de septiembre de 2014

JQUERY - Tips & Tricks


Escuchar cuando se envía una forma
 .submit()

Obtener todos los campos de una forma
$('#formAdd input[type!="submit"], #formAdd select').each()
Para este caso, buscamos de la forma con id (#) y luego le decimos que todos los inputs, EXCEPTO los de tipo submit, y por último también le decimos que los select.

http://api.jquery.com/submit/

Para formatear numeros
Encontre un buen plugin: https://github.com/teamdf/jquery-number/
Muy fácil el uso:
$.(valor,num decimals)
$.(1234,2) -> 1,234.00

Emular dobleclick
.dblclick() 

Obtener el contenido HTML de un elemento, o cambiarlo
.html()
.html('valor a poner') 

Buscar elementos
.find() 
Permite buscar elementos por su id, su nombre de tag, su class o alguna otra propiedad, y se pueden combinar elementos de búsqueda.
http://api.jquery.com/find/

$('.dataTables_scrollFootInner').find('#totalDebe').html('$ '+ $.number(totalDebe,2));
Busca primero por el class dataTables_scrollFootInner despues en lo que encontró, busca el elemento con el id totalDebe y por último asigna su valor HTML.

Ejercicios de jQuery
http://jqexercise.droppages.com/ 

Limpiar campos de forma
.trigger('reset') 

Detener el envio de un form, cuando se cacha el submit
$('#formEncabezado').submit(function(event){
    event.preventDefault();   
});

Cambiar de tabs
$('#polizaTabs a[href="#detalles"]').tab('show'); 



JAVASCRIPT - Validación de Formas con Parsley


Excelente librería para la validación de formas HTML:

http://parsleyjs.org/

Algunos ejemplos: