Cargando información de archivos de texto en Java

Como seguramente sabreis, cuando se compila en Java, no se genera un programa ejecutable, sino que se compila en un código intermedio llamado bytecode, que es el que la máquina virtual de Java (JVM) se encarga de interpretar en tiempo de ejecución.

Este código se guarda en unos archivos .class que a su vez se empaquetan en un archivo .jar, junto con información de la clase principal y otros archivos, como los archivos de recursos, que es de lo que trata este artículo.

Continuar leyendo «Cargando información de archivos de texto en Java»

Look & Feel nativo en Windows con Swing

Una de las ventajas que tiene Java respecto a otros sistemas es la capacidad de adaptarse a los diferentes sistemas operativos, y de adaptarse a las diferentes interfaces usando Swing, aunque si bien es cierto que la aplicación funciona, no lo hace todo lo «bonito» que queremos, al menos eso me ocurrió a mí, sin embargo sí que podemos conseguir una aplicación que «de el pego» haciendo lo siguiente:

  • Detectar qué sistema operativo estamos ejecutando.
  • Aplicar el tema correspondiente a nuestra aplicación.

Lo que en código se traduce a:

String os = System.getProperty("os.name").toLowerCase();
String name = "com.sun.java.swing.plaf.windows.WindowsLookAndFeel";
if (os.indexOf("win") >= 0) {
     try {
          UIManager.setLookAndFeel(name);
     }
     catch (Exception e) {}
}

Lo que hemos hecho ha sido, obtener el identificador del sistema operativo y transformarlo a minúsculas:

String os = System.getProperty("os.name").toLowerCase();

Una vez hecho esto, lo comparamos con el identificador deseado (en este caso, «win»):

if (os.indexOf("win") >= 0) {}

Finalmente, en caso de ser correcto, aplicamos el tema del sistema:

try {
     UIManager.setLookAndFeel(name);
}
catch (Exception e) {}

Es importante destacar que esta última sentencia ha de ir rodeada por un try … catch, ya que en caso contrario el compilador nos devolverá un error.

Espero que os haya sido tan útil o más de lo que me fue encontrar esto en su momento

Para más información: Documentación de Java (en inglés)

Automatizando tareas remotamente usando cron

Hoy os voy a hablar de una herramienta que he descubierto hace poco, que es la utilidad cron, presente en casi todos los sistemas unix, como por ejemplo los servidores linux a los que tienes acceso vía SSH.

¿Qué es cron?

Cron es un programa que se ejecuta residente en el sistema y que realiza diversas acciones con los intervalos que nosotros expresemos, con lo cual, lo podríamos usar, por ejemplo, para que todos los días a las 12 hiciera un zip con nuestras prácticas y nos lo pusiera en el escritorio o lo guardara en un disco duro externo (por ejemplo :P)

En este ejemplo, lo que voy a hacer es configurar el cron para que cada 5 minutos haga un backup de una base de datos MySQL (concretamente una instalación wordpress), la comprima y me la envíe por e-mail (esto no es recomendable para el uso general, ya que puede provocar sobrecarga, pero para un par de pruebas es bastante visual).

1. Configurando el archivo de cron vía ssh.

Lo primero que necesitamos es una terminal con acceso ssh al servidor que queremos automatizar, si tenemos acceso físico, se siguen los mismos pasos.

Una vez iniciada la sesión en el servidor remoto, veamos los comandos que podemos usar, que serán dos, fundamentalmente

crontab -l
crontab -e

El primero lista los trabajos que tiene nuestro usuario asignado, mientras que el segundo nos permite editar el achivo utilizando vi.

Para editar el archivo, usamos el comando anteriormente señalado y se nos mostrará una ventana de vim, vacía, pulsamos i para entrar en modo insertar, y una vez dentro escribimos en la primera línea

*/5 * * * * myscript.sh

Los asteriscos tienen su significado, son 5:

  • El primero mide minutos (0-59)
  • El segundo mide horas (0-23)
  • El tercero mide días del mes (1-31)
  • El cuarto mide meses del año (1-12)
  • El quinto mide días de la semana (1 =lunes, 6 = sabado, 0 ó 7 = domingo )

Una cosa más, si lo que queremos es que se ejecute, cada 5 min, cada 6 horas, o algo así, ponemos un / antes del valor.

Un ejemplo de programa que quisieramos ejecutar todos los lunes a las 12:45 sería así:

45 12 * * 1 myscript.sh

Importante los asteriscos se conservan, porque significa, en cualquier momento, es decir, un asterisco en el día significa cualquier día, dentro de las restricciones.

2. Configurando nuestro script de backup

Como veis, la tarea que hemos asignado al cron es ejecutar un archivo sh para que haga las tareas que queremos, a continuación os pongo un ejemplo del archivo que he usado yo:

#dando valores iniciales
DBNAME=nombre
DBPASS=password
DBUSER=root
EMAIL="e@mail.com"
#volcamos el contenido de la base de datos
/path/to/mysqldump --opt -u $DBUSER -p$DBPASS $DBNAME >> backup.sql
#comprimimos el archivo
gzip backup.sql
#lo renombramos para incluir la fecha
DATE=`date +%Y%m%d` ; mv backup.sql.gz $DBNAME-backup-$DATE.sql.gz
#lo enviamos por e-mail
echo 'Backup del sitio web' | mutt -a $DBNAME-backup-$DATE.sql.gz $EMAIL -s "Backup del sitio web"
#borramos el archivo de los servidores
rm $DBNAME-backup-$DATE.sql.gz

Y con esto bastaría, solamente un par de anotaciones:

  • Es importante tener cuidado con las rutas en el archivo cron.
  • Si el comando devuelve un archivo vacío (0 bytes), es que el path de mysqldump es erróneo, aseguraos que lo poneis correctamente.
  • destacar que el sistema, cuando ejecuta un cron, no obtiene los valores del PATH del usuario de la shell, sino que tiene los del sistema, de ahí que haya que poner la ruta completa.

Espero que os sea de utilidad:

Para más información

cron (Unix) Wikipedia

WordPress Backup with Cron Tamba2.org.uk

Cómo recuperar una instalación de wordpress y no morir en el intento

Ayer, a eso de las 12, me entero de que amby.net, una web que gestiono, de repente, se había caido y mostraba la típica página del hosting, ante lo cual reacciono de la siguiente manera:

1. Clamar al cielo

2. Mandarle recuerdos a los familiares cercanos al administrador del hosting

3. Averiguar qué ha sucedido.

Pasemos al tercer paso directamente, lo que había pasado era que el contrato con el servidor del hosting había terminado, y, sin previo aviso, habían borrado toda la web. Por suerte aún funcionaba el dominio.  Tras algun otro conflicto y pagar la renovación, aún quedaba restaurar todo a su estado original, por suerte, hace unos meses, había hecho una copia de seguridad de la base de datos, antes de instalar una nueva versión de WordPress.

Primeramente había que activar la base de datos mysql que viene con el hosting, después, restaurar los datos utilizando phpmyadmin, o un gestor similar (un detalle importante, es que hay que seleccionar la base de datos en el gestor antes de ejecutar el archivo sql, de lo contrario tendremos problemas importantes), esto se llevó a cabo sin problemas.

Una vez teníamos la base de datos recuperada, el resto era coser y cantar, descargar la última versión de WordPress (o en este caso usar la versión 2.7 que tenía guardada), subirla usando algún gestor ftp (en mi caso Cyberduck, que cumplió su trabajo), y comprobar que, efectivamente, funciona.

Finalmente, solo queda usar el instalador de WordPress para actualizar los datos (teniendo en cuenta que la versión guardada era anterior a la actualización, en otro caso puede no ser necesario), habilitar Akismet (imprescindible), cargar los temas, los plugins, etc, para poder tener la web lista… a las 00.36, no está mal, eh?

Hay que tener en cuenta que todo el proceso de restauración no duró más de una hora, y que el resto del tiempo fue solucionar problemas burocráticos con el hosting, y personalizar la instalación.

Recomendaciones finales:

1. Tener una copia de seguridad de la Base de datos, así como de los instaladores, temas, y plugins.

2. Guardar una captura de pantalla del aspecto que guarda la web, por si la tienes que recuperar.

3. Tener mucha paciencia, estas cosas pueden pasar cuando menos te lo esperas, en mi caso me pilló en clase.