sábado, 7 de mayo de 2011

Alternativa a BarTab para Firefox 4

BarTab es una extensión para Firefox muy útil.
Lo que hace la extensión es permitir que no se carguen automáticamente todas las pestañas abiertas al iniciar Firefox, sino sólo la que tiene el foco. De esta forma se acelera muchísimo el arranque del programa en los casos donde se tienen muchas pestañas de la sesión anterior. Luego, al ir a tal pestaña se carga automáticamente.
La cosa está en que esta extensión no es compatible todavía con el reciente Firefox 4. Así que les dejo una alternativa que tiene exactamente la misma función, y sin necesidad de instalar nada.
Simplemente escriban en la barra de direcciones de Firefox:

about:config

Busquen la clave

browser.sessionstore.max_concurrent_tabs

y cambien su valor a 0 (por defecto tiene 3).
Y listo. De esta forma cada pestaña sólo se cargará cuando tenga el foco.

miércoles, 4 de mayo de 2011

Conexión a Internet anda lenta con Ubuntu 11.04

Ahora que ya salió el nuevo Ubuntu 11.04 Natty Narwhal, lo bajé e instalé para ver qué tal. El problema que tuve, fue que una vez instalado, Internet empezó a andar extremadamente mal...
Las descargas eran a una velocidad de más o menos 200 bytes (sí, bytes) por segundo, y para iniciar sesión en Empathy tenía que hacer varios intentos hasta que a veces lograba entrar.
Mi placa de red inalámbrica es una Encore ENUWI-N3 de tipo USB. Si antes andaba bien y ahora no, entonces el nuevo Ubuntu algo cambió...
El problema está en que el Ubuntu 11.04 me asignó como drivers por defecto de la placa inalámbrica el rt2800usb, y por lo visto no funciona muy bien con esta placa (tiene chip Ralink RT2870).
La solución fue bloquear este driver, para de esta forma utilizar otro que sí funcione como antes.
Para hacer esto, tienen que agregar el módulo rt2800usb a la blacklist ("lista negra") editando el archivo /etc/modprobe.d/blacklist.conf con cualquier editor de texto en modo superusuario (root). Por ejemplo escribiendo en consola:

sudo gedit /etc/modprobe.d/blacklist.conf

En el archivo solamente agregan la siguiente línea al final:

blacklist rt2800usb

Reinician y listo, Internet como la gente.

domingo, 1 de mayo de 2011

Consola con colores en C++

Tal vez se habrán dado cuenta que mostrar un mensaje en color en consola, no es algo trivial en C++... C++ no incluye funciones propias para hacer esto, ya que "colorear" la consola es algo dependiente del sistema operativo. Tampoco hay alguna manera relativamente sencilla, que podamos decir "bueno, haciendo esto tengo las letras en colores"... Por ejemplo, en Windows esto se logra sólo con llamadas a la API de Windows (usando arreglos de memoria que contienen atributos de color y caracteres, llamados "Console Screen Buffers"). En Linux, existen los llamados códigos ANSI, que son una secuencia de caracteres ASCII que actúan como funciones para poder cambiar estos atributos.
Para simplicarles las cosas, hice esta pequeña librería (basándome en código que encontré por Internet) que engloba y unifica estas diferencias, de tal manera de hacerla independiente de la plataforma con tal de poder incluirla en programas de Windows o Linux con un uso común.
Es un simple archivo .h, que define los colores para pasárselos al cout de la siguiente forma:

cout<<color<<"texto de prueba";

Los colores disponibles son los siguientes:
black (negro), red (rojo), green (verde), yellow (amarillo), blue (azul), magenta (magenta), cyan (cian), white (blanco), normal (volver al color por defecto), blackb (negro en negrita), redb (rojo en negrita), greenb (verde en negrita), yellowb (amarillo en negrita), blueb (azul en negrita), magentab (magenta en negrita), cyanb (cian en negrita), whiteb (blanco en negrita), normalb (volver al color por defecto en negrita).

Es decir que si por ejemplo queremos mostrar un mensaje como el siguiente:

Mensaje con muchos colores

se debería escribir:

cout<<red<<"Mensaje "<<yellow<<"con "<<green<<"muchos "<<blueb<<"colores"<<normal;

Como en Windows no se puede especificar un atributo "negrita" para la consola, las versiones en negrita de los colores tienen una intensidad diferente de las versiones normales. En las siguientes imágenes se ven las diferencias entre Windows y Linux (código de ejemplo):

consola de Windows
consola de Linux


Para compilar, hay que definir la macro WIN si están en Windows, o LINUX si están en Linux. De esta forma se usa el código correspondiente dependiendo de la plataforma elegida.
Esto se hace con la opción -D de g++, por ejemplo:

g++ -o colores colores.cpp -DLINUX

Por ahora como se habrán dado cuenta sólo permite cambiar el color de frente y no el de fondo. A lo mejor en algún momento la amplíe incluyéndole esta funcionalidad.

La pueden descargar de acá: concolor.h