sábado, 26 de enero de 2013

Resaltado en Eclipse con con tema oscuro

Cuando instalas un tema oscuro en Eclipse es normal que ocurra esto:


Puedes notar como el texto es resaltado por un color que hace imposible leer dicho texto.

Para evitar esto ve a General -> Editors -> Test Editors -> Annotations

"C/C++ occurrences" es el valor que hay que modificar.



Yo le coloqué un color rojo y quedó así


Lo posteo porque me costó bastante conseguir la opción.

domingo, 20 de enero de 2013

Instalar AMD Catalyst en Fedora 18

Por tristeza el nuevo driver 13.1 oficial de AMD  no es compatible (sin parches) con fedora 18 y su kernel 3.6 | 3.7. Por dicha razón a muchos usuarios de tarjetas gráficas AMD no nos levanta la interfaz luego de instalar F18. Aquí enseñaré a instalar una versión "funcional del driver" para usar hasta que AMD libere una nueva versión compatible con el kernel>=3.6.

Antes que nada, si su interfaz no arranca, entonces debe quitar su tarjeta gráfica e iniciar el sistema sin ella. Si no lo desea hacer, por razones de garantía o no se que, entonces puede iniciar el sistema en modo texto, o abrir una tty (ctrl+alt+F3) antes de que se cuelgue el sistema (en mi caso no me deja hacer ni pio luego que carga el logo de fedora).


1-) Instalar los Development Tools y los headers y devels del kernel:
       yum groupinstall "Development Tools" 
       yum update kernel
       yum install kernel-hea* kernel-dev*


2-) Agregar los repos de rpmfusion en caso de no tenerlos:
    rpm -ivh http://download1.rpmfusion.org/free/fedora/rpmfusion-free-release-18.noarch.rpm http://download1.rpmfusion.org/nonfree/fedora/rpmfusion-nonfree-release-18.noarch.rpm

3-) Luego instalamos el akmod del catalyst
    yum -y install akmod-catal*

4-) Ejecutamos este comando para que el akmod corra
new-kernel-pkg --kernel-args=nomodeset --mkinitrd --dracut --update $(rpm -q --queryformat="%{version}-%{release}.%{arch}\n" kernel | tail -n 1)

ACTUALIZADO (27-01-13): rpmfusion.org ha liberado un nuevo paquete que hace que los pasos siguientes no sean necesarios

5-) Luego
aticonfig --initial -f

6-) Reinicia el pc e insertamos la tarjeta gráfica (en caso de que la hallamos quitado)

Veras que hay un horrible label en la parte de abajo que dice "Testing use only"


amd testing use only
AMD Testing use only

Para eliminarlo modifica borra el contenido del fichero 
/etc/ati/signature (UNSIGNED) y sustitullelo por 


9777c589791007f4aeef06c922ad54a2:ae59f5b9572136d99fdd36f0109d358fa643f2bd4a2644d9efbb4fe91a9f6590a145:f612f0b01f2565cd9bd834f8119b309bae11a1ed4a2661c49fdf3fad11986cc4f641f1ba1f2265909a8e34ff1699309bf211a7eb4d7662cd9f8e3faf14986d92f646f1bc

Podemos abrir el fichero con

nano /etc/ati/signature


7-) Reinicia de nuevo y debería ir perfecto. Ahora a esperar a que AMD publique una nueva versión.

Aqui puede descargar el script completo.


Probado con una XFX Radeon HD 6870 con Fedora 18 x86_64 y KDE

sábado, 12 de enero de 2013

Código fuente formateado en Blogger sin instalar nada

Este post es más un recordatorio personal XD.

Lo mejor que conseguí en la web para formatear código fuente: está en este link:

http://hilite.me/

Sin instalar nada, solo pegas, formateas y cópias

miércoles, 2 de enero de 2013

Crear estructuras en Okteta

Síntesis rápida
Necesita crear dos ficheros en el directorio /home/NOMBREDEUSUARIO/.kde/share/apps/okteta/structures/NOMBRE_X

- Un NOMBRE_X.osd donde guardará toda la información de la estructura
- Un NOMBRE_X.desktop para la presentación visual (No es tan importante).
(NOMBRE_X Es cualquier nombre que usted le quiera dar)
Ejemplo de como puede ser la estructura del fichero NOMBRE_X.osd: 

<?xml version="1.0" encoding="UTF-8"?>
<data>
     <struct name="NombreDeLaEstructura">
<primitive name="UnChar" type="Char"/>
<primitive name="UnEntero" type="Int32"/>
      </struct>
</data>

La anterior es una estructura que tiene dos campos primitivos: un carácter y un entero, que en C/C++ equivaldría a algo así:

struct NombreDeLaEstructura{
   char UnChar;
   int UnEntero;
}

El fichero NOMBRE_X.desktop puede ser algo así:

[Desktop Entry]
Encoding=UTF-8
Icon=code-context
Type=Service
ServiceTypes=KPluginInfo

Name[es]=Prueba

X-KDE-PluginInfo-Author=Hector Oliveros
X-KDE-PluginInfo-Email=hector.oliveros.leon@gmail.com
X-KDE-PluginInfo-Name=Prueba
X-KDE-PluginInfo-Version=1.0
X-KDE-PluginInfo-Website=http://www.plugin.org/
X-KDE-PluginInfo-Category=structure
X-KDE-PluginInfo-License=LGPL
X-KDE-PluginInfo-EnabledByDefault=true


Luego lo guarda y ya puede agregar la estructura 


Ejemplo:

Imaginemos que queremos analizar un fichero binario que contenga, internamente, varias de estas estructuras

struct BCP{ 
  int idControl;
  int pid;  
  pid_t ppid;  
  int gradoDePrioridad;  
  int consumoAcumuladoDeCPU;  
  int rafagasDeEjecucion[20]; 
 
  struct Bloqueo{    
    int idControlProceso;     
    uint tiempoDeBloqueo;    
    int idRecurso;    
  } bloqueos[20];    
  
  int instanteDeLlegada;

  enum TipoDeProceso{
    BATCH  = 0,
    TIEMPO_REAL  = 1,
    INTERACTIVOS = 2
  } tipoDeProceso;  
};


En este caso el fichero .osd sería algo así:


<?xml version="1.0" encoding="UTF-8" ?>
<data>  
  <enumDef name="Tipo_De_Proceso" type="Int32">
      <entry name="BATCH"        value="0" />
      <entry name="TIEMPO_REAL"  value="1" />
      <entry name="INTERACTIVOS" value="2" />      
   </enumDef>        
  <struct name="BCP">
    <primitive name="IDControl" type="Int32" />    
    <primitive name="PID" type="Int32" />    
    <primitive name="PPID" type="Int32" />        
    <primitive name="GradoDePrioridad" type="Int32" />    
    <primitive name="ConsumoAcumuladoDeCpu" type="Int32" />    
    <array name="RafagasDeEjecucion" length="20">
      <primitive type="Int32" />
    </array>    
    <array name="Bloqueos" length="20">
      <struct name="Bloqueo">
 <primitive name="IDControl" type="Int32" />
 <primitive name="TiempodeBloqueo" type="Int32" />
 <primitive name="IDRecurso" type="Int32" />
      </struct> 
    </array>    
    <primitive name="InstanteDeLlegada" type="Int32" />     
    <enum name="TipoDeProceso" enum="Tipo_De_Proceso" type="Int32" />    
  </struct> 
</data>



Aquí puede descargar este ejemplo completo. 

Solo debe pegarlo en la ruta: 
/home/NOMBREDEUSUARIO/.kde/share/apps/okteta/structures/


martes, 1 de enero de 2013

Automontar particiones en Fedora

Abre el KDE partitionmanager. Si no lo tienes instálelo con yum install kde-partitionmanager.

Luego lo corre y dando clic al botón secundario sobre la partición valla a las propiedades de la partición a la cual desea seleccionar el automontado.

Allí puede ver el UUID de la partición





Luego, desde el terminal modifica el fichero fstab.
sudo nano /etc/fstab

La estructura de las entradas es la siguiente:
UUID=uuid PuntoDeMontaje TipoDeSistemaDeFicheros fs_mntops OrdenDeVolcado OrdenDeCheckeo



En OrdenDeVolcado y OrdenDeCheckeo generalmente se colocan los mismos números pero debemos colocar un numero distinto y mayor que cualquiera de los que están en los demás campos del fichero /etc/fstab.




El significado de cada uno de los campos los puedes ver en el manual de fstab escribiendo en consola:
man fstab.

Por ejemplo en mi caso: 

UUID=a4a6a4f8-7342-4657-a7a2-4592eb98fb64 /media/Disco ext4 defaults  2 2

Guarda, reinicia y listo.

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.