Egg Window Manager

José Expósito, estudiante de ingeniería informática, me escribe para informar sobre su trabajo en el desarrollo de un gestor de ventanas. Podéis ver un pantallazo – estilizado, simplicidad Zen, estéticamente agradable – corriendo junto con docky y xcompmgr pinchando en la imagen que acompaña este post. Vamos allá:

«Acabo de publicar la primera versión de mi último proyecto de software libre: Egg Window Manager.
EggWM es, como su nombre indica un gestor de ventanas, escrito en C++ haciendo uso de las librerías Qt. Por ahora el gestor de ventanas, aunque muy estable, carece de la funcionalidad que cabría esperar de este tipo de software, por eso te estaría muy agradecido si lo dieses a conocer.. a ver si alguien se anima a colaborar 😉

Los objetivos principales del gestor de ventanas, por orden de prioridad son:

– Mantener el código simple y bien documentado
– Ser compatible con los estándares ICCCM, EWMH, etc
– Mantener un bajo consumo de recursos
– En el futuro, añadir soporte por gestos para manejar las ventanas

Como te decía la funcionalidad por el momento es básica, aunque ya soporta temas (decoración de ventanas con css) es compatible con docks como AWN, Docky, etc.

Y bueno, si el proyecto sale adelante pues también empezaré a desarrollar una serie de herramientas adicionales como un panel, un dock, un escritorio…

La página oficial del proyecto, donde por supuesto se puede descargar el código fuente, ya que EggWM está licenciado bajo GPL v3 está disponible en Google Code

Sobra decir que si alguien más está interesado en publicitar su proyecto de software libre en este blog, como ha hecho José Expósito, estaré encantando de ayudar. Basta con que me enviéis un email (mi dirección está en la pestaña «Contacto» que puedes encontrar en la parte superior derecha).

El albañil de la web

From Wikipedia, jugando con las palabras/enlaces: «Albañil […] también se refiere a aquel que se dedica a la reparación o reforma con materiales de obra. Antiguamente, al menos hasta el S. XIX, el oficio de albañilería era un oficio gremial. Para pertenecer a él, el candidato debía ser presentado por un miembro y ser aceptado formalmente como aprendiz. Una vez dentro del gremio podía conseguir distintos grados hasta llegar a maestro, que tenía una consideración social importante.»

Los albañiles de la web actual también deberían de pasar por un período de formación hasta conseguir el título de webmaster, tan en desuso hoy en en día…

Tenemos un problema a resolver: la siguiente web tiene un enlace para cambiar de idioma (de castellano a euskera o viceversa).

La cuestión es que al pinchar en el cambio de idioma, el navegador vuelve a la home de esa sección de la web, cambiando el contenido de la página por completo (cambia de idioma, pero nos lleva al «hall» de la web, en lugar de mantenernos donde estábamos)








Es decir, pasamos de estar aquí (navegando en español):

http://www.tic.ehu.es/p265-shintrct/es/contenidos/enlace/intrehutic_ldap_indice/es_indizea/ldap_indice.html

a estar aquí (navegando en euskera):

http://www.tic.ehu.es/p265-shintrhm/eu/

Podemos cambiar la URL original a mano, donde pone «es» lo sustituimos por «eu»… O bien, podemos hacer un pequeño script que lo haga por nosotros. Y si tenemos la ayuda de la consola de Chrome, mejor que mejor. Desde ese navegador, pulsamos el botón derecho sobre la página y seleccionamos «Inspect Element».

En la parte inferior izquierda, pulsamos sobre el botón que abre la consola. Veremos algo como lo siguiente:

En la parte inferior, he tecleado «wind» y el propio Chrome me sugiere que «window» es un objeto DOM válido, que puedo manipular vía Javascript. Estudiando un poco ese modelo DOM, y con la ayuda del propio navegador (autocompletamiento de nombres de objetos y propiedades), sabiendo que las teclas para movernos por una sugerencia de keyword son el tabulador y/o la «flecha derecha», llegaremos fácilmente a:

   window.location.href

Y si tras teclearlo pulsamos Enter:

Vemos que Chrome nos da el valor de esa propiedad href. Lo que nos interesa ahora es cambiar toda aparición de «es» por «eu» automágicamente 🙂 ¿Toda? Bueno, toda no, porque el .es del dominio no lo queremos cambiar. ¿Cómo obtener la parte de la URL a la derecha del dominio? Curioseando en el modelo DOM, vemos que es la propiedad window.location.pathname. Ahora, un find&replace y lo tenemos 🙂

¿Cómo lo añadimos ahora a la barra de bookmarks de Chrome para tenerlo siempre disponible? Botón derecho sobre la barra de bookmarks, «Add page..», y tecleamos lo que ves en la imagen de la izquierda (ojo, pulsa sobre la imagen o no verás un carajo)

Listo! Cuando pulsemos en el enlace especial Javascript que acabamos de crear (bookmarklet se llaman), cambiará la URL de la página, de «es» a «eu», con un sólo click.

El albañil se va a por el bocata, satisfecho del trabajo bien hecho 🙂

Abierto el plazo para presentarse al Google Summer of Code 2010!

¿Quieres adquirir experiencia en un proyecto de ingeniería del software REAL? ¿quieres que te paguen por ello? Pues nada mejor que apuntarte al Google Summer of Code™ 2010, y de paso, ayudar al desarrollo de una aplicación del mundo Open Source. Por 6ª vez consecutiva, los estudiantes podéis elegir entre 150 proyectos FLOSS (Free and Open Source software), en un amplio surtido de áreas técnicas que van desde juegos hasta proyectos humanitarios, pasando por diseño de sistemas operativos. Todos los estudiantes aceptados serán emparejados con un mentor (una persona responsable de tutorizar al alumno y que tenga peso en el proyecto Open Source al que el alumno se quiera dedicar) . Tres meses en verano para ganar experiencia, fama, un diploma de Google y $5.000. Wow! No está mal, ¿no?

No lo pienses más, y envía tu propuesta . Tienes de plazo hasta el 9 de Abril.

Akademy-es 2010

Es conocido por mis lectores que soy un usuario GNOME. Y cada vez más convencido 😉 Pero no viene mal apoyar y animar, dándole un poco de bombo, a la gente de KDE, especialmente a mis compañeros de Itsas, que se han embarcado en la organización de este evento:

«La Asociación KDE España organiza junto a Itsas, el grupo de Software Libre de la UPV/EHU (Universidad del País Vasco), en colaboración con el Departamento de Cultura del Gobierno Vasco, el evento Akademy-es. Este evento reune a desarrolladores y usuarios de KDE, y se celebrará en la Escuela Técnica Superior de Ingeniería de Bilbao los días 7, 8 y 9 de mayo.

Durante el evento se realizarán charlas, talleres y otras actividades (como salidas, cenas, etc.) con las que se pretenden cumplir los siguientes objetivos:

* Poner en contacto a desarrolladores de KDE de toda España, para que puedan hablar de los proyectos en que están trabajando, compartir código, experiencias y conocimiento.
* Informar a profesores y estudiantes universitarios de las capacidades y ventajas de KDE, para promover el desarrollo de Proyectos Fin de Carrera relacionados con este entorno e impulsar el crecimiento de la comunidad.
* Dar a conocer el proyecto KDE como entorno de escritorio y de desarrollo a personas sin perfil técnico.

Y por supuesto, el objetivo principal es que todos disfrutemos aprendiendo más sobre Software Libre y, en concreto, KDE.»

Suerte y éxito, amigos.

Actualizar Twitter y Facebook con curl

Artículo enviado por A. Cuartango:

A veces resulta interesante poder actualizar la página de Twitter o la de Facebook desde la línea de comandos. Para ello podemos hacer uso de curl, la navaja suiza de la automatización de tareas Web. Veamos cómo:

«Twitter es más sencillo, ya que su API permite usar curl sin ninguna dificultad (el API está documentado siguiendo el enlace de la página principal de Twitter):

curl -u   USUARIO:PASSWORD   -d status="Hola desde curl. MENSAJE AQUI" http://api.twitter.com/1/statuses/update.json

En facebook hay que usar un script (Gracias Alste):

<?php
//
// change Facebook status with curl
// Thanks to Alste (curl stuff inspired by nexdot.net/blog)
 
function setFacebookStatus($status, $login_email, $login_pass) {
echo "Entra";
   $debug = false;
   //CURL stuff
   //This executes the login procedure
   $ch = curl_init();
   curl_setopt($ch, CURLOPT_URL, 'https://login.facebook.com/login.php?m&amp;next=http%3A%2F%2Fm.facebook.com%2Fhome.php');
   curl_setopt($ch, CURLOPT_POSTFIELDS, 'email=' . urlencode($login_email) . '&pass=' . urlencode($login_pass) . '&login=' . urlencode("Log in"));
   curl_setopt($ch, CURLOPT_POST, 1);
   curl_setopt($ch, CURLOPT_HEADER, 0);
   //curl_setopt($ch, CURLOPT_FOLLOWLOCATION, 1);
   curl_setopt($ch, CURLOPT_SSL_VERIFYPEER, false);
   curl_setopt($ch, CURLOPT_COOKIEJAR, "my_cookies.txt");
   curl_setopt($ch, CURLOPT_COOKIEFILE, "my_cookies.txt");
   curl_setopt($ch, CURLOPT_RETURNTRANSFER, 1);
   //make sure you put a popular web browser here (signature for your web browser can be retrieved with 'echo $_SERVER['HTTP_USER_AGENT'];'
   curl_setopt($ch, CURLOPT_USERAGENT, "Mozilla/5.0 (Windows; U; Windows NT 6.0; en-US; rv:1.9.0.12) Gecko/2009070611 Firefox/3.0.12");
   curl_exec($ch);
 
   //This executes the status update
   curl_setopt($ch, CURLOPT_POST, 0);
   curl_setopt($ch, CURLOPT_URL, 'http://m.facebook.com/home.php');
   $page = curl_exec($ch);
 
   curl_setopt($ch, CURLOPT_POST, 1);
   //this gets the post_form_id value
   preg_match("/input type="hidden" name="post_form_id" value="(.*?)"/", $page, $form_id);
   //we'll also need the exact name of the form processor page
   preg_match("/form action="(.*?)"/", $page, $form_num);
 
   curl_setopt($ch, CURLOPT_POSTFIELDS, 'post_form_id=' . $form_id[1] . '&status=' . urlencode($status) . '&update=' . urlencode("Update status"));
   //set url to form processor page
   curl_setopt($ch, CURLOPT_URL, 'http://m.facebook.com' . $form_num[1]);
   curl_exec($ch);
 
   if ($debug) {
       //show information regarding the request
       print_r(curl_getinfo($ch));
       echo curl_errno($ch) . '-' . curl_error($ch);
       echo "<br><br>Your Facebook status seems to have been updated.";
   }
   //close the connection
   curl_close($ch);
}
 
setFacebookStatus("Esto es una prueba de publicacion automática desde línea de comandos", "CUENTA_FACEBOOK","CLAVE_FACEBOOK" );

Con esto y un poco de scripting podremos publicar lo que queramos en una cuenta de facebook y twitter.