viernes, 16 de noviembre de 2012

Imagenes con goocanvasmm

Este es un mini tutorial de imagenes con goocanvasmm

  1.  
  2. #include <gtkmm.h>
  3. #include <goocanvasmm.h>
  4. #include <cairomm/cairomm.h>
  5. #include <iostream>
  6. #include <gdkmm-2.4/gdkmm.h>
  7.  
  8. using namespace Goocanvas;
  9. using namespace Glib;
  10. using namespace std;
  11. using Gdk::InterpType;
  12.  
  13. // Clase imagen personalizada
  14. class Imagen: public Goocanvas::Image{
  15. protected:
  16.    
  17.     Imagen(const Glib::RefPtr<Gdk::Pixbuf>& pixbuf, double x = 0.0, double y = 0.0):
  18.         Goocanvas::Image(pixbuf,x,y){   }  
  19. public:
  20.  
  21.     static Glib::RefPtr<Imagen> create(double x = 0, double y = 0, double width = 0, double height = 0){
  22.         // Crea un buffer de pixeles a partir del fichero de la imagen
  23.         Glib::RefPtr<Gdk::Pixbuf> pb= Gdk::Pixbuf::create_from_file("toroid.png",width,height,true) ;
  24.        
  25.         // Crea una imagen a partir del pixbuf
  26.         Imagen *imagen=new Imagen(pb,x,y);
  27.        
  28.         // Asigna la posición de la imagen
  29.         imagen->set_bounds(Bounds(x,y,x+width,y+height));
  30.        
  31.         // Retorna la imagen creada
  32.         return Glib::RefPtr<Imagen>(imagen);
  33.     }
  34. };
  35.  
  36. // ventana principal
  37. class Simple : public Gtk::Window
  38. {
  39. public:
  40.     Simple(){
  41.         // Asigna un tamaño a la plantilla raiz
  42.         lienzoImagen.set_size_request(800, 800);
  43.  
  44.         // Establece la ubicación de la plantilla en la pantalla
  45.         lienzoImagen.set_bounds(0, 0, 800, 800);       
  46.  
  47.         // Crea un imagen y lo asigna a lienzo, recuerda que
  48.         // el lienzoImagen solo es el contenedor
  49.         imagen = Imagen::create(100, 100, 450, 450);
  50.  
  51.         // Asigna el color interno del imagen
  52.         imagen->property_fill_color().set_value("blue");
  53.  
  54.         // Asocia la señal de clickeo del imagen con el método
  55.         // imagen_clicked() del objeto actual
  56.         imagen->signal_button_press_event ().connect (sigc::mem_fun (this,
  57.                 &Simple::imagen_clicked));     
  58.  
  59.         // Retorna el item root de la plantilla
  60.         RefPtr<Item> root = lienzoImagen.get_root_item();
  61.  
  62.         // Agrega el imagen a la plantilla
  63.         root->add_child(imagen);
  64.  
  65.         // Agrega el lienzo a la ventana actual
  66.         add(lienzoImagen);
  67.  
  68.         show_all_children();
  69.     }
  70.  
  71.     /** Método que se ejecuta cuando se clickea el imagen **/
  72.     bool imagen_clicked(const RefPtr<Item>&, GdkEventButton*){
  73.         cout << "Has clickeado el imagen" << endl ;
  74.         return true ;
  75.     }
  76.  
  77.     Glib::RefPtr<Imagen> m_item;
  78.  
  79. protected:
  80.     // Lienzo contenedor del imagen
  81.     Canvas lienzoImagen;
  82.    
  83.     // Imagen a mostrar
  84.     RefPtr<Imagen> imagen;
  85. };
  86.  
  87.  
  88.  
  89. int main(int argc, char* argv[]){
  90.     Gtk::Main app(&argc, &argv) ;
  91.  
  92.     // Inicializa goocanvas. Es necesario en todo programa que use esta biblioteca
  93.     Goocanvas::init("Ejemplo simple goocanvasmm", "1.0", argc, argv) ;
  94.  
  95.     Simple ventana ;
  96.  
  97.     Gtk::Main::run(ventana) ;
  98. }
  99.  

sábado, 27 de octubre de 2012

Usar librerías boost en eclipse

Antes que nada deberás tener instaladas las librerías, para ella puedes instalarla desde tu gestor de software. Las básicas son:

boost
boost-system
boost-devel

En el caso de Fedora existen varios paquetes para usos específicos (expresiones regulares, timers, etc). Recomiendo instalarlos todos. Estos son algunos:


Luego de instalar los paquetes entras en eclipse e entras en el fichero objects.mk de tu proyecto


y agregas el string -lboost_system-mt a la variable LIBS.

Quedaria algo asi:

LIBS := -lglib-2.0 -lboost_system-mt

Nota: Algunas características de boost necesitan links a otras librerías. Por ejemplo si deseas usar timers debes agregar -lpthread.

Este proceso tambien se puede hacer desde el dialogo de opciones del proyecto:

C/C++ Build -> Settings -> GCC C++ Linker -> Libraries

Allí agregas la biblioteca deseada.

sábado, 20 de octubre de 2012

Pelar un cable ffc

He buscado en mil foros y no consegui como c... podia pelar un cable ffc (Flex). En mi desesperación para exponer el cobre del cable ffc utilice un dremel con punta de lija y funcionó perfecto. Solo hay que cuidarse de no afincar el cable contra el dremel.


miércoles, 26 de septiembre de 2012

Programar un Arduino Pro Mini con un Uno / Duemilanove

Primero debe quitarle el atmega al Uno o Duemilanove
Las conexiones son las siguientes:

Duemilanove |  Pro Mini
          Reset  |  GRN
            3V3  |  VCC
           GND |  GND
             TX  |  TX
             RX  |  RX







Luego ir a Arduino IDE y seleccionar la tarjeta como el modelo Arduino Pro Mini . Seleccione el modelo a programar. En mi caso es del de 3.3v  8 Mhz Atmega328



y listo.

domingo, 9 de septiembre de 2012

Configuración multimonitor en GNU / Linux con KDE

Si deseamos un entorno con con varios escritorios asignados a distintos monitores corriendo bajo Linux, la mejor opción es KDE.

Nos permite ajustar la configuración en un tris. Este es mi escritorio




Aunque en la captura aparezca como una sola imagen, en realidad son dos monitores cada uno con un escritorio distinto y una barra de tareas especifica. El relleno negro que se observa en el escritorio de la derecha no se ve en el monitor, puesto que solo es un relleno ocasionado por las distintas resoluciones con que trabajan mis dos monitores.

La configuración de los monitores (clonado, extendido etc) se hace directamente desde el panel de control que ofrezca el fabricante de su tarjeta gráfica (AMD | Ati, Nvidia...) en mi caso AMD Hd 6870.

En este caso es un monitor extendido.

Para que en el gestor de tareas muestre solo las aplicaciones que están en el monitor actual ve a las preferencias del gestor de tareas (clic secundario en él) y luego selecciona todos los check buttons de los filtros, menos el ultimo. Has esto por cada gestor de tareas que poseas.

  

Así se ve mi pc trabajando con doble monitor bajo Fedora 17 x64 con KDE


NIC dedicada a una VM en Virtualbox

A algunas personas nos pasa el caso en donde poseemos dos conexiones a internet y deseamos aprovecharlas. Para ello he hecho varias configuraciones con bonding pero sigue sin convencerme. Esperaré a que fedora 18 sea liberada para probar con libteam y teamd.

Mientras tanto, he ideado la siguiente configuración para dar uso a mis dos interfaces.

Tengo dos NIC's alambicas. Una conectada a un range extender con el cual "pido prestado" el super wifi de algún vecino (2 Mb/s) y la otra a un servicio adsl estándar (1 Mb/s). Con las dos suman 3 megas de velocidad, que aquí en Venezuela es una barbaridad.

A la maquina virtual (cliente) le asigné la conexión de 2 Mb/s y al host la de 1 Mb/s. 
Para ello:

- Abrí la configuración de la maquina virtual


- Luego en el menu "Red" seleccioné adaptador puente y en el campo nombre debes selecciona la interfaz que será tu dedicada (en mi caso se llama "p1p1"). Le das en ok y listo.



Si usted tiene instalado algún monitor de red notará que ambas NIC's están trabajando.

Ahora puede ver un video de Pamela Anderson en el host mientras carga la saga completa de Paris Hilton en la maquina virtual y todo fluido XD

Así se ven mis conexiones hoy:


domingo, 2 de septiembre de 2012

Ver el PID de una aplicación (ventana)

Si necesita saber el pid de una aplicación, asociada a una ventana, puede usar el comando xprop.

Si lo ejecuta en un terminal y entonces el puntero cambiara a una cruz y le dará clic a la ventana de la aplicación deseada.

En el caso de la imagen el PID seria 2620.

Si no quieres buscar entre tanta letra puedes filtrarlo con xprop | grep "PID"

Existen otras alternativas para buscar el pid como:
pgrep nombredelproceso
o el clásico
ps -e | grep nombredelproceso


Pero para gustos colores.

jueves, 2 de agosto de 2012

Terminal de root en KDE

Para crear un lanzador, en KDE, que al abrirlo se abra la terminal en modo root solo debes asignarle, al lanzador, el comando:
#kdesu konsole

Si usas gnome:
#gksu gnome-terminal



Instalar drivers AMD Catalyst en kernel 3.4

Si no puedes instalar AMD Catalyst en tu distro Fedora es posible que el error se deba a que usas un kernel 3.4.x, el cual no es compatible (por defecto) con los últimos drivers de AMD. Pero no os preocupéis. 
Gracias a Allah este chino ha sacado un parche para darle soporte. El detalle está en que las rutas del parche no concuerdan y además la versión 12.6 borra el directorio de los códigos luego de terminar la instalación. Por esta razón si sigues sus pasos tal cual no te va a funcionar (Se le agradece igual). 

La solución:

He modificado y aplicado el parche en el directorio temporal que genera la instalación gráfica del driver (el cual tiene un nombre aleatorio). 

La instalación:

Antes que nada necesitáis instalar los headers y devels de vuestro kernel
#yum -y install kernel-devel kernel-headers

Luego descarga este fichero que contiene el directorio de instalación que he parcheado.

Descomprímelo y cambia a la siguiente ruta del directorio creado.
#cd fglrx-install/common/lib/modules/fglrx/build_mod/

Ejecuta el fichero make.sh
#./make.sh

Luego sube un directorio
#cd ..

y ejecuta make_install.sh
#./make_install.sh

Espera a que termine de compilar e instalar y luego reinicias.

En teoria ya deberias tener los drivers funcionando.

Nota: Probada en Fedora 17 con una AMD 6870, pero debería funcionar para casi todas las distros y las AMD superiores a la serie HD 4000.

miércoles, 25 de julio de 2012

Instalar drivers AMD Graphics en Fedora 17

Nota: AMD ha publicado  una nueva versión de los drivers que corrige todos estos problemas con el kernel. No elimino el post porque se que existen personas que tienen el kernel 3.4 y no quieren o pueden migrar a uno superior.

NOTA: Si tienes el kernel 3.4.x necesitas instalar este patch para poder seguir los pasos. Entra aqui para ver como. Para hacerlo debes seguir la metodologia de instalación por paquetes.  Puesto que el kernel 3.4 ha modificado algunas cosas que no permiten que se compile de forma correcta el driver.Si este es tu caso y no consigues forma de hacerlo en tu kernel 3.4 entonces puedes instalar el driver en tu kernel más viejo (3.3.x) y seguir los pasos indicados aquí abajo.

------------------------------------------------------------------------------------------

Si tu kernel es el 3.3.x solo debes descargarte el driver de la pagina de AMD.

Luego entras con la terminal en tu carpeta de descargas y ejecutas en modo root:

./amd-driver-installer*.run

Se abre una ventana como esta




El resto es puro "yes to all"... reinicias y todo es color de roza :·)

martes, 24 de julio de 2012

Primer contacto con Goocanvasmm

      En estos días he estado buscando entre los paquetes de Debian alguno que me sirva para crear objetos visuales e interactivos con Gtkmm sin tener que partirme los huevos con sus maricones canvas intratables. En fin he conseguido uno me que me ha maravillado: Goocanvasmm. Esta biblioteca nos permite crear figuras geométricas e imágenes responsivas a eventos (mouse, teclado, etc) de una forma muy sencilla.

Instalando goocanvasmm

Para instalarlo entra a synaptic (o en el gestor de paquetes de tu distro) y escribes "goocanvasmm". Instala el paquete de desarrollo (-dev) y la documentaci'on (-doc). En Debian se ve así:


Configurando Eclipse para goocanvasmm

Para hacerlo puedes ingresar en esta entrada.



Primer programa

Vamos a hacer un programa simple que muestre un cuadro azul y responda al clickeo con un mensaje en consola.


#include <gtkmm.h>
#include <goocanvasmm.h>
#include <cairomm/cairomm.h>
#include <iostream>

using namespace Goocanvas;
using namespace Glib;
using namespace std;


// ventana principal
class Simple : public Gtk::Window
{
public:
    Simple(){
        // Asigna un tamaño a la plantilla raiz
        lienzoCuadrado.set_size_request(640, 480);

        // Establece la ubicación de la plantilla en la pantalla
        lienzoCuadrado.set_bounds(0, 0, 800, 800);

        // Retorna el item root de la plantilla
        RefPtr<Item> root = lienzoCuadrado.get_root_item();

        // Crea un cuadrado y lo asigna a lienzo, recuerda que
        // el lienzoCuadrado solo es el contenedor
        RefPtr<Rect> cuadrado = Rect::create(100, 100, 450, 450);

        // Agrega el cuadrado a la plantilla
        root->add_child(cuadrado);

        // Asigna el color interno del cuadrado
        cuadrado->property_fill_color().set_value("blue");

        // Asocia la señal de clickeo del cuadrado con el método
        // cuadrado_clicked() del objeto actual
        cuadrado->signal_button_press_event ().connect (sigc::mem_fun (this,
                &Simple::cuadrado_clicked));
        
        // Agrega el lienzo a la ventana actual
        add(lienzoCuadrado);
        show_all_children();
    }
    
    /** Método que se ejecuta cuando se clickea el cuadrado **/ 
    bool cuadrado_clicked(const RefPtr<Item>&, GdkEventButton*){
        cout << "Has clickeado el cuadrado" << endl ;    
        return true ;
    }    
protected:
    // Lienzo contenedor del cuadrado
    Canvas lienzoCuadrado;
};


int main(int argc, char* argv[]){
  Gtk::Main app(&argc, &argv) ;
  
  // Inicializa goocanvas. Es necesario en todo programa que use esta biblioteca 
  Goocanvas::init("Ejemplo simple goocanvasmm", "1.0", argc, argv) ;
  
  Simple ventana ;
  
  Gtk::Main::run(ventana) ;
}

El resultado es este:




Puedes descargar el fichero del ejemplo desde aquí. En el directorio en el cual se instaló la documentación de goocanvasmm (en mi caso "/usr/share/doc/goocanvasmm/examples") encontraras varios ejemplos. También los puedes descargar de aquí. Otros Links útiles: // Referencia de la biblioteca http://developer.gnome.org/goocanvasmm/1.90/

Configurando Eclipse para Goocanvasmm

Para hacerlo se hacen los mismos pasos que cuando configuramos gtkmm. Solo que en vez de seleccionar, en la lista del pkg-config, la biblioteca gtkmm-2.4 seleccionamos Goocanvasmm.


En caso de que la biblioteca goocanvasmm no aparezca en la lista hay una forma de forzarlo:

Editando uno de los ficheros de metadatos que si aparezcan en el listado y agregarle los metadatos de goocanvasmm.

Según el manual de pkg-config:
"pkg-config retrieves information about packages from  special  metadata files.  These  files  are named after the package, and has a .pc extension."
Estos ficheros .pc se ubican en "/usr/lib/pkgconfig".

Abre goocanvasmm-1.0.pc en modo super usuario.
       sudo gedit /usr/lib/pkgconfig/goocanvasmm-1.0.pc

Luego escoge el fichero relacionado con alguna biblioteca que sí se liste en eclipse.
Yo en mi caso edité el de gtkmm-2.4 y su fichero se llama ¨gtkmm-2.4.pc¨.
      sudo gedit /usr/lib/pkgconfig/gtkmm-2.4.pc

Debes añadir las Libs y las Cflags del fichero de goocanvasmm al de gtkmm.
En mi caso el fichero gtkmm-2.4.pc quedó así:


prefix=/usr
exec_prefix=${prefix}
libdir=${exec_prefix}/lib
datarootdir=${prefix}/share
datadir=${datarootdir}
includedir=${prefix}/include

docdir=${datarootdir}/doc/gtkmm-2.4
doxytagfile=${docdir}/reference/gtkmm-2.4.tag
htmlrefdir=${docdir}/reference/html
htmlrefpub=http://library.gnome.org/devel/gtkmm/unstable/

Name: gtkmm
Description: C++ binding for the GTK+ toolkit
Version: 2.20.3
URL: http://www.gtkmm.org/
Requires: goocanvas giomm-2.4 >= 2.24 pangomm-1.4 >= 2.26 gtk+-2.0 >= 2.20.0 gtk+-unix-print-2.0 atkmm-1.6 gdkmm-2.4
Libs: -L${libdir} -lgtkmm-2.4 -lgoocanvasmm-0.1
Cflags: -I${includedir}/gtkmm-2.4 -I${libdir}/gtkmm-2.4/include -I${includedir}/goocanvasmm-0.1 -I${libdir}/goocanvasmm-0.1/include


Las letras rojas indican las Libs y Cflags agregadas. Puedes descargar el fichero de aquí.

Luego de hacer esto se guardan los cambios, realizas los pasos de configuración de gtkmm y ya puedes compilar tus programas hechos en eclipse utilizando goocanvasmm.


martes, 17 de julio de 2012

Cambiar brillo de pantalla de laptop HP G6 en Debian

Si instalaste Debían en tu laptop hp y os estais quedando ciego porque el brillo de pantalla es muy alto y además no le funciona el wifi, el teclado especial ni casi nada, entonces la solución es simple:

 Instala un kernel más nuevo, puesto que el que trae Debian por defecto (2.6) no tiene soporte para el hardware muy reciente de estas laptops. Para ello puedes elegir dos caminos
  1. Instalar el kernel (3.3.7) actualizado, compilado y empaquetado compilado por mi:
  • Descargalo desde alguno de estos links: Link1 o Link2
  • Descomprimelo en donde quieras.
  • Luego abres la terminal y te metes en la ruta donde están los ficheros .deb que descomprimiste
  • Allí adentro escribes: dpkg -i *.deb
  • Reinicias la maquina y en el grub elijes la nueva entrada con el kernel más nuevo. LISTO
  • NOTA: Si la pantalla está en negro solo debéis presionar la tecla de subir brillo (F3)

      2.  El segundo camino es que USTED mismo compile el kernel.  Pero solo debe tener en cuenta que hay que compilarlo para core2, activar todas las opciones para el soporte de los procesadores sandy bridge y marcar el soporte nativo de la interfaz wifi.

Procedimiento para configurar y compilar kernel (en este caso el 3.3.5).

1) Obtener los fuentes. Descarga desde aquí la versión que quieras.

2) Instalar paquetes para compilar:
#apt-get install make fakeroot libncurses5-dev gcc kernel-package initramfs-tools libc6-dev libqt4-dev

3) Copiar y descomprimir los fuentes del kernel a la carpeta /usr/src 
#cp linux-3.3.5.tar.bz2 /usr/src

// Nos cambiamos por el terminal a la carpeta /usr/src
#cd /usr/src
// Se descomprimen los fuentes  en la carpeta /usr/src
#bzip2 -df linux-3.3.5.tar.bz2
// se genera un archivo llamado  linux-3.3.5.tar
#tar -xf  linux-3.3.5.tar
// se genera una carpeta llamada  linux-3.3.5

4) Configuración de los fuentes (configuración para la laptop): para ello se realiza el siguiente procedimiento
- Nos cambiamos al dir que contiene los fuentes (linux-3.3.5)
- Luego ejecutamos como root el comando :
   #make xconfig
  // Configuración wifi:{
       Ingrese a Edit = > Find
       Escriba en el cuadro de busqueda: "rtl" sin las comillas.
       Active la opción que indique el modelo de su interfaz wifi. La mia es RTL8188CE. Si no te aparece marca todas las opciones
     

 }
// Configuración de video:{
      Escribe core2 y marca la opción.
      Escribe bridge y marca Intel Sandy-Bridge Integrated MC
} 


Se pueden hacer otras configuraciones. Pero con estas bastan.

Luego de configurar los fuentes se genera un archivo de extensión .config en la carpeta donde estan los fuentes.

5) El paso siguiente es compilar los fuentes, lo cual realizaremos ejecutando el siguiente comando:
#fakeroot make-kpkg --initrd kernel-image kernel-headers

6) Luego de que finalize la compilacion(si no hay errores), se generan 2 archivos .deb en el directorio
superior que se llaman:
linux-image-3.3.5-xxxx.deb y linux-headers-3.3.5-xxxx.deb

para instalarlos debe usar el comando dpkg.
#dpkg -i *.deb

9) Finalmente nos queda reiniciar el pc y seleccionar en
el menu del gestor de arranque el nuevo kernel.

Si te sigue sin funcionar entonces que debes incluir más módulos en la etapa de configuración del kernel.

El modelo de mi laptop (donde funciona correctamente) es  Hp Pavilion g6 1c791r

A disfrutar de Debian 8·)


lunes, 16 de julio de 2012

Gtkmm y Eclipse CDT en linux

Aquí mostraré los pasos con los que logré configurar eclipse para poder programar con gtkmm en GNU/Linux = > los windowseros que se jodan ;·)

Antes que nada necesita tener instalado gtkmm y pkg-config. Para ello ve a Synaptic y busca los siguientes paquetes:
  • "libgtkmm-{version}-dev". En mi caso la versión es "2.4"  es decir: "libgtkmm-2.4-dev". Si aparece la versión 3.x el proceso es el mismo. 

  •   pkg-config


domingo, 10 de junio de 2012

Cambiar el color de fondo de la linea actual en Eclipse

Les cuento que luego de usar KDE por más de dos años he retornado a mi antigua y fea interfaz gnome.
Una de las primeras cosas que hice fue cambiar la apariencia por defecto del escritorio y me he decantado por darklooks.

El problema surgió cuando al probar Eclipse la luz de fondo de la linea actual ("current line higthlight") no me dejaba apreciar bien el código.


Luego de un rato buscando, sin conseguir nada, me desesperé y el niño aleman loco me invadió. Empecé a buscar en las opciones y la conseguí. Esta es la solución:

Entran en Windows-> Preferences->General->Text Editor. All'i encontraran el campo "current line higthlight". Lo cambian a su gusto y a disfrutar 8)