Screencast en linux , grabando lo que sucede en la pantalla de linux es facil
Bueno, haciendo referencia a una de las necesidades que tenia yo basicas para linux y encontrandolo sin querer (como suele pasar), he encontrado un pequeño manual de como hacer screencasts en linux, quedan bastante bien y son muy faciles de hacer, pongo aqui un pequeño manual.
Introducción
Necesitaremos vnc , pues este metodo usa vnc4server, OJO la version anterior a esta es vncserver y tiene los archivos de configuracion cambiados de sitio.
Instalamos y configuramos
#apt-get install vnc4server xvncviewer
Bajamos pyvnc2swf de aqui , lo destarreamos y en ese directorio ya lo ejecutaremos luego. para el vnc4server necesitamos crear un archivo de ejecucion inicial (ejecuta un gestor de ventanas y esas cosas) el archivos es ~/.vnc/xstartup, el mio tiene esto (pero es muy facil de hacerlo al gusto de cada uno)
#!/bin/sh
# Uncomment the following two lines for normal desktop: unset SESSION_MANAGER exec /etc/X11/xinit/xinitrc
[ -x /etc/vnc/xstartup ] && exec /etc/vnc/xstartup [ -r HOME/.Xresources \] && xrdb HOME/.Xresources xsetroot -solid grey vncconfig -iconic & xterm -geometry 80x24+10+10 -ls -title "$VNCDESKTOP Desktop" & startx &
Este archivo lo hacemos ejecutable : vic@whitewidow:.vnc$ chmod 755 ~/.vnc/xstartup, y tambien /etc/X11/xinit/xinitrc whitewidow:/home/vic/pyvnc2swf-0.8.2# chmod 755 /etc/X11/xinit/xinitrc
Al grano
Lo primero es ejecutar el vnc4server y proporcionarle una contraseña para conectarnos a el :
vic@whitewidow:pyvnc2swf-0.8.2$ vnc4server -geometry 800x600 :4
New 'whitewidow:4 (vic)' desktop is whitewidow:4
Starting applications specified in /home/vic/.vnc/xstartup Log file is /home/vic/.vnc/whitewidow:4.log
Ejecutamos el servidor a 800x600 en la pantalla virtual numero 4 si es la primera vez nos pregunta la password que va a tener el servidor.
Ejecutamos el visor de este escritorio:
vic@whitewidow:pyvnc2swf-0.8.2$ vncviewer whitewidow:4 VNC viewer version 3.3.7 - built Apr 27 2006 07:09:29 Copyright (C) 2002-2003 RealVNC Ltd. Copyright (C) 1994-2000 AT&T Laboratories Cambridge. See http://www.realvnc.com for information on VNC. VNC server supports protocol version 3.8 (viewer 3.3) Password:
En otra consola o poniendo en segundo plano la ejecucion de esta misma, ejecutaremos OTRO visor del vncserver en el que vamos a grabar lo que vayamos haciendo en la ventana recien surgida: Pulsamos ctrl-z (pausamos la ejecucion del vncviewer):
[1]+ Stopped vncviewer whitewidow:4 vic@whitewidow:pyvnc2swf-0.8.2 bg \[1\]+ vncviewer whitewidow:4 & vic@whitewidow:pyvnc2swf-0.8.2
Ahora ejecutamos el vnc2swf que se conecta al servidor y solo mira (graba) todo lo que hagamos:
vic@whitewidow:pyvnc2swf-0.8.2$ ./vnc2swf.py -n -o salida.swf whitewidow:4 Using pygame 1.7.1release open /dev/sequencer: No such device Connected: whitewidow:5904, protocol_version=3.8, preferred_encoding=(0, -232, -239) Password for whitewidow:5904: VNC Screen: size=800x600, name='whitewidow:4 (vic)' Output movie size: 800x600 Creating movie: 'salida.swf': version=5, size=800x600, framerate=12.0, compression=None
Con esto todo lo que hagamos en la ventana del vncviewer de la sesion 4 estará grabado en un archivo llamado salida.swf y lo podremos ver poniendo en el navegador la pagina slida.html.
Links
- http://panela.blog-city.com/howto_create_a_basic_screencast_on_linux.htm
- http://showmedo.com/videos/video?name=UsingVNC2SWF.py
Pues al final es bien facil hacer screencasts desde linux ;)
AOP Aspect Oriented Programming
Interesantísimos son los últimos documentos que estoy leyendo sobre AOP, una metodología de trabajo que nos ayuda en un montón de tareas de las que ahora nos ocupábamos usando ñapas o malos hábitos de programación.
Problema
El problema es que la programación orientada a objetos no escala con facilidad en cuanto se aumentan funcionalidades trasversales o requerimientos al desarrollo del programa. Me refiero a funcionalidades trasversales, funcionalidades que no son intrínsecas al modelo de nuestro desarrollo y que pueden ser externalizadas y aplicadas a múltiples desarrollos, como por ejemplo los logs, la seguridad, la persistencia, ... Una clase desarrollada por nosotros a priori no tiene porqué saber como implementar la seguridad, como persistirse a si misma o como logear sus propias acciones.
Solución
La solución viene de la mano de AOP. Nos permite establecer "puntos de ruptura" en los cuales "salta" la ejecución de otras clases, realizan tareas y devuelven el control al punto de ruptura. Mediante la definicion en un archivo xml del punto de ruptura (que puede ser un patron en el nombre del metodo por ejemplo), le indicamos a nuestro "cargador de clases" ( tomcat, spring, ...) que ejecute otra clase y luego devuelva el control, todo ello sin necesidad de modificar la clase original por supuesto.
Implementaciones de AOP
Algunas implementaciones de AOP son AspectJ, Aspectwerkz, Jboss AOP, Spring AOP, ... . Aunque probablemente el mas potente (y el que yo uso) sea Spring AOP, quizás no sea el mas adecuado para aprender el funcionamiento de la Programacion Orientada a Aspectos. Yo creo que el mas adecuado para aprender es Aspectwerkz debido a la sencillez de su sintaxis y a que se centra exclusivamente en la AOP.
Conceptos Clave
Cross-cutting concerns: Un problema cruzado es aquella funcionalidad que es trasversal a nuestra clase, de modo que se pueda implementar a varias clases o incluso programas, por ejemplo Logging Advice: Del inglés consejo, es el codigo adicional que queremos añadir a nuestro modelo, que puede ser codigo especifico de log, de persistencia, ... Point-cut : El punto de corte, es el punto determinado en la ejecucion de nuestro programa donde queremos aplicar el consejo o codigo adicional.
Articulos y Links Relacionados
http://www.programacion.com/java/articulo/jap_aop/ http://en.wikipedia.org/wiki/Aspect-oriented_programming http://www.onjava.com/pub/a/onjava/2004/07/14/springaop.html



