30 marzo 2007

C-style en bash

Bash, como cualquier lenguaje, tiene una sintaxis propia. Eso lo sabe todo el mundo. Lo que no todo el mundo sabe es que, además, puede usar la sintaxis de C haciendo uso de los paréntesis dobles. Unos ejemplos.

Manejo de variables

Bash es muy flexible en cuanto a los tipos de variables, ya que el declararlas o no queda a elección del programador. En caso de no declararlas, una variable admite cualquier tipo. De hecho, si hacemos

a=3
a=$a+1


la variable a tomará el valor de string "3+1" (a no ser que hayamos declarado a como entero previamente). La forma correcta de hacerlo sería

let a=$a+1

en cuyo caso a sí pasaría a valer 4. Pero podemos echar mano del C-style:

((a += 1))

o bien

((a++))

Bucles y condicionales

Y esta parte es mucho más interesante, porque de esta forma podemos hacer uso de los potentes bucles de C en bash. Algunos ejemplos:

while ((a > 3 || b != 0))

if ((a > 3 && b == 5))

Admite también el uso del operador ternario de C:

((a!=b?3:11))

y, ya la reostia en salsa, el operador coma:

for ((a=1, b=1; a <= LIMITE ; a++, b++))

Gracias a kumo por (de nuevo) ponerme sobre la pista.

28 marzo 2007

Defina Linux

Leyendo en NeoFronteras una interesantísima noticia sobre Scientific Linux, una distro desarrollada en colaboración entre el Fermilab, el CERN y otros laboratorios y universidades del mundo, me he encontrado un párrafo que hace que el ego y el "orgullo patrio" de cualquier linuxero suba por las nubes:

Linux corre en diversos microprocesadores, es muy eficiente y tiene un excelente diseño. Es multitarea, multiusuario, multiplataforma y multiprocesador; en las plataformas Intel corre en modo protegido; protege la memoria para que un programa no pueda hacer caer al resto del sistema; carga sólo las partes de un programa que se usan; comparte la memoria entre programas aumentando la velocidad y disminuyendo el uso de memoria; usa un sistema de memoria virtual por páginas; utiliza toda la memoria libre para caché; permite usar bibliotecas enlazadas tanto estática como dinámicamente; se distribuye con código fuente; usa hasta 64 consolas virtuales; tiene un sistema de archivos avanzado pero puede usar los de los otros sistemas; y soporta redes tanto en TCP/IP como en otros protocolos. Además está prácticamente libre de virus.

Pues sí, Linux es así :)

27 marzo 2007

Un Automatix para Debian Etch

Seguro que conoceis Automatix. Gracias a La otra bola de cristal me entero de que alguien ha escrito algo del estilo para Debian Etch.

Lo que más he odiado siempre de instalar un nuevo sistema es todo el rollo de las "instalaciones post-instalación". Me alegra que alguien se haya tomado la molestia de ahorrar todo ese tiempo a mucha gente.

24 marzo 2007

Aprendiendo Python



Vale, sí, muy potente como lenguaje de script y un código muy eficiente. Pero donde esté la elegancia de C...

En fin, voy a ver si me busco un pet project.

Beryl y Compiz se vuelven a unir

Y visto a posteriori era lógico que sucediera. Desde luego no se ha tratado de un fork al uso. No han habido dos ramas experimentando nuevas cosas, desarrollando features distintas. Al revés, el desarrollo de Compiz y de Beryl había seguido dos líneas paralelas. cojin lo explica perfectamente en su comentario en Menéame.

En el anuncio oficial ya dicen que no se conservará ninguno de los dos nombres, sino que se usará uno nuevo. Lo que (mode ironic on) vendrá de perlas a toda la gente que recién llega a GNU/Linux y no sabe distinguir entre un entorno de escritorio y un manejador de ventanas. Un nombre más a la lista.

Al margen de eso, creo que la unión puede ser muy beneficiosa para el usuario, siempre y cuando se conserven y potencien las mejores características de uno y otro, a saber (y me remito de nuevo al comentario de cojin): estabilidad por un lado y compatibilidad y rapidez de desarrollo por el otro.

21 marzo 2007

Devilspie: controlando las ventanas

Es difícil traducir la expresión window-matching utility, pero el concepto es sencillo: busca una ventana, y haz con ella lo que yo te diga.

Eso es Devil's Pie, una utilidad que analiza las ventanas que se crean en el escritorio, y si coinciden con unos criterios estipulados en la configuración ejecuta acciones sobre ellas: minimiza, envía a un workspace determinado, esconde su decoración... lo que queráis. Su flexibilidad es sencillamente increíble.

Devilspie se configura mediante archivos *.ds presentes en el directorio $HOME/.devilspie. Archivos que, por supuesto, hacemos a nuestro gusto, para que cada ventana en nuestro escritorio se comporte exactamente como queramos.

La configuración no es difícil, aunque tampoco intuitiva. Los archivos *.ds se componen de condicionales, booleanos y acciones. En foosel.net hay una descripción detallada de cada uno de ellos, con ejemplos de uso. Está en inglés, pero es sencillo, y los ejemplos facilitan la cosa aún más.

Como pequeño ejemplo de lo que devilspie puede hacer, os pongo alguno de archivos de configuración que uso:

(if (matches (window_name) "Eterm") (begin (pin) (undecorate) (skip_pager) (skip_tasklist) (below)))

Lo que viene a significar que si el nombre de la ventana coincide con Eterm se envíe a todos los workspaces (pin), no aparezca en el paginador (skip_pager), no aparezca en la lista de ventanas (skip_tasklist) y quede permanentemente bajo las demás ventanas (below). El resultado (combinado con una configuración específica de Eterm) lo podeis ver en esta captura de pantalla.

Otro ejemplo, más sencillo:

(if (is (window_name) "Akregator") (minimize))

Osea, si el nombre de la ventana es Akregator, se ejecute minimizada al inicio. Comodidad más que nada.

Las posibilidades son enormes: conversaciones de Gaim que se envíen automáticamente al escritorio 2, aplicaciones que permanezcan siempre sobre el resto de ventanas, programas que se abran siempre con un tamaño de ventana y una posición determinada... En una palabra: control total sobre las ventanas.

20 marzo 2007

Entrevista con Ian Murdock

Ian MurdockLinux Format ha publicado una entrevista con Ian Murdock, el fundador del Proyecto Debian (sí, el ian en Debian).

En ella habla de cosas como el modo en que afectan al Proyecto los retrasos en las releases, la necesidad de un DPL fuerte y sus preocupaciones con el futuro del proyecto Ubuntu en cuanto a la compatibilidad con Debian.

Nuevo logo de KDE

Nuevo diseño, para "hacer juego" con el nuevo set de iconos predeterminados en KDE4, Oxygen:

Nuevo logo de KDE

Colabora!

Seguro que muchos, como usuarios de software libre, habeis sentido el impulso/deseo/necesidad de, de un modo u otro, colaborar en su desarrollo. Sí, hablo de esas ocasiones en que os sentís frustrados por no ser expertos programadores o por no tener conocimientos suficientes para crear documentación de calidad. Seguro que sabeis de lo que hablo. Uno de esos impulsos fue precisamente el que me llevó a comenzar este blog...

Pero no hace falta tanto para colaborar con el desarrollo del software libre. Hoy leo en Kernel Source que el grupo de desarrollo de Konsole propone una encuesta para que los desarrolladores conozcan cosas como qué características nos parecen más útiles, cuáles nos gustarían ver en el Konsole de KDE4, cuáles nos parecen más fáciles/difíciles de configurar, etc. Está en inglés, pero vamos, que el nivel es muy básico.

No hay excusas: Colabora!!!

16 marzo 2007

Un agujero en OpenBSD siempre es noticia

Y más uno de este calibre. Pero empecemos por el principio.

OpenBSD es un sistema operativo de tipo UNIX basado en 4.4BSD, creado en un principio como un fork de NetBSD. La característica más significativa de este sistema es su seguridad. No en vano la implementación de SSH usada en todos los sistemas *NIX es OpenSSH. Eso lo dice todo. De hecho, en su web se jactan de haber tenido ¡Sólo un agujero de seguridad remoto en la instalación predeterminada en más de 8 años!. Tendrán que ser dos a partir de ahora.

Y es que la implementación del protocolo IPv6 de OpenSSH adolece de una vulnerabilidad (calificada por Secunia de altamente crítica) de tipo BoF (buffer overflow). Con todo lo que ello conlleva. Y es que:


  1. Afecta a la instalación por defecto, ya que IPv6 está incluido en ella

  2. Es explotable de forma remota

  3. Permite la ejecución de código arbitrario en el contexto del kernel

Y eso en un sistema usado como firewall, IDS y otras aplicaciones de seguridad.

La buena noticia: OpenBSD ha publicado ya un parche que soluciona el problema, como no podía ser de otra manera.

Y sí, hay exploit, publicado por el propio descubridor del bug, Alfredo Ortega, de Code Security.

Fuente: El blog de la tecnología

13 marzo 2007

El efecto Menéame



Gracias a todos los que me votásteis :)

11 marzo 2007

Controlando Linux con el mando de la Wii

kumo me ha puesto sobre la pista, y como buen geek no he podido evitarlo: había que investigar :)

De momento la cosa está en pañales, pero promete, y mucho. La cuestión es establecer una conexión vía Bluetooth entre el mando de la Wii y el sistema para controlar éste a través de aquél, como con cualquier otro HID.

Lo primero, como es lógico, es contar con un adaptador de Bluetooth y tener implementada la pila de protocolos BT (bluez). Tras esto comprobamos que podemos detectar el mando (debemos ponerlo en modo sync):



Una vez comprobado esto, tenemos que preparar el sistema. Primero el software que necesitamos:
  • Ya hemos nombrado la pila de protocolos (apt-get install bluetooth bluez-utils)

  • PyBluez, un conjunto de wrappers Python sobre Bluetooth (apt-get install python-bluez).

  • Python-Xlib, interfaz para Python del protocolo X11 (apt-get install python-xlib).

  • Es recomendable PyGame (apt-get install python-pygame) para poder observar la respuesta del sistema a los movimientos del mando.

Hay que parchear Python. Para ello editamos el archivo /usr/share/python-support/python-xlib/Xlib/protocol/display.py y buscamos la línea donde dice:

recv = self.socket.recv(2048)

En mi caso está en la línea 531. Lo sustituimos por

recv = self.socket.recv(4096)

Cargamos (tirando de modprobe) los módulos uinput y evdev. Si no los teneis, ya sabeis, toca recompilar. Tras esto comprobamos que se ha creado el dispositivo uinput:

find /dev -name uinput

Si no lo teneis en /dev/misc/uinput lo linkais desde donde lo tengais, ya que PyBluez querrá acceder al dispositivo en esa ruta. Hay que darle permisos para los usuarios (chmod 666 /dev/misc/uinput).

Ya casi están los preparativos. Falta configurar el servidor X. Para ello editamos el archivo /etc/X11/xorg.conf y añadimos un InputDevice:

Section "InputDevice"
Identifier "Wiimote"
Driver "evdev"
Option "Name" "Nintendo Wiimote"
EndSection


y en la sección ServerLayout añadimos la línea

InputDevice "Wiimote"

Listo. Reiniciamos el servidor X (invoke-rc.d [gdm|kdm|xdm] restart) y a otra cosa, mariposa. Uséase, a por el controlador.

WMD (Wiiwanna Motte Dammiit!) es un script en Python que actua como controlador para el Wiimote, usando PyBluez como wrapper para la comunicación Bluetooth, como seguramente ya habríais imaginado a juzgar por el software que hemos instalado. La última versión es la 0.1.2, aunque he tenido problemas con ella y he usado la 0.1.1. Por cierto, el WMD could make your Wii explode! del disclaimer es una coña marinera, que nadie se me acojone :D

En fin, éste es un vídeo con el resultado. Como veis la cosa, como digo más arriba, está en pañales aún, pero con un potencial increíble.



Como podeis observar, el control sobre el puntero es muy primitivo. En la ventana de PyGame podemos observar los gráficos con los movimientos del mando (rojo para movimientos en horizontal, azul en vertical y verde para profundidad) y la consola devuelve el botón que se pulsa. El botón HOME detiene el script e interrumpe la comunicación entre el mando y el sistema.

Por el momento, la sensibilidad es demasiado alta y no se tiene un buen control del puntero. De hecho, cuesta dirigirlo a donde quieras. No he conseguido que los botones produzcan ninguna acción, como lanzar un icono, mover una ventana, etcétera. También he probado el ejecutable xev para ver qué eventos me devolvía, pero no recibe señales del mando. Total, nada útil de momento. Pero veremos cómo evoluciona el asunto, porque esto promete muy mucho. Y por favor, si alguien ha llegado más lejos, agradecería muchísimo un comentario por su parte. Seguiremos investigando ;)

08 marzo 2007

CPU Frequency Scaling

He encontrado gracias al blog de mUammAr la forma de regular la frecuencia del procesador en función de la carga que soporta. En un sobremesa no es algo muy útil, pero en un ordenador portátil esto es un mundo, ya que conlleva un ahorro de energía y por tanto alarga la duración de la batería. Él dice haber conseguido que su batería durara casi una hora más. La mía dura ahora más de una hora más que antes.

Describiría el procedimiento, pero ya lo ha hecho él perfectamente y yo no podría aportar nada nuevo, lo único que haría sería hacer un copipega. Sólo quería hacerme eco y dar fe de que realmente es así.

Así que lo mejor que podéis hacer es pinchar el enlace y ponerlo en práctica :)

06 marzo 2007

Nuevo escritorio

Entre partida y partida a la Wii :D he estado redecorando el escritorio. Y como me gusta cómo ha quedado, pues lo planto aquí :)



El monitor de sistema (a la derecha) lo he hecho yo mismo porque no he encontrado ninguno que me terminara de gustar en KDE Look. Los otros desklets (al igual que el fondo de escritorio) sí los he bajado de ahí aunque (perdón a los autores) no he guardado el enlace.

El anterior escritorio que tenía era éste.

05 marzo 2007

No es plagio, pero como si lo fuera

Hace unas semanas, hablando de los dos logos de Debian, decía que el logotipo de la espiral es libre, y puede ser utilizado libremente por cualquier persona y con cualquier finalidad, incluso con fines comerciales.

Pues GTS Digital lo ha tomado al pie de la letra. Con todo el morro del mundo. Y eso que se dedican al diseño gráfico...

Visto en ghostbar's blog

04 marzo 2007

Wii!

Me han adelantado el regalo del día del padre :D



Hoy no espereis verme mucho por ningún sitio ;)

03 marzo 2007

Análisis forense de sistemas

Esta mañana, releyendo el magnífico tutorial Análisis forense de sistemas de neófito (lo podeis encontrar en la sección Tutoriales en PDF), he decidido retomar el tema, que dejé aparcado hace muuuuuucho tiempo.

El análisis forense es, según la definición de la Wikipedia, una metodología de estudio ideal para el análisis posterior de incidentes, mediante el cual se trata de reconstruir cómo se ha penetrado en el sistema, a la par que se valoran los daños ocasionados. Puesto así no suena tan interesante como en realidad es.

Así que me he vuelto a descargar las imágenes de disco de un sistema comprometido del Proyecto Honeynet y he abierto un caso con Autopsy. El tutorial de neófito os guiará paso a paso sobre cómo hacerlo.



Si a alguien más le gusta el tema y se anima podemos compartir información y descubrimientos :P

Enlaces:
forensic-es
Honeynet Project: The Forensic Challenge
Análisis forense de sistemas GNU/Linux, UNIX

01 marzo 2007

mp3blaster

Siempre he dicho que el poder de Linux radica en su shell. Y además he predicado con el ejemplo. Durante mi época "dura" usé durante varios meses mis sistemas sin entorno gráfico. Navegaba con Lynx, conectaba a IRC con BitchX, a la red MSN con TMSNC, usaba mencoder+dvdauthor+cdrecord para grabar las películas y verlas en el DVD del salón... Sí, demasiado radical, ya lo sé, pero no podeis imaginar la soltura que se coge con la shell así :D

El caso es que durante esa época sí eché algo de menos: un buen reproductor de música. Tiraba de mpg123 o de mplayer, pero eso sólo permite reproducir canciones, nada más. Me hice incluso un sencillo script que aún conservo, que dibujaba en la consola una primitiva GUI para elegir la canción (si le echais un ojo al código fuente vereis que incluso soporta búsquedas):



El caso es que, ahora, dos años y pico después, encuentro lo que necesitaba: mp3blaster.



Como podeis ver en la captura, mp3blaster es un reproductor para consola con prácticamente todas las opciones que tiene uno gráfico. No llega al nivel de amaroK pero ¿qué otro reproductor llega a su nivel? El caso es que en la GUI que este programa dibuja en la consola no se echa en falta absolutamente nada. Ains, ojalá lo hubiera conocido antes.