Tutorial de Creación de Plugins para Pidgin en Linux


Como sabrán, quienes siguen a menudo mi blog, hace unos meses creé un plugin para Pidgin – MorseCodeTalk, ahora quiero compartirles un pequeño tutorial para poder crear vuestras propias extensiones.

1- Creamos un Directorio de Trabajo:

# mkdir ~/development

2- Descargar las fuentes de Pidgin y moverlo al directorio creado:
En mi caso he descargado la versión 2.7.9.
http://www.pidgin.im/download/source/
3- Descomprimir las fuentes:

# tar -jxvf pidgin-2.7.9.tar.bz2

4- Configurar las fuentes:

# cd pidgin-2.7.9
# ./configure

4.1- Errores:
Si hay errores de dependencias, instala los plugins que falta:

Ejem: aptitude install intltool

4.2- Opciones:
– Usa –disable-vv si no necesitarás alguna funcionalidad.

Ejem: ./configure --disable-vv --disable-idn --disable-nm --prefix=/opt/pidgin

– prefix es para que se instale en /opt/pidgin

4.3- Advertencia:
Si ya tenías instalado pidgin anteriormente, te saldrá una advertencia, pero no te preocupes, podrás iniciar la nueva versión de Pidgin por consola.

Warning: You have an old copy of Pidgin at /usr/bin/pidgin.

5- Compilar las fuentes:

# make

Esto podría demorar un poco.

6- Crear el Plugin:
Para empezar crear el plugin deberemos dirigirnos al directorio siguiente:

$ cd libpurple/plugins/

Crearemos un plugin de ejemplo llamado holamundo que sólo nos mostrará una ventana de diálogo al activarlo, para ello debemos crear un fichero de acuerdo al lenguaje de programación que usaremos y el editor que prefieran, yo alterno entre gedit(editor gráfico) y nano(editor desde consola).

Pidgin ofrece API’s para crear extensiones en diferentes lenguajes, como C, Perl, Tcl, d-bus, para este ejemplo usaré el lenguaje de entre ellos que más conozco, que es C (no C++).

6.1- Crear el Código del Plugin:

$ nano holamundo.c
#define PURPLE_PLUGINS
#include 
#include "notify.h"
#include "plugin.h"
#include "version.h"

static gboolean
plugin_load(PurplePlugin *plugin) {
    purple_notify_message(plugin, PURPLE_NOTIFY_MSG_INFO, "Hola Mundo!",
                        "Este es mi primer Plugin para Pidgin", NULL, NULL, NULL);

    return TRUE;
}

static PurplePluginInfo info = {
    PURPLE_PLUGIN_MAGIC,
    PURPLE_MAJOR_VERSION,
    PURPLE_MINOR_VERSION,
    PURPLE_PLUGIN_STANDARD,
    NULL,
    0,
    NULL,
    PURPLE_PRIORITY_DEFAULT,

    "core-holamundo",
    "Hola Mundo",
    "1.0",

    "Plugin Hola Mundo",
    "Plugin Hola Mundo",
    "Beastieux Zeroo ",
    "https://saforas.wordpress.com",

    plugin_load,
    NULL,
    NULL,

    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL,
    NULL
};

static void
init_plugin(PurplePlugin *plugin)
{
}

PURPLE_INIT_PLUGIN(holamundo, init_plugin, info)

La siguiente parte del código nos permite dotar de información suficiente para el plugin, acontinuación describo cada uno de los parámetros:

static PurplePluginInfo info = {
    PURPLE_PLUGIN_MAGIC,    /* Este deberá ser siempre
                               PURPLE_PLUGIN_MAGIC.*/

    PURPLE_MAJOR_VERSION,   /* Este parámetro ayuda a determinar
			       la versión de Pidgin en el que es
			       compilado, del mismo modo permitirá
			       usar el plugin sólo en la versión
			       donde fue compilada */

    PURPLE_MINOR_VERSION,   /* Versión a partir del cual
			       podrá funcionar el Pidgin */

    PURPLE_PLUGIN_STANDARD, /* PurplePluginType: Hay 4 diferentes valores
			       el primero es PURPLE_PLUGIN_UNKNOWN;
                               no debería ser usado, PURPLE_PLUGIN_STANDARD;
			       este es el valor más usado.
			       PURPLE_PLUGIN_LOADER; usamos este cuando
			       queremos cargar plugins no nativos
			       por ejemplo los hechos en Perl o Tcl,
			       por último PURPLE_PLUGIN_PROTOCOL;
			       si tu plugin permitirá conectar
 			       con otras redes.*/

    NULL,		       /* Si estás escribiendo un Core Plugin
			       debería ser NULL, Si estás escribiendo un
			       Pidgin Plugin debes usar PIDGIN_PLUGIN_TYPE.
			       Si estás escribiendo un Finch Plugin
                               debería usar FINCH_PLUGIN_TYPE.*/

    0,			       /* Este parámetro es para determinar los flags.
			       como el disponible para poner a invisible
                               (PURPLE_PLUGIN_FLAG_INVISIBLE).
			       Con ello haremos que el plugin no aparezca
			       en la lista de plugins. */

    NULL,		       /* Este es un GList de dependencias de plugins.*/

    PURPLE_PRIORITY_DEFAULT,   /* Determina la prioridad que libpurple dará
			          a tu plugin. Existen 3 posibilidades,
			          PURPLE_PRIORITY_DEFAULT,
			          PURPLE_PRIORITY_HIGHEST,
			          PURPLE_PRIORITY_LOWEST. */

    "core-holamundo",	        /* Es el ID de tu plugin.*/

    "Hola Mundo",		/* Es el Nombre de tu plugin.*/

    "1.1",			/* Es la Versión de tu plugin.*/

    "Resúmen Hola Mundo",	/* Es el Resúmen de tu plugin.*/

    "Descripción Hola Mundo",	/* Es la descripción de tu plugin.*/

    "Tu Nombre ",	/* Datos del desarrollador del Plugin. */

    "http://...",	/* La Web del Plugin, de donde pueden
				   descargarlo, reportar bugs, etc.*/

    plugin_load,	/* La función que se carga cuando
			   se inicia el plugin.
			   Debería ser de tipo gboolean*/

    NULL,		/* Es llamado cuando libpurple
			   se descarga, también
			   deberá ser de tipo gboolean.*/

    NULL,		/* Es llamado cuando libpurple
			   se destruye, también
			   deberá ser de tipo gboolean.*/

    NULL,		/* Deberá apuntar a un PidginPluginUiInfo.*/

    NULL,		/* Determina si es un PurplePluginLoaderInfo
			   o PurplePluginProtocolInfo*/

    NULL,		/* Puntero que apunta a una estructura
			   PurplePluginUiInfo.
			   Puedes encontrar un ejemplo de ese
			   tipo de código en:
			   libpurple/plugins/pluginpref_example.c */

    NULL,		/* Es una función puntero donde se definen
			   acciones. Debe ser de tipo GList
			   *function_name(PurplePlugin
			   *plugin, gpointer context)*/

    NULL,		/* Es un puntero reservado para el futuro,
			   lo setearemos a NULL
			   porque no lo necesitamos.*/

    NULL,       	/* Es un puntero reservado para el futuro,
			   lo setearemos a NULL
			   porque no lo necesitamos.*/

    NULL,		/* Es un puntero reservado para el futuro,
			   lo setearemos a NULL
			   porque no lo necesitamos.*/

    NULL		/* Es un puntero reservado para el futuro,
			   lo setearemos a NULL
			   porque no lo necesitamos.*/
};

6.2- Compilar el fichero holamundo.c:

$ make holamundo.so

6.3- Copiar el plugin creado en el directorio de pidgin:

$ cp holamundo.so ~/.purple/plugins/

6.4- Ejecutar Pidgin y probar el plugin:

$ /opt/pidgin/bin/pidgin

Para crear un plugin con interfaces más elaboradas podemos usar las librerías GTK, y para la interacción con pidgin usamos las librerías libpurple; una buena combinación de C/GTK/Libpurple, y de los conocimientos necesarios del la estructura funcional de pidgin nos permitirán realizar los complementos que queramos, pueden buscar toda la información necesaria en la wiki de desarrolladores de pidgin. Una recomendación de mi parte es que revisen los códigos fuente de los plugins existentes en Pidgin Plugins, y tomarlos como referencia para construir los suyos, es lo que hice antes de empezar a crear mis propios complementes . Ahora, si quieren hacer la versión para windows, generar el dll tiene un proceso algo mas tedioso, se necesitará la ayuda de cygwin en windows y descargar e instalar todos los paquetes del cual pidgin depende para poder compilar las fuentes.

Anuncios

Componentes adicionales para Java


Jarvana es un proyecto que centraliza mediante búsquedas cientos de proyectos y clases de java desde el repositorio central de Maven. Para hablar de Maven haría falta otro post, asi que esto queda pendiente, sin embargo; es una utilidad sumamente importante al desarrollar proyectos más estructurados. No hace perder mucho tiempo por su capacidad de búsqueda, hay gran cantidad de proyectos que puedes encontrar e  incluirlos en tu propio proyecto, existe documentación y más.

 

Aquí, algunas cosas interesantes que se puede encontrar, por ejemplo se sabe que las librerías awt o swing de java no contienen componentes adicionales que podamos necesitar, como: un CheckListBox, Calendarios, etc; es posible que tu mismo tengas que crearlos o si no tienes el tiempo que se necesita para ello, puedes buscar componentes re-utilizables. Ya tienes la solución, solo utiliza el buscador de Jarvana.

JasperReports – Herramienta Open Source para elaboración de Reportes en NetBeans


Hoy quiero mencionarles a JasperForge, un proyecto Open Source que va de la mano  con JasperSoft,  el lado comercial del mismo, toda una suite de recursos requeridos en el proceso de presentación de información extraída de  una fuente de datos cualquiera. JasperReports es una de las herramientas mas populares para la emisión de reportes que tiene integración con Java, también podemos mencionar a iReport como diseñador de reportes,  JasperServer como un servidor de reportes via Web, JasperAnalysis que presenta conectividad con bases de datos OLAP, o mucho mejor JasperETL exclusivamente para Business Intelligence,  que interviene en la presentación de datos desde el procesos de ETL con el que se consolida la información de los Datamarts, Datawarehouse, o inclusive de Minería de datos.

Reportes Open Source

Si eres programador en Java seguro que lo conoces, y si estás iniciándote, lo tienes a la mano. xD.  Actualmente lo estoy usando en un proyecto que desarrollo y va genial.

Ahora, ¿Cómo integrarlo en nuestra IDE de Desarrollo?, yo solo lo he integrado en NetBeans, que es el IDE en el que yo suelo trabajar a menudo, los pasos para integrarlo son relativamente sencillos como :

1) Descargar el Plugin para NetBeans 3.x (Aquí)

2) Desde NetBeans ir a:

Tool -> Plugings -> Downloaded -> Add Plugins -> (Seleccionar los archivos con extensión .nbm)

3) Instalarlos: En mi caso los archivos *.nbm que he obtenido al descomprimir el archivo descargado anteriormente fueron:

iReport-3.7.6.nbm

jasperreports-components-plugin-3.7.6.nbm

jasperreports-extensions-plugin-3.7.6.nbm

jasperserver-plugin-3.7.6.nbm

Ahora ya está todo en su sitio, si deseas trabajar con el reporteador en modo diseño bastará con agregar un Emply Report al proyecto desde el menú File -> New File

PEAR – PHP Extension and Aplication Repository


PEAR ( PHP Extension and Aplication Repository)  es un framework de componentes reusables PHP. abarcan código que va desde la autenticación de usuarios hasta los servicios web, pasando por el manejo de ventanas, encriptación de datos, generación de planillas de cálculo, gestión de imágenes, sistemas de archivos, manejo de fechas, matemáticas simples y complejas, funciones financieras, XML, internacionalización, bases de datos, etc.; lo cual hace que PHP sea una opción a tener en cuenta.

pear

Sin duda estos componentes nos ahorran mucho tiempo de programación y rompernos las cabezas, gracias a la reutilizando código escrito previamente por otras personas.

Ver: PEAR-PHP

Ahorrar más, Ganar más y Cobrar menos al cliente


Trabajando, estudiando y escribiendo de ‘mes’ en cuando :)……

Este cuadro lo hicimos para tener una propuesta alternativa  al  desarrollo con .NET.

Los precios fueron cotizados por un amigo ya hace algún tiempo, y creo que faltan algunas especificaciones en cuanto a la norvatividad de las licencias, pero solo es para dar una idea.

desarrollo software bajo net

Para desarrollar un proyecto optamos por el paquete 2 , solo que .NET Framework era parte de los requerimientos del docente de la facultad, creo que pronto estará portado totalmente para funcionar con mono.