Charlas de GNOME Hispano: Glib básico

Relator: Roberto Majadas (telemaco)
Moderador: Germán Poo (gpoo)
Domingo 08 de diciembre de 2002, 21:30 horas UTC
irc.gnome.cl #gnome-hispano

gpoo
bien
Recomenzamos las charlas de programación en GTK+/GNOME
las cuales tienen el interes de permitir a mas programadores acercarse
 a este mundo de programacion
La charla de hoy sera
glib basico
donde se tocaran topicos como:
tipos de datos, mensajes de salida, cadenas, temporizadores
algunas indicaciones:
La charla tiene una duracion de 1 hora
las preguntas me las formulan a mi, para evitar distraer al expositor

y yo les doy voz para que puedan plantearlo en la medida que el expositor
 me lo indique
posteriormente habra 30 minutos de consultas
las cuales seran libres
sin moderacion
si desean guardar los logs, no olviden dejar su cliente IRC en modo
 "Conference"
para evitar que salgan los mensajes de entrada y salida de usuarios

en Xchat se habilita con el boton "<" de abajo en la derecha
sin mas que decir
dejo con ustedes a Roberto Majadas, quien es coautor del libro GNOME

http://libros.es.gnome.org/librognome/index.php
adelante telemaco
telemaco
Hola buenas noches o buenas tardes
segun donde esten situados en el planeta ;)
como bien ha dicho gpoo
teneis en la ultima url 
un poco de documentacion que estamos desarrollado los chicos de gnome-hispano

que aunque no esta terminada , nos va a ser muy utils
para empezar , voy a hablar un poco de que es glib
como una vision global y despues pasare a explicar conceptos basicos

Glib es una libreria desarrollada para hacer la vida mas sencilla
 al desarrollador
es ante todo es un libreria que ofrece a los desarrolladores una serie
 de ventajas
es una libreria que es multiplataforma 
lo cual significa que podriamos usarla en gnu/linux , unix , bsd y
 no tendriamos que hacer un esfuerzo muy significativo para adaptarnos
 a ella
es una libreria que ofrece una serie de tipos basicos y tipos asbtractos
 de datos
que ya veremos mas adelante
gpoo
<PeSa> glib es multiplataforma, cuales plataformas???
telemaco
hay una pregunta
gnu/linux , unix , solaris , hpux , macosX y tambien funciona en windows
 ;)
gpoo
<unimauro> Pordriamos utilizar aplicaiones de Glib en windows?

telemaco
aunque esta mas probada en sistemas gnu/linux y unix 
si que se podria
gpoo
<epplestun> que digan todas las soportadas por glib
<epplestun> todas del tipo unix e incluso windows
telemaco
de hecho he oido decir , es un rumor , que en la 2.2 se certifica
 su uso en win
bueno , prosigo 
y otra caracteristica importantisima es GObject
que es nuestra implementacion de un sistema de objetos 
que anteriormente estaba en gtk+ , lo cual no era muy beneficioso
 , porque a GNOME siempre le ha gustado que las cosas que vayan por
 debajo sean independientes de las X y de cualquier entorno grafico

Luego tambien implementa cosas como manejo de hilos , de modulos dinamicos
 , gestion de pilas , colas , listas enlazadas , arboles , temporizadores
 ....
vamos , todo lo que se suele usar a diario en la vida de un programador
 y que es muy molesto de implementar 
Hasta aqui alguna pregunta ?
bueno pues sigo
ahora vamos a empezar por lo mas basico de glib
los tipos
----------
gpoo
telemaco, hay algunas preguntas
telemaco
adelante
gpoo
<PeSa> Gobject permite reflexion?
--- gpoo fija modos [#gnome-hispano +v PeSa]
telemaco
PeSa: define reflexion ?
no entiendo el termino
PeSa: puedes hablar ahora :)
PeSa
reflexion es si se puede indagar sobre el objeto
osea puedo en tiempo de ejecucion saber que metodos usa un objeto
 y todo eso...
en java seria Class...
pues la clase Class
telemaco
PeSa: mmm , pues nunca me lo habia planteado
gpoo
es lo que usa el programa de Joaquin Cuenca
capaz de tomar un programa GTK+/GNOME en proceso
telemaco
me imagino que se podria rastrear la estrutura
gpoo
lo "interroga" y genera un archivo XML de su interfaz
todo en tiempo de ejecucion
PeSa
he mirado el programa... pero el hace la reflexion a travez de una
 libreria que captura los datos
osea que lo que se hace es espiar mensajes... pero no hay problema
 continuemos.
gpoo
otra pregunta:
telemaco
dime
gpoo
<ekeko> GObjects, desde qué versión está fuera de gtk?
telemaco
desde Gnome2
--- gpoo fija modos [#gnome-hispano -v PeSa]
gpoo
otra mas:
<epplestun> una pregunta, glib es un acopele de C para gnome


<epplestun> es decir retocado el C para programar sobre gnome

 ...
telemaco
no , es una libreria que te permite hacer ciertas cosas de modo mas
 sencillo 
pero es ansi c de toda la vida
algo mas ?
gpoo
no, nada mas
solo quiero mencionar
que para no retrasar tanto la charla
dejare un ronda breve en 25 minutos mas
y luego el resto despues de terminada la charla
pero envienme las consultas, que las voy apilando :-)
telemaco
por mi ok
gpoo
adelante telemaco
telemaco
como decia , glib implementa una serie de tipos de datos que les va
 a resultar muy similares a los C estandar
si mirais la tabla 4.1 de libro veis las tipos que implemeta glib

Tipos Glib Tipos estándar C
gchar char
gint int
gshort short
glong long
gfloat float
gdouble double
mmmm
no me ha salido muy bonita
sorry
.)
bueno , eso son dos columnas una es la de los tipos de glib y otra
 es la de los de C
en realidad son los mismos , solo que tienen una g delante
osea , si quieres trabajar con un char , pues tienes gchar
si quieres trabajar con long , pues tienes glong ....
la idea de crear estos tipos es para mejorar la protabilidad de las
 aplicaciones
porque un double puede ser diferente entre dos plataformas
luego , tambien se dispone de una serie de tipos , no tan conocidos
 por un programador de C que no haya visto nunca glib
como puede ser
gpointer ... que en realidad es un tipo de datos al que se le asocia
 un puntero
guint ... que es un unsigned int de C , osea un entero sin signo
que como podeis ver su labor es mejora entre otras cosas la legibilidad
 del codigo que has generado
Otros tipos que son muy curiosos y de los cuales tenemos disponibilidad
 en glib
son los tipos del tipo
gint8
gint16
gint32
...
que sirven para cuando haces una aplicacion y quieres que en todas
 las plataformas en entero que has alojado
en una variable tengan en mismo numero de bits
pues con estos tipos tu podrias asegurarte este factor
Y por ultimo , hay algunos tipos que no tienen equivalente en ansi
 C
que son por ejemplo
gboolean , que no es mas que un tipo de caracter booleano (VERDADERO/FALSO)

y gsize , gssize que sirve para reprensetar tamaños en estructuras

Y estos seria los tipos mas clasicos
Aunque no se asusten , porque los que mas se usan son los tipicos
 que mapean a los de C
gchar , gint , gdouble , gboolean ....
-------------
Bueno ahora pasamos a los mensajes de salida
Para empezar tenemos una funcion que es identica al "printf" de C
 estandar
esta funcion es g_print
g_print es una funcion que en uso es identica a printf
osea
g_print recive como parametros primero una cadena de texto en la cual
 se indica el texto
que se quiere pasar por pantalla
y despues los nombre de las variables separados por comas que interviene
 dentro del texto
que deseemos pasar por pantalla
ejemplo
.
#include <glib.h>
int
main (int argc, char *argv[])
{
        gint numero = 1;
        gchar *palabra="hola";
                  
        g_print ("glib te saluda : %s\nglib te dice un número : %d\n",
 palabra, numero);
        return 0;
}
 
Como podeis ver esto es un programa en C que hace que glin te salude
 y te diga un numero
Lo cual me lleva a dos cosas , por ser el primer programa
primero , para usar glib en un programa de c , hay que incluir la
 linea #include <glib.h>
y segundo hay que pasarle al compliador
la posicion de las librerias de glib
lo ultimo ahora es muy sencillo , porque ahora disponemos de un programa
 llamado pkg-config que nos resuelve este tema
asi que para compilar eso tendriamos que poner esto
gcc `pkg-config --libs --cflags glib-2.0` ejemplo.c -o ejemplo
y lo que haria el pkg-config seria decir al gcc que librerias debe
 usar y donde estan y donde estan 
de hecho si ejecuto a secas `pkg-config --libs --cflags glib-2.0`

me saldria esto
telemaco@lolita:~$ echo `pkg-config --libs --cflags glib-2.0`
-I/opt/include/glib-2.0 -I/opt/lib/glib-2.0/include -L/opt/lib -lglib-2.0

veis lo que realmente hace ?
bueno , con esto podreis compilar cualquier ejemplo de glib
Continuando con el ejemplo
primero tendriamos un variable que aloja un entero 
gint numero = 1;
luego tendriamos un puntero a gchar que aloja una cadena
gchar *palabra="hola";
y luego g_print se encargaria de generar la cadena 
glib te saluda : hola
glib te dice un número : 1
---
esto seria lo que generaria el programa de ejemplo
Una de las ventajas que tiene g_print es que es personalizable
nosotros podriamos
decir a g_print que cuando sea llamado imprima o retoque la cadena
 que le pasasemos
esto lo podeis ver en el ejemplo 4.2 del libro
y la funcion que hace esta maravilla es GPrintFunc  g_print_set_handler
 (GPrintFunc  función );
GPrintFunc  g_print_set_handler (GPrintFunc  función );
esta funcion permite que se le pase como parametros el nombre de una
 funcion que es la que usar para hacer la personalizacion
si observais el ejemplo 4.2 , vereis lo sencillo que resulta
hasta aqui alguna pregunta ?
gpoo
su
si
tenemos algunas
<epplestun> tengo una pregunta sobre el tema de tipo de datos,
 al final formulala por favor, en C el tratar strings es algo complicado,
 glib aporta alguna facilidad para ello? o se a de trabajar mediante
 matrices o punteros?
telemaco
para trabajar con cadenas tenemos GString que hace muy sencillo en
 tratamiento de cadenas
es lo siguiente que daremos
algo mas ?
gpoo
<epplestun> encuanto a eso
<epplestun> parecido a lo que hace PHP?
telemaco
pues es en plan   
cadena = g_string_new ("hola caracola , soy una cadena");
y luego tienes funciones para añadir , insertar , borrar 
...
luego lo veremos 
algo mas
gpoo
otra mas
<nahoo> que pasa si asignas a un gboolean un 5, por ejemplo

<nahoo> daría un error como en Ada (por ejemplo)
telemaco
pues , no creo que te dejara asignarle ese valor ya que solo acepta
 1 ó 0
gpoo
<PiotR> pregunta: porque implementar Glib si ya esta Libc?
telemaco
entonces si le pasases un 5 al compilar el gcc te diria que no es
 tipo compatible
porque libc no implementa cosas que glib si
gpoo
telemaco: una acotacion
telemaco
ademas que hay de vez en cuando problemas portanto entre dos libc's
 de dos sistemas diferntes
gpoo: si ?
gpoo
en C, cualquier numero distinto de cero es verdadero
asi que 5 es valido en el contexto de gboolean
vamos a la siguiente:
<|tuko|> Hola. Mi pregunta es: ¿por qué en el C estándar hay
 que utilizar unos includes dependiendo de la función que quieras
 usar, y en glib es suficiente con el include <glib.h>?
telemaco
glib.h no es mas que un fichero cabecero que incluye varios cabeceros
 
pero supongo que se puso asi , por esa misma razon 
porque te sale el codigo mas legible
gpoo
la ultima, antes de la siguiente ronda
<PeSa> glib tiene funciones para sockets???
telemaco
dentro de glib no , pero dispones de la liberia libgnet que esta basada
 en glib que si los maneja
alog mas ?
gpoo
<|tuko|> ¿significa eso q se incluyen todas las cabeceras independientemente
 de las funciones q llegues a usar?
telemaco
en efecto
glib.h es esto
-----
#include <glib/galloca.h>
#include <glib/garray.h>
#include <glib/gasyncqueue.h>
#include <glib/gbacktrace.h>
#include <glib/gcache.h>
#include <glib/gcompletion.h>
#include <glib/gconvert.h>
#include <glib/gdataset.h>
#include <glib/gdate.h>
#include <glib/gdir.h>
....
....
sigo ?
gpoo
adelante telemaco
al final dejamos el resto de las preguntas
telemaco
lo siguente que voy a exponer son funciones para cazar errores 
que implementa glib
la primera es una de las mas utiles
esta funcion es
g_assert ( expresion );
esta funcion verifica que la expresion que hay dentro es cierta
y si no lo fuera interrumpiria el programa
ejemplo :
si yo tuviera una funcion del tipo 
void transformo_cadenas (gchar *cadena) 
{
       g_assert (cadena != NULL);
      ....
        ....
}
pues lo que pasaria es que cuando usasemos esta funcion
g_assert comprobaria si el contenido de la variable cadena esta llena

si esta vacia , pues interrumpiria el programa
esta funcion la encontrareis mucho , mucho , mucho en el codigo de
 GNOME
porque es muy utils
no creeis ;))
luego tambien disponeis de funciones para manejar la bitacora 
esta funciones nos para saber por donde van nuestros programas
a traves de mandar mensajes a consola
esto sirve para hacer lo tipico que hemos hecho todos de printf ("hola
 estoy en esta parte del programa\n");
;DD
pero de modo mas bonito 
tenemos principalmente 4 funciones
 g_message (...);
g_warning (...);
 g_critical (...);
 g_error (...);
  g_message  es una macro que emite un mensaje normal con la información
 que se le ha pasado como parámetro. La información que emite esta
 macro no tiene por que estar asociada a un error en el programa.
 Su principal aplicación es el envío de mensajes con la información
 que se crea conveniente en el proceso de realización del programa.

  g_warning  emite un mensaje de aviso con la información que le ha
 sido pasada como parámetro. Esta información puede servir para ser
 avisados de situaciones peligrosas que se podrían dar en el programa.
 
  g_critical  cumple la misma función que g_warning sólo que este
 además tiene la posibilidad de abortar el programa usando la función
 g_log_set_always_fatal(). 
  g_error  emite el mensaje que le haya sido pasado como argumento
 y además aborta irremediablemente la ejecución del programa. Esta
 macro se usa para obtener información de donde ha sucedido el error
 irrecuperable con la seguridad de que a causa de este error el programa
 terminara abortando su ejecución de todas maneras. 
----
si observais el ejemplo 4.5 vereis como se usa
alguna pregunta ?
okis pues sigo
gpoo
al final formulare las preguntas apiladas
telemaco
lo siguiente que voy a dar son el tratamiento de cadenas en glib
http://libros.es.gnome.org/librognome/librognome/librognome/glib-strings.html

primero veremos algunas funciones para trabajar con el contenido de
 una cadena de texto
y despues veremos el uso de GString
Dentro de glib , disponemos de una serie de funciones que realizan
 diversas tareas sobre el contenido de una cadena
y que ademas son las utiles para la vida diaria de un desarrollador

para empezar tenemos unas funciones que duplican cadenas
esta funciones son
gchar *  g_strdup (const gchar *  cadena_para_duplicar );
y
gchar *  g_strndup (const gchar *  cadena_para_duplicar , gsize  longitud_maxima
 );
las dos reciven como parametros una cadena y la duplican como valor
 devuelto de la funcion
la diferencia entre una y otra es que la segunda , g_strndup , se
 le puede especificar cual es la longitud maxima
Tambien disponemos de funciones para verificar caracteres
osea , funciones que sirven para responder preguntas como ¿esto es
 un caracter? ¿esto es un entero? ...
esta funciones son
g_ascii_isalnum es un caracter alfanumérico
g_ascii_isalpha es un caracter del alfabeto
g_ascii_iscntrl es un caracter de control
g_ascii_isdigit es un dígito
g_ascii_isgraph es un caracter imprimible y no es un espacio
g_ascii_islower es una letra del alfabeto en minúscula
g_ascii_isprint es un caracter imprimible
g_ascii_ispunct es un caracter de puntuación
g_ascii_isspace es un espacio
g_ascii_isupper es una letra del alfabeto en mayúscula
estas funciones las podeis ver en laa tabla 4.5
y como estas funciones podeis encontrar en el api unas cuantas mas

*
telemaco buscando la pagina del api , para que lo veais
telemaco
http://developer.gnome.org/doc/API/2.0/glib/glib-String-Utility-Functions.html

en esta pagina podreis ver todas las funciones con las que podeis
 trabajar con el contenido de una cadena
-----
Ahora vamos a ver GString
GString , es un tipo abstrato de datos
el cual se encarga de hacer mas facil el trabajo con cadenas
El tipo GString es una estruntura
que tiene esta forma
    struct GString
    {
        gchar  *str;                                       (1)
        gsize len;                                         (2)
        gsize allocated_len;
    };
 
donde el puntero *str es la cadena que estamos almacenando
y "len" su longitud
pero esto a nosotros no nos importa demasiado a la hora de trabajar
 con GString
Imaginemos que necesitamos alojar una cadena de text
con GString solo tendriamos que usar la siguiente funcion
GString *  g_string_new (const gchar *  cadena_inicial );
esta funcion recibe como parametro una cadena y devuelve un TAD GString

con el que seguiremos trabajando cuando queramos modifica o trabajar
 con la cadena
por ejemplo :
      #include <glib.h>
      
      main (){
          GString *cadena ;
      
          cadena = g_string_new ("¡Qué fácil es hacer una cadena!");

      
          g_print ("la cadena que hemos alojado : %s\n", cadena->str);

          g_print ("la longitud de la cadena es : %d\n", cadena->len);

      }
   
con este programa , creariamos un Gstring y pasariamos sus datos por
 pantalla
Y si nosotros quisieramos liberar una cadena de texto alojada
usariamos esta funcion
gchar *  g_string_free (GString *  cadena , gboolean  liberar_contenido_cadena
 
que nos permite liberar el GString
---
Ahora que si nosotros quisieramos añadir texto a la cadena
ya sea por delante o por detras
usariamos esas funciones
--- gnomero fija modos [#gnome-hispano +o telemaco]
--- gnomero fija modos [#gnome-hispano +o raciel]
--- raciel fija modos [#gnome-hispano -o raciel]
--- gnomero fija modos [#gnome-hispano +o telemaco]
gpoo
tenemos un problema con telemaco que se ha caido
mientras esperamos que vuelva
oh. volvio :-)
parece que tiene serios problemas con el boton cerrar
mientras, formulare algunas de las preguntas apiladas
para ir respondiendolas y ganar tiempo
<PeSa> Teniendo en cuenta la similitud de glib y nspr (netscape



 portable runtime), porque coexisten en el proyecto mozilla que es



 parte de gnome
El proyecto Mozilla no es parte de GNOME
existe interaccion entre ambos proyecto, pero Mozilla no es parte



 de GNOME
<PeSa> http://www.gnome.org/projects/
<PeSa> en esa pagina se lista a mozilla
alli se listan muchos proyectos relacionados con GNOME
pero no son parte de GNOME o GNOME no tiene gran injerencia en su

 desarrollo
<cyphra> Quería preguntar si existe en glib alguna facilidad

 para tablas hash, arboles B etc...
efectivamente, glib provee el manejo para listas enlazadas, doblemente

 enlazadas, hashes, arboles
las cuales se iran explicando en las charlas siguientes
<epplestun> encuanto a lo de g_assert no hay algo parecido a

 isset o empty ?¿? funciones que lo hagan directamente como en PHP


para verificar una variable, si es puntero como el caso mas problematico,

 se emplea la comparacion != NULL
que es la que te indica si tiene algun valor o no
en PHP puedes invocar variables sin haberlas definido, y es por eso

 que se necesita de isset, en C no es necesario
telemaco
ya he vuelto
siento la tardanza , pero el winmodem me ha tirado el sistema
:)
gpoo
telemaco, me encontraba respondiendo algunas preguntas en tu ausencia

telemaco
termino con lo de GStrings ?
gpoo
si adelante
telemaco
pues como decia , si quisieramos añadir , insertar o borrar texto
 en un GStrinh
pues como decia , si quisieramos añadir , insertar o borrar texto
 en un GString
disponemos de estas funciones
GString *  g_string_append (GString *  cadena , gchar *  cadena_para_añadir_al_final
 );
GString * g_string_prepend (GString * cadena , gchar * cadena_para_añadir_al_principio
 );
GString *  g_string_insert (GString *  cadena , gssize  posicion ,
 gchar *  cadena_para_insertar );
GString *  g_string_erase (GString *  cadena , gssize  posicion ,
 GString *  numero_de_caracteres_que_desea_borrar );
que nos facilitaran enormemente la tarea de trabajar con GStrings

s/GStrings/cadenas
aparte , de estas disponemos de otras tantas , para añadir caracteres
 , añadir texto preformateado ....
y con esto se acabaria lo de GStrings
y creo que ya no sigo , porque llevo mucho :)
no crees gpoo ?
gpoo
ya estamoas pasados 30 minutos
vamos a la ronda de preguntas
que hay varias
telemaco
ok
gpoo
<PeSa> glib maneja espreciones regulares para gstring? como
 perl?
telemaco
no 
gstring se encarga de alojar una cadena
y hacer mas facil su tratamiento
no obstantate en libc tienes funciones para hacer eso
y en glib hay implementados funciones para analizadores lexicos
y alguna cosa mas
gpoo
la siguiente:
<wildfire> una pregunta se pone solo el glib.h porque esta libreria
 por medio ifincludes elige que sub librerias elegir?
telemaco
se pone solo glib.h , porque ahi estan incluidos los demas cabeceros
 que componen la funcion
gpoo
<Kakutsi> ¿hay alguna manera de modificar la forma en que g_assert
 interrumpe el programa?
telemaco
osea que cuando incluyes glib.h , incluyes todos los cabeceros
creo que si que la habia
creo que g_assert es personalizable
gpoo
<Kakutsi> para despues: ¿que es "allocated_len" en la estructura
 GString?
--- kiwnix es ahora conocido como kiwnix_sleep
telemaco
pero no estoy seguro , ahora lo estoy mirando
ahora te respondo
allocate_len es la memoria fisica que tiene gchar *str
len es la longitud de la cadena
gpoo
<epplestun> galeon si es parte de gnome no?¿
telemaco
pues no g_assert no es personalizable
creo que forma parte de gnome-office
o del fith-toe
pero en cualquier lugar yo creo que todos pensamos que si es parte
 de GNOME ;)
gpoo
<bit0> ¿algún objeto para manejar listas estáticas?
--- gpoo fija modos [#gnome-hispano +v bit0]
telemaco
para que quieres manejar una lista estatica ?
bit0
cad = g_new0(gchar,10); for (i=0;i<20;i++) {  sprintf(cad,"%d",i);
 lista=g_list_append(lista,cad);} g_free(cad);
telemaco
una lista estatica es un array
bit0
quiero hacer eso
telemaco
y no te vale una lista dinamica para eso ?
bit0
daría 19, 19,19,19,19,19
telemaco
no tiene porque
como que da 19 , 19 , 19
si vas añadiendo al final o al principio te da lo que quieras
es hacer una lista dinamica e ir añadiendo los datos a la cola de
 esa lista
bit0
GList  es una lista de punteros
telemaco
aahh
bit0
lo que estoy buscando es una lista de gchar* o GString o ...
telemaco
no , no te pillo
gpoo
bit0: con GList lo puedes hacer
solo hay que hacerlo de la forma correcta
:-)
telemaco
y con GList no puedes ?
bit0
pero si reasignas el puntero, ... cambia el valor, lógicamente
gpoo
que luego te podemos explicar, porque GList es parte de lo que viene
 la proxima semana
bit0
bien, espero entonces
gracias
gpoo
y asi no cofundimos a los novatos
telemaco
mas preguntas ?
--- gpoo fija modos [#gnome-hispano -v bit0]
gpoo
<unimauro> aun tengo problemitas para compliar gcc , cuando

 lo hago me dice que pkg-config -libs -cflags glib-2.0: No existe

 el fichero o el directorio
--- gpoo fija modos [#gnome-hispano +v unimauro]
telemaco
unimauro: tienes gnome2 ? 
unimauro
si
telemaco
para compilar tienes que tener gnome2 y los paquetes con los cabeceros
 de las funciones
osea , los paquetes -dev
y el pkg-config
unimauro
bueno algo no entendi de esa parte de lacompilacion
telemaco
y ademas es pkg-config --libs --cflags glib-2.0
unimauro
si si puse eso en la terminal 
telemaco
con dos guiones en libs , cflags
unimauro
pero de alli me salia que no habia encontrado los archivos
unimauro unixOZ 
gpoo
unimauro: entonces te falta instalar el paquete pkg-config
unimauro
ok 
telemaco
algo mas ?
unimauro
gracia ahora mismo lo pruebo
unimauro unixOZ 
unimauro
la proxima charla se complatara los temas de glib?
gpoo
un comentario:
<epplestun> una sugerencia
<epplestun> par alos novatoses muybuieno como es mi caso
<gpoo> adelante
<epplestun> usar un IDE tipo anjuta facilita mucho la vida al
 incluir librerias
<epplestun> en vez de andar en la linea de comandos para el
 k no sepa
<epplestun> en la parte de configuracion del compilador
unimauro unixOZ 
--- gpoo fija modos [#gnome-hispano -v unimauro]
gpoo
unimauro: si
la ultima pregunta al parecer:
<Kakutsi> y entonces, g_assert, como termina los programas,
 los mata y ya esta, o da informacion sobre donde ocurrio el fallo
 y ese tipo de cosas?
telemaco
los mata y te dice donde los ha matado y que condicion no ha cumplido

y creo que la linea y la funcion donde estaba el g_assert
gpoo
alguna pregunta mas?
telemaco
epplestun: tienes razon , pero no se si anjuta tiene soporte para
 gnome2
gpoo
telemaco: si lo tiene, aunque no esta transparente como gnome1.4
antes de finalizar
recordarles que en el libro GNOME se encuentra el capitulo de Glib
 bastante avanzado (sino completo)
donde podeis practicar
la semana siguiente se retomara Glib
telemaco
y que ademas nos teneis aqui casi todo el dia para ayudaros en lo
 que querais
gpoo
comenzando con temporizadores, estructuras de datos, sockets
telemaco
y tenemos listas de correo
gpoo
tenemos pregunta:
<epplestun> una pregunta
<epplestun> donde se puede comprar el fabuloso libro ese :)

telemaco
epplestun: todavia no se puede comprar porque no esta terminado
gpoo
epplestun: se encuentra en linea en http://libros.es.gnome.org/librognome/index.php

telemaco
epplestun: pero este es esa url
--- gpoo fija modos [#gnome-hispano -m]
gpoo
pues bien
brindemosle un aplauso a telemaco que nos ha introducido en el mundo

 de glib
epplestun
plas plas plas
gpoo
y nos vemos el proximo domingo
epplestun
mu bien :)
Kakutsi
plas,plas,plas
epplestun
congratilations :)
nahoo
xD