
Homepage
14
Jul
Hi all!!
Yes! It’s true, I’m releasing the mouseTrap version 0.2 so it can be downloaded by anyone.
What offers mouseTrap version 0.2:
* Complete control of the mouse pointer via webcam.
* Mouse Movements
* Mouse Clicks events ( left, double, drag/drop, middle, right… Scroll Up/Down coming in the coming revisions )
* Compatibility with other Assistive technologies ( MouseTweaks, GOK)
* Multi Desktop Manager application ( Tested with: Gnome, E17 and OpenBox W.M )
* Complete Documentation for developers ( using –enable-pydoc and –enable-doxygen for building it )
* more……
The Code:
It is written in python using OpenCV library, and can be browsed from:
http://mousetrap.flaper87.org/trac/
Or downloaded using the subversion repository:
svn checkout http://svn.flaper87.org/mousetrap mousetrap
Installation:
MouseTrap uses the autotools for the installation process, so it is as easy as doing:
$ ./autogen.sh && make
AS ROOT:
# make install
Suggestions:
Read the README file
Coming on future versions:
* Eye tracking
* More Stability
* Different clicking methods.
* mouseTrap Art ( Icons, Images ) ( Any help needed!! )
Well, I really hope you like it and I’ll be waiting for your feedback ( please write me to: flaper87 [at] flaper87 [dot] org )
Thanks all
14
Jul
Español:
Bueno acá dejo un vídeo realmente corto para demostrar el funcionamiento de mouseTrap con aplicaciones como OpenOffice Draw, el diseño que realizo es un simple cuadrado mostrando el uso del panel de click y específicamente el click Drag and Drop.
Disfrútenlo!!
English:
Well, Here’s the video showing how to use mouseTrap for drawing in applications like OpenOffice Draw.The design is a simple square showing the use of the buttons click panel and specifically the Drag and Drop click method.
Enjoy!!
Italiano:
Ecco qua un piccolo video di come funziona mouseTrap con applicazioni stile OpenOffice Draw. Si fa vedere l’uso del panello di click e specificamente l’uso del click Drag and Drop.
Spero vi piaccia!!
Video: http://www.youtube.com/watch?v=_rjyEouT-Hw
8
Jun
Well Here’s a short video showing the first mouseTrap mouth Click.
I hope you like it.
Acá les dejo un pequeño vídeo con el primer click ejecutado con mouseTrap.
Espero que les guste.
URL: http://www.youtube.com/watch?v=jfNRS1oSb34
3
Jun
Hi!!
I’ve been programming the httpServer and the dbusServer for mouseTrap and I wanted to share how simple is communicate with our applications using dbus and its python bindings.
The piece of code we are interested in is this:
import dbus
import gobject
import dbus.service
from dbus.mainloop.glib import DBusGMainLoop
main_loop = DBusGMainLoop()
bus = dbus.SessionBus(mainloop=main_loop)
DBUS_NAME = "org.myApp"
DBUS_PATH = "/org/myApp"
class myAppdBus(dbus.service.Object):
"""
Our dbus Class
"""
def __init__( self ):
"""
Starting the dbus service.
"""
global bus
bus_name = dbus.service.BusName(DBUS_NAME, bus=bus)
dbus.service.Object.__init__(self, bus_name, DBUS_PATH)
@dbus.service.method(DBUS_NAME)
def do( self ):
"""
Function to execute using dbus service
"""
print "do function has been called using dbus service"
class myApp:
def __init__(self):
self.loop = gobject.MainLoop()
d = myAppdBus()
def start(self):
self.loop.run()
if __name__ == '__main__':
app = myApp()
app.start()
It is a simple script with 2 classes. The main class called myApp will call the dbus class (myAppdBus) and will start the applications main loop. The second class (myAppdBus) is the dbus class, it starts the service and register the methods that can be called using dbus.
The script can be executed like this (in my case the name of the script is dbus_script.py):
$ python dbus_script.py
After running the script it is possible to execute the do function like this:
$ dbus-send --reply-timeout=30000 --print-reply --dest=org.myApp /org/myApp org.myApp.do
This last command will show us the information related to the call we just executed. The output is something like:
flaper87@r4-p17:~$ dbus-send --reply-timeout=30000 --print-reply --dest=org.myApp /org/myApp org.myApp.do method return sender=:1.6 -> dest=:1.7 reply_serial=2
Ass you can the classes are really simple and show an easy way to communicate with our applications using dbus. There are a lot of options a tweaks that can be implemented so it’s all in you hands now.
Good Luck.
P.S: Quick post, isn’t it?
2
Jun
Saludos!!
Quisiera compartir una de las tantas cosas que se descubren en #archlinux-es, posiblemente muchos ya la conozcan pero yo no
Goosh, es una shell no oficial de google que nos permite ejecutar la mayoria de las acciones que normalmente llevamos a cabo con St. Google pero a través de una shell al estilo unix.
No los entretengo mas, acá les dejo el link: http://goosh.org/
Saludos
29
May
- Su nombre es fruto de un error de pronunciación del término gúgol (Googol).
- Su extrema sencillez se debe a que sus fundadores sabían muy poco HTML.
- En sus inicios mucha gente pensaba que la web no estaba totalmente cargada por su simpleza (no era lo habitual en aquellos tiempos).
- El botón “Voy a tener suerte” hace perder millones a Google en publicidad (te lleva directamente a una web). Se mantiene porque sus fundadores aseguran que hace al buscador más agradable.
- Google tiene registradas direcciones parecidas, por si alguien se equivoca al escribirlas, tipo gogle.com, gooogle.com.
- Su slogan era Don´t Be Evil (no seas malvado).
- Durante el 11-S Google se encargo de realizar “cachés” de los principales medios de comunicación (evitando su colapso) y se redirigieron muchas búsquedas hacia las últimas noticias.
- Google es propietario del dominio 466453.com ( escribe Google en un SMS para saber porqué).
- En Google usan la regla 20/5 para sus proyectos. Si al menos un 20% de los usuarios necesita una función esta se incluye. Además si como mínimo un 5% la necesita la implementan en preferencias avanzadas.
- GMail estuvo en periodo de pruebas 2 años y medio. Concluyeron que había 6 tipos de usuario, y en función de eso desarrollaron las opciones de la aplicación.
- Nadie sabe con exactitud donde están sus datacenters. Este es un mapa no oficial.
- Antes se llamó BackRub.
- Google tiene una intranet llamada Moma con documentación técnica e información de sus más de 16.000 empleados.
- Sus empleados tienen disponible el 20% de su tiempo para pensar en nuevos proyectos. interesante no?
- La compañía tiene una regla sobre la comida. Ningún empleado puede estar a más de 100 pies de ella.
- Para determinados estrenos como “El Señor de los Anillos” o “Transformers” la empresa ha alquilado varios cines exclusivamente para sus empleados y acompañantes.
- Google también fue beta durante un tiempo.
- Cobraron un cheque de 100.000$ a nombre de Google Inc…¡cuando aún no existía! Tuvieron que fundarla para poder hacerlo efectivo.
- GooglePlex es el nombre de sus oficinas.
- Fue fundada oficialmente el 7 de Septiembre de 1998. ¡Aún no tiene ni 10 años!”
29
May
OpenCv (Open Source Computer Vision Library) es una librería de funciones principalmente orientadas al procesamiento de imágenes en tiempo real.
En este post colocare un ejemplo de como utilizar OpenCV para realizar una simple captura y mostrarla en un frame.
import sys
from opencv import cv,highgui
if __name__ == '__main__':
#Iniciamos la captura del device 0. Ej: /dev/video
capture = highgui.cvCreateCameraCapture (0)
# Revisamos que este Capturando.
if not capture:
print "Error Abriendo el device /dev/video0"
sys.exit (1)
# Creamos las ventanas necesarias.
highgui.cvNamedWindow ("Ejemplo OpenCV", highgui.CV_WINDOW_AUTOSIZE)
while 1:
# Loop Infinito.
# 1. Capturamos la imagen actual
frame = highgui.cvQueryFrame (capture)
# 1.1 Si no hay captura salimos.
if frame is None:
break
# 2. Mostramos la imagen
highgui.cvShowImage ("Ejemplo OpenCV", frame)
# 3. Manejar Eventos. Esta función debe ser llamada periódicamente,
# por eso esta dentro del loop
c = highgui.cvWaitKey (10)
#Revisamos si alguna tecla de nuestro interés fue presionada
if c == '\x1b':
# Esc fue presionado, Salimos.
break
cvDestroyWindow( "Ejemplo OpenCV" );
Como pueden apreciar los pasos son muy simples:
- Nos conectamos al device
- Comenzamos a capturar
- Mostramos la captura
- Capturamos teclas.
- Procesamos las capturas
Espero que les sirva como una pequeña introducción a opencv + python, seguire publicando otras formulas secretas
para explicar pocas de las infinidades de cosas que se pueden hacer con esta combinacion
Feliz Día a todos!!
20
May
mouseTrap: This is the name of my new application. It is being developed using python and its main and most important function is allow users to control their mouse using a Web Cam and their faces by tracking specific points of the face previously detected. It is also capable to perform clicks and all the mouse options (at least it will). At this moment it is completely capable to perform mouse movements using at-spi’s python bindings (pyatspi).
1) History:
mouseTrap started as a simple widgetsTrap (read bellow), while the development advanced new ideas were coming and one of them was the idea of creating an application to move the mouse with the head using a simple and low cost web cam. After doing some research I found OpenCV ( base library of mouseTrap ). After downloading and testing OpenCV I found out that it is capable to do amazing things including face detection. After this I just performed some other tests and apply everything into mouseTrap and so the Web Cam feature became the main function of it.
2) Project Main Goal:
The main goal of the project is to become a completely accessible application for people with movement impairments and so take care of that important part of accessibility that wasn’t covered until now. With this, It’s possible to expand even more the Assistive Technology and Computer Accessibility and so make the technology accessible for more people.
3) What does mouseTrap use to model the head movement into mouse movement?
It calculates the 2D coordinates variation of the face movement on the Web Cam image and after that it executes the required movements with the pointer. It is a really simple calculation that gives an absolute and flexible control. The required movement is completely customizable by the user through the gtk based GUI.
4) Other Important Features:
- WidgetsTrap: The widgetsTrap is a time-out focus executer feature that catches all the selectable and focusable widgets of the current window ( Desktop or any other application ) and if the mouse hasn’t been moved in the setted time-out the nearest selectable or focusable widget will be focused. A demonstration video can be found here
- HttpServer: It is a basic httpServer to communicate with mouseTrap using command line ( wget ) or a simple web browser.
- KeyBindings: Yes Keybindings! The keybindings let the user perform some extra mouseTrap actions like, re-detect points, enable/disable features and so on…
- Mousebindings: There are also mousebindings for the main or most important actions ( like re-detect points ) so the can be executed using the Web Cam too requiring less movement.
- Internationalisation: multi language support.
5) Future Features:
- Eyetraking: This is the most important feature to implement, hopefully in a short future. This will allow the user to move the mouse just with the eyes, just watching the point in the screen where the mouse should be moved.
- Plugins Interface: a simple interface for plugins implementations.
- More Features to add soon…
I’ve recorded a Demo Video where is possible to appreciate how mouseTrap works. [video here]
There is a lot more to write, but i wanted to give a resume.
I hope you like the Video and even better the project.
Best Regards to all.
P.S: SPONSORS, Ideas, Suggestions, Opinions, Helps, DESIGNERS are welcomed so don’t think twice and feel free to submit a comment or mail me to: flaper87 at flaper87 dot com
9
May
Si alguna ves se encontraron con que no podían montar un Disco Externo desde el administrador de archivos que solían usar aquí les coloco la solución a ese problema que me funciono. La solución consiste en agregar el usuario al grupo hal y crear una regla en dbus-1 que permita a hal montar los discos, como?… Así:
Para agregar al usuario al grupo hal ejecutamos el siguiente comando como root:
# usermod -a -G hal
Ahora bien aquí viene lo bonito que es modificar el archivo /etc/dbus-1/system.d/hal.conf como root:
Abrimos el archivo con nuestro editor preferido:
# vim /etc/dbus-1/system.d/hal.conf
Y agregamos:
<policy group="82">
<allow send_interface="org.freedesktop.Hal.Device.SystemPowerManagement"></allow>
<allow send_interface="org.freedesktop.Hal.Device.VideoAdapterPM"></allow>
<allow send_interface="org.freedesktop.Hal.Device.LaptopPanel"></allow>
<allow send_interface="org.freedesktop.Hal.Device.Volume"></allow>
<allow send_interface="org.freedesktop.Hal.Device.Volume.Crypto"></allow>
</policy>
Donde 82 corresponde al ID de nuestro grupo hal, para saber el ID de nuestro grupo hal ejecutamos el siguiente comando:
$ cat /etc/group | sed 's/:/\ /g' | awk '{print $1 " --> " $3}' | grep -e '^hal'
Y obtendremos algo como:
hal --> 82
A este punto guardamos el archivo, cerramos la sesión y la volvemos a abrir. Si todo ha salido bien se deberia poder montar los discos desde el Administrador de Archivos.
Espero que les sirva!!
8
May
Resulta que me acabo de enterar que existe un plugin de Totem que permite explorar y ver los videos de youTube, asi que queria compartirlo con ustedes…
El plugin original se puede activar en Editar -> Complementos y marcando la casilla que dice “Examinador de YouTube”, también existe una mejora del plugin aqui el cual permite utilizar los nuevos códecs H.264 que ofrecen las personas de youTube los cuales permiten ver los vídeos con máxima calidad.
Para descargar el plugin se puede hacer desde acá y puede ser instalado de la siguiente manera:
tar xvzf youtubeh264.tar.gz
mv youtubeh264 /usr/lib/totem/plugins/
Luego puede ser activado de la misma forma que activamos el plugin original…
Enjoy….
6
May
Acá les dejo unas cuantas frases Geeks que me pasaron, algunas las he modificado para hacerlas mas Linuxeras
Frases tomadas de este link
Ahí les dejo…
- Eres el kernel de mi linux.
- Eres el html de mi corazon.com.
- Eres 1024kb para mi megabyte.
- Tus ojos brillan mas que mi torre de cd´s.
- Tucorazon.com esta en mi pagina de inicio.
- Eres el socket de mi CPU.
- Eres el compilador de mi codigo.
- El .gif que anima mi vida.
- Siempre estas en /home/Mi\ Corazón/
- Te pienso mas que las paginas indexadas por google.
- Eres como el firefox que me saco del infiero explorer.
- Eres el enter de mi vida.
- Si me dejas hago Ctrl+C en mi vida.
- Cuando te veo mi ciclo de CPU se acelera.
- Tú tienes la máxima prioridad en mi lista de procesos.
- Eres el linkador de mis objetos.
- Tus deseos son signals para mi.
- Ninguna gráfica podría renderizar al 100% tu perfecta figura.
- En la cama eres puro overclocking.
- Sin ti mi vida sería como una web sin CSS.
- Eres el cargador de mi iPod.
- Díme cómo te llamas y te agrego a favoritos
- Eres la primera en Google al buscar mi corazón.
- Tienes permisos de root en mi vida.
- Tus palabras tienen el IRQ más bajo para mí.
- Compiz-Fusion tiene envidia de tu belleza.
- Juntos somos como un procesador de doble núcleo.
- Tengo el feed RSS de tus pensamientos.
- Hiberno cuando no estás a mi lado.
- Quisiera ser un Pendrive para tus USB.
- Nuestros corazones sincronizan por Wifi.
22
Apr
No hay palabras que pueda decirte,
pero si mil cosas por escribirte,
en las que como en un cuento de hadas,
tu eres la princesa de mis cruzadas.
No sabes cuanto te extraño,
a ti, a tu piel y a tu aroma de mayo,
que en el brillante resplandor de sus días,
te hacia mas bella, te hacia mas viva.
Te extraño como las aves extrañan al viento,
como los peces extrañan al mar,
como solo yo puedo extrañarte en este momento,
en la distancia de nuestro andar.
Siempre escribo con dolor,
aunque tus recuerdos me traigan alegría,
porque aunque inmensurable sea nuestro amor,
la distancia me sumerge en una terrible agonía.
Y dime tu Amada Mía,
si no existiera el silencio, ¿las aves como cantarían?
si no existieran los mares, ¿Los peces como nadarían?
Si no existieras tu, ¿mi corazón como latiría?
Mis manos tiemblan cuando escribo,
al mismo tiempo que mi corazón se acelera,
explícame entonces cariño mio
… no, no me expliques nada, déjame en el olvido
Y solo una cosa mas he decirte:
Que aunque mis versos sean batallas en las que mi corazón se acorrala
y mis palabras ocupen espacios sin sentido,
tu seras siempre nombrada como la princesa de mis cruzadas.
13
Apr
Este es un pequeño y simple howto acerca de como crear un paquete para Archlinux…
Los paquetes de archlinux son simples .tar.gz, la mayoria con 3 archivos dentro (2 de ellos opcional) que gestionan la descarga e instalación de la aplicación, digo la mayoria porque también existen paquetes que ademas de traer estos 2 archivos traen las fuentes de la aplicación (vease el caso de eclipse, netbean, Firefox3, entre otros) y que por ende son más pesados.
Estos dos archivos que mencionon son el PKGBUILD (Obligatorio), un .install con algunas reglas extras como pre_instalacion, post_instalacion, pre_desisntalacion o post_desisntalacion y un archivo .filelist que contine la lista de archivos el cual es usado para la desisntalación del paquete o para buscar conflictos con archivos. El archivo .install se dice que es opcional ya que el paquete no depende directamente de el, pero si no se especifican estas reglas el paquete a la hora de ser desisntalado (por ejemplo) sera eliminado solamente de la base de datos dejando todos los archivos en las carpetas de instalación ya que no existe ninguna regla para desinstalarlo y lo mismo se aplica para el archivo .filelist
Para este ejemplo utilizare el paquete de Ulipad que en estos momentos mantengo. Comencemos con el PKGBUILD:
El PKGBUILD es un archivo que contiene tanto la información completa del paquete como la
funcion de construcción (build) del paquete, por ejemplo:
# Maintainer: Flavio Percoco <flaper87 at archlinux dot com dot ve>
# Contributor: Flavio Percoco <flaper87 at archlinux dot com dot ve>
pkgname=ulipad
pkgver=3.8.1
pkgrel=1
pkgdesc="UliPad is en editor written in python and wxPython."
arch=('i686' 'x86_64')
license=('GPL')
install=ulipad.install
url="http://code.google.com/p/ulipad/"
depends=(python wxpython unzip)
source=("http://ulipad.googlecode.com/files/ulipad.$pkgver.zip")
md5sums=('9bfb7c6000c3b1a61e65840385c2be03')
build() {
cp -Rf $startdir/src/ulipad /usr/share/
echo "#!/bin/bash" > /usr/bin/ulipad
echo "python /usr/share/ulipad/UliPad.py" >> /usr/bin/ulipad
chmod 777 /usr/share/ulipad/ -Rf
chmod a+x /usr/bin/ulipad
}
Expliquemos el PKGBUILD:
Los parametros para proporcionar la informacón del paquete son faciles de entender, sin embargo acá les coloco la explicación de los que utilice, para verlos todos vean este link
- pkgname: El nombre del paquete.
- pkgver: La versión del paquete.
- pkgrel: El numero de release del paquete, el cual debe ser modificado cada vez que se le hagan cambios al
- PKGBUILD.
- pkgdesc: La descripción del paquete.
- arch: la architectura para la cual esta permitida el paquete.
- license: La licencia del paquete.
- install: El archivo .install a incluir el cual debe encontrarse en la misma carpeta del PKGBUILD.
- url: La pagina principal del paquete.
- depends: Las dependencias del paquete.
- source: De donde se obtendran las fuentes, puede ser local como http o ftp.
- md5sum: El md5sum de las fuentes del paquete.
La función build también es bastante simple por el tipo de paquete que estamos creando, Ulipad es un IDE para python hecho en python y utilizando wxwidgets, y su instalación se hace simplemente copiando la carpeta a donde queramos, sin necesidad de compilar o algo por el estilo.
cp -Rf $startdir/src/ulipad /usr/share/
Con este comando copiamos la carpeta de ulipad a /usr/share/ que sera nuestro path de instalación.
echo "#!/bin/bash" > /usr/bin/ulipad echo "python /usr/share/ulipad/UliPad.py" >> /usr/bin/ulipad chmod 777 /usr/share/ulipad/ -R chmod a+x /usr/bin/ulipad
Esto era realmente opcional y lo hice para ofrecer un lanzador para ulipad ya que este no lo trae, simplemente creo un archivo llamado ulipad bajo /usr/bin el cual ejecutara el comando python /usr/share/UliPad.py al ser ejecutado y le otorgo permisos de ejecución.
Ahora pasemos a explicar el arhcivo ulipad.install del paquete el cual por la simplicidad del paquete es aun mas facil que el mismo PKGBUILD
post_remove() {
rm -Rf /usr/share/ulipad/
rm /usr/bin/ulipad
}
La unica función que le agregue fue la de post_remove (post_desinstalacion) la cual eliminara todos los archivos que fueron agregados durante la instalación obviando los de configuracion del usuario por supuesto. En este caso esos archivos son /usr/share/ulipad y /usr/bin/ulipad.
Ok ahora empaquetemos todo lo que acabamos de hacer, creemos una carpeta con el nombre de la aplicación en la cual deberan ser guardados los archivos:
$ mkdir ulipad && cd ulipad
$ vim PKGBUILD // Para crear el PKGBUILD, pueden usar su editor favorito.
$ vim ulipad.install // Para crear el ulipad.install, pueden usar su editor favorito.
Ahora quedan dos cosas por hacer una es crear el paquete para subirlo a los repositorios de AUR ( Archlinux User-Community Repository ) y crear el paquete instalable. El primero nos servira simplemente para subirlo a AUR y que otros lo puedan instalar mediante yaourt (hasta que tenga suficientes votos para entrar en community y poder ser instalado mediante el uso de pacman ), este es un paquete que contiene los dos archivos que creamos y el cual sera construido cuando el usuario intente instalarlo; el segundo es un paquete ya construido y listo para instalar.
$ tar -cvvf ulipad-3.8.1.tar.gz ../ //Este es el que podra ser subido en los repositorios de AUR
# makepkg –asroot // Este debe ser ejecutado como root y con el comando –asroot
Ok… Hemos construido nuestros paquetes, el segundo es opcional pero siempre es bueno probarlo antes de subirlo al repositorio, asi que probemoslo. Como lo tenemos en nuestro computador lo podemos instalar con pacman.
# pacman -A ulipad-3.8.1-1-i686.pkg.tar.gz
Si todo va bien entonces es hora de entrar a la pagina de AUR, iniciar nuestra sesión y subir nuestro paquete ulipad-3.8.1.tar.gz
Espero que les sirva este pequeño howto de como crear un paquete para Archlinux…
6
Apr

Aprovecho para anunciar que instale Archlinux en mi laptop, las razones las explicare luego (si es que a alguien le interesa, lol)….
En este post quiero explicar como compilar un kernel para Archlinux, no me detendré en las configuraciones del kernel así que sera breve…
- La versión del kernel con la que voy a trabajar es la 2.6.24.-4
- El directorio en el cual estaré trabajando es ~/kernel/linux-2.6.24.4
Lo primero que hay que hacer es configurar el kernel, compilarlo e instalar sus modulos, si se quiere utilizar las configuraciones viejas del kernel que esta actualmente instalado y con el que estamos trabajando hay que hacer lo siguiente:
# cd ~/kernel/linux-2.6.24.4/
# zcat /proc/config.gz > .config
# make oldconfig
Luego procedemos a configurar el kernel, en mi caso utilizare menuconfig:
# make menuconfig
Luego de tener todo configurado procedemos a la compilación del kernel y a la instalación de los modulos:
# make
# make modules_install
Ahora tenderemos que copiar el kernel bajo /boot y luego generar el ramdisk:
# cp -v arch/i386/boot/bzImage /boot/vmlinuz-2.6.24.4
# mkinitcpio -k 2.6.24.4 /boot/kernel2.6.24.4.img
Con esto nos queda simplemente agregar las lineas del nuevo kernel al Grub (o lilo
):
# vim /boot/grub/menu.list
Y agregamos lo siguiente:
# My Kernel
title Arch’i Compile 2.6.24-4
root (hd0,1)
kernel /vmlinuz2.6.24-4 root=/dev/sda3 ro quite vga=791 acpi=force idebus=66
initrd /kernel2.6.24-4.img
# My Kernel
title Arch’i Compiled 2.6.24-4 Fallback
root (hd0,1)
kernel /vmlinuz2.6.24-4 root=/dev/sda3 ro quite vga=791 acpi=force idebus=66
initrd /kernel2.6.24-4.img
Existe otra forma para compilar e instalar el kernel la cual seria mas pacman way que la que acabo de explicar, les dejo este link[0] que explica como hacerlo.
[0] Pacman Way
Espero les sirva…
2
Apr
No se ni como, ni cuando ni donde (bueno donde si, en /usr/lib/pkgconfig), ni porque razón todos mis archivos .pc que deberían estar en las carpetas de pkconfig (_nada importante realmente_, “notese el tono sarcástico”) habian desaparecido. Decidí tomar esto como una de las bellas sorpresas que da Debian Sid y la cual nos permite aprender muchas cosas mas ( que fanatismo
).
El hecho es que de alguna manera tenia que restaurar esos archivos y no me iba a poner a reinstalar paquete por paquete ni mucho menos iba a ponerme a buscar en debian.org que paquete tiene un .pc que debería ir en las carpetas de pkgconfig para luego ver si lo tenia instalado para reinstalarlo, así que combine unos comandos (porque esto no se llama crear un gran comando, los comandos ya existían, lo que hice fue ponerlos juntos) que me permitieran saber que paquetes tengo instalados para luego saber cuales de ellos tienen un bendito archivo .pc y asi poder luego reinstalarlos todos juntos.
El comando es el siguiente:
dpkg -l | awk '{print $2}' |xargs dpkg -L | grep pkgconfig/ | xargs dpkg -S | sed 's/:.*/\ /' | xargs aptitude reinstall
Lo explico:
Con dpkg -l obtenemos una lista de todos los paquetes que tenemos instalados.
Ej:
ii x11-common 1:7.3+10 X Window System (X.Org) infrastructure
ii x11-session-utils 7.3+1 X session utilities
ii x11-utils 7.3+1 X11 utilities
ii x11-xfs-utils 7.3+1 X font server utilities
ii x11-xkb-utils 7.3+1 X11 XKB utilities
ii x11-xserver-utils 7.3+2 X server utilities
Con awk ‘{print $2}’ nos quedamos solo con la columna que tiene los nombres de los paquetes.
Ej:
x11-common
x11-session-utils
x11-utils
x11-xfs-utils
x11-xkb-utils
x11-xserver-utils
Con xargs dpkg -L obtenemos la lista de todos los ficheros de los paquetes de la lista. (En el ejemplo verán archivos de evince).
Ej:
/usr/share/locale/en_CA
/usr/share/locale/en_CA/LC_MESSAGES
/usr/share/locale/en_CA/LC_MESSAGES/evince.mo
Con grep /pkgconfig/ nos quedamos solo con aquellas lineas que contienen el nombre de la carpeta /pkgconfig/ (Los / no tienen nada que ver con regex son simples separadores de carpetas).
Ej:
/usr/lib/pkgconfig/xdamage.pc
/usr/lib/pkgconfig/xdmcp.pc
/usr/lib/pkgconfig/xevie.pc
/usr/lib/pkgconfig/xext.pc
/usr/lib/pkgconfig/xfixes.pc
Con xargs dpkg -S obtenemos nuevamente los nombres de los paquetes pero esta vez solo los que contienen los ficheros de pkgconfig (.pc).
Ej:
x11proto-fonts-dev: /usr/lib/pkgconfig/fontsproto.pc
x11proto-gl-dev: /usr/lib/pkgconfig/glproto.pc
x11proto-input-dev: /usr/lib/pkgconfig/inputproto.pc
x11proto-kb-dev: /usr/lib/pkgconfig/kbproto.pc
x11proto-randr-dev: /usr/lib/pkgconfig/randrproto.pc
Con sed ’s/:.*/\ /’ nos ponemos exigentes para quedarnos solo con lo que esta antes de los : es decir solo con el nombre del paquete, lo de mas lo reemplazamos con un espacio en blanco.
Ej:
x11proto-resource-dev
x11proto-scrnsaver-dev
x11proto-trap-dev
x11proto-video-dev
x11proto-xcmisc-dev
x11proto-xext-dev
Y por ultimo no nos queda mas que reinstalar todo con xargs aptitude reinstall
Espero les sirva y también espero que nunca lo tengan que usar porque quiere decir que hasta que no lo hagan no podrán compilar sus paquetes :-D.
P.D: Me imagino que existirá una forma mas fácil de hacerlo (no se ni siquiera si existe un único comando que haga todo esto), pero fue divertido…
Saludos
30
Mar
Hablemos un poco de Wordpress en su version 2.5…
Acabo de actualizar mi blog y puedo decir que uno de los cambios mas importante e imposible de no notar es el del nuevo panel de administración.
La nueva una interfaz es mucho más ligera pero simple y entendible como la otra, completamente intuitiva y de fácil acceso. Desde mi punto de vista es incluso mas organizada que la anterior.
Algunas de las nuevas caracteristicas son:
- Guardado automatico de los borradores.
- Creacion de permalinks personalizados.
- Gestion de sidebar a traves de widgets.
- Media Library: permite la gestion de archivos de imagenes, video, audio etc. los cuales pueden ser agregados desde el panel de escritura de posts y gestionados desde Manage->Media Library.
- Dashboard mejorada y personalizable.
Esperemos que esta versión no traiga problemas de seguridad como la 2.3.
Ahí les dejo ![]()
17
Mar
Bueno a pesar de que me sentía cómodo haciendo el “debug” de las paginas a punta de echos atravesados en las funciones, un amigo me mostró algunas de las bellezas de utilizar las cualidades de un debugger.
En este caso como para php utilizo Eclipse PDT me interesaba hacer funcionar el debugger con este IDE. Primero que nada hay que instalar xdebug (suponiendo que ya tenemos instalado apache y php). Para distribuciones como las Debian Based es necesario el paquete dev de php, en mi caso como estoy utilizando php5 instale php5-dev… Mejor agamoslo desde el principio :-D.
# aptitude install apache2 libapache2-mod-php5 php5 php5-dev
$ wget http://xdebug.org/link.php?url=xdebug200rc3
$ tar xvzf xdebug-2.0.0RC3.tgz
$ cd xdebug-2.0.0RC3/
$ phpize
$ ./configure --enable-xdebug
En caso de tener instalado el php-config en un path que no sea estándar entonces podemos configurarlo de esta manera:
$ ./configure --enable-xdebug --with-php-config=/path/to/php-config
Luego compilamos e instalamos:
$ make
# sudo make install
Ahora viene la configuración, tenemos que editar el archivo php.ini y para saber cual es el que utiliza apache utilizaremos la función phpinfo de php (coloco en negrita la linea que nos interesa):
$ php -r ”phpinfo();” | grep -i php.ini
Configuration File (php.ini) Path => /etc/php5/cli
Loaded Configuration File => /etc/php5/cli/php.ini
Abrimos ese archivo con permisos de superusuario y agregamos las siguientes lineas antes de ;End
zend_extension=/usr/lib/php5/20060613+lfs/xdebug.so
xdebug.remote_enable=1
Luego de esto reiniciamos el servicio de apache y podremos probar el debugger:
# sudo /etc/init.d/apache2 restart
Apache utilizara el debugger sin la necesidad de un IDE como Eclipse PDT, pero para poder hacer uso de breakpoints, o llevar la secuencia de los valores de las variabiles a medida che la pagina es cargada entonces es recomendable el uso de un IDE y sus herramientas.
Espero les sirva.
P.D: Prometo hacer otro post explicando como ussar xdebug con eclipse.
5
Mar
En los últimos días he cambiado 3 de mis aplicaciones principales:
1) Iceweasel -> Firefox 3 b3
2) Amarok -> Exaile
3) OpenOffice ( casi nunca lo use
) -> Lotus Symphony
Firefox 3 beta 3:
Esta es la ultima versión que ha sido liberada, viene con ligeros cambios en su interfaz y muchos mas en su forma de hacer las cosas. La razón principal por la cual lo instale es que traje mejoras al nivel de accesibilidad el cual es uno de los principales campos por los cuales me muevo. Algunos de los cambios son:
1) Nueva gestión de complementos y temas, permite que sean descargados e instalados directamente desde la interfaz de complementos.
2) Mejoras en el gestor de marcadores.
3) En su interfaz principal ha sido movido el botón de inicio la la barra de marcadores.
Screenshot:
Exaile:
Resulta que navegando por los largos océanos de la WWW me encontré con esta aplicación, que resulta ser un reproductor de música hecho en python que busca de cubrir todas esas opciones y posibilidades que el muy conocido Amarok nos ofrece. Algunas de esas cosas son:
1) Soporte a grandes librerías.
2) Soporte para Album Covers.
3) Audio Scrobbling.
Screenshot
Lotus Symphony:
Esta es una suite de ofimática desarrollada por la conocida empresa IBM la cual esta basada en Eclipse y desarrollada en Java. Es completamente libre, ofrece un procesador de texto, creación de presentaciones y hojas de calculo.
Screenshot

Phanet does not generate contents each post belongs to the author.
© 2008 - Phanet is under GPLv2
© 2008 - Phanet is under GPLv2

















































