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

Morse Code Talk, Un Nuevo Plugin de Pidgin para Comunicarse en Código Morse


Me complace anunciar que acabo de terminar de crear una primera versión de un plugin para Pidgin al que puse por nombre Morse Code Talk, con el cual es posible comunicarse en Código Morse mediante la modalidad de Chat emitiendo o traduciendo los mensajes.

Por el momento el idioma está en inglés y ya está compilado para Linux y Windows, cabe mencionar que para que funcione se requiere contar con Pidgin  2.7.9 o superior.

El Código morse es un Sistema de comunicación mediante señales emitidas representados gráficamente por puntos y rayas que a su vez pueden ser representados por sonidos de corta y larga duración de letras, números y algunos caracteres adicionales según el Alfabeto Internacional.

Tal vez este complemento para Pidgin no sea de interés para muchos, pero puede ser una manera diferente y divertida de comunicarse y sobre todo aprender este alfabeto;  el tiempo que me tomó crear el motor del código morse me sirvió para aprender un poco éste sistema, y creo que con la práctica es probable que se pueda llegar a entender mejor las señales emitidas de esta manera.

En Linux la instalación  es sencilla, solo hace falta descargar el binario empaquetado como: pidgin-morsecodetalk-bin-1.0.0.tar.bz2, descomprimirlo y copiar la librería morsecodetalk.so a ~/.purple/plugins/ dentro del directorio personal (Si no existe el directorio plugins, crearlo). Para windows he creado un instalador, no creo que no tengan problemas al instalarlo.

La versión 1.0.0 del plugin consta con las funciones de:

Emisión de morse a texto y de texto a morse.

Posibilidad de escribir en morse con señales del mouse donde un clic representa a un punto, doble clic una raya y clic derecho un espacio en blanco. Esta funcionalidad se puede deshabilitar y usar únicamente el teclado.

Como se ve en el formulario de configuración, ya están definidas las características con el que contará en una versión futura, como es la emisión de Código Morse en forma de audio con los atributos que se indica.

También se presenta una tabla de ayuda con los caracteres del Alfabeto Morse Internacional.

Para empezar a usarlo es importante saber que cada letra escrita debe estar separada por un espacio y cada palabra escrita debe estar separada por tres espacios: Ejm:

HELP ME = .... . .-.. .--.   -- .

Invito a todos a descargar Morse Code Talk y  probarlo. Cualquier problema que encuentren o recomendaciones con respecto al plugin hacérmelos llegar al correo o comentarlo aquí.

Problemas de certificado SSL en Pidgin


Después de haber instalado el msn-pecan en pidgin (en linux), y ejecutar el servicio desde el protocolo WLM, en ocasiones suele ocurrir un error de credenciales SSL.

La solución está en exportar la siguiente variable al entorno del Sistema Operativo:

$export NSS_ALLOW_WEAK_SIGNATURE_ALG=1
$pidgin

Luego de ello, el error debe haber desaparecido.

Mensajerias Instantáneas


Tienes una cuenta en msn, yahoo o en cualkier otro?,  no dejaré de ser como la mayoria de personas en este planeta, y no dejaré de comunicarme con los contactos que hice cuando tenia a ventanitas rodeandome, pero!! me preguntan cual es mejor programa de comunicación instantánea sobre linux o Bsd?, yo diría que no lo sé, el de mi uso es pidgin, pero tambien tengo el kopete y emesene (no los utilizo mucho)…

Tankilamente diria que pidgin es el k más me agrada de los 3 :), y a ti?

Gnome + Debian Lenny

Pidgin – Software de Mensajería Instantánea Open Source


Pidgin

Descargar Pidgin

Protocolos soportados a la fecha de publicación de este post:

  • AOL Instant Messenger (a través del protocolo OSCAR o el TOC)
  • Bonjour
  • Gadu-Gadu
  • Google Talk
  • ICQ (a través del protocolo OSCAR o el TOC)
  • Internet Relay Chat (comunmente llamado IRC)
  • MSN
  • MySpaceIM
  • QQ
  • Jabber
  • Lotus Sametime
  • Novell Groupwise
  • OpenNAP
  • SILC
  • SIMPLE
  • Yahoo!
  • Zephyr

Como vemos, Pidgin , el antiguamente llamado gaim, es uno de los programas de comunicación instantánea mas usados sobre linux, soporta muchos protocolos y además posee muchas características y no tiene nada que envidiar a otros:

  • Conversaciones mostradas en pestañas
  • Posibilidad de conectarse a varias redes simultáneamente
  • Registro de conversaciones
  • Permite el reemplazo de los nombres de los contactos de la lista
  • Muestra un aviso o reproduce un sonido cuando un contacto se conecta/desconecta o cambia de estado
  • Posibilidad de transparencia para las ventanas de contactos y de conversación mediante un plugin
  • Transferencia de archivos .
  • Más en: http://www.pidgin.im/