Copia de seguridad automática de un blog WordPress – Parte 1: Crear la copia de los ficheros y base de datos

[blog]

Hace ya tiempo que estoy concienciado de lo importante que son las copias de seguridad, pero aún así no siempre me acuerdo de tener las copias al día. Es por esto que lo ideal es tener todo el proceso automatizado, pero no todos los servidores web nos ofrecen esta opción. Hasta ahora siempre he usado hostings gratuitos. El servicio no era el mejor y tiene múltiples inconvenientes, pero sobre todo se quedan muy pobres en las opciones que ofrecen para realizar copias de seguridad. Esto, unido a que tras actualizarme a la última versión de WordPress empezó a fallar el blog, me decidieron a buscar un servidor de pago.

Mis requisitos eran tener acceso al servidor por SSH y poder crear tareas CRON. Tras comparar algunas opciones, me decidí por 1and1, que tenía el mejor precio y cumplía con mis requisitos. He leído que su servicio de atención al cliente no es el mejor, pero las dudas que yo he tenido me las han respondido con rapidez.

Dicho esto, empecemos con la copia de seguridad:

Yo tengo el WordPress en el directorio raíz del FTP. Debería haberlo puesto en una subcarpeta, pero ahora ya no me apetece cambiar, así que se queda así y buscaré como solucionar los problemas que salgan.

En el mismo directorio raíz he creado una carpeta llamada backup. Lo primero será impedir el acceso a esta carpeta. Para ello en el fichero .htaccess que también se encuentra en el raíz, añadimos lo siguiente:

<IfModule mod_rewrite.c>
RewriteEngine On
RewriteBase /
RewriteCond %{HTTP_HOST} ^(www.)?la-url-de-tu-web.com$
RewriteRule ^backup - [F]
</IfModule>

En esta carpeta de backup tendremos dos ficheros que se encargarán de hacer las copias de seguridad de la base de datos y de los ficheros. Empecemos con la copia de seguridad de la base de datos. El fichero se llamará wordpress-backup-files.sh y su contenido será el siguiente:

#!/bin/sh
tar czf /path-to-files/backup/`date "+%Y%m%d-%H-%M"`-wordpress-files.tar.gz /path-to-files/ --exclude='/path-to-files/backup' --exclude='/path-to-files/backup/*' --exclude='/path-to-files/logs' --exclude='/path-to-files/logs/*'

El primer parámetro será el nombre del fichero con el contenido del blog. Se genera automáticamente con la fecha. Los --exclude especifican que ficheros y carpetas no queremos añadir a la copia. En este caso, como nuestra carpeta de backup está al mismo nivel que el resto, la excluimos, así como su contenido, y hacemos lo mismo con la carpeta de logs.

La segunda parte será hacer una copia de seguridad de la base de datos. De ello se encargará el fichero wordpress-backup-bd.sh cuyo contenido será:

mysqldump -h [host de la base de datos] -u [usuario] -p[contraseña] [nombre de la base de datos] | gzip > /path-to-files/backup/$(date +%Y%m%d-%H-%M)-wordpress-mysql.gz

Por último tendremos que programar el cron para que ejecute estos dos ficheros. En mi caso lanzaré la copia de seguridad el domingo a las 3:00 la base de datos y a las 3:30 los ficheros:

#Weekly database backup
0 3 * * 0 /path-to-files/backup/wordpress-backup-bd.sh

#Weekly files backup
30 3 * * 0 /path-to-files/backup/wordpress-backup-files.sh

Watch order for Monogatari Series anime episodes

[anime]

[UPDATE 2]: Added Owarimonogatari.

[UPDATE]: Added Hanamonogatari and Tsukimonogatari.

With already four completed seasons, another to be aired later this year and a movie that will premiere sometime in the future, it can get a little confusing what is the correct order to watch all Monogatari episodes. These are the most common proposals:

By airing date:

  1. Bakemonogatari (15 episodes)

  2. Nisemonogatari (11 episodes)

  3. Nekomonogatari: Kuro (4 episodes)

  4. Monogatari Series Second Season (26 episodes)

  5. Hanamonogatari (5 episodes)

  6. Tsukimonogatari (4 episodes)

  7. Owarimonogatari

  8. Kizumonogatari (Premiere date not confirmed)

By chronological order:

  1. Kizumonogatari

  2. Nekomonogatari: Kuro

  3. Bakemonogatari

  4. Nisemonogatari

  5. Owarimonogatari (Ougi Formula, Sodachi Riddle, Sodachi Lost)

  6. Monogatari Series Second Season

  7. Tsukimonogatari

  8. Hanamonogatari

And lastly, I will propose a third option. This one follows the publishing order of the light novels by Nisio Ishin.

By light novel publishing date:

  1. Bakemonogatari

  2. Kizumonogatari

  3. Nisemonogatari

  4. Nekomonogatari: Kuro

  5. Monogatari Series Second Season (Nekomonogatari (Shiro), Kabukimonogatari)

  6. Hanamonogatari

  7. Monogatari Series Second Season (Otorimonogatari, Onimonogatari, Koimonogatari)

  8. Tsukimonogatari

  9. Owarimonogatari

Use BeautifulSoup with Spyder

[programming]

I have been trying various IDE for working with Python on my Mac and I have finally decided for using Spyder. I would be using Ninja IDE since I had previous experience with it in Windows and Linux, but for whatever reason, it has no compiled build for Mac, and I was not in the mood to try and build it myself from source code, so I’m going with Spyder.

I’m linking it quite a bit. Al least for the simple projects I’m working on it’s more than enough. I’m also using the BeautifulSoup library to extract web page info, and after following the installation instructions in it’s web page, my script in Spyder did not find the library.

After a little research, problems seems to be that Spyder uses it’s own version of Python, so it could not detect the Python libraries I had installed. To solve it, we have to tell Spyder to use the Python we have installed. We go to:

Spyder -> Preferences… -> Console -> Advanced settings

Then we select the Use the following Python interpreter option, and in my case, the path is /usr/bin/python

Usar BeautifulSoup con Spyder

[programación]

He estado mirando varios IDE para Python en Mac y al final me he decidido por usar Spyder. Habría usado Ninja IDE porque ya lo he usado anteriormente en Linux y Windows y me gusta bastante, pero por algún motivo no ofrecen una versión compilada para Mac, y no tenía ganas de ponerme a hacerlo funcionar desde el código fuente, así que estoy probando Spyder.

De momento me está gustando bastante. Al menos para las cosas sencillas que estoy haciendo es suficiente. Estoy usando la librería BeautifulSoup para extraer información de páginas web y aunque la había instalado siguiendo las instrucciones en su web, al lanzar el script de Python no la estaba encontrando.

Tras investigar como utilizar BeautifulSoup con Spyder, el problema consiste en que Spyder utiliza su propio Python que trae integrado, por lo que no detecta las librerías instaladas en el Python del Mac. Para solucionarlo hay que indicar que debe usar el Python del Mac en la configuración de Spyder. Para ello vamos a:

Spyder -> Preferences… -> Console -> Advanced settings

Seleccionamos la opción Use the following Python interpreter: y en mi caso la ruta es /usr/bin/python

La mano izquierda de la oscuridad

[literatura]

Portada de la versión inglesa del libro La mano izquierda de la oscuridad

Sigo comentando los libros que voy leyendo. En este caso se trata de La mano izquierda de la oscuridad (The left hand of darkness en su inglés original). La verdad es que a partir del título no tenía muy claro de que iba a tratar el libro, y me sorprendió gratamente.

La raza humana se ha desperdigado por la galaxia y tras milenios de separación los humanos de cada planeta han evolucionado de formas distintas. Una organización está intentando agrupar a los distintos planetas para el intercambio de ideas y culturas, así que envían a un emisario para negociar la incorporación del planeta a la organización.

Aunque el trasfondo es claramente de ciencia-ficción, el libro se centra en las relaciones personales que ocurren entre individuos con formas de pensar y fisiologías muy distintas, pero los personajes son tan interesantes que la historia te absorbe muy rápidamente.

¿Lo recomiendo?

Startup Weekend Valencia vs Global Game Jam Gandia

[reflexiones]

Hace unos meses participé en la Startup Weekend Valencia, y quería haber escrito comentando la experiencia, pero no quería ser injusto con el evento, y siendo que no tenía experiencia previa con este formato, decidí no criticar.

Sin embargo, el fin de semana pasado asistí a la Global Game Jam en Gandia. Está claro que son dos eventos muy distintos. En uno el objetivo es sacar una idea adelante mientras que en el otro se intenta crear un juego desde cero. Sin embargo la mecánica es muy similar: Conoces a un montón de gente, creas un equipo y tienes 2 días para hacer algo.

La diferencia consiste en que en la Global Game Jam lo principal es el buen rollo entre los asistentes. Al final del evento los juegos se presentan y se puntuan, pero el premio es un peluche para el equipo ganador, y por tanto la esencia del evento está en conocer a gente nueva y aprender.

Sin embargo, la Startup Weekend ofrece un premio económico para el ganador, además de un viaje, y eso hace que aún existiendo bastante buen rollo entre los participantes, la esencia del evento es ganar, lo que puede inducir a prácticas no del todo honestas. Está claro que conoces a gente y obtienes contactos para más adelante, pero el evento en sí no es tan gratificante.

Por estas razones tengo ganas de volver a participar en la Global Game Jam del año que viene, y sin embargo no tengo ningún interés en la próxima Startup Weekend. Pero para gustos los colores, así que si te pica la curiosidad, participa al menos una vez.

Impedir que se apage la pantalla al ver un vídeo flash a pantalla completa en Ubuntu

[linux] [programación]

Hace unas semanas abandoné Windows XP definitivamente para pasarme a Linux Ubuntu y la verdad es que estoy encantado. Muchos de los inconvenientes que recuerdo de veces anteriores en las que he intentado usar Linux han desaparecido y el ordenador ha encontrado una segunda juventud, funcionando más rápido de lo que ha ido nunca.

Pero como no, algunas cosillas siguen siendo muy de Linux, como por ejemplo que cuando estoy viendo un vídeo flash a pantalla completa, Ubuntu considere que no estás haciendo nada e intente apagar la pantalla. Esto supongo que es problema de flash, porque con el VLC no pasa.

En esta página explican como solucionar el problema, desactivando y activando el economizador de energía cuando se detecta un alto uso del procesador, pero esta solución no me estaba funcionado, así que opté por la solución más sencilla, mover el ratón un píxel cada 5 minutos. Así que cuando voy a ver un vídeo largo, lanzo el script y evito que se apague la pantalla.

Aquí tenéis el código, que cada 5 minutos mueve el ratón un píxel a la derecha, y después un píxel a la izquierda.

#!/usr/bin/env bash

sleep_period=5m

while true; do
  xdotool mousemove_relative 1 0
  xdotool mousemove_relative -- -1 0

  sleep ${sleep_period}
done

El programa xdotool no viene por defecto con Ubuntu,  pero lo podéis encontrar en el “Centro de software de Ubuntu”. También recordad cambiar los permisos de ejecución con chmod +x

Recomendaciones de anime – Temporada de otoño 2013

[anime]

Anime de la temporada de otoño 2013

Haciendo un repaso a las nuevas series de esta temporada, por un momento he pensado que no tenía nada que recomendar. Algo bueno hay, pero no terminará hasta la temporada que viene, por lo que todavía no lo puedo recomendar. Menos mal que he recordado un anime de la temporada anterior, y que ahora termina. ¡Gracias Shaft!

Monogatari Series Second Season

Como no, tenía que ser la serie Monogatari quien salvara la papeleta. Que puedo decir que no haya dicho antes. Me encantan sus personajes, sus situaciones, el arte y la animación, la música… La única crítica que le hago siempre es que le sobra un poco de fanservice. Pero se perdona porque esta ha sido la adaptación más larga hasta la fecha, con un total de 26 episodios, 3 de ellos de recapitulación, cubriendo 5 historias. Pese a algún episodio más flojo, el nivel de las historias ha sido alto, avanzando por fin la trama, ya que en Nisemonogatari apenas se vio evolución de la historia. Y próximamente saldrá la película, ¡que ganas! 😀

Libro: Neuromante

[literatura]

Portada del libro Neuromante

Voy a intentar hacer algunas críticas de los libros que voy leyendo. Si alguien espera encontrar una crítica bien detallada, con un análisis profundo de cada libro, aquí no la va a encontrar. Esto van a ser más bien mis impresiones del libro en cuestión, y si a alguien le son útiles, bienvenidas sean.

Neuromante es un libro de ciencia ficción con temática cyberpunk. Ganó el premio Hugo en 1985, pero debió de ser un año flojo, porque la historia es más bien simple, los personajes poco memorables y bastante planos, y en conjunto el libro tiene apenas un par de momentos interesantes. Esto unido a un estilo de escritura un tanto pobre, lo convierten en un libro que me costo esfuerzo terminar. Supongo que la temática “hacker” llamaría la atención en su día, pero me da la impresión que es un libro que no ha soportado la prueba del tiempo.

¿Lo recomiendo? NO

Excluir tus propias visitas de las estadísticas de Google Analytics

[internet]

Aquí hay un buen tutorial sobre como hacer esto mediante una cookie, a diferencia de hacerlo con el filtrado de IP, ya que si no tienes una IP estática, no es una solución satisfactoria.

Sin embargo, la solución que se ofrece en el enlace no funciona con el código asíncrono que utiliza actualmente Google Analytics. La solución es usa la función push para almacenar la variable:

_gaq.push(['_setVar','stop_counting_me']);

Podemos meter esta línea dentro del código del Google Analytics en la página stopcountingme.html, quedando de la siguiente manera:

var _gaq = _gaq || [];
_gaq.push(['_setAccount', 'UA-XXXXXXXX-X']);
_gaq.push(['_trackPageview']);
_gaq.push(['_setVar','stop_counting_me']);
(function() {
    var ga = document.createElement('script');
    ga.type = 'text/javascript';
    ga.async = true;
    ga.src = ('https:' == document.location.protocol ? 'https://ssl' : 'http://www') + '.google-analytics.com/ga.js';
    var s = document.getElementsByTagName('script')[0];
    s.parentNode.insertBefore(ga, s);
})();