lunes, 28 de diciembre de 2009

No funcionan algunos botones de Eclipse Galileo en Ubuntu 9.10

Parece que hay algún problema con GTK y Eclipse Galileo en Ubuntu 9.10 (Karmic Koala).

Aparentemente funciona correctamente, pero algunos botones dejan de funcionar. Lo primero que he intentado es activar los botones con ENTER y así algunos funcionan. Pero definitivamente algunos desplegables del plugin CVS no funcionan como no los actives con el ratón.

Para solucionarlo solo necesitas crear un fichero de texto (por ej: lanzador.bash) en el directorio donde tengas el ejecutable de eclipse y escribir esto:
#!/bin/bash
export GDK_NATIVE_WINDOWS=1
./eclipse

Después de darle permisos de ejecución y ejecutarlo se ejecutar eclipse y dejarás de tener problemas con los botones.

martes, 15 de diciembre de 2009

uml2php5

http://uml2php5.zpmag.com/

Una utilidad muy buena para crear diagramas UML con Dia y después generar un fichero PHP.

Parece una tontería, pero cuando tienes que hacer un diseño bastante grande, que te generen la estructura de todas las clases con sus herencias y comentarios en cada procedimiento para que OTRO haga el trabajo de picar el código, no es ninguna tontería.

Además es muy sencilla de instalar, solo tienes que descargar el fichero y seguir las instrucciones que tienes en la web. En pocos minutos tienes tu primera clase en PHP sin abrir ningún IDE PHP.

lunes, 14 de diciembre de 2009

Conectar unidad de red a un servidor SAMBA

Una forma útil de utilizar un servidor SAMBA desde un entorno de clientes Windows es conectar como unidad de red los recursos compartidos del servidor SAMBA.

Para hacer esto de forma automática es más cómodo generar un script (.bat) para que conecte las unidades de red en los equipos Windows.

El comando es muy sencillo, solo tendemos que ejecutar: net use \\\ /user:

El comando quedaría así para un servidor con IP 192.168.1.1, el recurso al que queremos conectar nuestra unidad de red se llama "compartido" y nos conectaremos con usuario "administrador" y clave "1234". Por último asignaremos a la unidad la letra "f".
net use f: \\192.168.1.1\compartido 1234 /user:administrador

Recuerda que para ejecutar este comando en un Windows XP, antes tienes que abrir la linea de comandos de Windows y para ello: inicio > Ejecutar > cmd.

jueves, 22 de octubre de 2009

Problemas iniciando Enterprise Manager 11g

He estado instalando Oracle DataBase 11g en un Windows XP para hacer pruebas y aprender algo más sobre administración y gestión de bases de datos Oracle, pero me encontré con un problema.

La máquina que utilicé para la batería de pruebas estaba configurada como DHCP (ip dinamica). Cuando lo instalé funcionaba correctamente, pero al reiniciar el servidor DHCP me asignó otra IP y Oracle DataBase 11g dejó de funcionar.

Después de mucho investigar, descubrí que el problema venía porque Listener estaba configurado para la IP antigua que tenía asignada. Es decir la IP que tenia la máquina cuando se instaló. La solución a esto es sencilla, simplemente tendrás que volver a configurar Listener y volverá a funcionar todo.

Pero claro, si la máquina que estás utilizando es un portatil que hoy lo utilizas aquí y mañana allí, no es nada cómodo tener que configurar Listener cada vez que quieras utilizar tu Oracle DataBase.

Encontré la solución a este problema, realmente es muy sencilla, simplemente tenemos que crear una tarjeta de red virtual, asiganarle una IP estática fuera de los rango habituales de la redes a las que nos conectemos y configurar Listener para esa dirección IP. Ahora siempre tendremos esa dirección IP asignada y no volveremos a tener problemas para iniciar Listener.

Tengo algunas capturas que os ayudarán a configurar una tarjeta de red virtual en Windows XP.

El primer paso es Inicio > Configuración > Panel de control.



Agregar hardware











Una vez que tenemos agregada la nueva tarjeta de red tendremos que configurarla con una IP estática.















Ahora hay que configurar Listener para que corra sobre la nueva IP. Sin olvidar también configurar tnsnames.ora.



Configuración listener.ora



Configuración tnsnames.ora



Una vez configurado procedemos a reiniciar el servicio Listener para que se inicie con la nueva configuración.











Ahora toca hacer las pruebas y verificar que todo está funcionando correctamente.

Aquí tienes la respuesta correcta de un "tnsping ORCL" o "tnsping 192.168.254.254"





Para configurar el Enterprise Manager utilizaremos "emca -config dbcontrol db", esto nos irá pidiendo información para la correcta configuración. Recuerda escribir el nombre del servicio tal cual lo escribiste en el tnsnames.ora, es decir si está en mayusculas, lo escribes en mayusculas.



Yo ya lo tengo funcionando. Recuerda que todos estos servicios pueden tardar un poco en iniciarse cuando iniciar el sistema. Yo muchos servicios corriendo en este Windows XP y tengo que esperar un poco para que todo funcione correctamente, espera un poco antes de ponerte a modificar ficheros de configuración como un loco. Si pasado un tiempo ves que no funciona ha llegado la hora de buscar el problema.

martes, 20 de octubre de 2009

Hola mundo CodeBlocks

Después de mucho intentarlo he conseguido compilar mi primera aplicación en C con CodeBlocks. Mi primer "Hola mundo!".

Como con muchas otras cosas lo apuntaré en mi blog para acordarme el día que tenga que volver a hacer todos estos pasos, porque seguro que se me olvidará y volveré a perder el tiempo intentado compilar de nuevo un proyecto.

Lo primero que tienes que hacer es crear un proyecto nuevo y definir el main de un "hola mundo". Casualmente esta versión de CodeBlocks cuando creas un nuevo proyecto, directamente te crea el "Hola mundo".

El problema llega cuando intentas compilar el proyecto. Yo obtenía "uses an invalid compiler. Skipping...".


Para solucionar esto, entraremos en: Settings> Compiler and debugger...




Se abrirá esta ventana:




Nos vamos a la pestaña de: Toolchain executables





Una vez aquí tenemos que modificar la ruta de: Compiler's installation directory. (La ruta normalmente es la que se puede ver en la imagen "c:\Archivos de programas\CodeBlocks\MinGW")




Una vez modificada la ruta aceptaremos y volveremos compilar nuestra aplicación. Esta vez debería ejecutarse sin problemas.

viernes, 16 de octubre de 2009

Problemas con GWT en Eclise (Ubuntu)

Cuando intento lanzar mi proyecto con Eclipse obtento este error en la consola:
** Unable to load Mozilla for hosted mode **
java.lang.UnsatisfiedLinkError: /home/jmruiz/Escritorio/eclipse35/plugins/com.google.gwt.eclipse.sdkbundle.linux_1.7.1.v200909221731/gwt-linux-1.7.1/mozilla-1.7.12/libxpcom.so: libstdc++.so.5: cannot open shared object file: No such file or directory
at java.lang.ClassLoader$NativeLibrary.load(Native Method)
at java.lang.ClassLoader.loadLibrary0(ClassLoader.java:1778)
at java.lang.ClassLoader.loadLibrary(ClassLoader.java:1674)
at java.lang.Runtime.load0(Runtime.java:770)
at java.lang.System.load(System.java:1003)
at com.google.gwt.dev.shell.moz.MozillaInstall.load(MozillaInstall.java:190)
at com.google.gwt.dev.BootStrapPlatform.initHostedMode(BootStrapPlatform.java:53)
at com.google.gwt.dev.HostedModeBase.(HostedModeBase.java:362)
at com.google.gwt.dev.SwtHostedModeBase.(SwtHostedModeBase.java:127)
at com.google.gwt.dev.HostedMode.(HostedMode.java:271)
at com.google.gwt.dev.HostedMode.main(HostedMode.java:230)

Para solucionar instalaremos libstdc++5.
$ sudo apt-get install libstdc++5
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Se instalarán los siguientes paquetes NUEVOS:
libstdc++5
0 actualizados, 1 se instalarán, 0 para eliminar y 0 no actualizados.
Necesito descargar 296kB de archivos.
Se utilizarán 872kB de espacio de disco adicional después de esta operación.
Des:1 http://es.archive.ubuntu.com jaunty/universe libstdc++5 1:3.3.6-17ubuntu1 [296kB]
Descargados 296kB en 0s (399kB/s)
Seleccionando el paquete libstdc++5 previamente no seleccionado.
(Leyendo la base de datos ...
227973 ficheros y directorios instalados actualmente.)
Desempaquetando libstdc++5 (de .../libstdc++5_1%3a3.3.6-17ubuntu1_i386.deb) ...
Configurando libstdc++5 (1:3.3.6-17ubuntu1) ...
Procesando disparadores para libc6 ...
ldconfig deferred processing now taking place

Una vez instalado podrás ejecutar la aplicación sin problemas.

http://whatwouldnickdo.com/wordpress/99/unable-to-load-mozilla-for-hosted-mode-gwt-ubuntu-810-linux/

martes, 22 de septiembre de 2009

VBoxGuestAdditions para Debian

Es muy útil instalar VBoxGuestAdditions (cliente de virtual box para máquinas virtuales) en las máquinas virtuales que tengas corriendo en un servidor de VirtualBox. Así facilitarás la comunicación entre el Kernel de la máquina virtual y el servidor de máquinas virtuales.

Para instalarlo lo primero que tenemos que hacer es comprobar el Kernel que estamos utilizando en la máquina virtualizada. Para ello ejecutamos:
# uname -a
Linux Debian5Nagios 2.6.26-2-686 #1 SMP Thu Mar 26 01:08:11 UTC 2009 i686 GNU/Linux

Una vez sabemos el Kernel que estamos utilizando ejecutaremos el script correspondiente, en nuestro caso:
# ./VBoxLinuxAdditions-x86.run

Es posible que obtengamos el siguiente error:
Verifying archive integrity... All good.
Uncompressing VirtualBox 2.2.2 Guest Additions for Linux installation.................................................................
VirtualBox 2.2.2 Guest Additions installation
Please install the build and header files for your current Linux kernel.
The current kernel version is 2.6.26-2-686
This system does not seem to have support for OpenGL direct rendering.
VirtualBox requires Linux 2.6.27 or later for this. Please see the log
file /var/log/vboxadd-install.log if your guest uses Linux 2.6.27 and you still see this message.
Problems were found which would prevent the Guest Additions from installing.
Please correct these problems and try again.

Esto es porque necesitas las cabeceras del Kernel para poder compilar un modulo, para instalar las cabeceras de nuestro Kernel: (RECUERDA QUE TENDRÁS QUE INSTALAR LAS CABECERAS DEL KERNEL QUE ESTÉS UTILIZANDO)
# aptitude install linux-headers-2.6-686
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Leyendo las descripciones de las tareas... Hecho
Se instalarán los siguiente paquetes NUEVOS:
cpp-4.1{a} gcc-4.1{a} gcc-4.1-base{a} linux-headers-2.6-686 linux-headers-2.6.26-2-686{a}
linux-headers-2.6.26-2-common{a} linux-kbuild-2.6.26{a}
0 paquetes actualizados, 7 nuevos instalados, 0 para eliminar y 0 sin actualizar.
Necesito descargar 7254kB de ficheros. Después de desempaquetar se usarán 41,3MB.
¿Quiere continuar? [Y/n/?]
Escribiendo información de estado extendido... Hecho
Des:1 http://ftp.rediris.es lenny/main gcc-4.1-base 4.1.2-25 [207kB]
Des:2 http://ftp.rediris.es lenny/main cpp-4.1 4.1.2-25 [2317kB]
Des:3 http://ftp.rediris.es lenny/main gcc-4.1 4.1.2-25 [417kB]
Des:4 http://ftp.rediris.es lenny/main linux-headers-2.6.26-2-common 2.6.26-19 [3718kB]
Des:5 http://ftp.rediris.es lenny/main linux-kbuild-2.6.26 2.6.26-3 [194kB]
Des:6 http://ftp.rediris.es lenny/main linux-headers-2.6.26-2-686 2.6.26-19 [398kB]
Des:7 http://ftp.rediris.es lenny/main linux-headers-2.6-686 2.6.26+17+lenny1 [2474B]
Descargados 7254kB en 10s (699kB/s).
Seleccionando el paquete gcc-4.1-base previamente no seleccionado.
(Leyendo la base de datos ...
29434 ficheros y directorios instalados actualmente.)
Desempaquetando gcc-4.1-base (de .../gcc-4.1-base_4.1.2-25_i386.deb) ...
Seleccionando el paquete cpp-4.1 previamente no seleccionado.
Desempaquetando cpp-4.1 (de .../cpp-4.1_4.1.2-25_i386.deb) ...
Seleccionando el paquete gcc-4.1 previamente no seleccionado.
Desempaquetando gcc-4.1 (de .../gcc-4.1_4.1.2-25_i386.deb) ...
Seleccionando el paquete linux-headers-2.6.26-2-common previamente no seleccionado.
Desempaquetando linux-headers-2.6.26-2-common (de .../linux-headers-2.6.26-2-common_2.6.26-19_i386.deb) ...
Seleccionando el paquete linux-kbuild-2.6.26 previamente no seleccionado.
Desempaquetando linux-kbuild-2.6.26 (de .../linux-kbuild-2.6.26_2.6.26-3_i386.deb) ...
Seleccionando el paquete linux-headers-2.6.26-2-686 previamente no seleccionado.
Desempaquetando linux-headers-2.6.26-2-686 (de .../linux-headers-2.6.26-2-686_2.6.26-19_i386.deb) ...
Seleccionando el paquete linux-headers-2.6-686 previamente no seleccionado.
Desempaquetando linux-headers-2.6-686 (de .../linux-headers-2.6-686_2.6.26+17+lenny1_i386.deb) ...
Procesando disparadores para man-db ...
Configurando gcc-4.1-base (4.1.2-25) ...
Configurando cpp-4.1 (4.1.2-25) ...
Configurando gcc-4.1 (4.1.2-25) ...
Configurando linux-headers-2.6.26-2-common (2.6.26-19) ...
Configurando linux-kbuild-2.6.26 (2.6.26-3) ...
Configurando linux-headers-2.6.26-2-686 (2.6.26-19) ...
Configurando linux-headers-2.6-686 (2.6.26+17+lenny1) ...
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Escribiendo información de estado extendido... Hecho
Leyendo las descripciones de las tareas... Hecho

Una vez instaladas las cabeceras correspondientes a tu Kernel, no tendrías que tener ningún error al ejecutar:
# ./VBoxLinuxAdditions-x86.run
Verifying archive integrity... All good.
Uncompressing VirtualBox 2.2.2 Guest Additions for Linux installation.......................................................................
VirtualBox 2.2.2 Guest Additions installation
This system does not seem to have support for OpenGL direct rendering.
VirtualBox requires Linux 2.6.27 or later for this. Please see the log
file /var/log/vboxadd-install.log if your guest uses Linux 2.6.27 and you still see this message.
Building the VirtualBox Guest Additions kernel module...
Building the shared folder support kernel module...
Installing the VirtualBox Guest Additions...

Could not find X.org or XFree86 on the guest system. The X Window drivers
will not be installed.

Y después de reiniciar la máquina virtual y ejecutar un "# ps aux", podrás ver un proceso correspondiente al modulo recién compilado.
/usr/sbin/vboxadd-timesync --daemonize

Ahora el Kernel de tu máquina virtual Debian se comunicará más fácilmente con el Kernel de tu máquina servidora de máquinas virtuales.

miércoles, 2 de septiembre de 2009

Respuesta a Claudio Aliste sobre Nagios

No es ninguna molestia contestar un correo de alguien que necesite mi ayuda. No soy un gran experto en el tema, pero conseguí montarlo después de muchas pruebas.

Sinceramente no recuerdo exactamente como llegué a configurarlo, ahora mi vida profesional ha tomado otro rumbo, orientándose más al análisis de información (BI) y tengo un poco olvidado el tema de la administración de servidores. Pero aún mantengo el servidor Nagios que monté hace más de un año para mantener vigilados unos 50 servidores.

Veo en el servidor que la configuración de Nagios se hace desde /usr/local/nagios/etc, ahí deberás encontrar los ficheros que necesitas para configurarlos.

Te adjunto la salida de un tree de mi directorio /usr/local/nagios/etc.
Debian5Nagios:/usr/local/nagios/etc# tree
.
|-- cgi.cfg
|-- htpasswd.users
|-- nagios.cfg
|-- nrpe.cfg
|-- objects
| |-- commands.cfg
| |-- contacts.cfg
| |-- localhost.cfg
| |-- localhost.cfg.original
| |-- printer.cfg
| |-- switch.cfg
| |-- templates.cfg
| |-- timeperiods.cfg
| `-- windows.cfg
|-- resource.cfg
`-- servers
|-- asd
| |-- hostgroup.cfg
| `-- nahor.cfg
|-- dsa
| |-- dabih.cfg
| `-- hostgroup.cfg
...

El resultado es mayor, porque dentro del directorio servers tengo un montón de directorios (uno por cada cliente) y dentro los ficheros de configuración de cada uno de los servidores correspondientes. Es una buena forma de organizar Nagios:
/usr/local/nagios/etc/servers/cliente1/servidor11.cfg
/usr/local/nagios/etc/servers/cliente1/servidor12.cfg

/usr/local/nagios/etc/servers/cliente2/servidor21.cfg
/usr/local/nagios/etc/servers/cliente2/servidor22.cfg
/usr/local/nagios/etc/servers/cliente2/servidor23.cfg

Tendrás que editar el fichero /usr/local/nagios/etc/nagios.cfg y descomentar la linea "cfg_dir=/usr/local/nagios/etc/servers" (para descomentarla quitale la # que tiene al principio), así te cogerá todos los .cfg que crees en /usr/local/nagios/etc/servers/*

Te adjunto el fichero de configuración de un servidor en concreto, este se llama nahor y Nagios monitoriza algunos de los servicios más basicos (ping, http y ssh).
Debian5Nagios:/usr/local/nagios/etc# cat servers/aic/nahor.cfg
# Define a host for the local machine

define host{
host_name nahor
alias nahor
address DIRECCION DEL SERVIDOR
parents internet
check_command check-host-alive
check_interval 5
retry_interval 1
max_check_attempts 5
check_period 24x7
process_perf_data 0
retain_nonstatus_information 0
# contact_groups router-admins
notification_interval 30
notification_period 24x7
notification_options d,u,r
icon_image firewall.gif
statusmap_image firewall.gd2
}

# Define a service to "ping" the local machine

define service{
use local-service ; Name of service template to use
host_name nahor
service_description PING
check_command check_ping!100.0,20%!500.0,60%
}

define service{
use local-service ; Name of service template to use
host_name nahor
service_description HTTP
check_command check_http
notifications_enabled 0
}

define service{
use local-service ; Name of service template to use
host_name nahor
service_description SSH
check_command check_ssh
notifications_enabled 0
}

Además dentro de cada cliente yo he creado un hostgroup.cfg como podrás ver en la salida del "tree". Esto es porque todos los servidores tienen que pertenecer a un grupo.

En este caso el cliente "asd" solo tiene un servidor al que monitorizar. Esta es la salida de su
hostgroup.cfg.
define hostgroup{
hostgroup_name asd ; The name of the hostgroup
alias ada ; Long name of the group
members nahor ; Comma separated list of hosts that belong to this group
}

Para verificar que toda tu configuración sea correcta, tendrás que ejecutar el comando:
/usr/local/nagios/bin/nagios -v /usr/local/nagios/etc/nagios.cfg

Y en una de las lineas te tiene que decir "Total Errors: 0" cuando tengas esto haz un restart del servicio nagios y todo tiene que funcionar correctamente.

Espero que mi información te sea de ayuda.
Un saludo.

martes, 9 de junio de 2009

net rpc SHUTDOWN

Puede que al intentar ejecutar net rpc SHUTDOWN ... obtengamos el error:
-bash: net: command not found

Para solucionarlo tendremos que instalar el cliente de samba.
# aptitude install samba-client
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Leyendo las descripciones de las tareas... Hecho
Nota: seleccionando "smbclient" en vez de
el paquete virtual "samba-client"
Se instalarán los siguiente paquetes NUEVOS:
libtalloc1{a} libwbclient0{a} samba-common{a} smbclient
0 paquetes actualizados, 4 nuevos instalados, 0 para eliminar y 0 sin actualizar.
Necesito descargar 10,8MB de ficheros. Después de desempaquetar se usarán 29,3MB.
¿Quiere continuar? [Y/n/?]

Después de instalar samba-client podrás volver a ejecutarlo y no tendrás problemas.
net rpc SHUTDOWN -t 0 -C "Apagado desde el servidor de maquinas vituales" -f -I xxx.xxx.xxx.xxx -U Administrador%password

Encender y Apagar máquinas virtuales en el inicio del sistema

Con este script podrás iniciar y apagar todas las máquinas virtuales de tu granja de servidores virtuales VirtualBox, sin preocuparte de corromper las máquinas virtuales al apagar la máquinas hospedadora.

Utilizo -type vrdp para no lanzarlas sobre ningún entorno gráfico. Las consolas serán accesibles desde la red.

Para apagar las máquinas windows utilizo el comando net rpc SHUTDOWN -t 0 -C "Apagado desde el servidor de maquinas vituales" -f -I xxx.xxx.xxx.xxx -U Administrador%password para el apagado desde la red de una máquina windows. Me ha pasado que en algunas máquinas no he sido capaz de que funcione, pero en otras sí. No soy un experto en windows así que si alquien sabe porqué puede pasar esto que deje un comentario.

Las máquinas Gnu/Linux normalmente se apagarán correctamente con la opción VBoxManage controlvm Suse10serverOracle10g acpipowerbutton.

No os preocupéis, he pensado en todo. Las maquinas tardan un tiempo en apagarse, el script está programado para esperar 60 segundos. Y después guardará el estado de todas las máquinas virtuales, por si alguna no se apagó correctamente (VBoxManage controlvm Win2003serverMSSql savestate).

Definir el fichero /etc/init.d/maquinasvirtuales.bash:
#!/bin/bash
echo "Script de iniciado/apagardo de máquinas virtuales"
case $1 in
start)
echo "Iniciando máquinas vituales, espere a que inicien los sistemas..."
VBoxManage startvm Win2003serverMSSql -type vrdp
VBoxManage startvm Suse10serverOracle10g -type vrdp
VBoxManage startvm Debian5Nagios -type vrdp
;;
stop)
echo "Parando máquinas vituales, espere a que termien de apagar los sistemas..."

# apagar windows desde la red (Win2003serverMsSQL)
net rpc SHUTDOWN -t 0 -C "Apagado desde el servidor de maquinas vituales" -f -I xxx.xxx.xxx.xxx -U Administrador%password

# apagar como si pulsaras una vez el botón de apagar (aparagá correctamente)
VBoxManage controlvm Suse10serverOracle10g acpipowerbutton
VBoxManage controlvm Debian5Nagios acpipowerbutton

# espernado un tiempo prudencial para dar tiempo a las maquinas virtuales a que se apaguen
for i in `seq 1 60`; do
sleep 1
echo -n "."
done

# si no se apagaron las máquinas guardamos su estado, así no corromperemos los sistemas de ficheros

VBoxManage controlvm Win2003serverMSSql savestate
VBoxManage controlvm Debian5Nagios savestate
VBoxManage controlvm Suse10serverOracle10g savestate

echo "sistemas apagados"
;;
restart)
/etc/init.d/maquinasvirtuales.bash stop
/etc/init.d/maquinasvirtuales.bash start
;;
*)
echo "Usa: /etc/init.d/maquinasvirtuales.sh {start|stop|restart}"
;;
esac

viernes, 5 de junio de 2009

Debian lenny -> Apache2 + php5

Esto es algo muy liviano, pero siempre hay alguien nuevo al que hay que ayudar a hacer este tipo de cosas. Aquí explico brevemente los pasos a seguir para instalar Apache2 con PHP5 en Debian5 (lenny).
Esto descargará, desempaquetará e instalará el paquete correspondiente a Apache2.
# aptitude install apache2
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Leyendo las descripciones de las tareas... Hecho
Se instalarán los siguiente paquetes NUEVOS:
apache2 apache2-mpm-worker{a} apache2-utils{a} apache2.2-common{a} libapr1{a} libaprutil1{a} libexpat1{a}
libmysqlclient15off{a} libpq5{a} mysql-common{a} openssl{a} openssl-blacklist{a} ssl-cert{a}
0 paquetes actualizados, 13 nuevos instalados, 0 para eliminar y 0 sin actualizar.
Necesito descargar 11,3MB de ficheros. Después de desempaquetar se usarán 26,2MB.
¿Quiere continuar? [Y/n/?]
Escribiendo información de estado extendido... Hecho
Des:1 http://ftp.rediris.es lenny/main openssl-blacklist 0.4.2 [6338kB]
Des:2 http://security.debian.org lenny/updates/main openssl 0.9.8g-15+lenny1 [1043kB]
Des:3 http://security.debian.org lenny/updates/main mysql-common 5.0.51a-24+lenny1 [60,5kB]
Des:4 http://security.debian.org lenny/updates/main libmysqlclient15off 5.0.51a-24+lenny1 [1905kB]
Des:5 http://security.debian.org lenny/updates/main libaprutil1 1.2.12+dfsg-8+lenny2 [79,8kB]
Des:6 http://ftp.rediris.es lenny/main libapr1 1.2.12-5 [114kB]
Des:7 http://ftp.rediris.es lenny/main libexpat1 2.0.1-4 [136kB]
Des:8 http://ftp.rediris.es lenny/main libpq5 8.3.7-0lenny1 [372kB]
Des:9 http://ftp.rediris.es lenny/main apache2-utils 2.2.9-10+lenny2 [144kB]
Des:10 http://ftp.rediris.es lenny/main apache2.2-common 2.2.9-10+lenny2 [824kB]
Des:11 http://ftp.rediris.es lenny/main apache2-mpm-worker 2.2.9-10+lenny2 [257kB]
Des:12 http://ftp.rediris.es lenny/main apache2 2.2.9-10+lenny2 [44,5kB]
Des:13 http://ftp.rediris.es lenny/main ssl-cert 1.0.23 [13,1kB]
Descargados 11,3MB en 36s (311kB/s).
Preconfigurando paquetes ...
Seleccionando el paquete openssl previamente no seleccionado.
(Leyendo la base de datos ...
20983 ficheros y directorios instalados actualmente.)
Desempaquetando openssl (de .../openssl_0.9.8g-15+lenny1_amd64.deb) ...
Seleccionando el paquete openssl-blacklist previamente no seleccionado.
Desempaquetando openssl-blacklist (de .../openssl-blacklist_0.4.2_all.deb) ...
Seleccionando el paquete libapr1 previamente no seleccionado.
Desempaquetando libapr1 (de .../libapr1_1.2.12-5_amd64.deb) ...
Seleccionando el paquete libexpat1 previamente no seleccionado.
Desempaquetando libexpat1 (de .../libexpat1_2.0.1-4_amd64.deb) ...
Seleccionando el paquete mysql-common previamente no seleccionado.
Desempaquetando mysql-common (de .../mysql-common_5.0.51a-24+lenny1_all.deb) ...
Seleccionando el paquete libmysqlclient15off previamente no seleccionado.
Desempaquetando libmysqlclient15off (de .../libmysqlclient15off_5.0.51a-24+lenny1_amd64.deb) ...
Seleccionando el paquete libpq5 previamente no seleccionado.
Desempaquetando libpq5 (de .../libpq5_8.3.7-0lenny1_amd64.deb) ...
Seleccionando el paquete libaprutil1 previamente no seleccionado.
Desempaquetando libaprutil1 (de .../libaprutil1_1.2.12+dfsg-8+lenny2_amd64.deb) ...
Seleccionando el paquete apache2-utils previamente no seleccionado.
Desempaquetando apache2-utils (de .../apache2-utils_2.2.9-10+lenny2_amd64.deb) ...
Seleccionando el paquete apache2.2-common previamente no seleccionado.
Desempaquetando apache2.2-common (de .../apache2.2-common_2.2.9-10+lenny2_amd64.deb) ...
Seleccionando el paquete apache2-mpm-worker previamente no seleccionado.
Desempaquetando apache2-mpm-worker (de .../apache2-mpm-worker_2.2.9-10+lenny2_amd64.deb) ...
Seleccionando el paquete apache2 previamente no seleccionado.
Desempaquetando apache2 (de .../apache2_2.2.9-10+lenny2_all.deb) ...
Seleccionando el paquete ssl-cert previamente no seleccionado.
Desempaquetando ssl-cert (de .../ssl-cert_1.0.23_all.deb) ...
Procesando disparadores para man-db ...
Configurando openssl (0.9.8g-15+lenny1) ...
Configurando openssl-blacklist (0.4.2) ...
Configurando libapr1 (1.2.12-5) ...
Configurando libexpat1 (2.0.1-4) ...
Configurando mysql-common (5.0.51a-24+lenny1) ...
Configurando libmysqlclient15off (5.0.51a-24+lenny1) ...
Configurando libpq5 (8.3.7-0lenny1) ...
Configurando libaprutil1 (1.2.12+dfsg-8+lenny2) ...
Configurando apache2-utils (2.2.9-10+lenny2) ...
Configurando apache2.2-common (2.2.9-10+lenny2) ...
Enabling site default.
Enabling module alias.
Enabling module autoindex.
Enabling module dir.
Enabling module env.
Enabling module mime.
Enabling module negotiation.
Enabling module setenvif.
Enabling module status.
Enabling module auth_basic.
Enabling module deflate.
Enabling module authz_default.
Enabling module authz_user.
Enabling module authz_groupfile.
Enabling module authn_file.
Enabling module authz_host.
Configurando apache2-mpm-worker (2.2.9-10+lenny2) ...
Starting web server: apache2.
Configurando apache2 (2.2.9-10+lenny2) ...
Configurando ssl-cert (1.0.23) ...
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Escribiendo información de estado extendido... Hecho
Leyendo las descripciones de las tareas... Hecho

Ya tenemos instalado Apache2 en nuestro sistema Debian. Si en la barra navegación de nuestro firefox ponemos http://localhost, tendríamos que ver algo parecido a esto:

Después instalaremos los paquetes libapache2-mod-php5 y php5:
#aptitude install libapache2-mod-php5 php5
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Leyendo las descripciones de las tareas... Hecho
Se instalarán los siguiente paquetes NUEVOS:
apache2-mpm-prefork{a} libapache2-mod-php5 php5 php5-common{a}
Se ELIMINARÁN los siguientes paquetes:
apache2-mpm-worker{a}
0 paquetes actualizados, 4 nuevos instalados, 1 para eliminar y 0 sin actualizar.
Necesito descargar 3238kB de ficheros. Después de desempaquetar se usarán 7049kB.
¿Quiere continuar? [Y/n/?]
Escribiendo información de estado extendido... Hecho
Des:1 http://ftp.rediris.es lenny/main apache2-mpm-prefork 2.2.9-10+lenny2 [253kB]
Des:2 http://security.debian.org lenny/updates/main php5-common 5.2.6.dfsg.1-1+lenny3 [368kB]
Des:3 http://security.debian.org lenny/updates/main libapache2-mod-php5 5.2.6.dfsg.1-1+lenny3 [2616kB]
Des:4 http://security.debian.org lenny/updates/main php5 5.2.6.dfsg.1-1+lenny3 [1078B]
Descargados 3238kB en 2s (1347kB/s).
dpkg: apache2-mpm-worker: problemas de dependencias, pero se desinstalará de todas formas
tal y como se solicitó:
apache2 depende de apache2-mpm-worker (>= 2.2.9-10+lenny2) | apache2-mpm-prefork (>= 2.2.9-10+lenny2) | apache2-mpm-event (>= 2.2.9-10+lenny2); sin embargo:
El paquete `apache2-mpm-worker' va a ser desinstalado.
El paquete `apache2-mpm-prefork' no está instalado.
El paquete `apache2-mpm-event' no está instalado.
(Leyendo la base de datos ...
21983 ficheros y directorios instalados actualmente.)
Desinstalando apache2-mpm-worker ...
Stopping web server: apache2 ... waiting .
Seleccionando el paquete apache2-mpm-prefork previamente no seleccionado.
(Leyendo la base de datos ...
21974 ficheros y directorios instalados actualmente.)
Desempaquetando apache2-mpm-prefork (de .../apache2-mpm-prefork_2.2.9-10+lenny2_amd64.deb) ...
Seleccionando el paquete php5-common previamente no seleccionado.
Desempaquetando php5-common (de .../php5-common_5.2.6.dfsg.1-1+lenny3_amd64.deb) ...
Seleccionando el paquete libapache2-mod-php5 previamente no seleccionado.
Desempaquetando libapache2-mod-php5 (de .../libapache2-mod-php5_5.2.6.dfsg.1-1+lenny3_amd64.deb) ...
Seleccionando el paquete php5 previamente no seleccionado.
Desempaquetando php5 (de .../php5_5.2.6.dfsg.1-1+lenny3_all.deb) ...
Configurando apache2-mpm-prefork (2.2.9-10+lenny2) ...
Starting web server: apache2.
Configurando php5-common (5.2.6.dfsg.1-1+lenny3) ...
Configurando libapache2-mod-php5 (5.2.6.dfsg.1-1+lenny3) ...

Creating config file /etc/php5/apache2/php.ini with new version
Reloading web server config: apache2.
Configurando php5 (5.2.6.dfsg.1-1+lenny3) ...
Leyendo lista de paquetes... Hecho
Creando árbol de dependencias
Leyendo la información de estado... Hecho
Leyendo la información de estado extendido
Inicializando el estado de los paquetes... Hecho
Escribiendo información de estado extendido... Hecho
Leyendo las descripciones de las tareas... Hecho

Cuando termine reiniciaremos nuestro Apache2 para que cargue el módulo correspondiente a PHP5.
# /etc/init.d/apache2 restart
Restarting web server: apache2 ... waiting .

Para verificar que está funcionando todo correctamente, crearemos un fichero /var/www/index.php. Me gusta el editor nano, pero podréis utilizar el que más os guste. Y metéis el código:
< ?php
phpinfo();
?>

Después hacemos que Apache2 ejecute nuestro nuevo index.php, para ello entramos en http://localhost/index.php y tendríamos que ver algo parecido a la siguiente imagen.

Ya tenemos funcionando Apache2 con PHP5 en nuestro sistema Debian lenny.

martes, 5 de mayo de 2009

vlc reproduce musica desde linea de comandos

Un buen reproductor de música para la linea de comandos de GNU/Linux puede ser vlc. Lo he estado utilizando y es perfecto para no sobrecargar el sistema con reproductores lentos.

Para ejecutarlo simplemente. Desde ahí podemos ir buscando las canciones que queramos reproducir.
vlc -I ncurses

Lo mejor creo que puede ser hacr un script pasándole como argumento los ficheros que queramos reproducir. Es decir el directorio donde almacenamos nuestra música.
#!/bin/bash
vlc -I curses /home/jmruiz/musik/*

Como abrir Firefox u otra aplicacion remotamente

Seguro que en muchas ocasiones has necesitado abrir una aplicaciones en otro ordenador para ver la ejecución en local. SSH nos permite esta funcionalidad, pero con algunas restricciones, tenemos que tener instalada la aplicación también en el equipo desde el que lanzado el comando. Ya que utiliza las librería locales para poder ejecutar la aplicación.

Solo necesitamos la IP de la máquina remota y que esta tenga corriendo el servidor SSH y permisos de ejecución para el aplicativo "firefox" para "usuario".
ssh usuario@192.168.254.254 -CX -f firefox

Parece un comando muy tonto, pero muy útil para ver por ejemplo una aplicación Web que únicamente se puede acceder desde el escritorio de la máquina y poniendo "http://localhost". Es decir que Apache solo admite peticiones que venga de la propia máquina.
Con este comando SSH podríamos acceder remotamente a esa aplicación que solo admite peticiones en modo local.

Si piensas un poco verás que puede ser muy útil cuando estás trabajando con más de una subred y necesitas saltar de una a otra.

Eliminar disco duro VirtualBox

Sabemos como registrar discos duros virtuales que vienen de otros servidores de virtualización, también hemos creado discos duros desde cero y hemos hecho instalaciones directamente desde el servidor de virtualización.

Pero ¿Cómo borramos o desregistramos un disco duro que hemos registrado en nuestro sistema VirtualBox?, la respuesta a esta pregunta es poco elegante pero efectiva.
VirtualBox es sus versiones más actuales dispone un comando muy útil para la administración "VBoxManager list < vms |runningvms |ostypes |hostdvds |hostfloppies |hostifs |hostinfo |hddbackends |hdds |dvds |floppies |usbhost |usbfilters |systemproperties >" con este comando podremos ver entre otras cosas los identificadores de las máquinas virtuales que están corriendo, las máquinas virtuales registradas o el listado de discos duros registrados.

Disponemos también de comandos para parar y arrancar máquinas virtuales, así como para borrar máquinas virtuales, pero no tenemos comandos para borrar o desregistrar discos duros virtuales.
VirtualBox tiene un fichero .xml donde almacena toda esta información. Este se encuentra en el home del usuario donde se ha instalado VirtualBox en mi caso "/root/.VirtualBox/VirtualBox.xml".

En esto fichero no te costará encontrar la linea que corresponden al disco duro virtual que deseas borrar, ya que en esa misma linea vienen definida la ruta donde se encuentra el disco duro virtual que registraste. Si quitas esta linea ya no tendrás registrado tu disco duro y cuando lo borres con un "rm" no tendrás rastro de él.

Pero ten cuidado de no borrar un disco que esté asociado a una máquina virtual, si lo haces cuando intentes arrancar la máquina virtual está lanzará un error al no encontrar el disco.

Problemas al intentar borrar una máquina virtual de VirtualBox

Es muy posible que cuando intentas borrar una máquina virtual de VirtualBox tengas este error.
# VBoxManage unregistervm Win2003Server -delete
VirtualBox Command Line Management Interface Version 2.1.4
(C) 2005-2009 Sun Microsystems, Inc.
All rights reserved.

[!] FAILED calling a->virtualBox->UnregisterMachine(uuid, machine.asOutParam()) at line 791!
[!] Primary RC = VBOX_E_INVALID_OBJECT_STATE (0x80BB0007) - Current object state prohibits operation
[!] Full error info present: true , basic error info present: true
[!] Result Code = VBOX_E_INVALID_OBJECT_STATE (0x80BB0007) - Current object state prohibits operation
[!] Text = Cannot unregister the machine 'Win2003Server' because it has 1 hard disks attached
[!] Component = Machine, Interface: IMachine, {ea6fb7ea-1993-4642-b113-f29eb39e0df0}
[!] Callee = IVirtualBox, {339abca2-f47a-4302-87f5-7bc324e6bbde}

Esto pasa cuando intentas borrar una máquina virtual que está asociada a un disco duro virtual. La verdad que los desarrolladores de VirtualBox podrían poner un modificador --force para forzar el borrado incluso de los discos duros asociados, pero mientras lo hacen y no hay que hacerlo poco a poco.

Primero tendrás que quitar la relación entre máquina virtual y disco duro, es decir, dejar la máquina virtual sin disco duros asociados. En mi caso solo tenía un disco duro, pero podría darse el caso de tener más de un disco asociado a la máquina virtual.
# VBoxManage modifyvm Win2003Server -hda none
VirtualBox Command Line Management Interface Version 2.1.4
(C) 2005-2009 Sun Microsystems, Inc.
All rights reserved.

Una vez desconectado el disco de la máquina virtual, podrás borrar la máquina sin problemas. Pero recuerda que aún tienes el disco duro registrado en el sistema de máquinas virtuales VirtualBox.
# VBoxManage unregistervm Win2003Server -delete
VirtualBox Command Line Management Interface Version 2.1.4
(C) 2005-2009 Sun Microsystems, Inc.
All rights reserved.

miércoles, 25 de febrero de 2009

Liberar espacio en VDIs de VirtualBox

Ya hemos visto como instalar VirtualBox y como crear máquinas virtuales, estas máquinas virtuales las instalábamos en discos virtuales (con extensión .vdi) que creamos con un tamaño máximo (VBoxManage createvdi -filename Disco1.vdi -size 30000 -register).

Podemos observar que el tamaño del fichero que contiene el disco virtual va creciendo conforma vamos instalando cosas en la máquina virtual. Pero ¿qué pasa cuando borro cosas de mi máquina virtual? lamentablemente el fichero .vdi continua ocupando el mismo espacio. Esto puede ser perjudicial para nuestro sistema, ya que teníamos previsto que pudiera llegar a 30GB pero no es molesto trabajar con ficheros tan grandes. Sobre todo si tenemos que hacer copias de seguridad de las máquinas virtuales.

Aquí tengo una solución para máquinas virtuales Microsoft Windows. En mi caso es un Windows 2003 Server, en el que puedo ver desde el sistema virtualizado que solo tiene ocupado 5GB, pero desde el sistema hospedador llega a 8.3GB.
/hdc# ls -lh
total 8,3G
-rw------- 1 root root 8,4G 2009-02-25 10:44 win2003server.vdi

Para solucionar este problema de espacio necesitamos descargar nullfile-1.2.exe, según he encontrado en está web, para Linux hay que descargar zerospace.c y compilarlo. Pero personalmente aún no lo he probado.

Para utilizar nullfile-1.2.exe, recomiendan desfragmentar un par de veces el disco virtualizado desde la máquina virtual y después ejecutarlo desde la máquina virtual. Cuando lo ejecutas se lanza un proceso que tarda algunos minutos, supongo que dependerá del tamaño del disco.

Una vez que ha terminado la ejecución apagas la máquina virtual y desde la máquina hospedadora ejecutas VBoxManage modifyvdi < disco virtual (.vdi) > compact, y este es el resultado.
/hdc# VBoxManage modifyvdi /hdc/win2003server.vdi compact
VirtualBox Command Line Management Interface Version 1.6.6
(C) 2005-2008 Sun Microsystems, Inc.
All rights reserved.

Shrinking '/hdc/win2003server.vdi': 0%...........10%..........20%..... ....70%..........80%..........90%..........100%
/hdc# ls -lh
total 4,4G
-rw------- 1 root root 1,6K 2009-02-25 11:18 2009-02-25-10-12-21.036-VBoxManage-3493.log
-rw------- 1 root root 4,4G 2009-02-25 11:18 win2003server.vdi

Como podéis ver el tamaño de mi fichero .vdi ha sido reducido considerablemente. He pasado de tener un fichero de 8.3GB a uno de 4.4GB. Ahora mis backup son mucho menos pesado, así que tardo menos tiempo en hacerlos.

jueves, 5 de febrero de 2009

Poner clave a un PDF

Después de mucho darle vueltas al tema lo he conseguido.

Necesitaba un programa para ejecuar desde linea de comandos que le pasara un PDF y le pusiera una clave. Encontré multitud de programas que lo hacían en entorno de escritorio, incluso encontré uno que lo hacía desde linea de comandos (PdfEncrypt). Pero este último lanzaba unas ventanas muy molestas cada vez que encriptaba un PDF.

Entonces fue cuando decidí crear mi propio encriptador de PDFs. Y buscando encontré unas librerías en Java para la manipulación de PDFs (itext) y además de otras muchas cosas podía encriptar PDFs. Así que me puse manos a la obra y este fue el resultado.
import java.io.FileOutputStream;
import java.io.File;
import com.lowagie.text.pdf.PdfEncryptor;
import com.lowagie.text.pdf.PdfReader;
import com.lowagie.text.pdf.PdfWriter;
/**
* Encriptador de PDFs
* @author José Manuel Ruiz Baena
*/
public class Main {
/**
* @param args the command line arguments
*/
public static void main(String[] args) {
String PdfOriginal,PdfEncriptado,Clave;
try{
PdfOriginal = args[0];
PdfEncriptado = args[1];
Clave = args[2];
}catch(Exception ex){
ayuda();
return;
}

try{
File pdf = new File(PdfOriginal);
if(pdf.exists()){
PdfReader reader = new PdfReader(PdfOriginal);
PdfEncryptor.encrypt(reader,
new FileOutputStream(PdfEncriptado),
Clave.getBytes(),
"".getBytes(),
PdfWriter.ALLOW_PRINTING,
false);
}else
System.out.println("El fichero no existe");
}catch ( Exception e ) {
e.printStackTrace();
}
}
//Ayuda, explica el orden a seguir para pasar los parámetros a la aplicación
public static void ayuda(){
System.out.println("Necesita definir algunos argumentos para que la aplicacion funcione correctamente.");
System.out.println("1- Ruta del PDF a encriptar");
System.out.println("2- Ruta del PDF destino");
System.out.println("3- Clave ");
}
}

Para crear tu propio encriptador de PDFs lo primero que tienes que hacer es descargar las librerías .jar de iText. Son algunos pasos, aquí tienes el primer .jar y después tendrás que descargar el resto con svn, aquí tienes explicado como hacerlo.

Una vez que tengas todas las librerías .jar te creas un proyecto en tu IDE y pegas el código que he puesto arriba. Después tendrás que incluir las librerías descargadas.

Teóricamente ya podrás ejecutar la aplicación que encripta PDFs, pero tendrás que pasarle los argumentos oportunos. Según el IDE de desarrollo que uses se hará una u otra forma.

Una vez construido el proyecto podrás ejecutarlo desde la linea de comandos con:
java -jar EncriptadorPDF < ruta pdf original > < ruta pdf encriptado > < clave >


Yo he usado NetBeans, porque con Eclipse al crear el .jar y ejecutarlo me marcaba errores del tipo "no encuentro la clases...", así que lo intenté con NetBeans y sin problemas. Simplemente construir el proyecto y él solo me crea el .jar con mi código fuente y un directorio lib con los .jar de itext.

miércoles, 4 de febrero de 2009

Coger notas con un iphone

Bueno realmente este aplicativo se puede usar en teléfonos con window$ mobile, pero como yo lo que tengo es un iphone pues el post irá dedicado a los iphoneros de la red.

Evernote es una aplicación muy útil para coger notas desde tu iphone y después tenerlas accesibles desde internet o desde la aplicación de escritorio que puedes usar desde tu MAC OS.

Puedes adjuntar fotos desde la cámara del iphone o directamente desde el carrete, muy útil para guardar las tarjetas de visitas que te ofrezcan.

Además cuando escribes una nota es capaz de detectar donde estás y puedes ver tu posición en maps.google.es

miércoles, 21 de enero de 2009

Conector JAVA contra un ODBC

Necesitaba hacer una conexión entre una aplicación de escritorio PHP con PHP+GTK (cuando tenga un rato publicaré algo sobre este tema). Pero no era capaz de conectar PHP con un ODBC del sistema, ya que el paquete PHP+GTK que uso para ejecutar la aplicación no contenía la librería necesaria para hacer una conexión ODBC.

Así que opté por crearme un conector en JAVA. Solo necesitaba una aplciación "tonta" que devolviera dos columnas de una tabla de una base de datos SQL Server. Así que programé esta clase:
import java.sql.*;
public class Lanzadora {
/**
* @param args
*/
public static void main(String[] args) throws Exception {
String DSN,Usuario,Clave,Opcion;
try{
DSN = args[0];
Usuario = args[1];
Clave = args[2];
Opcion = args[3];
}catch(Exception ex){
ayuda();
return;
}
Connection connection = DriverManager.getConnection("jdbc:odbc:"+DSN,Usuario,Clave);
if (connection != null) {
if(Opcion.compareTo("listado")==0)
listado(connection);
if(Opcion.compareTo("debug")==0)
infoConexion(connection);
}else
System.out.println("No fue posible establecer la conexión.");
}

public static void infoConexion(Connection connection) throws Exception {
System.out.println();
System.out.println("Successfully connected");
System.out.println();
// Meta data
DatabaseMetaData meta = connection.getMetaData();
System.out.println("Driver Information");
System.out.println("Driver Name: "+ meta.getDriverName());
System.out.println("Driver Version: "+ meta.getDriverVersion());
System.out.println("Database Information ");
System.out.println("Database Name: "+ meta.getDatabaseProductName());
System.out.println("Database Version: "+meta.getDatabaseProductVersion());
}

public static void listado(Connection connection)throws Exception{
// Get connection
Statement sentencia = connection.createStatement();
// listado de DNIs y CLAVES
String sql="SELECT campo1,campo2 FROM tabla WHERE campo3>0";
ResultSet result=sentencia.executeQuery(sql);
while(result.next())
System.out.println(result.getString(1)+";"+result.getString(2)+".");
}

public static void ayuda(){
System.out.println("Necesita definir algunos argumentos para que la aplicación funcione correctametne.");
System.out.println("1º nombre del DSN a utilizar");
System.out.println("2º nombre del usuario de la base de datos Epsilon");
System.out.println("3º contraseña del usuario");
System.out.println("4º opcion");
System.out.println(" listado (muestra el listado de DNIs y Claves)");
System.out.println(" debug (valida conexión)");

}
}

Como podéis ver solo necesito pasarle como parámetros el nombre del DSN, el usuario, la clave del usuario y la opción que quiero usar (listado o debug). Esto me devolverá en la salida estandar el listado como si fuera un fichero CSV.

Para ejecutar la clase y hacerla externa al entorno de desarrollo necesitaremos exportarla a fichero JAR. Yo particularmente uso como IDE Eclipse y en Eclipse para exportar un proyecto como JAR es muy sencillo, solo vas a "Archivo->Exportar...->Como fichero JAR" y sigues las instrucciones del asistente.

Una vez que tenemos el fichero .jar, solo tenemos que ejecutarlo con los parámetros correcto para obtener la relación de campo1 y campo2 de la base de datos.
java -jar fichero.jar < nombre del DSN > < usuario > < clave > < listado|debug >

martes, 20 de enero de 2009

rdesktop a pantalla completa sin perder funcionalidades

No conseguía hacer una conexión a un escritorio remoto Windows desde mi Ubuntu y después poder volver al escritorio de mi Ubuntu sin necesidad de cerrar la sesión del Windows, así que comencé a darle vueltas a ver que solución le podía dar. Y creo que la solución es buena.

Ejecutando desde linea de comandos directamente, utilicé el comando:
rdesktop -u Administrador -g 1024x720 -D xxx.xxx.xxx.xxx:3389

Este comando os abrirá la conexión con el escritorio remoto en una resolución de 1024x720, el standar es 1024x768. Así que ese puñado de pixeles que nos faltan son los de los paneles de Gnome (superior e inferior).

Al quitarle el decorador de ventanas (-D) no nos aparecerá el borde del terminal y simplemente nos tapará todo el escritorio dejando libres los dos paneles, de esta forma podemos seguir accediendo a las aplicaciones que tengamos en nuestro Ubuntu.

Yo tengo una pantalla pequeña (1024x768), si utilizas una pantalla con más resolución solo tendrás que ajustar el número de pixeles de alto, para dejar visibles los paneles de Gnome.

Ya solo tendrás que crear un lanzador para tener mucho más accesible la comunicación con el Windows que estás configurando.