jueves 25 de septiembre de 2008

Transmission 1.33

Desde ya hace mucho que empleo transmission (0.8x en esas fechas) para bajar torrents. La gracia de este cliente es que es rápido y personalizable. En este release (1.33) me encontré con la grata novedad de que posee una interfaz web, que permite ejecutar las mismas labores que nos entrega la GUI de escritorio, es decir, administración total remota.

Para habilitarla:

Si agregan la ip 0.0.0.0 dejarán acceso desde cualquier lado.
Accedemos al servidor mediante la IP local o la IP pública.
Podemos administrar totalmente nuestros torrents, incluso agregar torrents en forma remota.

lunes 22 de septiembre de 2008

Cortado, el applet Java que reproduce ogg/theora

En la actualidad, existen muchas opciones para reproducir audio/video en la web. La mayor parte de ellas son aplicaciones Adobe Flash que reproducen audio mp3 y videos flv. Esta solución es buena, pero sin duda el tener que recurrir a un plugin privativo (Adobe Flash Player) para reproducir un formato de audio privativo no es la mejor solución.
Ante ésto encontré Cortado, un applet java que posee soporte para reproducir audio en ogg, video en theora, ya sea desde un archivo o como stream (flujo).
Lamentablemente este gran applet está algo abandonado en el sitio de Fluendo y existen tantos branch que es difícil seguirle la pista a la última versión. De todos los branch, el que está empleando (y manteniendo) wikipedia es el mejor, incluso GNU lo emplea para embeber video en su sitio.
La gracia de este applet es que está liberado bajo GPL, y funciona bien con OpenJDK (IcedTea).
A pesar de ser una buena solución, tiene los días contados, HTML5 incorpora dos nuevos tags para embeber audio y video. Firefox 3.1 traerá soporte para este nuevo tag, probé el preBeta y funciona maravillosamente.

domingo 21 de septiembre de 2008

GCJ Web Browser Plugin (using IcedTea)

Hace tiempo que no necesitaba emplear el plugin de Java. En mi caso, solo algunos applets funcionaban, ésto hasta que dí con la causa.

Por defecto, el plugin (GCJ Web Browser usando IcedTea) no carga contenidos que estén fuera del dominio de la página web que embebe al plugin.
Por ejemplo, si la página es http://nada.cl, el applet solo cargará contenidos que estén en el dominio http://nada.cl. Si el applet intenta cargar un video que esté en otro dominio no o cargará.
Para solucionar este pequeño pero molesto problema se debe:
crear en el home un archivo llamado .java.policy con ésto en su interior:

grant{
permission java.net.SocketPermission "*","connect,accept,resolve";
};

Con ésto se garantiza que cargue los contenidos independiente del origen. No da acceso a los archivos locales, así que no te preocupes.
Puedes probar intentando ver este video del sitio de gnu.org.

Haciendo mapping de teclas (teclado y control remoto)

Muchas veces nos hemos encontrado con que nuestro teclado posee 200 teclas y el sistema solo "reconoce" 105, es decir, tenemos menos teclas mapeadas que las deseadas.

Partamos por lo teórico, una tecla posee un identificador único que es capturado por el kernel, este identificador (raw scan code) hasta este punto no nos sirve de nada. Debemos asignar un keycode libre a este raw scan code, con ello ya podemos utilizar cualquier aplicación que permita asignar teclas a una función. En este punto la tecla que posee un keycode puede ser "leída" por las aplicaciones del sistema.

Con lo teórico sobre la mesa, pasamos a lo práctico, en este punto sólo consideraremos las teclas que no responden ante nada (teclas que solo envían raw scan code al kernel).

  1. Determinando el raw code:
    1. necesitamos abrir una consola y ejecutar como root:
      tail /var/log/messages -f

    2. una vez que la consola deje de arrojar datos debemos presionar la tecla (del teclado o control remoto) que no hace nada. En la consola debería aparecer algo como ésto:
      atkbd.c: Unknown key released (translated set 2, code 0x96 on isa0060/serio0).
      atkbd.c: Use 'setkeycodes e016 ' to make it known.
    3. Una vez que tenemos el raw scan code (e016 en el ejemplo) debemos asignarles un keycode libre. Para ello debemos ingresar en el archivo /etc/rc.local lo siguiente (e016 es el raw scan code y 150 es el keycode obtenido de pasar 16 de hexadecimal a decimal y sumando 128).
      setkeycodes e016 150
    4. Esto permitirá que cada vez que el sistema bootee se asocie el keycode con el raw.
  2. Haciendo el mapping:
    1. Ahora que las teclas ya son legibles para el sistema debemos asignarles alguna función. Necesitamos crear en nuestro home un archivo llamado .Xmodmap en que asociamos el keycode con una función. Tiene la siguiente forma
      keycode 222 = XF86PowerOff
      keycode 223 = XF86Sleep
      keycode 236 = XF86Mail
    2. Puedes obtener una lista completa de funciones desde este archivo: /usr/share/X11/XKeysymDB
    3. Luego debemos hacer que se cargue este nuevo mapping, para ello debemos agregar ésta línea al fichero .xsession
      /usr/bin/xmodmap $HOME/.Xmodmap
    4. Con esto, cada vez que cargue nuestra sesión X se cargará el mapping que acabamos de configurar.

Este tipo es realmente un mono!!

No puedo creer que este tipo (quizá el eslabón perdido) sea el CEO de algo. Sin duda alguna debe tener algún daño cerebral para estar siempre diciendo "Yo amo a esta compañía". Por suerte no trabajo para esa empresa. Las malas lenguas indican que el personaje que es el jefe de la serie The Office está basada en este tipo.

Les dejo algunas de sus vergüenzas:






domingo 7 de septiembre de 2008

Gracias a mis visitas

En los últimos 5 meses, este blog ha recibido 2273 visitas. Les doy las gracias a todos quienes han hecho ésto posible.

sábado 6 de septiembre de 2008

Configurar un Bridge para las máquinas virtuales.

En post de virtualización express indiqué que en una de las etapas debemos seleccionar el tipo de red entre "Red Virtual" o "Dispositivo compartido".
La diferencia entre ellos es que "Red Virtual" genera una red y a cada máquina virtual en ella le asigna una IP de dicha red haciendo NAT hacia la red doméstica. "Dispositivo compartido" por otra parte no deja la tarjeta de red de la máquina virtual "conectada directamente" a tu red doméstica (la IP es asignada por tu router).
Puede ser que quieras utilizar la opción de "Dispositivo compartido" pero que el menú no te muestre ninguno. Para ello deberás generar un bridge.

  1. Desactivemos NetworkManager
    /etc/init.d/NetworkManager stop
    chkconfig NetworkManager off
  2. Creamos los scripts de red
    #script para eth0: /etc/sysconfig/network-scripts/ifcfg-eth0
    DEVICE=eth0
    HWADDR=00:16:76:D6:C9:45 #MAC de eth0
    ONBOOT=yes
    BRIDGE=br0



    #script para el bridge br0: /etc/sysconfig/network-scripts/ifcfg-br0
    DEVICE=br0
    TYPE=Bridge
    BOOTPROTO=dhcp
    ONBOOT=yes

  3. Configuramos iptables para que haga forward de todo el tráfico a br0
    echo "-I FORWARD -m physdev --physdev-is-bridged -j ACCEPT" > /etc/sysconfig/iptables-forward-bridged
    lokkit --custom-rules=ipv4:filter:/etc/sysconfig/iptables-forward-bridged
  4. Reiniciamos los servicios
    /etc/init.d/network restart
    /etc/init.d/libvirtd restart
Ahora ya podemos configurar nuestra máquina para que use el bridge. Puede que sea necesario crear la máquina como root para que el bridge esté disponible.

UPDATE:
Para que lo anterior funcione bien, iptables debe desactivarse antes de realizar las acciones antes señaladas. Para apagar iptables debemos ejecutar:
/etc/init.d/iptables stop

jueves 4 de septiembre de 2008

Comparte tu conexión usando linux

Caso:
Necesitamos proporcionar internet a dos equipos pero solo hay un punto de red.
Necesitamos:
Uno de los PC con dos tarjetas (eth0 y eth1).

Qué hacemos?
  1. Conectamos el punto de red (que nos da internet) al eth0 (wlan0 si es Wifi)
  2. Conectamos el cable al segundo PC mediante la eth1
  3. Asignamos los siguientes datos al eth1:
    IP: 192.168.0.1
    Netmask: 255.255.255.0
    ifconfig eth1 192.168.0.1 netmask 255.255.255.0 up


  4. Activamos el forward
    echo 1 >/proc/sys/net/ipv4/ip_forward


  5. Configuramos iptables:
    iptables -t nat -A POSTROUTING -o eth0 -j MASQUERADE
    iptables -A INPUT -s 192.168.0.0/24 -i eth1 -j ACCEPT


  6. En el segundo PC configuramos la tarjeta de red con:
    IP: 192.168.0.X con X entre 2 y 254
    Netmask: 255.255.255.0
    Gateway: 192.168.0.1
    DNS: ip de tu DNS favorito.
    Por consola:
    ifconfig eth0 192.168.0.X netmask 255.255.255.0 up
    echo 'nameserver ip_del_dns' > /etc/resolv.conf

miércoles 3 de septiembre de 2008

Virtualizando con KVM en Fedora 9

Nunca está de más poder crear máquinas virtuales en nuestro sistema, ya sea para hacer pruebas, levantar servidores o correr un sistema operativo alternativo.
En este caso crearemos una máquina virtual mediante virt-manager usando KVM, quien permite crear máquinas virtuales con Linux, Windows y otros.

Necesitamos instalar kvm y virt-manager:
yum install kvm virt-manager


Luego ejecutamos virt-manager (Aplicaciones -> Herramientas del Sistema -> Administrador de máquina virtual). No es necesario tener privilegios de root.

Presionamos el botón Nuevo para que el asistente se abra:
Ingresamos el nombre del sistema que estamos virtualizando.
Seleccionamos el hipervisor, en este caso KVM (puede ser QEMU o XEN si están instalados) y luego la arquitectura.
Luego debemos indicar desde donde instalaremos, puede ser desde un ISO o desde un CD/DVD, mediante HTTP, FTP, NFS o con PXE Netboot. Debemos indicar acá que tipo de OS instalaremos.
En este caso indiqué que se instalará desde CD/DVD/ISO. Debemos indicar desde donde se leerá, path del ISO o unidad de CD/DVD
Indicamos el lugar de instalación, puede ser una partición o un archivo.
Indicamos el tipo de red que emplearemos, puede ser con red vurtual, compartido (visible desde otros computadores)
Finalmente indicamos la cantidad de RAM y el número de CPUs de ser posible.
Confirmamos los datos:
En este punto se inicia una ventana con la máquina virtual, se deben seguir los pasos de instalación típicos de cada OS.

Luego de ello aparecerá la máquina en el listado.

gtk.Label con Pango

Este tips es para quienes necesitan aplicar atributos de tamaño, color, estilo, etc. a una interfaz en PyGTK.
Esto nos permite declarar el texto del gtk.Label como texto plano, sin incluir etiquetas pango.
A continuación un ejemplo:
#!/usr/bin/env python
# -*- coding: utf-8 -*-

import gtk
import pango

class Gui:
    def __init__(self):
        #Creo una lista de atributos
        self.atributos = pango.AttrList()
        #inserto el tamaño (tamaño_en_puntos * 1000)
        #el 0,-1 indica que se aplica a todo el texto del label.
        self.atributos.insert(pango.AttrSize(30000,0,-1))
        #inserto el grosor
        #200=ultra-light, 300=light, 400=normal, 700=bold, 800=ultra-bold, 900=heavy
        self.atributos.insert(pango.AttrWeight(700,0,-1))
        #Genero la ventana
        self.window = gtk.Window()
        #asigno un título a la ventana
        self.window.set_title("Label con Pango")
        #defino el tamaño de la ventana
        self.window.set_default_size(180, 240)
        #conecto el evento "destroy" con la función self.quit.
        self.window.connect("destroy", self.quit)

        #creo el Label
        self.etiq = gtk.Label('hola')
        #aplico los atributos al label.
        self.etiq.set_attributes(self.atributos)
        #agrego el label a la ventana
        self.window.add(self.etiq)
        #cambio todo a visible
        self.window.show_all()
        #Corro el main loop.
        gtk.main()


    def quit(self, data):
        '''Finaliza el main loop'''
        gtk.main_quit()

#Creo instancia del objeto
Gui()

Pueden encontrar el listado completo de atributos en la api de pygtk.