<?xml version="1.0" encoding="UTF-8"?><!-- generator="wordpress.com" -->
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	>

<channel>
	<title>gtk &amp;laquo; WordPress.com Tag Feed</title>
	<link>http://wordpress.com/tag/gtk/</link>
	<description>Feed of posts on WordPress.com tagged "gtk"</description>
	<pubDate>Fri, 04 Jul 2008 16:42:08 +0000</pubDate>

	<generator>http://wordpress.com/tags/</generator>
	<language>en</language>

<item>
<title><![CDATA[Clipboard Fun]]></title>
<link>http://balajirrao.wordpress.com/?p=55</link>
<pubDate>Wed, 02 Jul 2008 20:26:50 +0000</pubDate>
<dc:creator>balajirrao</dc:creator>
<guid>http://balajirrao.wordpress.com/?p=55</guid>
<description><![CDATA[When I was using my GNOME desktop from inside a guest running on top of KVM, suddenly an idea struck]]></description>
<content:encoded><![CDATA[<p>When I was using my GNOME desktop from inside a guest running on top of <a href="http://kvm.qumranet.com/kvmwiki">KVM</a>, suddenly an idea struck me, about a couple of hours ago - "To allow copy and paste between the guest and the host". It would be a very valuable feature to have, I thought.</p>
<p>Deciding to hack a quick solution, I came up with the following in around two hours. It works only one way for the moment. The guest(virtual machine) is the server and the host is the client i.e, you will only be able to copy from the host and paste it into the guest. And it works only with text now.</p>
<p>In the guest, ( please change the IP address appropriately )</p>
<p>[sourcecode language='python']<br />
#!/usr/bin/python<br />
#Run this in the guest<br />
import socket,gtk</p>
<p>clip = gtk.Clipboard(display=gtk.gdk.display_get_default(), selection="CLIPBOARD" )</p>
<p>serversocket = socket.socket(socket.AF_INET, socket.SOCK_STREAM)<br />
serversocket.bind(("192.168.1.2", 7070))<br />
serversocket.listen(1)</p>
<p>while (True):<br />
	(clientsocket, address) = serversocket.accept()<br />
	clip.set_text(clientsocket.recv(100));<br />
	clip.store()<br />
	clientsocket.close();</p>
<p>serversocket.close()<br />
[/sourcecode]</p>
<p>And in the host,</p>
<p>[sourcecode language='python']<br />
#!/usr/bin/python<br />
import gtk,time,socket</p>
<p>clip = gtk.Clipboard(display=gtk.gdk.display_get_default(), selection="CLIPBOARD" )<br />
while (True):<br />
	prev = clip.wait_for_text()<br />
	while (prev == (clip.wait_for_text())):<br />
		time.sleep(1)</p>
<p>	prev = clip.wait_for_text()<br />
	s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)<br />
	s.connect(("192.168.1.2", 7070))<br />
	s.send(prev)<br />
	s.close()<br />
s.close()<br />
[/sourcecode]</p>
<p>With this program, I've copy-pasted across two machines in a network! Very powerful isn't it ? Its really surprising too see what around 35 lines of python can do. Though I had studied a bit of python a few years ago, this one small hack has made me fall into love with python again. Its an awesome language. Extremely powerful.</p>
<p>This program uses something called pygtk, which are python extensions for GTK. You can write GTK programs using python.</p>
<p>I wish to develop this further to the extent of copying files, images and other rich content across machine boundaries. Though it probably will be criticised for being bad from a security point of view, it will definitely be useful for users of KVM, XEN and other users of virtual machine monitors.</p>
<p>Happy hacking!</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Opensuse 10.3 Japanese Input KDE Follow-up]]></title>
<link>http://iamacat.wordpress.com/?p=89</link>
<pubDate>Tue, 01 Jul 2008 16:37:00 +0000</pubDate>
<dc:creator>iamacat</dc:creator>
<guid>http://iamacat.wordpress.com/?p=89</guid>
<description><![CDATA[I&#8217;m writing this post in konqueror, just for fun. If you managed to get uim and anthy working ]]></description>
<content:encoded><![CDATA[<p>I'm writing this post in konqueror, just for fun. If you managed to get uim and anthy working <a href="http://iamacat.wordpress.com/2008/06/26/belated-post-on-japanese-and-multilingualization-on-opensuse-103/">with the uim-applet</a> in Gnome, KDE apps are almost as easy, and you don't need to run uim-xim or any other p.i.t.a  scripts or bridging hacks, as I've described in previous posts. The Konqueror binary I got from the Opensuse repository has uim support built right in. What does that mean? In a text input window, right click, select 'uim:ja,ko,zh:*' and then fire up uim anthy the same old way you would for a gnome app. (As I've said before, the uim-applet set-up options are too diverse to go into here, but I have managed to do it on Debian, Ubuntu, and Opensuse boxen without straying from graphical user interfaces, so don't panic) And voila, 日本語! I suppose this would work in a straight KDE environment in any given KDE application (that's compiled with uim support, of course), although I haven't tried it that way.  By the way, there is a KDE taskbar applet to control uim input, and you can use either it or the gnome applet in KDE. And, please, dear readers, let me know how things work out for you. I'm trying to pass on useful information here. Thanks! では、この切りで。</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Personalizacion de Linux, Gnome]]></title>
<link>http://tuxear.wordpress.com/?p=8</link>
<pubDate>Sat, 28 Jun 2008 20:50:16 +0000</pubDate>
<dc:creator>pol666</dc:creator>
<guid>http://tuxear.wordpress.com/?p=8</guid>
<description><![CDATA[
Guia de Personalizacion de Linux (Gnome)


Parte 1: Gnome


Antes que nada Quiero que se Agenden es]]></description>
<content:encoded><![CDATA[<p style="text-align:left;">
<h1 style="margin-bottom:0;text-align:center;"><strong>Guia de Personalizacion de Linux (Gnome)</strong></h1>
<h1 style="margin-bottom:0;text-align:center;"><span style="color:#ff0000;"><br />
</span></h1>
<h1 style="margin-bottom:0;text-align:center;"><span style="color:#ff0000;"><strong>Parte 1: Gnome</strong></span></h1>
<p style="margin-bottom:0;"><em><br />
</em></p>
<p style="margin-bottom:0;"><em>Antes que nada Quiero que se Agenden esta direccion, es de suma importacia para la personalizacion de Gnome, aca encuentran, Temas, Skins, Iconos, Wallpapers, etc. </em></p>
<p style="margin-bottom:0;"><span style="text-decoration:underline;"><br />
</span></p>
<p style="margin-bottom:0;"><span style="text-decoration:underline;"><span style="font-size:medium;color:#ff0000;">www.gnome-look.org</span></span></p>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;">Bueno comenzare esta guia como post estreno del blog. La guia va  abarcar todo lo que trate de personalizacion y embellezimiento de Linux, Tanto en escritorios como <strong>GNOME</strong>, <strong>KDE3, KDE4  y XCFE</strong>. Por lo que sera aplicable a la mayoria de las distribuciones como <strong><span style="color:#ff0000;">Ubuntu, Suse, Mandriva, Debian, etc. </span></strong>Tambien voy a incluir una guia de <strong>Compiz Fusion</strong>, incluyendo<strong> Emerald, Screenlets y Docks</strong>, Por otra parte va a ver capitulos dedicados a la imitacion de escritorios de otros SO como<strong><span style="color:#ff0000;"> OsX y Vista.</span></strong></p>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;"><strong>En este capitulo enseñare la personalizacion básica de Gnome, en especial para los usuarios muy novatos. </strong></p>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;text-align:center;"><img class="aligncenter" src="http://i32.tinypic.com/w9flv6.png" alt="" width="385" height="311" /></p>
<h2 style="margin-bottom:0;"><span style="font-size:small;color:#ff0000;"><span style="text-decoration:underline;"><strong>Wallpaper</strong></span></span></h2>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;">Los wallpapers, (fondo de pantalla) son lo primero que cambiamos cuando instalamos un SO. Asi que no pierde importancia.</p>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;"><strong>Aqui nombro algunas webs con Excelentes wallpapers </strong></p>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;"><strong>Recomendados por Mi:</strong></p>
<ul>
<li>
<p style="margin-bottom:0;"><a href="http://www.taringa.net/posts/imagenes/1209429/Fondos-x-18.html">http://www.taringa.net/posts/imagenes/1209429/Fondos-x-18.html</a></p>
</li>
<li>
<p style="margin-bottom:0;"><a href="http://www.socwall.com/">http://www.socwall.com/</a></p>
</li>
<li>
<p style="margin-bottom:0;">Muchos Wallpapers de Linux: 	<a href="http://tuxbrothers.net/site2/e107_plugins/wrap/wrap.php?4">http://tuxbrothers.net/site2/e107_plugins/wrap/wrap.php?4</a></p>
</li>
<li>
<p style="margin-bottom:0;"><a href="http://www.gnome-look.org/index.php?xcontentmode=170x171x172x173x174x175x176x177x178x179&#38;PHPSESSID=948d9bebf75f712683a5b657dc5e6417">http://www.gnome-look.org/index.php?xcontentmode=170x171x172x173x174x175x176x177x178x179&#38;PHPSESSID=948d9bebf75f712683a5b657dc5e6417</a></p>
</li>
</ul>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;"><strong>Recomendacion de Clarin.com</strong></p>
<p style="margin-bottom:0;"><a href="http://">http://www.clarin.com/suplementos/informatica/2004/07/28/f-802448.htm</a></p>
<ul>
<p style="margin-bottom:0;"><em>para Cambiar el Wallpaper en Gnome: 	Hacemos Click Derecho en nuestro Escritorio actual y vamos 	obviamente a “Cambiar fondo de escritorio” ahi nos saldra una 	ventana donde podremos cargar nuestra imagen. (dificilisimo ^^)</em></p>
</ul>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;"><span style="font-size:small;color:#ff0000;"><span style="text-decoration:underline;"><strong>Panel</strong></span></span></p>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;">Un panel, es la barra que tenemos ubicada en ambas bases del escritorio. Son llamadas Barra de Inicio por los usuarios que vienen de Win2, pero desde ahora se llaman Paneles. Estos  pueden ser ubicados en cualquier parte del escritorio con simplemente arrastrarlo con el mouse. Tambien podemos  cambiarle el tamaño haciendo click derecho sobre ellos, y luego clikeando en propiedades.</p>
<p style="margin-bottom:0;text-align:center;"><img class="aligncenter" src="http://i27.tinypic.com/1zeh3yp.png" alt="" width="429" height="347" /></p>
<p style="margin-bottom:0;">Una ventaja de estos paneles es que podemos aplicarles Texturas, mediante Imagenes, o hacerlos transparentes. O Aplicarles Texturas transparentes mediante imagenes en PNG.</p>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;">En la pestaña fondo de propiedades del panel, seleccionamos IMAGEN. Y cargamos alguna de estas imagenes (son la mayoria de 27pixeles otras son de 32, acordate que tienen que ser del mismo tamaño de tu panel)</p>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;">Con esto tenemos unas buenas texturas trasnparentes. Por otra parte los item del panel llamados APPLETS. Pueden ser modificados, movidos, eliminados  o agregados. Por ejemplo la clasico menu de Ubuntu lo podemos cambiar por un simple icono, que lo remplaze. Tambien podemos eliminar un panel y dejar uno solo, o agregar 2 mas y tener uno en cada lado de la pantalla.</p>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;">El Selector de Ventanas tambien es un Applet por lo que puede ser quitado y agregado en cualquier panel. Para modificar applets hacemos click derecho en el panel y clickeamos en “agregar al panel” Lo podemos personalizar a nuestro gusto hasta que quede por ejemplo asi:</p>
<p style="margin-bottom:0;text-align:center;"><img class="aligncenter" src="http://i25.tinypic.com/2j507pu.png" alt="" width="436" height="353" /></p>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;text-decoration:none;"><span style="color:#ff0000;"><br />
</span></p>
<p style="margin-bottom:0;"><span style="font-size:small;color:#ff0000;"><span style="text-decoration:underline;"><strong>Skins, Temas GTK y metacity</strong></span></span></p>
<p style="margin-bottom:0;"><span style="font-size:small;"><span style="text-decoration:underline;"><strong><br />
L</strong></span><span style="font-size:small;"><span style="text-decoration:none;"><span>os skins de Gnome, los temas GTK  son los que componen las ventanas, los botones, los menues, todo. Los bordes de ventana estan compuestos por otro programa llamado Metacity. Aunque mas adelante les mostrare EMERALD que es un gestor avanzado para bordes de ventana, y depende de compiz y obviamente de acelaracion grafica.</span></span></span></span> (Ya lo nombrare en proximos Post)</p>
<p style="margin-bottom:0;"><span style="font-size:small;"><span style="font-size:small;"><span style="text-decoration:none;"><span>Tanto los temas GTK (2.0) y los Metacity se bajan de sus correspondientes pestañas en gnome-look.org.</span></span></span></span></p>
<p style="margin-bottom:0;"><span style="font-size:small;"><span style="font-size:small;"><span style="text-decoration:none;"><span>Para aplicarlos tenemos que ir a sistema/preferencia/apariencia. Y en la pestaña de temas, clickear en instalar alli seleccionamos el paquete en formato tar.gz que bajamos de gnome-look.</span></span></span></span></p>
<p style="margin-bottom:0;"><span style="font-size:small;"><span style="font-size:small;"><span style="text-decoration:none;"><span>Nos dira que instalo correspondientemente el tema y si deseamos aplicarlo. Si no lo aplicó, podemos acerlo, seleccionando un tema cualquier y luego clickeando en “personalizar” ahi, veremos las pestañas con los diferentes temas GTK y Metacity, ademas de los iconos y punteros.</span></span></span></span></p>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;text-align:center;"><img class="aligncenter" src="http://i25.tinypic.com/sdigzb.png" alt="" width="502" height="334" /></p>
<p style="margin-bottom:0;">
<p style="margin-bottom:0;"><span style="font-size:small;"><span style="text-decoration:underline;"><strong>Iconos</strong></span></span></p>
<p style="margin-bottom:0;text-decoration:none;"><span style="font-size:small;">Las personalizacion de Iconos de Gnome es fantastica, Podemos cambiarles el tamaño individualmente y ordenarlos en cualquier orden.</span></p>
<p style="margin-bottom:0;text-decoration:none;"><span style="font-size:small;">Por defecto, Gnome no carga iconos solo los de las unidades montadas, (Usb, Discos Rigidos, Particiones, CD,  Floppy, etc)</span></p>
<p style="margin-bottom:0;text-decoration:none;"><span style="font-size:small;">Podemos arrastrar iconos del menu hacia el Escritorio o tambien podemos crear algunos Accesos directos, o aqui llamados “lanzadores”.</span></p>
<p style="margin-bottom:0;text-decoration:none;"><span style="font-size:small;">Podemos arrastrar Programas, Carpetas, Archivos. Tambien si no lo desean pueden eliminarlos y optar por un escritorio mas minimalista. Para agrandar los iconos, pueden hacer click derechos sobre ellos y clickear en “estirar icono”</span></p>
<p style="margin-bottom:0;text-decoration:none;">
<p style="margin-bottom:0;text-decoration:none;"><span style="font-size:small;"><span style="color:#ff0000;"><strong>TEMAS DE ICONO</strong></span><strong>: </strong><span>Los Icon Themes, son paquetes que cambian todos los iconos del sistema, dejando el escritorio muy prolijo. </span></span></p>
<p style="margin-bottom:0;text-decoration:none;">
<p style="margin-bottom:0;"><span style="font-size:small;"><span style="text-decoration:underline;"><span>¿De Donde bajar Icon Themes?</span></span></span></p>
<p style="margin-bottom:0;text-decoration:none;"><span style="font-size:small;"><span>Como ya les dije de <a href="http://www.gnome-look.org/">www.gnome-look.org</a><a href="http://www.gnome-look.org/"> </a>en la pestaña de Iconos, pueden encontrar varios</span></span></p>
<p style="margin-bottom:0;text-decoration:none;"><span style="font-size:small;"><br />
<em><strong>Un buen resultado incluyendo los temas GTK y la personalizacion del panel quedaria algo asi:</strong></em></span></p>
<p style="margin-bottom:0;text-decoration:none;"><img class="alignnone" src="http://i26.tinypic.com/2niqkd5.png" alt="" width="469" height="380" /></p>
<p style="margin-bottom:0;text-decoration:none;">
<p style="margin-bottom:0;text-decoration:none;"><img class="alignnone" src="http://i30.tinypic.com/22hld0.png" alt="" width="465" height="377" /></p>
<p style="margin-bottom:0;"><span style="font-size:small;color:#ff0000;"><span style="text-decoration:underline;"><strong>GDM:</strong></span></span></p>
<p style="margin-bottom:0;text-decoration:none;">
<p style="margin-bottom:0;text-decoration:none;"><span style="font-size:small;">El GDM es la pantalla de Login de Gnome, es muy facil cambiarla, simplemente bajamos una de gnome-look.org en la pestaña GDM. En formato tar.gz</span></p>
<p style="margin-bottom:0;text-decoration:none;"><span style="font-size:small;">Luego vamos a sistema/administracion/ventana de entrada y ahi en la segunda pestaña, nos da la opcion de seleccionar una existente o examinar por otra. Buscamos la que bajamos y luego la seleccionamos.</span></p>
<p style="margin-bottom:0;text-decoration:none;">
<p style="margin-bottom:0;text-decoration:none;text-align:center;"><img class="aligncenter" src="http://linuxfud.files.wordpress.com/2006/11/gdm-login.png" alt="" width="339" height="272" /></p>
<p style="margin-bottom:0;text-decoration:none;">
<p style="margin-bottom:0;text-decoration:none;"><em><strong><br />
</strong></em></p>
<p style="margin-bottom:0;text-decoration:none;"><em><strong><span style="font-size:small;">Bueno esta es la personalizacion basica de Gnome, El proximo post de esta guia voy a explicar un poco mas de este escritorio, cosas mas complejas y no tan entrenidas como estas.</span></strong></em></p>
<p style="margin-bottom:0;text-decoration:none;">Saludos</p>
<p style="margin-bottom:0;text-decoration:none;">
]]></content:encoded>
</item>
<item>
<title><![CDATA[Rank 2 Types]]></title>
<link>http://marcotmarcot.wordpress.com/?p=21</link>
<pubDate>Fri, 27 Jun 2008 19:56:13 +0000</pubDate>
<dc:creator>marcotmarcot</dc:creator>
<guid>http://marcotmarcot.wordpress.com/?p=21</guid>
<description><![CDATA[I&#8217;ve always seen the forall a types in some GHC messages or in other person&#8217;s code, but ]]></description>
<content:encoded><![CDATA[<p>I've always seen the <code>forall a</code> types in some GHC messages or in other person's code, but I couldn't get the point of it until I needed to use it myself.  I was writing a Gtk2hs application with some windows, and I noticed that for each created window, I was doing the same steps.  So I created a function that does what is needed for each function:</p>
<p><code><br />
basic :: WidgetClass widget =&#62; String -&#62; IO (Widget, (GObject -&#62; Widget) -&#62; String -&#62; IO widget)</p>
<pre>
basic gladeFile =
  do
    (windowGlade :: GladeXML) &#60;- getGlade gladeFile
    let
      windowGet :: Get
      windowGet = xmlGetWidget windowGlade
    (window :: Widget) &#60;- windowGet castToWidget "window"
    (close  :: Button) &#60;- windowGet castToButton "close"
    onClicked close $ widgetDestroy window
    modifyIORef windows (window :)
    return (window, windowGet)</pre>
<p></code></p>
<p>Notice that this code uses GHC extension PatternSignatures, which I like a lot.</p>
<p>The problem was that the returned function, <code>windowGet</code> was not generalized enough, so I couldn't use it with more than one type, even it being very general:</p>
<p><code>windowGet :: WidgetClass widget =&#62; (GObject -&#62; widget) -&#62; String -&#62; IO widget</code></p>
<p>If I used it with, say, <code>windowGet castToButton "ok"</code> and <code>WindowGet castToSpinButton "value"</code>, it would give, in the seconde line, the type error: Couldn't match expected type `Button' against inferred type `SpinButton'.</p>
<p>After asking in #haskell, and reading a little bit of the GHC User's Guide, I got the point.  This was only possible with Rank 2 Types.  windowGet must be:</p>
<p><code>windowGet :: forall widget. WidgetClass widget =&#62; (GObject -&#62; widget) -&#62; String -&#62; IO widget</code></p>
<p>So I changed the type signature for <code>basic</code>, and added Rank2Types to the LANGUAGE pragma, and it worked fine.</p>
<p><code>basic :: String -&#62; IO (Widget, forall widget. WidgetClass widget =&#62; (GObject -&#62; Widget) -&#62; String -&#62; IO widget)</code></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Aplicações Desktop com PHP - Parte 1]]></title>
<link>http://tidoc.wordpress.com/?p=8</link>
<pubDate>Tue, 24 Jun 2008 23:51:29 +0000</pubDate>
<dc:creator>Fernando Libório</dc:creator>
<guid>http://tidoc.wordpress.com/?p=8</guid>
<description><![CDATA[Que o PHP é uma das linguagens de programação mais usadas em ambiente web, todo mundo sabe. Mas p]]></description>
<content:encoded><![CDATA[<p>Que o PHP é uma das linguagens de programação mais usadas em ambiente web, todo mundo sabe. Mas pouca gente sabe que também é possível criar aplicações desktop com ela. E é isso que nós iremos fazer. Para tal, iremos utilizar o PHP-GTK.</p>
<p><strong>O que é GTK/GTK+?<br />
</strong>O GTK (Gimp Tool Kit) é uma poderosa biblioteca para desenvolvimento de aplicações GUI multi-plataforma, muito utilizada no mundo linux e que vem ganhando seu espaço também no windows.</p>
<p><strong></strong></p>
<p><strong>PHP-GTK</strong><br />
É linguagem binding que permite aos desenvolvedores PHP criarem aplicações gráficas multi-plataforma sem abrir mão dos recursos do PHP.</p>
<p>Vamos então instalar os trecos \o/</p>
<p><strong>Ingredientes</strong></p>
<ol>
<li>PHP-GTK</li>
<li>Uma caneca com café</li>
</ol>
<p><strong>Instalação do PHP-GTK no Windows<br />
</strong>Baixe aqui <a title="http://sourceforge.net/project/downloading.php?groupname=agata&#38;filename=php-gtk2b.exe&#38;use_mirror=ufpr" href="http://sourceforge.net/project/downloading.php?groupname=agata&#38;filename=php-gtk2b.exe&#38;use_mirror=ufpr" target="_blank">http://sourceforge.net/project/downloading.php?groupname=agata&#38;filename=php-gtk2b.exe&#38;use_mirror=ufpr</a> o instalador, execute-o e seja feliz.</p>
<p><strong>Instalação do PHP-GTK no Linux<br />
</strong>Baixe aqui <a title="http://sourceforge.net/project/downloading.php?groupname=agata&#38;filename=php-gtk2b.tar.gz&#38;use_mirror=ufpr" href="http://sourceforge.net/project/downloading.php?groupname=agata&#38;filename=php-gtk2b.tar.gz&#38;use_mirror=ufpr" target="_blank">http://sourceforge.net/project/downloading.php?groupname=agata&#38;filename=php-gtk2b.tar.gz&#38;use_mirror=ufpr</a> o pacote pré-compilado e siga os passos abaixo:</p>
<div style="background-color:#E1E1E1;"><span style="color:#000000;"># tar -xvzf php-gtk2b.tar.gz<br />
# mv php-gtk2 /usr/local/<br />
# ln -sf /usr/local/php-gtk2/bin/php /usr/bin/php-gtk2</span></div>
<p><strong>1,2,3, testando</strong><br />
Para testar crie um novo arquivo chamdo <em>exemplo.php</em> com o código abaixo:</p>
<div style="background-color:#E1E1E1;"><span style="color:#000000;">&#60;?php<br />
if (!class_exists('gtk')) {<br />
die("O módulo php-gtk2 não foi carregado corretamente. Verifique seu php.ini.");<br />
}$wnd = &#38;new GtkWindow();<br />
$wnd-&#62;set_title('Exemplo');<br />
$wnd-&#62;connect_simple('destroy', array('gtk', 'main_quit'));</span><span style="color:#000000;">$label = &#38;new GtkLabel("Perdeu preiboy!'");<br />
$wnd-&#62;add($label);</span></p>
<p><span style="color:#000000;">$wnd-&#62;show_all();<br />
Gtk::main();<br />
?&#62;</span></div>
<p>Para executar, vá até a linha de comando e execute:<br />
No Linux</p>
<div style="background-color:#E1E1E1;"><span style="color:#000000;"># php-gtk2 exemplo.php</span></div>
<p>No Windows</p>
<div style="background-color:#E1E1E1;"><span style="color:#000000;">C:\php-gtk2\php.exe exemplo.php</span></div>
<p>É isso ai. No próximo post vamos explorar melhor os recursos do PHP-GTK.</p>
<p>Pra quem quiser saber mais sobre o projeto:<br />
<a title="http://www.php-gtk.com.br/" href="http://www.php-gtk.com.br/" target="_blank">http://www.php-gtk.com.br/</a><br />
<a title="http://gtk.php.net/" href="http://gtk.php.net/" target="_blank">http://gtk.php.net/</a><br />
Abraços!</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Personalización básica de Ubuntu 8.04 Hardy Heron]]></title>
<link>http://misandanzasengnulinux.wordpress.com/?p=33</link>
<pubDate>Tue, 24 Jun 2008 15:29:11 +0000</pubDate>
<dc:creator>Aero</dc:creator>
<guid>http://misandanzasengnulinux.wordpress.com/?p=33</guid>
<description><![CDATA[Muchas veces, cuando iniciamos Ubuntu por primera vez, nos encontramos con un entorno de escritorio ]]></description>
<content:encoded><![CDATA[<p>Muchas veces, cuando iniciamos Ubuntu por primera vez, nos encontramos con un entorno de escritorio cuya apariencia no es del agrado de todo el mundo. Esto no es problema, ya que una de las cualidades que tiene Ubuntu es que puedes personalizarlo a tu gusto, quizá fue este el gran motivo por el que decidí dar el salto a GNU/Linux. Empecemos con el tutorial:</p>
<p><strong>COMPIZ FUSION</strong></p>
<p>Compiz Fusion es un gestor de ventanas que nos permite realizar una cantidad alucinante de efectos de escritorio. A continuación aprenderemos a instalarlo. Para ello, nos vamos a Synaptic y buscamos los siguientes paquetes: <em>compizconfig-settings-manager</em> y <em>emerald</em>.</p>
<p>Para poder configurar los efectos que nos ofrece Compiz Fusion, nos vamos a Sistema=&#62;Preferencias=&#62;Configuraciíon Avanzada de Efectos del Escritorio.</p>
<p>Si of fijáis en el comando, hemos instalado un paquete llamado "Emerald". Esta aplicación nos permite aplicar un marco a las ventanas alternativo al GTK de GNOME. Podremos encontralo en Sistema=&#62;Preferencias=&#62;Gestor de temas Emerald.</p>
<p><strong>TEMAS DE ESCRITORIO</strong></p>
<p>Bien, en primer lugar nos vamos a una de las siguientes páginas:</p>
<p><a href="http://www.gnome-look.org">Gnome Look</a></p>
<p><a href="http://www.deviantart.com">Deviantart</a></p>
<p>En estas dos páginas podréis encontrar casi cualquier cosa para personalizar vuestro escritorio GNOME. La personalización no puede ser más sencilla. Cuando os descarguéis un tema que os guste, veréis que se trata de un archivo con terminación "tar.gz" no os preocupéis que en la inmensa mayoría de los casos nunca tendréis que compilar ningún código fuente ni nada por el estilo. Bueno, al grano, lo que tendréis que hacer con estos archivos es descomprimirlos y luego arrastrarlos a la siguiente ventana:</p>
<p>Hacéis click derecho en el escritorio y seleccionais "Cambiar fondo de escritorio", se os abrirá una ventana en donde tendréis que seleccionar la pestaña "Tema". En esa ventana arrastráis las carpetas que habíais descomprimido antes. Así de sencillo. Con estos pasos ya habéis terminado.</p>
<p>Para los iconos y los punteros de ratón el procedimiento es exactamente el mismo. Y ¿Qué pasa si quiero cambiar a un tema que ya tenía instalado antes? Muy sencillo, hacemos lo siguiente:</p>
<p>Click derecho en el escritorio; "Cambiar fondo del escritorio"; Seleccionamos la pestaña "Temas"; Click en el botón "Personalizar"; se os abrirá una nueva ventana en donde tendréis infinitas posibilidades de personalización, siempre en función de los temas que tengáis instalados.</p>
<p>Esto es lo básico para personalizar nuestro escritorio GNOME, en posteriores entradas hablaré de cómo modificar el GDM, el GRUB o el splash de carga.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Escritorios en GNU/Linux: GNOME]]></title>
<link>http://misandanzasengnulinux.wordpress.com/?p=13</link>
<pubDate>Mon, 23 Jun 2008 10:41:13 +0000</pubDate>
<dc:creator>Aero</dc:creator>
<guid>http://misandanzasengnulinux.wordpress.com/?p=13</guid>
<description><![CDATA[Hola de nuevo gente!
Tal y como prometí en anteriores entradas, voy a hablar de los diferentes ento]]></description>
<content:encoded><![CDATA[<p>Hola de nuevo gente!</p>
<p>Tal y como prometí en anteriores entradas, voy a hablar de los diferentes entornos de escritorio que nos podremos encontrar en GNU/Linux, dado que son muchos los escritorios en GNU/Linux y hay mucha información para barajar, lo mejor será hacer un post con las características y la historia de cada escritorio. En esta ocasión vamos a hablar del entorno de escritorio más usado en las distribuciones Linux: GNOME. Sin más preámbulos, empecemos:</p>
<p>Según el sitio web <a href="http://www.alegsa.com.ar">Alegsa</a>:</p>
<blockquote><p><em>"(GNU Network Object Model Environment). GNOME es un proyecto internacional que desarrolla un completo entorno gráfico de usuario para sistemas operativos.</em></p>
<p><em>El objetivo de GNOME incluye también un marco de desarrollo de software seleccionando aplicaciones de software para el escritorio, y trabajando sobre programas que administren la ejecución de aplicaciones, manejo de archivos y administración de ventajas y tareas.</em></p>
<p><em>GNOME es parte del Proyecto GNU, y es utililzado en múltiples sistemas operativos basados en UNIX.</em></p>
<p><em><strong>Objetivos de GNOME</strong></em></p>
<p><em>GNOME tiene dos objetivos principales:</em></p>
<ul>
<li><em>El entorno de escritorio GNOME , un intuitivo y atractivo escritorio para sus usuarios.</em></li>
<li><em>La plataforma de desarrollo de GNOME, una gran plataforma para la creación de aplicaciones que se integren en el escritorio..</em></li>
</ul>
</blockquote>
<blockquote><p><em>El proyecto GNOME pone énfasis en la simplicidad y usabilidad, apoyándose en estas premisas:</em></p></blockquote>
<blockquote>
<ul>
<li><em>Crear un entorno de escritorio que siempre tenga el código fuente disponible para ser reusado bajo licencia de software libre.</em></li>
<li><em>Asegurarse que el escritorio peuda ser usado por cualquiera, sin importar habilidades técnicas o discapacidades físicas.</em></li>
<li><em>Crear un proyecto disponible en múltiples idiomas (actualmente posee más de 100 versiones en diferentes idiomas).</em></li>
<li><em>Facilitar la creación de software que se integre cómodamente con el escritorio permitiendo también a los programadores elegir el lenguaje de programación.</em></li>
</ul>
</blockquote>
<blockquote><p><em><strong>Historia de GNOME</strong></em></p></blockquote>
<blockquote><p><em>GNOME fue anunciado por el proyecto GNU en agosto de 1997, en respuesta a las inquietudes generadas por las licencias usadas en KDE, otro entorno de escritorio gratuito. Esas licencias podían no garantizar la libre realización de software. KDE empleaba la herramienta Qt para desarrollarse, pero Qt no era libre y de código abierto (recién esto último se lograría en el año 2000, pero el proyecto GNOME ya estaba en pleno desarrollo).</em></p></blockquote>
<blockquote><p><em>Por las inquietudes generadas por las licencias, se iniciaron dos proyectos: Harmony y GNOME. Se eligión GTK+ como base del escritorio GNOME.</em></p></blockquote>
<blockquote><p><em>Los iniciadores del proyecto GNOME fueron los mexicanos Miguel de Icaza y Federico Mena.</em></p></blockquote>
<blockquote><p><em>El nombre GNOME fue propuesto como un acrónimo de GNU Network Object Model Environment por Elliot Lee. Este nombre hace referencia a la intención original de GNOME, de crear un marco similar al OLE de Microsoft. Este nombre no refleja más que la visión central del proyecto GNOME y, por lo tanto, el nombre completo es ahora considerado obsoleto</em></p></blockquote>
<blockquote><p><em><strong>Plataformas</strong></em></p></blockquote>
<blockquote><p><em>GNOME fue originariamente diseñado para Linux, pero actualmente corre en la mayoría de los sistemas basados en UNIX, y ha sido adoptado por Sun Microsystems como parte del Java Desktop Environment de su plataforma Solaris.</em></p></blockquote>
<blockquote><p><em>GNOME es el entorno de escritorio por defecto enla mayoría de las distribuciones de Linux actuales como Debian, Fedora y Ubuntu.</em></p></blockquote>
<blockquote><p><em><strong>La interfaz GNOME</strong></em></p></blockquote>
<blockquote><p><em>GNOME es similar a la mayoría de entornos de escritorios tradicionales. Maneja ventanas, aplicacoines y archivos como en la mayoría de los sistemas operativos actuales.</em></p></blockquote>
<blockquote><p><em>En su configuración por defecto, el escritorio posee un menú lanzador para aceso rápido a los programas instalados y a la localización de archivos; las ventanas abiertas pueden ser accedidas por una barra de tareas alojada en el inferior de la pantalla, y en la esquina superior derecha está el área de notificación, para que los programas muestren información mientras se ejecutan de fondo. De todas maneras, estas características pueden ser movidas o reemplazadas según los deseos del usuario.</em></p></blockquote>
<blockquote><p><em>La apariencia de GNOME puede ser cambiada con el uso de tremas, siendo los temas por defecto Bluecurve y Clearlooks."</em></p></blockquote>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Personalizar Gnome Ligeramente]]></title>
<link>http://portallinux.wordpress.com/?p=298</link>
<pubDate>Sun, 22 Jun 2008 20:22:45 +0000</pubDate>
<dc:creator>psyfurius</dc:creator>
<guid>http://portallinux.wordpress.com/?p=298</guid>
<description><![CDATA[
Algunas personas no pueden personalizar el tema de las ventanas de Gnome con CompizFusion o Emerald]]></description>
<content:encoded><![CDATA[<p><img src="http://s1.subirimagenes.com/imagen/663633gtk.png" alt="" /></p>
<p>Algunas personas no pueden personalizar el tema de las ventanas de Gnome con CompizFusion o Emerald porque sus PC tienen el RAM suficiente para poder procesar datos en  el incio. Estas personas tienen la Opcion de personalizar sus ventanas utilizando temas para GTK+. Mucho de estos temas los puedes encontrar en <a href="http://www.gnome-look.org">http://www.gnome-look.org</a>.</p>
<p>Estos tipos de temas para las ventanas funcionan igual de ligero como los temas por defecto de Gnome. Para poder instalar un tema GTK en Gnome sigue estos pasos:<!--more--></p>
<p>1. Descarga un tema GTK. Para este tuto utilizare uno llamado "Crystal dlb". Puedes descargarlo haciendo click <strong><a href="http://www.gnome-look.org/CONTENT/content-files/24840-crystal_dlb.tar.gz">AQUI</a></strong>.</p>
<p><em>*No extraigas el archivo</em></p>
<p>2. Para instalar el tema  vamos a Sistema/Preferencias/Apariencia o tambien haciendo click derecho sobre el escritorio, seleccionas "Cambiar el Fondo del Escritorio" y dirigete a "Tema". Click en "Instalar", busca el archivo descargado en tu PC y agregalo, listo.</p>
<p><a href="http://s1.subirimagenes.com/imagen/663596agregar-tema-gtk.png"><img src="http://s1.subirimagenes.com/imagen/previo/thump_663596agregar-tema-gtk.png" alt="" /></a></p>
<p>Aqui les dejo 5 temas en un solo paquete para descargar...</p>
<p style="text-align:center;"><a href="http://www.sendspace.com/file/ikdbbc"><img class="aligncenter" src="http://s1.subirimagenes.com/otros/663731download.jpg" alt="" /></a></p>
<p><strong>*Si este "HowTo" te ayudo, agradece...</strong></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Gnome]]></title>
<link>http://portallinux.wordpress.com/?p=282</link>
<pubDate>Fri, 20 Jun 2008 15:00:19 +0000</pubDate>
<dc:creator>psyfurius</dc:creator>
<guid>http://portallinux.wordpress.com/?p=282</guid>
<description><![CDATA[
Que es Gnome?
- GNOME es un entorno de escritorio para sistemas operativos de tipo Unix bajo tecnol]]></description>
<content:encoded><![CDATA[<p><img src="http://s1.subirimagenes.com/imagen/652242gnome-logo.png" alt="" /></p>
<p><strong>Que es Gnome?</strong></p>
<p>-<strong> GNOME</strong> es un entorno de escritorio para sistemas operativos de tipo Unix bajo tecnología <span class="mw-redirect">X Window</span>. Forma parte oficial del proyecto GNU. Nació como una alternativa a KDE. Se encuentra disponible actualmente en 48 idiomas en su última versión.</p>
<p><strong>Para quien es Gnome?</strong><!--more--></p>
<p>- Gnome es para personas que tengan una PC con al menos 256+ MB Ram.</p>
<p><strong>Que "Distro" viene con Gnome por defecto?</strong></p>
<p>- Si, muchas vienen con Gnome por defecto. Por ejemplo tenemos a <a href="http://portallinux.wordpress.com/2008/04/14/ubuntu-v70-gutsy-gibbon/">Ubuntu</a> y <a href="http://portallinux.wordpress.com/2008/04/14/fedora/">Fedora</a>. Otras distribuciones como <a href="http://portallinux.wordpress.com/2008/04/14/opensuse/">OpenSuse</a> y <a href="http://portallinux.wordpress.com/2008/04/14/mandriva/">Mandriva</a> no vienen por defecto con Gnome pero "si" tienen la opcion para instalar con Gnome.</p>
<p><strong>Cual es la ultima version de Gnome?</strong></p>
<p>- Hoy 20 de Junio de 2008, la ultima version reportada es la v2.22.</p>
<p><a href="http://s1.subirimagenes.com/fondosycapturas/652231ubuntu-gnome.jpg"><img src="http://s1.subirimagenes.com/fondosycapturas/previo/thump_652231ubuntu-gnome.jpg" alt="" /></a></p>
<p>Web: <a href="http://www.gnome.org/">http://www.gnome.org/</a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[libwnck package for sid]]></title>
<link>http://marcotmarcot.wordpress.com/?p=7</link>
<pubDate>Fri, 20 Jun 2008 05:40:48 +0000</pubDate>
<dc:creator>marcotmarcot</dc:creator>
<guid>http://marcotmarcot.wordpress.com/?p=7</guid>
<description><![CDATA[I&#8217;ve done a package for the correction of the libwnck bug to sid.  It&#8217;s available at Deb]]></description>
<content:encoded><![CDATA[<p>I've done a package for the correction of the libwnck <a href="http://code.google.com/p/xmonad/issues/detail?id=195">bug</a> to sid.  It's available at <a href="http://mentors.debian.net/cgi-bin/sponsor-pkglist?action=details;package=libwnck">Debian Mentors</a> and at <a href="http://marcotmarcot.googlepages.com/libwnck.html">my Home Page</a>.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[lexadrez - programa exemplo com pygtk]]></title>
<link>http://medeubranco.wordpress.com/?p=27</link>
<pubDate>Wed, 18 Jun 2008 01:26:21 +0000</pubDate>
<dc:creator>medeubranco</dc:creator>
<guid>http://medeubranco.wordpress.com/?p=27</guid>
<description><![CDATA[Para quem acompanhou os tutoriais de PyGTK deste blog e queria ver um programa mais completo usando ]]></description>
<content:encoded><![CDATA[<p align='justify'>Para quem acompanhou os tutoriais de PyGTK deste blog e queria ver um programa mais completo usando  drawingArea e outras graças do GTK, eu posso oferecer o programa que escrevi um tempo atrás para rever as partidas de xadrez que eu jogava no yahoo!.</p>
<p align='justify'>Enquanto escrevia, resolvi que o software poderia ser também uma ferramenta para estudar aberturas, e preparei ele para isso.</p>
<p align='justify'>Coloquei o programa no <a href="http://codigolivre.org.br">codigolivre</a> :<br />
<a href="http://lexadrez.codigolivre.org.br/">lexadrez.codigolivre.org.br</a></p>
<p>Como o codigolivre vira e mexe está inacessível, passo o link para baixar direto o código:<br />
<a href="http://saltador.uspnet.usp.br/pub/lexadrez/lexadrez/lexadrez-0.001/lexadrez-0.001.tar.gz">lexadrez-0.001.tar.gz</a></p>
<p>O programa exibindo a Ruy Lopes:</p>
<p><a href="http://medeubranco.files.wordpress.com/2008/06/lexadrez.png"><img src="http://medeubranco.wordpress.com/files/2008/06/lexadrez.png?w=300" alt="Exibindo a Ruy Lopes" width="300" height="248" class="alignnone size-medium wp-image-28" /></a></p>
<p align='justify'>O código foi todo orientado a objetos. As classes estão mais ou menos documentadas, experimente usar o pydoc pelo terminal, no diretório do programa.</p>
<p align='justify'>Acho que poderia ter sido melhor escrito em vários aspectos: o parser para leitura do jogo está muito <a href="http://desciclo.pedia.ws/wiki/POG">POG</a>, as classes são muito dependentes umas das outras, entre outras coisas. Não coloquei o recurso de gravar as aberturas diretamente no programa; se alguém quiser fazê-lo, não está difícil.</p>
<p>Recursos funcionando:</p>
<ul>
<li>exibe jogos e aberturas no formato do yahoo!</li>
<li>permite movimentar as peças de acordo com as regras do xadrez</li>
<li>edita e salva comentários nas partidas e aberturas</li>
</ul>
<p align='justify'>Se você tem mais experiência em OOP, gostaria saber quais "regras" da boa programação eu violei, e de que forma o código poderia ter sido melhor escrito. Juro que não fico chateado. Use e abuse dos comentários.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Xandros 4.1 and Firefox 3 Don't Play Well Together]]></title>
<link>http://dkseto.wordpress.com/?p=1724</link>
<pubDate>Wed, 18 Jun 2008 00:23:25 +0000</pubDate>
<dc:creator>Dan Seto</dc:creator>
<guid>http://dkseto.wordpress.com/?p=1724</guid>
<description><![CDATA[For those of you running Xandros Linux Desktop Professional 4.1, you may want to pause and reflect b]]></description>
<content:encoded><![CDATA[<p>For those of you running Xandros Linux Desktop Professional 4.1, you may want to pause and reflect before installing the new Firefox 3 browser.</p>
<p>I downloaded the new Firefox this afternoon and began the install. However, the install ran until it halted with an error saying GTK+ 2.1 was required but only an earlier version was installed. After searching the Xandros support forums, it appears you have to install and compile the source code for GTK+ 2.1 because Xandros does not have an update for it. But, now wait for it, you first have to overcome dependencies by installing and compiling several other files. But, now wait for it, well, you know the drill. You are in dependency hell with no way out. Even if you get GTK+ 2.1 installed, you run the chance of breaking other applications. If that occurs, you are pretty much on your own, up that certain creek without a paddle.</p>
<p>What's even worse is that the install program killed my existing version of firefox (2.0.0.14). I don't know what the install did but my old version refused to run and I couldn't find a download to re-install for this version. What I ended up doing was I uninstalled the Xandros Firefox (2.0.0.6), an old version I had long ago abandoned by downloading newer versions directly from Firefox, and then re-installing that from Xandros Networks. Once that was done, both 2.0.0.6 and 2.0.0.14 started working again.</p>
<p>I don't know why that worked, but it did. For me, anyway. YMMV. Insert disclaimer here.</p>
<p>In any case, unless someone creates a binary for Xandros, backports GTK+ 2.1, or another solution is found, you should probably avoid Firefox 3 on Xandros Desktop Professional 4.1.</p>
<p><span style="font-weight:bold;font-style:italic;">Aloha!</span></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[libwnck]]></title>
<link>http://marcotmarcot.wordpress.com/?p=4</link>
<pubDate>Tue, 17 Jun 2008 00:09:45 +0000</pubDate>
<dc:creator>marcotmarcot</dc:creator>
<guid>http://marcotmarcot.wordpress.com/?p=4</guid>
<description><![CDATA[When XMonad was used with GNOME, through EwmhDesktops and the last window was destroyed, it would no]]></description>
<content:encoded><![CDATA[<p>When <a href="http://www.xmonad.org/">XMonad</a> was used with <a href="http://www.gnome.org/">GNOME</a>, through <a href="http://www.xmonad.org/xmonad-docs/xmonad-contrib/XMonad-Hooks-EwmhDesktops.html">EwmhDesktops</a> and the last window was destroyed, it would not be deleted from the <a href="http://library.gnome.org/users/user-guide/stable/windowlist.html">window list</a> and from the <a href="http://library.gnome.org/users/workspace-switcher/2.22/">workspace switcher</a>. <a href="http://code.google.com/p/xmonad/issues/detail?id=195">This bug report</a> explains the situation. To correct it, I've made a <a href="http://xmonad.googlecode.com/issues/attachment?aid=-1770340899745700124&#38;name=screen.c.patch">patch</a> to libwnck's <code>screen.c</code>, which was applied in the <a href="http://svn.gnome.org/viewvc/libwnck/trunk/libwnck/screen.c?view=log">SVN version</a> of this file. I've done a <a href="http://marcotmarcot.googlepages.com/libwnck.html">package</a> for <a href="http://www.ubuntu.com/">Ubuntu</a> <a href="https://wiki.ubuntu.com/HardyHeron">Hardy Heron</a> and other for <a href="http://www.debian.org/">Debian</a> <a href="http://www.debian.org/releases/stable/">Etch</a> with a corrected version of this library.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Google Gadgets]]></title>
<link>http://balajirrao.wordpress.com/?p=31</link>
<pubDate>Sun, 15 Jun 2008 10:32:18 +0000</pubDate>
<dc:creator>balajirrao</dc:creator>
<guid>http://balajirrao.wordpress.com/?p=31</guid>
<description><![CDATA[Just now I read from lwn.net about the release of Google Gadgets for Linux and Google Desktop for li]]></description>
<content:encoded><![CDATA[<p>Just now I read from lwn.net about the release of <a href="http://google-opensource.blogspot.com/2008/06/google-gadgets-for-linux.html">Google Gadgets for Linux</a> and <a href="http://desktop.google.com/en/linux/index.html">Google Desktop for linux</a>. I decided to check it out and obtained the source. Once small problem is, it does not have installer packages for various distros. Installing from source was pretty easy. I had no dependency problem at all. Everything was smooth. It builds separately for Qt and Gtk, although I tried only the GTK one as I no longer use KDE.</p>
<p>There are a <em>lot</em> of gadgets to choose from. The gadget chooser looks like this.</p>
<p><a href="http://balajirrao.wordpress.com/files/2008/06/screenshot-gadget-browser.png"><img class="alignnone size-full wp-image-32" src="http://balajirrao.wordpress.com/files/2008/06/screenshot-gadget-browser.png" alt="Google Gadget Browser" width="476" height="381" /></a></p>
<p>Some of them don't work. But some of them throw a scary warning like this when you tried to add it. Being afraid, I just say <em>No</em>. :)</p>
<p><a href="http://balajirrao.wordpress.com/files/2008/06/screenshot-third-party-gadget-installation.png"><img class="alignnone size-medium wp-image-36" src="http://balajirrao.wordpress.com/files/2008/06/screenshot-third-party-gadget-installation.png?w=300" alt="" width="300" height="146" /></a></p>
<p>Here's a screenshot of my desktop decorated with a few cool gadgets and firefox showing Google Desktop for linux. Grab your copy and try it out. <em>Enjoy madi!!</em></p>
<p><a href="http://balajirrao.wordpress.com/files/2008/06/screenshot1.png"><img class="alignnone size-medium wp-image-35" src="http://balajirrao.wordpress.com/files/2008/06/screenshot1.png?w=300" alt="" width="300" height="187" /></a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[DrawingArea - Desenhando na tela com PyGTK]]></title>
<link>http://medeubranco.wordpress.com/?p=24</link>
<pubDate>Sun, 15 Jun 2008 05:35:14 +0000</pubDate>
<dc:creator>medeubranco</dc:creator>
<guid>http://medeubranco.wordpress.com/?p=24</guid>
<description><![CDATA[Nos artigos anteriores sobre PyGTK, eu apresentei quatro widgets básicos:

 gtk.Window - uma janela]]></description>
<content:encoded><![CDATA[<p>Nos artigos anteriores sobre PyGTK, eu apresentei quatro widgets básicos:</p>
<ul>
<li> gtk.Window - uma janela</li>
<li> gtk.VBox - um container para acomodar os widgets</li>
<li> gtk.Button - botão</li>
<li> gtk.Label - uma etiqueta para texto</li>
</ul>
<p>Muitos outros widgets básicos não foram nem mencionados, como o gtk.Entry (caixa de texto), gtk.TreeView (lista em árvore), gtk.Toolbar (barra de ferramentas), entre outros.</p>
<p>Acontece que não vou mostrar nenhum deles aqui ainda.</p>
<p>Vamos falar de um componente que é menos usado nas aplicações em geral mas é muito útil. É o gtk.DrawingArea, Uma simples janela X onde podemos desenhar qualquer coisa, inclusive quadrados verdes com borda preta, de 50x50 pixels. E é exatamente isso que vamos fazer aqui.<br />
Vamos construir, passo a passo, uma janela que contem uma área de desenho (DrawingArea) e um botão. Vamos chamar a área de desenho de tela.<br />
A cada clique de mouse na tela, um quadrado verde é desenhado, tendo como centro o ponto clicado.</p>
<p>O botão vai limpar a tela.</p>
<p>Se você ainda não sabe como criar uma janela em PyGTK, leia primeiro esses dois pequenos artigos:</p>
<p><a href="http://medeubranco.wordpress.com/2008/06/07/criando-uma-simples-janela-com-pygtk/"> Criando uma simples janela com pygtk</a><br />
<a href="http://medeubranco.wordpress.com/2008/06/10/criando-uma-simples-janela-em-pygtk-parte-ii/"> Criando uma simples janela em pygtk - parte II</a></p>
<p>O grande astro da noite é a <strong>gtk.DrawingArea</strong>. Então vamos criar nossa tela:</p>
<pre>[sourcecode language='python']
tela=gtk.DrawingArea()
[/sourcecode]</pre>
<p>Como deveríamos saber, interfaces gráficas trabalham com eventos, como cliques em um botão, cliques e movimentos de mouse, teclas pressionadas, janelas arrastadas, minimizadas, escondidas por outras, etc.  O usuário simplesmente dispara os eventos, o programador cuida de criar respostas a eles. Para uma <strong>DrawingArea</strong> um evento importante é o <em><strong>expose-event</strong></em>, disparado quando a tela é reexibida. Se a tela estava oculta, quando ela volta a aparecer precisa ser redesenhada, então vamos conectar o <em><strong>expose-event</strong></em> à função que vai desenhar os nossos preciosos quadrados verdes:</p>
<pre>[sourcecode language='python']
tela.connect('expose-event',desenha)
[/sourcecode]</pre>
<p>Outro evento importante para o nosso programa é o <em><strong>button-press-event</strong></em>, disparado quando você clica na tela com o mouse; mas este evento não está configurado, então vamos adicioná-lo à nossa tela, e então fazer a conexão com a função que vai criar nossos imprescindíveis quadrados verdes:</p>
<pre>[sourcecode language='python']
tela.add_events( gtk.gdk.BUTTON_PRESS_MASK )
tela.connect('button-press-event',cria_quadrado)
[/sourcecode]</pre>
<p>Não nos esqueçamos do objetivo deste programa: criar quadrados verdes. Os quadrados serão armazenados em uma lista. Listas são um tipo de dados que o Python nos provê. Criaremos a lista de quadrados:</p>
<pre>[sourcecode language='python']
quadrados=[]
[/sourcecode]</pre>
<p>Agora a coisa começa a ficar mais interessante. Dê uma olhada na função <strong>criar_quadrado()</strong>, que será executada a cada clique na tela:</p>
<pre>[sourcecode language='python']
def cria_quadrado(tela,evento):
    global quadrados
    coor=evento.get_coords()
    x=coor[0]
    y=coor[1]
    novo_quadrado=[ x-25 , y-25 , 50 , 50 ]
    quadrados.append(novo_quadrado)
    desenha(tela,None)

[/sourcecode]</pre>
<p>A função recebe dois parâmetros: a tela onde ocorreu o evento, e o evento propriamente dito.</p>
<p>A segunda linha da função declara como global a lista de quadrados, ou seja, um objeto criado fora da função pode ser acessado de dentro dela sem ter sido passado como parâmetro.</p>
<p>A terceira linha pega as coordenadas do evento. O ponto exato onde ocorreu o clique. O método get_coords() retorna uma tupla com as coordenadas X e Y. Assim: (X,Y).</p>
<p>A quarta e quinta linhas criam duas variáveis para conter os valores da tupla.</p>
<p>A sexta linha finalmente cria o nosso quadrado (não desenha, só cria) e a sétima o adiciona à lista de quadrados. O quadrado, então, nada mais é que uma outra lista contendo as coordenadas de inicio, a largura e a altura.</p>
<p>Vamos analisar melhor o quadrado criado:<br />
<strong></strong></p>
<p><strong> x-25</strong> : é o primeiro item da lista. Indica a coordenada X do canto superior esquerdo do quadrado.<br />
<strong></strong></p>
<p><strong>y-25</strong>: é o segundo item da lista e indica a coordenada Y do canto superior esquerdo do quadrado.<br />
Os valores x e y vieram do evento de mouse. Subtraímos 25 (alguém reparou que 25 é metade de 50?) de cada para que o ponto clicado fosse o centro do quadrado.</p>
<p>Em uma DrawingArea, as coordenadas são orientadas de cima para baixo e da esquerda para a direita.</p>
<p><strong>50</strong>: terceiro e quarto itens da lista; respectivamente altura e largura do quadrado.<br />
A oitava linha da função 'cria_quadrado' chama a função 'desenha'. A tela é passada como parâmetro. None é o segundo parâmetro, e só está aí porque a função pede um segundo parâmetro (ela também é disparada quando ocorre o expose-event).</p>
<p>Já sabemos como criar os quadrados na memória. O próximo passo é desenhá-los na tela:</p>
<pre>[sourcecode language='python']

def desenha( tela , evento ):
    global quadrados
    gc=tela.get_style().fg_gc[gtk.STATE_NORMAL]

    verde=gtk.gdk.Color(0,48255,0,0)
    preto=gtk.gdk.Color(0,0,0,0)
    fundo=gtk.gdk.Color(65535,65535,65535,0)

    #pintando o fundo da nossa tela
    gc.set_rgb_fg_color(fundo)
    tela.window.draw_rectangle(gc,True,0,0,800,600 )

    for q in quadrados:
        gc.set_rgb_fg_color(verde)
        tela.window.draw_rectangle(gc,True,q[0],q[1],q[2],q[3])
        gc.set_rgb_fg_color(preto)
        tela.window.draw_rectangle(gc,False,q[0],q[1],q[2],q[3])

[/sourcecode]</pre>
<p>Dissecando a função:</p>
<p>Aqui vamos usar a lista de quadrados, que foi criada fora do contexto desta função e é modificada por outra função. Por isso o <strong>global quadrados</strong>.<br />
Precisamos também criar um <strong><em>graphics context</em></strong> (<strong>gc</strong>):</p>
<pre>[sourcecode language='python']
    gc=tela.get_style().fg_gc[gtk.STATE_NORMAL]
[/sourcecode]</pre>
<p>Um <em><strong>graphics context</strong></em> armazena informações como cor de fundo, de primeiro plano e espessura da linha de desenho.</p>
<p>Precisamos de algumas cores para fazer nossa arte:</p>
<pre>[sourcecode language='python']
    verde=gtk.gdk.Color(0,48255,0,0)
    preto=gtk.gdk.Color(0,0,0,0)
    fundo=gtk.gdk.Color(65535,65535,65535,0)
[/sourcecode]</pre>
<p>Vamos dar um fundo branco para a nossa tela:</p>
<pre>[sourcecode language='python']
    gc.set_rgb_fg_color(fundo)
    tela.window.draw_rectangle(gc,True,0,0,800,600 )
[/sourcecode]</pre>
<p>Os dois comandos acima serão usados novamente agora, pois vamos percorrer a lista de quadrados e desenhar cada um deles. Se a lista estiver vazia, nenhum quadrado será desenhado:</p>
<pre>[sourcecode language='python']
    for q in quadrados:
        # desenhando um quadrado preenchido de verde
        gc.set_rgb_fg_color(verde)
        tela.window.draw_rectangle(gc,True,q[0],q[1],q[2],q[3])
    #desenhando a borda preta do quadrado
        gc.set_rgb_fg_color(preto)
        tela.window.draw_rectangle(gc,False,q[0],q[1],q[2],q[3])

[/sourcecode]</pre>
<p>Em <strong>gc.set_rgb_fg_color( cor )</strong> definimos a cor a ser usada ao desenhar.</p>
<p>O método <em><strong>draw_rectangle</strong></em> precisa ser compreendido. Vejamos os parâmetros usados:</p>
<p><strong> gc </strong>: o <em>graphics context</em> criado lá em cima.</p>
<p><strong> False ou True</strong> : indica se o quadrado será preenchido.</p>
<p><strong> q[0] até q[3]</strong>: são os quatro valores do quadrado criado lá em cima.</p>
<p>Faltou o botão para apagar a tela. Ele está presente no código completo mais abaixo. Por enquanto basta dizer que apaga-se a tela simplesmente limpando a lista de quadrados e disparando novamente a função 'desenha()'.</p>
<p>Vamos ver como ficou o nosso programa:</p>
<pre>[sourcecode language='python']
#!/usr/bin/env python
import pygtk
import gtk

#declarando a lista de quadrados
quadrados=[]

def cria_quadrado(tela,evento):
    global quadrados

    #obtendo as coordenadas do clique de mouse
    coor=evento.get_coords()
    x=coor[0]
    y=coor[1]

    #criando um novo quadrado e incluindo ele na lista
    novo_quadrado=[x-25,y-25,50,50]
    quadrados.append(novo_quadrado)

    # disparando a funcao 'desenha()'
    # para incluir o nosso novo quadrado
    desenha(tela,None)

# a funcao desenha() deve ser chamada sempre que
# quisermos redesenhar a tela
# ou quando a tela precisar ser redesenhada
# por ter sido encoberta por outra janele, por
# exemplo
def desenha(tela,evento ):
    global quadrados
    #criando um "graphics context"
    gc=tela.get_style().fg_gc[gtk.STATE_NORMAL]

    #definindo as cores
    verde=gtk.gdk.Color(0,48255,0,0)
    preto=gtk.gdk.Color(0,0,0,0)
    fundo=gtk.gdk.Color(65535,65535,65535,0)

    #pintando o fundo da nossa tela
    gc.set_rgb_fg_color(fundo)
    tela.window.draw_rectangle(gc,True,0,0,800,600 )

    # desenhando cada um dos quadrados
    for q in quadrados:

        #desenhando o quadrado preenchido
        gc.set_rgb_fg_color(verde)
        tela.window.draw_rectangle(gc,True,q[0],q[1],q[2],q[3])

        #desenhando a borda do quadrado
        gc.set_rgb_fg_color(preto)
        tela.window.draw_rectangle(gc,False,q[0],q[1],q[2],q[3])

def limpar(botao):
    global quadrados
    global tela
    #limpando a lista de quadrados
    quadrados=[]

    #disparando novamente a funcao "desenha()"
    #para desenhar a tela branca sem nenhum quadrado
    desenha(tela, None)

win=gtk.Window()
win.set_title( "medeubranco.wordpress.com - Desenhando na tela com PyGTK" )
win.set_size_request(800,600)
win.connect('destroy',gtk.main_quit)

box=gtk.VBox()

#aqui a nossa tela sendo criada
tela=gtk.DrawingArea()

tela.connect('expose-event',desenha)
tela.add_events( gtk.gdk.BUTTON_PRESS_MASK )
tela.connect('button-press-event',cria_quadrado)

botao=gtk.Button( "limpar" )

botao.connect("clicked",limpar)

win.add(box)
box.set_border_width(10)

box.pack_start(tela)
box.pack_start(botao,False)
win.show_all()
gtk.main()

[/sourcecode]</pre>
<p>Olha o resultado:<br />
<a href="http://medeubranco.wordpress.com/files/2008/06/desenhando.png"><img class="alignnone size-medium wp-image-25" src="http://medeubranco.wordpress.com/files/2008/06/desenhando.png?w=300" alt="" width="300" height="233" /></a></p>
<p>Na tentativa de manter este artigo o menos complexo possível, muita coisa foi omitida aqui. Há outros métodos de desenho além do draw_rectangle, e há outras formas de lidar com uma DrawingArea.</p>
<p>Para se aprofundar, você pode começar por aqui:</p>
<p><a href="http://www.pygtk.org/pygtk2tutorial/sec-DrawingAreaWidgetAndDrawing.html">http://www.pygtk.org/pygtk2tutorial/sec-DrawingAreaWidgetAndDrawing.html</a><br />
Espero que este tutorial tenha sido útil a você e que você encontre formas criativas de usar uma DrawingArea.</p>
<p>Até o próximo artigo deste blog.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Las comparaciones NO son odiosas.]]></title>
<link>http://jmgv.wordpress.com/?p=13</link>
<pubDate>Fri, 13 Jun 2008 14:50:21 +0000</pubDate>
<dc:creator>jmgv</dc:creator>
<guid>http://jmgv.wordpress.com/?p=13</guid>
<description><![CDATA[Tengo la costumbre de participar en debates estériles simplemente porque me divierten. Aunque, ahor]]></description>
<content:encoded><![CDATA[<p>Tengo la costumbre de participar en debates estériles simplemente porque me divierten. Aunque, ahora que me doy cuente, que si me divierten, ya no son tan estériles. He leido cientos de hilos en listas de correo con los típicas comparaciones. Kde vs Gnome, C++ vs C, C++ vs Java, Gtk+ vs Qt, Linux vs Windows...</p>
<p>A día de hoy, o mejor dicho, a día de hace una semana, estaba totalmente convencido que el C++ era mejor que C. Sin embargo ahora no empiezo a tenerlo claro. Y es que, tengo un grave problema, cuanta más experiencia tengo, cuanto más tecnologías diferentes analizo, menos claras tengo las cosas cuando supuestamente debería ser lo contrario.</p>
<p>El caso, es que en estos momentos tengo un proyecto entre manos, para el que necesito crear algún tipo de interfaz gráfico para el usuario. Tenía que elegir unas librerías que me permitieran hacer esto. Mi elección de manera natural estaba clara, elegiría Qt porque es una librería probada sobradamente (KDE la usa en su escritorio) y que además tiene una magnifica documentación. Pero sobre todo, mi inclinación por usar Qt era porque estaban programadas en C++. Sin embargo, mientras he ido madurando la aplicación, he empezado a tener menos claro si debo poner mi aplicación con licencia GPL o no, y aunque no lo tengo decidido aún, con Qt no tengo elección, debe ser GPL. Es cierto que existe otra licencia comercial de Qt que no me obliga a ello, pero los costes no son asumibles por mí en este momento.</p>
<p>Buscando una alternativa, llegué de nuevo a Gtk+. Ya conocía Gtk+ pero la mantenía un poco en la distancia porque estaban realizadas en C, sin embargo tenía una gran ventaja para mi, su licencia era LGPL. Esta licencia me permite hacer con mi código lo que me venga en gana. Es decir, me dar libertad verdadera.</p>
<p>Sé que el tipo de licencia no debería ser un factor a tener muy en cuenta para decidir la tecnología que vas a utilizar para el desarrollo de una aplicación, sin embargo, en esta ocasión decidí echarle un vistazo. Para los que no lo sepan, Gtk+ es a Gnome, lo que Qt es a KDE. Por lo tanto, ni que decir tiene que Gtk+ también es una librería madura.</p>
<p>Gtk no pertenece a ninguna empresa. Qt en realidad, en su versión GPL tampoco, pero sí pertenece a medias entre Trolltech (recientemente adquirido por Nokia) y la Foundación KDE. Sea como sea, y aunque no dudo sobre las buenas intenciones de la Fundación KDE, Qt tiene dueños. Sin embargo Gtk+ no pertenece a nadie. Este es otro factor que me hizo pensar que merecía la pena echarle un ojo.</p>
<p>Sinceramente, aún estoy frotándome los ojos cuando miré el código por dentro. Es un código diseñado con un gusto exquisito, y con una filosofía orientada a objetos, que me gustaría ver en muchos de los programas desarrollados en C++. Ya sabéis la programación orientada a objetos no es una cuestión del lenguaje si no de diseño. Esto queda reflejado de forma patente en el código de las GTK+</p>
<p>Ahora bien, si está pensado con OOP en la cabeza, porqué no usar un lenguaje orientado a objetos. Según algunos de los desarrolladores de Gtk+ y según se puede leer en numerosos sitios de internet a poco que busques por internet, la mayoria de la gente que decide usar C sobre C++ es porque piensan que C++ te obliga a meter una serie de sobrecargas que no son necesarias, y que lleva a la gente que usa el lenguaje a hacer malos diseños. Tampoco les suele gustar mucho el uso de las STL o de las Boosts.</p>
<p>Está claro que, del mal diseño de una aplicación no tiene la culpa el lenguaje si no el que lo diseña. Pero... un lenguaje está claro que te condiciona la forma en la que enfocas un problema. Es más complicado hacer un buen programa en Perl que en Java.</p>
<p>En un hilo de discusión muy famoso, Linus dijo que había elegido C para el desarrollo de Git porque le parece mucha mejor opción. Y dijo también "si elegir C sirve para mantener apartado del proyecto a los programadores de C++, ya es una buena opcion". Otra de las perlas que soltó fue, que "a cualquier persona que eliga C++ en vez de C para un proyecto, no la quería tener en su proyecto". Sin duda alguna estas no son maneras de expresarse, pero más allá de esa questión, yo me pregunto ¿tendrá razón?.</p>
<p>Generalizar es un pecado mortal en estos contextos, pero, debido a la naturaleza del lenguaje, quien pensáis que por regla general conoce mejor el funcionamiento de los ordenadores, ¿un programador de C o uno de Java? y ¿entre uno de C y otro de C++?. A pesar de tirarme piedras sobre mi propio tejado, yo creo que <strong><em>por regla general</em></strong> el de C. Y aunque no estoy de acuerdo con Linus en las formas como lo dijo, empiezo a estar de acuerdo en el fondo de lo que dijo.</p>
<p>La gente suele decir, que con C++ se pueden abordar projectos más grandes que con C. Bueno, eso depende. Probablemente ninguna de estas personas haya trabajado en proyectos tan grande como pueden ser Gnome, Evolution o GiMP por poner algunos ejemplos. Sin embargo todos ellos están desarrollados en C. Lo que si te obliga C es a llevar una disciplina que sólo los buenos conocedores de como funciona el software son capaces de llevar a cabo. En C no hay recolección automática de basura, eso lo tiene que hacer el programador, en C++ ocurre lo mismo, pero... en C si te creas un polimorfismo sabes exactamente lo que estás haciendo porque lo hace el propio programador, mientras que en C++ muchos de los paradigmas de la programación orientada a objetos están ocultas en la sintaxis del programa, como debe ser en un lenguaje pensado para el desarrollo orientado a objetos. Lo mismo ocurre con el uso de strings, que en determindas ocasiones cuando son utilizadas en C++ para concatenar, requiere de muchos recursos para hacerlo y es extremadamente lento. Sin embargo, al estar todo oculto, es complicado de que un programador pueda detectarlo.</p>
<p>En definitiva, creo que, en los proyectos donde tan sólo se permite C, la probabilidad de que haya un mal programador es más baja, que en los proyectos donde se desarrolla en C++.</p>
<p>Estoy convencido de que, entre los programadores de las Gtk+ hay muy pocos programadores malos a la vista del código y del diseño. Queda patente una gran formación en la ingeniería del software y unas ideas muy claras de como hacer las cosas bien.</p>
<p>Cuando me hice cargo del mantenimiento del paquete de software libre DDD. Pensé en ponerle un mejor entorno gráfico, ya que actualmente usa Motif que ya no se mantienen a buen ritmo, y pensé en reescribir algunas de las parte en C++. Sin embargo, ahora lo que vamos a hacer es dejar el C, no reescribir nada en C++ y meter Gtk en vez de Qt como tenía pensado. Ya veremos cual es la experiencia.</p>
<p>De hecho, después de ver como está hecho Gtk+, y como está organizado la plataforma de desarrollo de Gnome, me estoy replanteando muchas cosas que hasta hace una semana daba por hecho.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Un ejemplo de Ruby/Ruby-gnome2]]></title>
<link>http://lonecat.wordpress.com/?p=6</link>
<pubDate>Fri, 13 Jun 2008 01:18:53 +0000</pubDate>
<dc:creator>lonecat</dc:creator>
<guid>http://lonecat.wordpress.com/?p=6</guid>
<description><![CDATA[Cuando busco ejemplos en internet, intento reproducirlos para luego analizarlos en detalle y compren]]></description>
<content:encoded><![CDATA[<p>Cuando busco ejemplos en internet, intento reproducirlos para luego analizarlos en detalle y comprender el codigo. Sin embargo, hay muchas veces que encuentro ejemplos que muchas veces son muy faciles y no me aportan mucho. Otras veces encuentro ejemplos que son muy dificiles y presentan multiples conceptos que me confunden. Por eso siempre que aprendo un nuevo lenguaje de programacion intento aplicar los conocimientos en ejemplos practicos que uso dia a dia.<br />
El siguiente es un pequeño ejemplo que muestra una pequeña ventana que calcula el tiempo aproximado que tardará una descarga. </p>
<p>El resultado:</p>
<p><a href="http://lonecat.files.wordpress.com/2008/06/descargas.png"><img src="http://lonecat.wordpress.com/files/2008/06/descargas.png?w=300" alt="" width="300" height="227" class="alignnone size-medium wp-image-7" /></a></p>
<p>El codigo (descargas.rb):<br />
<code><br />
<font face="monospace"><br />
<font color="#7f7f7f">&#160;1 </font><span style="background-color:#ffffff;"><font color="#ff0000">#!/usr/bin/env ruby</font></span><br><br />
<font color="#7f7f7f">&#160;2 </font><font color="#666666">#########################################################################</font><br><br />
<font color="#7f7f7f">&#160;3 </font><font color="#666666">#</font><br><br />
<font color="#7f7f7f">&#160;4 </font><font color="#666666">#&#160;&#160;Calculadora de descargas, por Jose Felix Gomez </font><br><br />
<font color="#7f7f7f">&#160;5 </font><font color="#666666">#&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160; 05/2008</font><br><br />
<font color="#7f7f7f">&#160;6 </font><font color="#666666">#</font><br><br />
<font color="#7f7f7f">&#160;7 </font><font color="#666666">#</font><br><br />
<font color="#7f7f7f">&#160;8 </font><font color="#666666">#</font><br><br />
<font color="#7f7f7f">&#160;9 </font><font color="#ff0000">require</font>&#160;<font color="#bdb76b">'</font><font color="#87ceeb">gtk2</font><font color="#bdb76b">'</font><br><br />
<font color="#7f7f7f">10 </font><br><br />
<font color="#7f7f7f">11 </font><font color="#ffd700"><b>class</b></font>&#160;<font color="#6495ed"><b>Descarga</b></font><br><br />
<font color="#7f7f7f">12 </font>&#160;&#160;<font color="#ffd700"><b>def</b></font>&#160;<font color="#ffdead">initialize</font><br><br />
<font color="#7f7f7f">13 </font>&#160;&#160;&#160;&#160;window = <font color="#6495ed"><b>Gtk</b></font>::<font color="#6495ed"><b>Window</b></font>.new(<font color="#bdb76b">'</font><font color="#87ceeb">Descargas</font><font color="#bdb76b">'</font>)<br><br />
<font color="#7f7f7f">14 </font>&#160;&#160;&#160;&#160;window.set_border_width(<font color="#ffa0a0">5</font>)<br><br />
<font color="#7f7f7f">15 </font>&#160;&#160;&#160;&#160;window.set_size_request(<font color="#ffa0a0">300</font>,<font color="#ffa0a0">200</font>)<br><br />
<font color="#7f7f7f">16 </font>&#160;&#160;&#160;&#160;window.resizable=<font color="#ffa0a0">false</font><br><br />
<font color="#7f7f7f">17 </font>&#160;&#160;&#160;&#160;table = <font color="#6495ed"><b>Gtk</b></font>::<font color="#6495ed"><b>Table</b></font>.new(<font color="#ffa0a0">4</font>,<font color="#ffa0a0">2</font>,<font color="#ffa0a0">true</font>)<br><br />
<font color="#7f7f7f">18 </font>&#160;&#160;&#160;&#160;window.add(table)<br><br />
<font color="#7f7f7f">19 </font>&#160;&#160;&#160;&#160;boton_calcular = <font color="#6495ed"><b>Gtk</b></font>::<font color="#6495ed"><b>Button</b></font>.new(<font color="#bdb76b">'</font><font color="#87ceeb">Calcular</font><font color="#bdb76b">'</font>)<br><br />
<font color="#7f7f7f">20 </font>&#160;&#160;&#160;&#160;boton_salir = <font color="#6495ed"><b>Gtk</b></font>::<font color="#6495ed"><b>Button</b></font>.new(<font color="#bdb76b">'</font><font color="#87ceeb">Salir</font><font color="#bdb76b">'</font>)<br><br />
<font color="#7f7f7f">21 </font>&#160;&#160;&#160;&#160;label_tamano = <font color="#6495ed"><b>Gtk</b></font>::<font color="#6495ed"><b>Label</b></font>.new(<font color="#bdb76b">'</font><font color="#87ceeb">Tamaño</font><font color="#bdb76b">'</font>)<br><br />
<font color="#7f7f7f">22 </font>&#160;&#160;&#160;&#160;label_velocidad = <font color="#6495ed"><b>Gtk</b></font>::<font color="#6495ed"><b>Label</b></font>.new(<font color="#bdb76b">'</font><font color="#87ceeb">Velocidad</font><font color="#bdb76b">'</font>)<br><br />
<font color="#7f7f7f">23 </font>&#160;&#160;&#160;&#160;label_resultado = <font color="#6495ed"><b>Gtk</b></font>::<font color="#6495ed"><b>Label</b></font>.new(<font color="#bdb76b">'</font><font color="#87ceeb">Ingresa los valores y presiona \'Enter\'</font><font color="#bdb76b">'</font>)<br><br />
<font color="#7f7f7f">24 </font>&#160;&#160;&#160;&#160;entry_tamano = <font color="#6495ed"><b>Gtk</b></font>::<font color="#6495ed"><b>Entry</b></font>.new<br><br />
<font color="#7f7f7f">25 </font>&#160;&#160;&#160;&#160;entry_tamano.text = <font color="#bdb76b">'</font><font color="#87ceeb">100m</font><font color="#bdb76b">'</font><br><br />
<font color="#7f7f7f">26 </font>&#160;&#160;&#160;&#160;entry_velocidad = <font color="#6495ed"><b>Gtk</b></font>::<font color="#6495ed"><b>Entry</b></font>.new<br><br />
<font color="#7f7f7f">27 </font>&#160;&#160;&#160;&#160;entry_velocidad.text = <font color="#bdb76b">'</font><font color="#87ceeb">512</font><font color="#bdb76b">'</font><br><br />
<font color="#7f7f7f">28 </font>&#160;&#160;&#160;&#160;table.attach_defaults(label_velocidad,<font color="#ffa0a0">0</font>,<font color="#ffa0a0">1</font>,<font color="#ffa0a0">1</font>,<font color="#ffa0a0">2</font>)<br><br />
<font color="#7f7f7f">29 </font>&#160;&#160;&#160;&#160;table.attach_defaults(label_tamano,<font color="#ffa0a0">0</font>,<font color="#ffa0a0">1</font>,<font color="#ffa0a0">0</font>,<font color="#ffa0a0">1</font>)<br><br />
<font color="#7f7f7f">30 </font>&#160;&#160;&#160;&#160;table.attach_defaults(entry_tamano,<font color="#ffa0a0">1</font>,<font color="#ffa0a0">2</font>,<font color="#ffa0a0">0</font>,<font color="#ffa0a0">1</font>)<br><br />
<font color="#7f7f7f">31 </font>&#160;&#160;&#160;&#160;table.attach_defaults(entry_velocidad,<font color="#ffa0a0">1</font>,<font color="#ffa0a0">2</font>,<font color="#ffa0a0">1</font>,<font color="#ffa0a0">2</font>)<br><br />
<font color="#7f7f7f">32 </font>&#160;&#160;&#160;&#160;table.attach_defaults(boton_calcular,<font color="#ffa0a0">0</font>,<font color="#ffa0a0">1</font>,<font color="#ffa0a0">3</font>,<font color="#ffa0a0">4</font>)<br><br />
<font color="#7f7f7f">33 </font>&#160;&#160;&#160;&#160;table.attach_defaults(boton_salir,<font color="#ffa0a0">1</font>,<font color="#ffa0a0">2</font>,<font color="#ffa0a0">3</font>,<font color="#ffa0a0">4</font>)<br><br />
<font color="#7f7f7f">34 </font>&#160;&#160;&#160;&#160;table.attach_defaults(label_resultado,<font color="#ffa0a0">0</font>,<font color="#ffa0a0">2</font>,<font color="#ffa0a0">2</font>,<font color="#ffa0a0">3</font>)<br><br />
<font color="#7f7f7f">35 </font><br><br />
<font color="#7f7f7f">36 </font>&#160;&#160;&#160;&#160;boton_salir.signal_connect(<font color="#bdb76b">'</font><font color="#87ceeb">clicked</font><font color="#bdb76b">'</font>){<font color="#6495ed"><b>Gtk</b></font>.main_quit}<br><br />
<font color="#7f7f7f">37 </font><br><br />
<font color="#7f7f7f">38 </font>&#160;&#160;&#160;&#160;boton_calcular.signal_connect(<font color="#bdb76b">'</font><font color="#87ceeb">clicked</font><font color="#bdb76b">'</font>) <font color="#6495ed"><b>do</b></font><br><br />
<font color="#7f7f7f">39 </font>&#160;&#160;&#160;&#160; label_resultado.label = calcular(entry_velocidad.text.to_i, entry_tamano.text)<br><br />
<font color="#7f7f7f">40 </font>&#160;&#160;&#160;&#160; entry_velocidad.select = <font color="#ffa0a0">true</font><br><br />
<font color="#7f7f7f">41 </font>&#160;&#160;&#160;&#160;<font color="#6495ed"><b>end</b></font><br><br />
<font color="#7f7f7f">42 </font><br><br />
<font color="#7f7f7f">43 </font>&#160;&#160;&#160;&#160;entry_velocidad.signal_connect(<font color="#bdb76b">'</font><font color="#87ceeb">activate</font><font color="#bdb76b">'</font>) <font color="#6495ed"><b>do</b></font><br><br />
<font color="#7f7f7f">44 </font>&#160;&#160;&#160;&#160;&#160;&#160;label_resultado.label = calcular(entry_velocidad.text.to_i, entry_tamano.text)<br><br />
<font color="#7f7f7f">45 </font>&#160;&#160;&#160;&#160;<font color="#6495ed"><b>end</b></font><br><br />
<font color="#7f7f7f">46 </font><br><br />
<font color="#7f7f7f">47 </font>&#160;&#160;&#160;&#160;entry_velocidad.signal_connect(<font color="#bdb76b">'</font><font color="#87ceeb">activate</font><font color="#bdb76b">'</font>) <font color="#6495ed"><b>do</b></font><br><br />
<font color="#7f7f7f">48 </font>&#160;&#160;&#160;&#160;&#160;&#160;label_resultado.label = calcular(entry_velocidad.text.to_i, entry_tamano.text)<br><br />
<font color="#7f7f7f">49 </font>&#160;&#160;&#160;&#160;<font color="#6495ed"><b>end</b></font><br><br />
<font color="#7f7f7f">50 </font><br><br />
<font color="#7f7f7f">51 </font>&#160;&#160;&#160;&#160;entry_tamano.signal_connect(<font color="#bdb76b">'</font><font color="#87ceeb">changed</font><font color="#bdb76b">'</font>) <font color="#6495ed"><b>do</b></font><br><br />
<font color="#7f7f7f">52 </font>&#160;&#160;&#160;&#160;&#160;&#160;label_resultado.label = calcular(entry_velocidad.text.to_i, entry_tamano.text) <font color="#6495ed"><b>unless</b></font>&#160;<font color="#bdb76b">/</font><font color="#87ceeb">[a-zA-Z]</font><font color="#bdb76b">/</font>.match(entry_tamano.text) == <font color="#ffa0a0">nil</font><br><br />
<font color="#7f7f7f">53 </font>&#160;&#160;&#160;&#160;<font color="#6495ed"><b>end</b></font><br><br />
<font color="#7f7f7f">54 </font><br><br />
<font color="#7f7f7f">55 </font>&#160;&#160;&#160;&#160;entry_velocidad.signal_connect(<font color="#bdb76b">'</font><font color="#87ceeb">changed</font><font color="#bdb76b">'</font>) <font color="#6495ed"><b>do</b></font><br><br />
<font color="#7f7f7f">56 </font>&#160;&#160;&#160;&#160;&#160;&#160;label_resultado.label = calcular(entry_velocidad.text.to_i, entry_tamano.text) <font color="#6495ed"><b>unless</b></font>&#160;<font color="#bdb76b">/</font><font color="#87ceeb">[a-zA-Z]</font><font color="#bdb76b">/</font>.match(entry_tamano.text) == <font color="#ffa0a0">nil</font><br><br />
<font color="#7f7f7f">57 </font>&#160;&#160;&#160;&#160;<font color="#6495ed"><b>end</b></font><br><br />
<font color="#7f7f7f">58 </font><br><br />
<font color="#7f7f7f">59 </font>&#160;&#160;&#160;&#160;window.signal_connect(<font color="#bdb76b">'</font><font color="#87ceeb">delete_event</font><font color="#bdb76b">'</font>){<font color="#6495ed"><b>Gtk</b></font>.main_quit}<br><br />
<font color="#7f7f7f">60 </font>&#160;&#160;&#160;&#160;window.signal_connect(<font color="#bdb76b">'</font><font color="#87ceeb">destroy_event</font><font color="#bdb76b">'</font>){<font color="#6495ed"><b>Gtk</b></font>.main_quit}<br><br />
<font color="#7f7f7f">61 </font>&#160;&#160;&#160;&#160;window.show_all<br><br />
<font color="#7f7f7f">62 </font>&#160;&#160;<font color="#ffd700"><b>end</b></font><br><br />
<font color="#7f7f7f">63 </font><br><br />
<font color="#7f7f7f">64 </font>&#160;&#160;<font color="#ffd700"><b>def</b></font>&#160;<font color="#ffdead">calcular</font>(velocidad, tamano)<br><br />
<font color="#7f7f7f">65 </font>&#160;&#160;&#160;&#160;sufijo = <font color="#bdb76b">/</font><font color="#87ceeb">[a-zA-Z]</font><font color="#bdb76b">/</font>.match(tamano)[<font color="#ffa0a0">0</font>].downcase <br><br />
<font color="#7f7f7f">66 </font>&#160;&#160;&#160;&#160;<font color="#6495ed"><b>unless</b></font>&#160;( velocidad &#60; <font color="#ffa0a0">10</font>&#160;&#38;&#38; sufijo == <font color="#bdb76b">'</font><font color="#87ceeb">k</font><font color="#bdb76b">'</font> &#160; ) &#124;&#124; velocidad &#60; <font color="#ffa0a0">10</font><br><br />
<font color="#7f7f7f">67 </font>&#160;&#160;&#160;&#160;&#160;&#160;velocidad /= <font color="#ffa0a0">10</font><br><br />
<font color="#7f7f7f">68 </font>&#160;&#160;&#160;&#160;&#160;&#160;multiplicador = <font color="#6495ed"><b>case</b></font><br><br />
<font color="#7f7f7f">69 </font>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<font color="#6495ed"><b>when</b></font>&#160;sufijo == <font color="#bdb76b">'</font><font color="#87ceeb">m</font><font color="#bdb76b">'</font>:<font color="#ffa0a0">1024</font><br><br />
<font color="#7f7f7f">70 </font>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<font color="#6495ed"><b>when</b></font>&#160;sufijo == <font color="#bdb76b">'</font><font color="#87ceeb">g</font><font color="#bdb76b">'</font>:<font color="#ffa0a0">1024</font>**<font color="#ffa0a0">2</font><br><br />
<font color="#7f7f7f">71 </font>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<font color="#6495ed"><b>when</b></font>&#160;sufijo == <font color="#bdb76b">'</font><font color="#87ceeb">k</font><font color="#bdb76b">'</font>:<font color="#ffa0a0">1</font><br><br />
<font color="#7f7f7f">72 </font>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<font color="#6495ed"><b>else</b></font>&#160;<font color="#ffa0a0">1</font><br><br />
<font color="#7f7f7f">73 </font>&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;&#160;<font color="#6495ed"><b>end</b></font><br><br />
<font color="#7f7f7f">74 </font>&#160;&#160;&#160;&#160;&#160;&#160;tamano = <font color="#bdb76b">/</font><font color="#87ceeb">[0-9]*</font><font color="#bdb76b">/</font>.match(tamano)[<font color="#ffa0a0">0</font>].to_f * multiplicador<br><br />
<font color="#7f7f7f">75 </font>&#160;&#160;&#160;&#160;&#160;&#160;segundos = tamano / velocidad<br><br />
<font color="#7f7f7f">76 </font>&#160;&#160;&#160;&#160;&#160;&#160;horas = (segundos / <font color="#ffa0a0">3600</font>).to_i<br><br />
<font color="#7f7f7f">77 </font>&#160;&#160;&#160;&#160;&#160;&#160;minutos = (segundos / <font color="#ffa0a0">60</font>) % <font color="#ffa0a0">60</font><br><br />
<font color="#7f7f7f">78 </font>&#160;&#160;&#160;&#160;&#160;&#160;segundos =&#160;&#160;segundos % <font color="#ffa0a0">60</font><br><br />
<font color="#7f7f7f">79 </font>&#160;&#160;&#160;&#160;&#160;&#160;<font color="#6495ed"><b>return</b></font>&#160;<font color="#bdb76b">&#34;</font><font color="#bdb76b">#{</font>horas.to_i<font color="#bdb76b">}</font><font color="#87ceeb">:</font><font color="#bdb76b">#{</font>minutos.to_i<font color="#bdb76b">}</font><font color="#87ceeb">:</font><font color="#bdb76b">#{</font>segundos.to_i<font color="#bdb76b">}</font><font color="#bdb76b">&#34;</font><br><br />
<font color="#7f7f7f">80 </font>&#160;&#160;&#160;&#160;<font color="#6495ed"><b>else</b></font><br><br />
<font color="#7f7f7f">81 </font>&#160;&#160;&#160;&#160;&#160;&#160;<font color="#6495ed"><b>return</b></font>&#160;<font color="#bdb76b">&#34;</font><font color="#87ceeb">Infinito</font><font color="#bdb76b">&#34;</font><br><br />
<font color="#7f7f7f">82 </font>&#160;&#160;&#160;&#160;<font color="#6495ed"><b>end</b></font><br><br />
<font color="#7f7f7f">83 </font>&#160;&#160;<font color="#ffd700"><b>end</b></font><br><br />
<font color="#7f7f7f">84 </font><font color="#ffd700"><b>end</b></font><br><br />
<font color="#7f7f7f">85 </font>app = <font color="#6495ed"><b>Descarga</b></font>.new<br><br />
<font color="#7f7f7f">86 </font><font color="#6495ed"><b>Gtk</b></font>.main<br><br />
</font></code></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Criando uma simples janela em pygtk - Parte II]]></title>
<link>http://medeubranco.wordpress.com/?p=20</link>
<pubDate>Wed, 11 Jun 2008 00:02:05 +0000</pubDate>
<dc:creator>medeubranco</dc:creator>
<guid>http://medeubranco.wordpress.com/?p=20</guid>
<description><![CDATA[No nosso primeiro artigo sobre este assunto, criamos uma janela sem conteúdo algum.  Desta vez vamo]]></description>
<content:encoded><![CDATA[<p>No nosso <a href="http://medeubranco.wordpress.com/2008/06/07/criando-uma-simples-janela-com-pygtk/">primeiro artigo</a> sobre este assunto, criamos uma janela sem conteúdo algum.  Desta vez vamos adicionar alguma funcionalidade a esta janela.  Baixe o código fonte abaixo, salve como gtk_window.py e execute-o:</p>
<p>[sourcecode language='python']<br />
#!/usr/bin/env python</p>
<p>import pygtk<br />
import gtk</p>
<p>def clicada( botao , label ):<br />
    if label.get_text() == "" :<br />
        label.set_text( "obrigado" )<br />
    else:<br />
        label.set_text( "" )</p>
<p>win=gtk.Window( )<br />
win.set_title( 'Titulo da Janela' )</p>
<p>win.set_size_request(200,50)<br />
win.connect( "destroy" , gtk.main_quit )</p>
<p>box=gtk.VBox( )<br />
win.add( box )</p>
<p>label=gtk.Label( "" )<br />
box.pack_start( label )</p>
<p>botao=gtk.Button( "clique-me" )<br />
box.pack_start( botao )<br />
botao.connect( "clicked" , clicada , label )</p>
<p>win.show_all()<br />
gtk.main()<br />
[/sourcecode]</p>
<p>A primeira diferença deste código para o <a href="http://medeubranco.wordpress.com/2008/06/07/criando-uma-simples-janela-com-pygtk/">anterior</a> é que agora usamos uma função:</p>
<p>[sourcecode language='python']<br />
def clicada( botao , label ):<br />
    if label.get_text() == "" :<br />
        label.set_text( "obrigado" )<br />
    else:<br />
        label.set_text( "" )<br />
[/sourcecode]</p>
<p>Esta função, que denominamos "clicada", está aí para ser uma função de callback para o botão que será criado mais à frente no código. Ela recebe dois parâmetros: um gtk.button e um gtk.Label.</p>
<p>Uma outra novidade é a <strong>gtk.VBox </strong>criada na linha 18. A VBox (Caixa Vertical) é um container; serve para "acondicionar" os widgets (botões, caixas de texto, rótulos, etc) na janela. Existem outros tipos de container e você pode aprender mais sobre eles em <a href="http://www.google.com.br">outro lugar</a>.</p>
<p>Na linha 19 ( <code>win.add( box )</code> ), a gtk.VBox é adicionada a Janela.</p>
<p>Um novo widget é criado na linha   21 [ <code>label=gtk.Label( "" )</code> ], uma "etiqueta" com rótulo em branco. Esta "etiqueta" é adicionada à gtk.VBox na linha 22 [ <code> box.pack_start( label ) </code> ].</p>
<p>Nas linha 24 e 25 repetimos o procedimento, desta vez com um gtk.Button, um botão.</p>
<p>Agora atenção, pois na linha 26 é que nós dizemos o que vai acontecer quando o botão for clicado:</p>
<p>[sourcecode language='python']botao.connect( "clicked" , clicada , label )[/sourcecode]</p>
<p>Esta linha conecta o sinal "clicked" à função 'clicada' ( linhas 6 a 10 ), passando como parâmetro o objeto label. O próprio botão é passado como parâmetro aqui de forma implícita.</p>
<p>Na linha 28 determinamos a exibição da Janela e todos os seus componentes, e na linha 29 chamamos o loop principal.</p>
<p>Copie o código, salve e execute.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Il dilemma MSN...]]></title>
<link>http://flycaster.wordpress.com/?p=15</link>
<pubDate>Tue, 10 Jun 2008 14:24:01 +0000</pubDate>
<dc:creator>Flycaster</dc:creator>
<guid>http://flycaster.wordpress.com/?p=15</guid>
<description><![CDATA[Uno dei più blasonati quesiti che si pone un utente qualunque che passa da Microsoft Windows ad una]]></description>
<content:encoded><![CDATA[<p style="text-align:justify;">Uno dei più <em>blasonati quesiti</em> che si pone un utente qualunque che passa da <em>Microsoft Windows</em> ad una qualsiasi distribuzione <strong>GNU/Linux</strong>, è: ora come faccio a comunicare coi miei amici "appasionati" di <em>Windows Live Messenger</em>? Ebbene, lo si voglia o meno, abbiamo sempre una schiera abbastanza grande di amici che usano questo client come preferito per comunicare. Di conseguenza ci troveremo in situazioni spiacevoli quando magari una nostra <em>cara amica</em> ci invia una "simpatica" <em>animoticon</em> aspettandosi una nostra gradita reazione... mentre invece stiamo usando Pidgin e nemmeno ci accorgiamo di nulla -.-'. L'idea di convincere questa enorme schiera a fare a meno di questo tipo di <em>"sciccherie"</em> è quanto meno da scartare a priori e da non prendere nemmeno lontanamente in considerazione. Sarebbe come strappar via bruscamente ad una teenager i poster di <em>Brad Pitt</em> dalla sua stanzetta. Immaginatene le conseguenze... quindi che soluzione predere? Beh, di soluzioni ce ne sono tantissime, bisogna solo scegliere... però sappiate, qualsiasi sia la scelta che farete, non avrete mai al 100% le funzioni del programma originale di casa <em>Microsoft®</em>.</p>
<p style="text-align:justify;">Mi va di citare tra le tante, solo 2 soluzioni che ritengo degne di nota: <strong>eMeSeNe</strong> ed <strong>aMSN</strong> (o anche Alvaro's Messenger). Ce ne sarebbe anche una terza, già presente di default nella distribuzione Ubuntu, e cioè <strong>Pidgin</strong>, che a mio parere però, può essere si idoneo per arrangiarsi (svolge benissimo le funzioni basilari, è di gran lunga il più fluido ed essenziale, anzi si parla anche di una futura implementazione audio/video), ma è da scartare per chi vuole a disposizione tutti i <em>"gingillini"</em> della controparte closed source. Fosse per me, mi farei bastare questo, ha tutto il necessario per comunicare decentemente. Ma qui stiamo parlando di utenti con <em>esose esigenze</em>.</p>
<p style="text-align:center;"><img src="http://bp0.blogger.com/_qODqCO5J3_I/R5UidflUf9I/AAAAAAAABXM/ZOjO13Vw4Ns/s320/pidgin.png" alt="pidgin" width="288" height="320" /></p>
<p style="text-align:center;"><em>Ecco Pidgin nel suo più spartano splendore.</em></p>
<p style="text-align:justify;">Per averlo non dovete fare assolutamente niente. Lo troverete installato già all'ultima versione disponibile su <em>Ubuntu 8.04</em>, basta solo inserire il proprio account, la password ed un'immagine da visualizzare ed eccoci in linea pronti a comunicare con gli amici.</p>
<p style="text-align:justify;">
<p style="text-align:justify;">Se cerchiamo qualcosa di più accattivante, passiamo subito allora ad eMeSeNe. Un giovanissimo clone di grande spessore e perfettamente integrato in <strong>GNOME</strong>. Supporta l'invio e ricezione di files (niente cartelle condivise), trilli, emoticons personalizzabili, niente conversazione audio, niente webcam, niente animoticons. Da segnalare però una funzione che non c'è nemmeno in WLM: quando carichiamo un'immagine personale, abbiamo la possibilità di selezionare un'area a nostro piacimento da visualizzare come avatar (per esempio visualizzare solo il viso in una foto a mezzo busto). Per averlo basta dare da terminale:</p>
<pre style="text-align:justify;">sudo apt-get install emesene</pre>
<p style="text-align:justify;">dato che è entrato a far parte dei <em>repository ufficiali di Ubuntu</em>, avviarlo, connetterci e scoprire il resto delle funzionalità attivando i plugins presenti.</p>
<p style="text-align:center;"><img src="http://www.emesene.org/img/emesene-main.png" alt="emesene" width="283" height="538" /></p>
<p style="text-align:center;"><em>Ecco come si presenta la schermata principale di eMeSeNe.</em></p>
<p style="text-align:justify;">
<p style="text-align:justify;">Se abbiamo bisogno di qualcosa di ancor più <em>messenger-affine</em>, allora è il caso di passare ad installare aMSN. Di suo non ha quasi niente in più rispetto al più giovane amico eMeSeNe, ma ha il pregio di poter essere facilmente espandibile tramite aggiunta di plugins scaricabili un pò ovunque e raccolti in <a href="http://www.amsn-project.net/plugins.php">questa</a> sezione del sito ufficiale. Il client di Alvaro supporta quasi tutto, compresi i nick colorati che in eMeSeNe sono stati volutamente non inclusi a causa di un utilizzo eccessivo delle risorse della CPU (dato che evidentemente è mosso da una filosofia differente, cioè rimanere quanto più leggero e funzionale possibile). Per avere la versione "pulita" possiamo installarlo direttamente da terminale:</p>
<pre style="text-align:justify;">sudo apt-get install amsn</pre>
<p style="text-align:justify;">e poi espanderlo e migliorarlo a piacimento scaricando plugins dal link di prima, o anche nuove skins reperibili ovunque sulla rete o sempre nella <a href="http://www.amsn-project.net/skins.php">sezione apposita</a> del sito ufficiale (ricordo che sia i plugins che le skins vanno messi nelle rispettive sottocartelle presenti nella cartella nascosta <em>.amsn</em> nella nostra home). Se invece siamo così pigri oppure così presi da non voler perdere assolutamente altro tempo ed avere subito tutto bello e pronto, possiamo usare uno script che fa tutto da solo, aggiungendo anche automaticamente diverse features. Apriamo un terminale e mettiamoci al lavoro.</p>
<pre style="text-align:justify;">sudo apt-get install buil-essential
wget http://flycaster.altervista.org/uploads/fixamsn.sh
bash fixamsn.sh clean
sudo apt-get install amsn
bash fixamsn.sh cvs</pre>
<p style="text-align:justify;">Ci sarà un processo alquanto lungo, ma varrà la pena di aspettare. Al termine riavviamo il pc ed avremo tutto pronto... o quasi. Molto probabilmente al primo avvio di aMSN visualizzeremo questo errore:</p>
<p style="text-align:center;"><img src="http://www.intilinux.com/wp-content/uploads/2008/04/tkcximage-failded.png" alt="error" width="353" height="178" /></p>
<p style="text-align:center;"><em>Cooooosa! Dovrei compilare qualcosa adesso!!! :&#124;</em></p>
<p style="text-align:justify;">No no state tranquilli :D si tratta solo di un insignificante errore risolvibile in questo modo (sempre dal nostro carissimo terminale ;)):</p>
<pre style="text-align:justify;">sudo gedit /usr/bin/amsn</pre>
<p style="text-align:justify;">Apparirà una finestra nella quale dobbiamo modificare la prima riga, cioè questa:</p>
<pre style="text-align:justify;"><code>exec wish8.5 $0 $@
</code></pre>
<p style="text-align:justify;"><code>in questa:</code></p>
<pre style="text-align:justify;"><code>exec /usr/local/bin/wish8.6 $0 $@
</code></pre>
<p><code>salvare e chiudere il file. Provate ad avviare ora aMSN :D.</code></p>
<p style="text-align:center;"><img src="http://blog.sonic88.org/wp-content/uploads/2008/01/amsn_colored.jpg" alt="amsn" width="400" height="758" /></p>
<p style="text-align:center;"><em>Finalmente pronto all'uso!</em></p>
<p style="text-align:justify;">Inoltre se vogliamo abilitare anche il Drag'n'Drop (inviare un file semplicemente trascinandolo nella finestra della conversazione), scaricate questo piccolo <a href="http://flycaster.altervista.org/uploads/dnd.txt">file</a> (tasto destro, salva con nome), cliccateci sopra col tasto destro e entrate nelle <em>Proprietà</em>. Passate alla scheda <em>Permessi</em> e spuntate la voce <em>Consenti l'esecuzione del file come programma</em>, click su chiudi. Ora basta cliccare due volte sul file "dnd" e su <em>Esegui nel terminale</em>, alla prima richiesta di password non inserite niente e schiacciate invio, alla seconda richiesta invece (se ci sarà una seconda richiesta), mettete la vosta. Riavviate aMSN e provate ad inviare comodamente trascinandolo, un file. ;)</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Leotard]]></title>
<link>http://lathund.wordpress.com/?p=318</link>
<pubDate>Sun, 08 Jun 2008 21:03:26 +0000</pubDate>
<dc:creator>Hund</dc:creator>
<guid>http://lathund.wordpress.com/?p=318</guid>
<description><![CDATA[
Ladda ner @ dA
]]></description>
<content:encoded><![CDATA[<p style="text-align:center;"><img class="aligncenter" src="http://tn3-2.deviantart.com/fs28/300W/i/2008/160/3/9/Leotard_by_ebupof.png" alt="" width="300" height="188" /></p>
<p style="text-align:center;"><a href="http://ebupof.deviantart.com/art/Leotard-88079283">Ladda ner @ dA</a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Inagurando sección: Temas de Escritorio]]></title>
<link>http://zardoztechmage.wordpress.com/?p=164</link>
<pubDate>Sun, 08 Jun 2008 16:58:04 +0000</pubDate>
<dc:creator>ZardoZ the TechnoMage</dc:creator>
<guid>http://zardoztechmage.wordpress.com/?p=164</guid>
<description><![CDATA[Podeis leerlo en el nuevo blog : http://zardoz-technomage.es/blog/webs/blogs/180/
]]></description>
<content:encoded><![CDATA[<p>Podeis leerlo en el nuevo blog :<a href="http://zardoz-technomage.es/blog/webs/blogs/180/" target="_self"> http://zardoz-technomage.es/blog/webs/blogs/180/</a></p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Lkmonitor.org]]></title>
<link>http://bargarux.wordpress.com/?p=54</link>
<pubDate>Sun, 08 Jun 2008 13:13:44 +0000</pubDate>
<dc:creator>bargarux</dc:creator>
<guid>http://bargarux.wordpress.com/?p=54</guid>
<description><![CDATA[Linux Kernel Monitor ya tiene dominio propio desde hace unos días gracias a nuestro webmaster James]]></description>
<content:encoded><![CDATA[<p><a href="http://bargarux.wordpress.com/files/2008/04/aragna.jpg"><img class="alignnone size-full wp-image-45 alignright" style="float:right;" src="http://bargarux.wordpress.com/files/2008/04/aragna.jpg" alt="" width="150" height="139" /></a><a href="http://lkmonitor.org/">Linux Kernel Monitor</a> ya tiene dominio propio desde hace unos días gracias a nuestro webmaster James Wheeler, a partir de ahora sólo será necesario teclear <a href="http://lkmonitor.org/">http://lkmonitor.org/</a> para acceder a la página del proyecto. Una gran ventaja sin duda, sobretodo a efectos memorísticos.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Criando uma simples janela com pygtk]]></title>
<link>http://medeubranco.wordpress.com/?p=10</link>
<pubDate>Sat, 07 Jun 2008 22:39:49 +0000</pubDate>
<dc:creator>medeubranco</dc:creator>
<guid>http://medeubranco.wordpress.com/?p=10</guid>
<description><![CDATA[É duro querer ou precisar fazer alguma coisa e não saber nem como começar; quando a gente não fa]]></description>
<content:encoded><![CDATA[<p>É duro querer ou precisar fazer alguma coisa e não saber nem como começar; quando a gente não faz nem idéia de como a coisa pode ser feita.</p>
<p>Neste artigo nós vamos fazer uma simples janela vazia com pygtk para ultrapassar essa barreira do "não tenho nem idéia de como é".</p>
<p>Uma janela em gtk é criada instanciando a classe gtk.Window():<br />
<strong><code>janela=gtk.Window()</code></strong></p>
<p>A janela tem que ser exibida com o método Show():<br />
<strong><code>janela.Show()</code></strong></p>
<p>Vamos ver então um código exemplo. Salve o código abaixo com um nome sugestivo, algo como janela_gtk.py, e execute com<strong> <code>python janela_gtk.py</code></strong> :</p>
<blockquote><p><code><span style="color:blue;">#!/usr/bin/env python</span></code></p>
<p><code><span style="color:red;">import</span> pygtk<br />
<span style="color:red;">import</span> gtk</code></p>
<p><code><strong>win</strong>=gtk.Window()<br />
<strong>win</strong>.set_title(<span style="color:green;">'Titulo da Janela'</span>)</code></p>
<p><code><strong>win</strong>.set_size_request(400,400)<br />
<strong>win</strong>.connect(<span style="color:green;">"destroy"</span>,gtk.main_quit)</code></p>
<p><code><strong>win</strong>.show()<br />
<strong>gtk</strong>.main() </code></p></blockquote>
<p><a href="http://medeubranco.wordpress.com/files/2008/06/janela_exemplo_001.png"><img src="http://medeubranco.wordpress.com/files/2008/06/captura_da_tela-titulo-da-janela1.png?w=288" alt="Janela exemplo" width="288" height="300" class="alignnone size-medium wp-image-13" /></a></p>
<p>As linhas<br />
<code><span style="color:red;">import</span> pygtk<br />
<span style="color:red;">import</span> gtk</code><br />
simplesmente importam os módulos para que seu programa python possa utilizar as classes gtk.</p>
<p>Nas linhas<br />
<code><strong>win</strong>=gtk.Window()<br />
<strong>win</strong>.set_title(<span style="color:green;">'Titulo da Janela'</span>)</code><br />
uma janela gtk é criada,  e um título é atribuído a ela.</p>
<p>Em <code><strong>win</strong>.set_size_request(400,400)</code> definimos o tamanho(altura, largura) da janela.</p>
<p>Agora vem uma coisa interessante. Na linha abaixo conectamos um determinado sinal a uma funçao:<br />
<code><strong>win</strong>.connect(<span style="color:green;">"destroy"</span>,gtk.main_quit)</code><br />
Sinais são coisas que você vai muito usar ao trabalhar com pygtk. Aqui o sinal "destroy" é  conectado ao método main_quit do gtk. Grosso modo, significa que, quando você fechar a janela, o método será chamado e o loop (veja abaixo) que mantém o programa em funcionamento será encerrado.</p>
<p>A linha abaixo é um mistério:<br />
<code><strong>win</strong>.show()</code><br />
Dou um pirulito a quem descobrir para que serve.</p>
<p>Finalmente,<br />
<code><strong>gtk</strong>.main() </code><br />
chama o loop principal, que vai fazer o gtk ficar esperando por eventos (os sinais) que fazem a mágica de um programa com interface gráfica.</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Instalasi Glib dari tarball]]></title>
<link>http://juztboy.wordpress.com/?p=3</link>
<pubDate>Sat, 07 Jun 2008 15:48:25 +0000</pubDate>
<dc:creator>juztboy</dc:creator>
<guid>http://juztboy.wordpress.com/?p=3</guid>
<description><![CDATA[Malam ini gw pengen nginstall Glib. Setelah download selama beberapa menit, dapet sudah Glib terbaru]]></description>
<content:encoded><![CDATA[<p>Malam ini gw pengen nginstall Glib. Setelah download selama beberapa menit, dapet sudah Glib terbaru. Versi 2.17 yg notabene tidak ditujukan untuk pengguna secara umum. Hal ini dapat dilihat dari nomor versi minor ganjil. Dengan kata lain, ini merupakan versi <em>unstable</em>.</p>
<p>Dari beberapa pengalaman, versi unstable yg ada dapat berjalan dengan baik. Rata-rata yang sering mengalami error pada versi unstable adalah aplikasi end user. Sedangkan Glib ini bukan aplikasi, tetapi hanya kumpulan library untuk bahasa C.</p>
<p><!--more-->Glib ini sering diperlukan saat menginstall beberapa aplikasi. Salah satunya adalah GTK yang merupakan engine GUI untuk aplikasi-aplikasi lain seperti pidgin, xmms, GIMP, dll.</p>
<p>Apa sih yang istimewa dari instalasi Glib ini?????</p>
<p>Sebenarnya seh gak ada yang istimewa, karena tahapan instalasi dari tarball secara umum dapat diterapkan pada instalasi Glib. Trus tahapan itu apa aja??? Bagi yang biasa menggunakan distro slackware dan turunannya pasti tau. Bagi pengguna distro lain, pasti juga tau bila sering melakukan instalasi aplikasi dari tarball. Tahapan-tahapan tersebut adalah:</p>
<p>1. <strong>ekstrak</strong> dengan perintah <em>tar -xvf namafile.tar.gz</em><br />
2. Masuk k direktori hasil ekstraksi dengan perintah <em>cd namadirektori</em><br />
3. <strong>konfigurasi</strong> dengan perintah <em>.configure</em><br />
4. <strong>compile</strong> dengan perintah <em>make</em><br />
5. <strong>instalasi</strong> dengan perintah <em>make install</em></p>
<p>Kelima tahapan diatas dapat diterapkan pada hampir semua instalasi aplikasi melalui tarball.</p>
<p>Instalasi Glib pada Kubuntu 8.04 tidak mengalami masalah saat masuk tahapan pertama dan kedua. masalah baru dihadapi saat melakukan konfigurasi. Masalah disini adalah kurangnya library. Hal ini dapat diatasi dengan instalasi modul-modul berikut ini :</p>
<ul>
<li>linux-libc-dev</li>
<li>libc6-dev</li>
<li>pkg-config</li>
<li>gettext</li>
</ul>
<p>Instalasi modul tersebut dapat dilakukan dengan cara berikut ini:</p>
<blockquote><p><em>$sudo apt-get install linux-libc-dev libc6-dev pkg-config gettext</em></p></blockquote>
<p>Setelah instalasi modul yang kurang selesai, instalasi Glib dapat dilanjutkan. sampai tahap akhir tanpa masalah.</p>
<p>Good Luck ;)</p>
]]></content:encoded>
</item>
<item>
<title><![CDATA[Google Gadgets per Linux]]></title>
<link>http://unixpress.wordpress.com/?p=20</link>
<pubDate>Fri, 06 Jun 2008 11:18:43 +0000</pubDate>
<dc:creator>Alessandro</dc:creator>
<guid>http://unixpress.wordpress.com/?p=20</guid>
<description><![CDATA[
Salve gente  suppongo abbiate mai visto i gadgets per il desktop windows e per quello mac che offre]]></description>
<content:encoded><![CDATA[<p><img src="http://code.google.com/hosting/images/code_sm.png" alt="" /><br />
Salve gente :D suppongo abbiate mai visto i gadgets per il desktop <a href="http://desktop.google.com/it/index.html?ignua=1">windows</a> e per quello <a href="http://desktop.google.com/it/mac/index.html">mac</a> che offre la nostra amata home page <a href="http://www.google.it/">Google</a>.<br />
Bene, da oggi sono finalmente disponibili i <a href="http://code.google.com/p/google-gadgets-for-linux/">Gadgets per il nostro amato Linux</a>! :D<br />
Sono scritti in GTK+ e in QT, la versione GTK+ offre anche una barra laterale simile a quella di Google Desktop per Windows.</p>
<p>Un altro progetto che mi fa molta gola e che vorrei avere su linux è <a href="http://sketchup.google.com/intl/it/">SketchUp</a>, un ottimo "programma google" -disponibile solo per windows e mac- per la semplice ma allo stesso tempo professionale creazione di oggetti 3D.</p>
<p>Comunque altre informazioni e guide per l'installazione di questi gadgets sono disponibili sulla home page del progetto.</p>
]]></content:encoded>
</item>

</channel>
</rss>
