martes, 31 de mayo de 2016

Franz: ¡Una aplicación para el chat de todas tus aplicaciones!


Hola! Hace algún tiempo vengo sintiéndome un poco incómodo por mis programas de mensagería: Skype, Messenger para Facebook y WhatsApp.

Y el problema es que los ocupo demasiado. Pero llega un momento en que me hostiga tener tantas ventanas abiertas. Suele suceder.

Por ello me di a la tarea de buscar una app que as englobara en una sola y encontré "Franz", una app en la que puedes registrar tus servicios de mensajería y ¡estar con todos en una sola ventana!

Aunque parece que no es mas que una interfaz entre el web y el programa, no deja de sorprender su eficiencia.



Es genial, yo la empecé a usar hace poco y la verdad ¡¡es muy eficiente!!.


La puedes descargar de aquí.

Espero te haya sido de utilidad ;)

lunes, 16 de mayo de 2016

MySQL y Procedimientos Almacenados


Algo que se vuelve tedioso es cuando una consulta se empieza a hacer muy grande y resulta horroroso ponerla en el $sql del php, o algo similar en otros lenguajes de programación.

La solución que encontré desde hace mucho tiempo es efectuar las consultas mediante llamadas a procedimientos almacenados y es realmente muy fácil.

Lo que se hace difícil es como implementarlo.

Primero que nada se requiere un "cliente" que haga simple la escritura del código, mientras que algunos programadores se van por el sublime text, yo he preferido usar HeidiSQL, un cliente para MySQL bastante potente y ¡gratuito!.

Para efectuar tu procedimiento almacenado te dejo el siguiente "template"


drop procedure if exists _SPProcedimiento_Prueba;

DELIMITER //

create procedure _SPProcedimiento_Prueba(
xClave varchar(8)
)

begin

Select campo_1, campo_2, campo_3 from tabla_campos where tabla_campos.clave = xClave;

end
//
Delimiter ;


call _SPProcedimiento_Prueba('t001')


Lo que el código hace es lo siguiente:
  • En la primera línea "drop procedure..." lo que hace es que se le está indicando que si el procedimiento ya existe, se debe eliminar. Muy útil cuando ya tienes el procedimiento y quieres sobre-escribirlo una y otra vez.
  • Las partes del "DELIMITER" son indicaciones para decirle que tome lo que esté en ese bloque como parte del código.
  • Las partes Begin y End encierran el proceso, tal como si fueran las {} de los lenguajes como C o Java.
  • La línea donde se encuentra el "xClave", es la parte donde se le agregan los parámetros, esto es, variables que quieras incluir en tu código o consulta.
  • La parte "Select..", Es donde podemos implementar las consultas que deseemos hacer, y se puede implementar los parámetros que recibimos (xClave).
  • La parte del "call _SPProcedimiento_Prueba('t001')" es en donde se llama a la rutina, la instrucción es "call", seguida del nombre del procedimiento que se creó.
Lo que resta es mostrar un pantallazo de cómo se ve esto en HeidiSQL, para que se note el porqué se ocupa esta herramienta.



Espero te sea de utilidad ;)


miércoles, 27 de abril de 2016

DUMP de una objeto en Java




En muchas ocasiones me ha ocurrido que quiero revisar el contenido de mis objetos y revisar cuales son los valores que tiene asignados, infortunadamente no hay una función en Java que permita hacer ese comportamiento similar al print_r() o var_dump() del tan famoso PHP.

Afortunadamente leí por ahí un truco y quiero compartirlo con ustedes. Es una implementación simple pero con mucho potencial y consiste en recorrer en un ciclo todos los campos de una clase, sabiendo el nombre, se obtiene su valor y se imprime por consola. Veamos:

Field[] fields = obj.getClass().getDeclaredFields();
try {

     //recorremos el array obtenido a través de nuestro objeto
    for (Field field : fields) {  
               
        //field.getName() da el nombre del campo y field.get obtiene el valor
        System.out.println(field.getName() + " : " + field.get(obj));  
           
     }
} catch (IllegalArgumentException | IllegalAccessException ex) {
      Logger.getLogger(JavaDump.class.getName()).log(Level.SEVERE, null, ex);
}


Como pueden ver, es muy simple el aplicarlo, solo hay que crear la clase que se quiere extraer, y mandarsela como parámetro a esta función.

Si te interesa el proyecto, dejo el proyecto de Netbeans y las clases por separado, para que en caso de no tener este IDE, puedas intentarlo por tu cuenta.

Aquí el proyecto de NetBeans

Aquí las clases por separado

Espero te sea de utilidad ;)