Instalar LAMP con WordPress para backup de Blog en Raspberry PI 3

Aprovechando que esta semana pasada era algo así como vacacional aunque en mi caso ha resultado convaleciente, he dedicado mi tiempo a temas técnicos que me hacen olvidar la inmediatez, lo cual a veces resulta tranquilizante y otras perturbador, como por ejemplo aprender a manejar herramientas de diseño gráfico como Inkscape (para gráficos vectoriales) que necesito para crear portadas profesionales de los libros que próximamente iré maquetando con Scribus (otra necesidad imperiosa para lo mismo).

Entre las diversas tareítas que tenía pendientes, una de ellas era cada día más «acuciante» para la persona más obsesa de las copias de seguridad que conozco: Hacer BackUp de mi blog.

¡Y por fin lo he logrado!

Lo he restaurado repetidas veces en una Raspberry PI 3 que tengo desde hace unos meses y a la que le dedico unas cuantas horas a la semana. De momento, había instalado diversos sistemas operativos pensando que podía servir para sustituir a un PC viejuno, pero ha resultado ser mucho más útil como servidor de lo que sea, desposeída de pantalla y de la necesidad de un entorno gráfico que consume su escasa memoria RAM.

El proceso que he seguido (después de mucha «prueba y error») ha sido más o menos el siguiente:

_______________________________________________________________
Preparando LAMP para restauración de BLOG de giusseppe.net
Linux Apache Mysql Php
_______________________________________________________________

Para Instalar PHP 5 es preciso añadir al final de /etc/apt/sources.list
deb http://mirrordirector.raspbian.org/raspbian/ jessie main contrib non-free rpi

sudo apt-get update
sudo apt-get install -y apache2 mysql-server php5 php5-curl php5-cli php5-mysql php5-gd phpmyadmin ntfs-3g

(NO HACER) sudo apt-get install php7.0

Habilitar el módulo de reescritura en Apache
Opción 1.- sudo a2enmod rewrite
Opción 2.-
cd /etc/apache2/mods-enabled
sudo ln -s ../mods-available/rewrite.load

Y para que se use php5 en lugar de php7:
>>> sudo update-alternatives –set php /usr/bin/php5

Deshabilitar (php7.0) y habilitar (php5) en Apache:
sudo a2dismod php7.0
sudo a2enmod php5
sudo service apache2 restart

_______________________________________________________________
Preparar BASE DE DATOS para RESTAURAR el BLOG:

Crear una base de datos como la del blog con el usuario y contraseña del blog (ver datos en wp-config.config de Backup)
sudo mysql -u root -p

MariaDB [(none)]> create database carmend1_wrdp2;
MariaDB [(none)]> create user carmend1_wrdp2;
MariaDB [(none)]> set password for carmend1_wrdp2 = password("LADELARCHIVOCONFIGPHP");
MariaDB [(none)]> grant all PRIVILEGES on carmend1_wrdp2.* to carmend1_wrdp2@localhost identified by 'LADELARCHIVOCONFIGPHP';
/// PARA ASEGURARSE de QUE ESTÁ CREADO:
select User from mysql.user;
MariaDB [(none)]> exit;

_______________________________________________________________
Instalar WordPress (en /blog)
https://www.atareao.es/tutorial/raspberry-pi-primeros-pasos/wordpress-en-la-raspberry/
_______________________________________________________________

cd /var/www/html
sudo wget http://wordpress.org/latest.tar.gz
sudo tar xfz latest.tar.gz
sudo mv wordpress blog
sudo rm -f latest.tar.gz
sudo chown -R www-data:www-data /var/www/html
sudo find /var/www/html -type d -print -exec chmod 775 {} \;
sudo find /var/www/html -type f -print -exec chmod 664 {} \;

_______________________________________________________________
Copiar toda la estructura de archivos de
wp-content/upload /themes /others /plugins
Organizarla para que tenga estructura de carpetas

Opción 1.- Utilizar acceso NFS

Opción 2.- Instalar soporte NTFS para leer y montar pendrives:
(NO HACER si ya está hecho) sudo apt-get install ntfs-3g
sudo mkdir /media/mikomono
sudo chown pi:pi /media/mikomono
sudo mount -t ntfs-3g -o uid=pi,gid=pi /dev/sda1 /media/mikomono

Copiar el contenido del wp-content al blog (Según proceda modificar esto)
sudo cp -rf /media/mikomono/20180320/wp-content/. /var/www/html/blog/wp-content/.
Copiar wp-config.config en wp-config.php
sudo cp /media/mikomono/20180320/site-data/wp-config.config /var/www/html/blog/wp-config.php
cd
cp /media/mikomono/20180320/site-data/giusseppe.net-blog_wp.db .

_________________________
Restoring the WordPress Database Using MySQL Commands
Copiarlo previamente en ~/giusseppe.net-blog_wp.db
Modificar el número de prefijo de la base en el archivo.db de datos por wp_
_________________________

mysql -u carmend1_wrdp2 -p
CONTRASEÑA la de wp-config.config

mysql > use carmend1_wrdp2;
mysql > source giusseppe.net-blog_wp.db

Cambiar datos del dominio anterior (giusseppe.net) si procede a localhost o lo que sea
(en phpmyadmin)
UPDATE wp_posts SET guid = REPLACE ( guid, 'giusseppe.net/blog', 'raspi.net/blog' );
UPDATE wp_posts SET post_content = REPLACE ( post_content, 'giusseppe.net/blog', 'raspi.net/blog' );
UPDATE wp_postmeta SET meta_value = REPLACE ( meta_value, 'giusseppe.net/blog', 'raspi.net/blog' );

ALTERNATIVA:
Usar /media/GSPDISK/almacen/BackUps/BLOG/searchreplacedb2.php
(Copiar en /blog y acceder a ello)

Necesario también cambiar el fichero de configuración de Apache para el SITE:
/etc/apache2/apache2.conf
o añadir datos en sites-enabled/000-default.conf


..otras directivas aqui
AllowOverride All (Asegurarse que no es NONE)

Crear archivo /var/www/html/blog/.htaccess
_________________________________
# BEGIN WordPress

RewriteEngine On
RewriteBase /blog/
RewriteRule ^index\.php$ - [L]
RewriteCond %{REQUEST_FILENAME} !-f
RewriteCond %{REQUEST_FILENAME} !-d
RewriteRule . /blog/index.php [L]

# END WordPress
_________________________________

_______________________________________________________________
Cómo devolver acceso completo a root, si lo pierde, en MariaDB
(Versión por defecto de mysql-server)
_________________________
sudo mysql -u root

mysql>
use mysql;
update user set plugin='' where User='root';
flush privileges;
\q

sudo service mysql restart
_______________________________________________________________

_______________________________________________________________

REPONER PERMISOS en /var/www/html:

sudo chown -R pi:pi /var/www/html
sudo find /var/www/html -type d -print -exec chmod 775 {} \;
sudo find /var/www/html -type f -print -exec chmod 664 {} \;

REPONER PERMISOS en . (Si se es propietario de ese directorio)

find . -type d -print -exec chmod 775 {} \;
find . -type f -print -exec chmod 664 {} \;

Aprendiendo a maquetar a marchas forzadas con Scribus

Vivir en Linux es un poco como vivir a la contra. Nos obliga a estar siempre aprendiendo herramientas que el resto de personas no utiliza y no tenemos mucho soporte, además de que el desarrollo de las mismas depende de la buena voluntad de los programadores que tienen a bien dedicar parte de su tiempo o de su vida a crear aplicaciones de código abierto, intentando en un intento algo desesperado subvertir las reglas del mercado.

Hoy me veo en la tesitura de aprender a maquetar con Scribus, un programa que sirve para eso pero que dista mucho de ser intuitivo. Por no decir que ya ha tenido un cuelgue por no ser capaz de «importar texto» de un ODT de menos de 100 páginas.

No pienso tirar la toalla porque lo de ir a la contra va un poco conmigo, con mi carácter y con mi forma de pensar. Pero es tan cansado que apenas tengo tiempo para publicar en este diario una entrada digna de hoy.

Mientras tanto, sigo aprendiendo.

Spectre y Meltdown

Aparentemente, hay confirmada una enorme vulnerabilidad (enorme en cuanto a la cantidad de equipos afectados y a la profundidad de control que puede lograr un ataque exitoso) de seguridad en procesadores informáticos.

El ataque es a nivel hardware, prácticamente, lo que hace que dé igual el sistema operativo que lo gestione. Así que tanto Linux, Windows como MacOS, así como incluso Android e iPhones son víctimas potenciales de este tipo de ataques.

Un artículo bastante completo sobre el tipo de vulnerabilidad pero al mismo tiempo lo suficientemente claro para que legos en la materia pueden leerlo es el de CNET, web especializada de bastante prestigio en el ámbito de la seguridad informática.

El 2018 ha comenzado con un serio problema para los usuarios, pues esta vulnerabilidad aparentemente no tiene solución a nivel firmware (El firmware o soporte lógico inalterable es un programa informático que establece la lógica de más bajo nivel que controla los circuitos electrónicos de un dispositivo de cualquier tipo. Está fuertemente integrado con la electrónica del dispositivo, es el software que tiene directa interacción con el hardware, siendo así el encargado de controlarlo para ejecutar correctamente las instrucciones externas) sino que habría que modificar el diseño o funcionamiento intrínseco del hardware, lo que no es viable sino hasta dentro de varios meses (o cambiando a procesadores no afectados, lo que significa, más o menos, comprar un ordenador o dispositivo nuevo).

Por otro lado, teniendo en cuenta que la seguridad se mide por el eslabón más débil de una cadena, habría que cambiar todos los dispositivos de una misma red, por ejemplo, para sentirse mínimamente seguro ante esta posible amenaza, pero es algo casi inviable, pues incluye hasta el mismo router que tendrá, en muchos casos un procesador ARM vulnerable. (El LiveBox de Orange que tengo en casa tiene un MIPS que no consta en la lista de procesadores afectados).

Dicen en la web del artículo de CNET que la buena noticia es que los hackers necesitan instalar un software malicioso en su computadora para aprovechar estos defectos. Eso significa que necesitan seleccionar sus objetivos y piratear cada uno de ellos antes de ejecutar un ataque sofisticado para robar la información sensible de una computadora.

Pero un párrafo anterior han alertado sobre el hecho de que no sólo afecta localmente sino también a todo servidor del planeta, así que… poco que hacer al respecto.

¿Qué más da que mi equipo esté muy protegido si el de mi banco no puede estarlo? Por no decir el de mi servidor de correo, mi servidor web, mi nube, mi … Todo equipo es prácticamente vulnerable.

De momento, los primeros ataques serán poco sofisticados y afectarán a equipos domésticos casi con total certeza, especialmente a aquellos usuarios descuidados en su política de seguridad que ejecutan software en sus equipos sin ningún control (léase, usuarios de Windows) acostumbrados a pinchar botones de «Aceptar» casi sin mirar, descargando software de plataformas de dudosa reputación.

No se puede vivir con miedo, pero esta vulnerabilidad tan sólo pone sobre la mesa la imposibilidad de vivir tranquilo si se quiere estar pendiente de la seguridad. Eso no implica no ser responsable de la utilización que se hace de los dispositivos que, cada día más, tenemos omnipresentes en nuestras vidas.

Vamos a sufrir un ataque (varios ataques), hay que mentalizarse. Hay que relajarse y disfrutar. Estimar los daños. Valorar lo que se tiene. Pensar que casi todo lo que hay que proteger es cuestión de dinero. Y la vida es mucho más.

Mi recomendación particular, una y otra vez, es pasarse a Linux, no porque sean invulnerables sino porque los ataques irán principalmente destinados (al menos al principio) a Windows/Android/MacOS que son los sistemas operativos más extendidos. Posteriormente, los ataques serán desde los servidores y la defensa ante estos tipos de ataque es mucho más difícil de llevar a cabo. No usar servidores es desconectarse de Internet y es una de esas cosas que, en los tiempos que corren, resulta inconcebible y, en la mayoría de los casos, contraproducente incluso a riesgo de altas pérdidas.

URLarga: Feliz 2018

Este año, trabajando con las URLs, he decidido realizar 27 felicitaciones navideñas con este motivo, derivando a quien le dé por buscar si esas urls tienen algún sentido otro que el azaroso, al menos a esta entrada del diario que dedicaré a semejantes especímenes.

Programé un pedacito de código C (con VI, por supuesto, y «from scratch», como a mí me gusta) que ha generado 27 URLs únicas. Las he acomodado con GIMP/Linux sobre papel fotográfico que me regalaron con la impresora y al que no sabía qué uso dar.

Me gusta la unicidad del (pseudo)azar programable, que dota de cierto engañoso aura a cada una de las pequeñas piezas que, por momentos, pensé en personalizar, pero intervenía en el azaroso gestar de las mismas… Ya es suficiente con que las URLs comiencen con mi SLD (Second Level Domain), en lugar de un dominio generado al azar.


/*****************************************
urlarga.c

Programa crear URLs que no tengan ningún sentido
más que el azaroso.

Añado la dirección del servidor para que si alguien
quiere ir, al menos aparezca una mínima explicación
de en qué consiste el proyecto.

Derivo a una URL que contiene una búsqueda en mi blog
incluyendo la palabra "urlarga" que remitirá
a una entrada específica creada para tal fin.

*****************************************/

#include <stdio.h>
#include <stdlib.h>
#include <time.h>
#include <string.h>
#include <wchar.h>
#include <locale.h>

// Longitud de la URL formada, incluyendo el protocolo y el servidor
#define LONGITUD_MAX 729
// Para realizar 27 URLs arbitrarias
#define NUM_URLS 27

int main()
{
  setlocale(LC_CTYPE, ""); // Necesario para que funcionen las ñ
  
  int  i, j, letra, l_alfa, l_prot, l_serv, l_base;
  // Un alfabeto incluyendo algunos signos de puntuación
  wchar_t alfabeto[] = L"0123456789ABCDEFGHIJKLMNÑOPQRSTUVWXYZabcdefghijklmnñopqrstuvwxyz!!$%&/()=?¿¡,;:-_+ç";
  wchar_t URL[LONGITUD_MAX];
  wchar_t protocolo[] = L"http://";
  wchar_t servidor[] = L"giusseppe.net/blog/?s=feliz&2018&urlarga&";

  l_alfa = wcslen(alfabeto);
  l_prot = wcslen(protocolo);
  l_serv = wcslen(servidor);
  l_base = l_prot + l_serv;

  srand (time(NULL));

  for (j = 0; j < NUM_URLS; j++)
  {
    wmemset(URL, L'\0', LONGITUD_MAX);
    wcscpy(URL, protocolo); 
    wcscat(URL, servidor); 
    for (i = l_base; i < (LONGITUD_MAX-1); i++)
    {
      letra = rand() % l_alfa; // Obtenemos una letra (índice) al azar del alfabeto
      // Aleatoriamente, si el anterior no era un punto ni una /, ni estamos al final de la URL, ponemos un punto.
      if ((!(rand()%5)) && (URL[i-1] != L'.') && (URL[i-1]!=L'/') && (i != (LONGITUD_MAX-1))) URL[i]=L'.';
      else URL[i]=alfabeto[letra];
    };
    wprintf(L"|%ls|\n", URL);
  };
} // main()

Curl – Acceso comando HTTP

Desde hace tiempo vengo queriendo hacer una aplicación que consulte desde línea de comando el Diccionario de la RAE (DLE) para poder extraer su contenido y hacer búsquedas en las definiciones de las palabras, encontrando patrones como «hombre que» o «mujer que» que me resultan claramente machistas en muchos de los casos, cuando no, simple y meramente ridículas.

Caso hiriente es el de cocinillas:

cocinillas Tb. cocinilla. 1. m. coloq. Esp. Hombre que se entromete en las tareas domésticas, especialmente en las de cocina. 2. m. y f. coloq. Esp. Persona aficionada a cocinar. U. t. c. adj.

Pero se podría seguir y encontrar un gran número de ellas. Me parece muchísimo más grave y evidente (por razones obvias) que la invisibilidad o invisibilización que produce la ausencia de femeninos (ver: Alabardero, Miembro)

He encontrado documentación sobre el comando Curl (de unix, faltaría más) que es posible que pueda usar para lograrlo, pero tengo que dedicarle tiempo para poder «mentir» al sistema de DLE que no quiere que se haga esto por alguna razón que no alcanzo a entender.

https://curl.haxx.se/docs/httpscripting.html

Caracol

La más bella fotografía que creo haber hecho estas vacaciones.

La cámara es la de un móvil BQ Aquaris_A4.5, lunes, 31 julio 2017 a las 10:58:03 en la estación de FEVE de Tapia de Casariego.

Actualmente, la tengo como fondo de pantalla de mi escritorio Linux Mint Cinnamon en el Estudio de la Callo Costanilla donde trabajo desordenadamente en todos los frentes abiertos.

Actualízate

Desde ayer, Facebook ha decidido que el soporte para mi navegador es inadecuado, diciéndome que:

Para mejorar tu experiencia en Facebook, cambia a nuestro sitio básico o actualiza tu navegador.

Hasta aquí todo bien, al fin y al cabo es comprensible que no deseen realizar una aplicación web que dé soporte a todas y cada una de las posibles combinaciones de navegación que hay ahora mismo en manos de los internautas.

Pero cuando voy a ver la página que tienen para que me descargue un navegador «compatible» con su web, me doy cuenta de que la discriminación es por otro motivo:

Dado que yo tengo Chrome (entre otros) me sorprende que esté entre los navegadores soportados, no me queda duda que el problema es porque uso linux. Ah. Ahí está el problema. Parece que cuando me desaconsejó utilizar Chromium (la versión de Chrome para Linux de código abierto) por este mismo motivo y me pasé a Chrome no fue suficiente.

Barajo utilizar Firefox para esto de la red social, pero ya le estaba dando otros usos. Quizá sea una buena idea alejar esa actividad de las que ahora estoy realizando con Chrome, sin que proteste, como es Whatsapp-Web, Airdroid, este diario, la gestión del calendario (de Google), Wikipedia, Cuentas de correo electrónico y bancarias, alguna que otra compra online…

Por supuesto, aprovechan para recordarme que:

Descarga Facebook en tu celular
Mantente conectado en cualquier momento y en cualquier lugar.

Y eso sí que no lo van a lograr. Hace años que desinstalé las aplicaciones de redes sociales (FB/Twr/Inst…) de mi móvil y eso sí que no va a volver. Es muchísimo más relajado saber que, de cuando en cuando, puedo estar desconectado… jejejeje, para conectar con personas a quienes quiero y están lejos, familiares, amigas, etc. Como si tuviese un teléfono. 😉

Bueno, no es un problema al que dedicarle más de media hora para resolver. De momento, trataré de ignorar el mensaje en la parte superior de la navegación en Fb. Después, usaré Firefox, si es que no da problema por correr sobre un flamante Linux Mint, por último, si esto no es suficiente… ¡A tomar por culo!

Y punto pelota.

Siempre mejor en Linux

Estoy haciendo un arreglo de un PC de una alumna que me ha pedido que «limpie» su portátil con windows 8 instalado e instale un windows (ella no sabe muy bien cuál, así que me inclinaré por bajarle a windows 7, que es el sistema que venía de serie con el PC, para el cual ella tiene, por tanto, número de licencia válido).

Afortunadamente, me proporcionó un disco externo USB-3.0 en el que cabe perfectamente todo lo que tiene en el antiguo PC. No me he preocupado por ver qué es útil rescatar y qué no. Es una pérdida de tiempo. Lo incluyo todo. Pero lo hago en Linux.

Para evitarme el molesto windows y sus lentas aplicaciones, arranco desde un pen-drive con un linux live (en concreto LXLE) que me permite montar las 2 particiones que tiene en el disco interno del PC y el disco externo USB 3.0, para hacer la copia de los archivos sin tocar windows… que parece que mancha.

Después, instalaré el W7 home y espero que todo le vaya bonito.

Avisada está de que sólo le instalaré software con licencia o open-source, que entre otras cosas tiene la ventaja de ser más seguro. Lo que es muy de agradecer en el mundo windows.

Así que terminaré, supongo, en un par de horas (dedicadas).

Y espero que le guste.

concilioinmente (Un jugueteo con las palabras y los Concilios)

Hoy encontré la frase «El Concilio de Trento se reunió de forma intermitente de 1555 a 1563» mientras leía el libro de IDEAS (IDEAS. Historia Intelectual de la Humanidad. ISBN 9788474239171. PETER WATSON) y me vinieron a la mente inmediatamente dos palabras que podrían haberse podido usar en lugar de intermitente, que eran impertinente e impenitente. Pero seguro que habría otras, así que aprovechando la disponibilidad de un diccionario en modo texto plano (en realidad una lista de las palabras/entradas del mismo) me dispuse a realizar un pequeño programita que las fabricase:

#!/bin/bash
# Escribe la oración siguiente
# "El Concilio de Trento se reunió de forma INTERMITENTE de 1544 a 1563"
# sustitiyendo INTERMITENTE por otra palabra que comience por in o im
# y termine por "ente", sin ser de tipo "mente", pues poca hubo.

listapalabras=`grep -E '^in|^im' diccionario.txt|grep 'ente$'|grep -v 'mente$'`

for palabra in $listapalabras; do
  echo -e "El Concilio de Trento se reunió de forma" $palabra "de 1544 a 1563"
done

Una salida de la ejecución del mismo sería:

El Concilio de Trento se reunió de forma impaciente de 1544 a 1563
El Concilio de Trento se reunió de forma impediente de 1544 a 1563
El Concilio de Trento se reunió de forma impelente de 1544 a 1563
El Concilio de Trento se reunió de forma impenitente de 1544 a 1563
El Concilio de Trento se reunió de forma impertinente de 1544 a 1563
El Concilio de Trento se reunió de forma imponente de 1544 a 1563
El Concilio de Trento se reunió de forma impotente de 1544 a 1563
El Concilio de Trento se reunió de forma improcedente de 1544 a 1563
El Concilio de Trento se reunió de forma impropiamiente de 1544 a 1563
El Concilio de Trento se reunió de forma imprudente de 1544 a 1563
El Concilio de Trento se reunió de forma impudente de 1544 a 1563
El Concilio de Trento se reunió de forma inapetente de 1544 a 1563
El Concilio de Trento se reunió de forma inasistente de 1544 a 1563
El Concilio de Trento se reunió de forma incandescente de 1544 a 1563
El Concilio de Trento se reunió de forma incidente de 1544 a 1563
El Concilio de Trento se reunió de forma inciente de 1544 a 1563
El Concilio de Trento se reunió de forma incipiente de 1544 a 1563
El Concilio de Trento se reunió de forma incluyente de 1544 a 1563
El Concilio de Trento se reunió de forma incoherente de 1544 a 1563
El Concilio de Trento se reunió de forma incompetente de 1544 a 1563
El Concilio de Trento se reunió de forma inconducente de 1544 a 1563
El Concilio de Trento se reunió de forma inconfidente de 1544 a 1563
El Concilio de Trento se reunió de forma incongruente de 1544 a 1563
El Concilio de Trento se reunió de forma inconsciente de 1544 a 1563
El Concilio de Trento se reunió de forma inconsecuente de 1544 a 1563
El Concilio de Trento se reunió de forma inconsiguiente de 1544 a 1563
El Concilio de Trento se reunió de forma inconsistente de 1544 a 1563
El Concilio de Trento se reunió de forma incontinente de 1544 a 1563
El Concilio de Trento se reunió de forma inconveniente de 1544 a 1563
El Concilio de Trento se reunió de forma indecente de 1544 a 1563
El Concilio de Trento se reunió de forma indeficiente de 1544 a 1563
El Concilio de Trento se reunió de forma indehiscente de 1544 a 1563
El Concilio de Trento se reunió de forma independente de 1544 a 1563
El Concilio de Trento se reunió de forma independiente de 1544 a 1563
El Concilio de Trento se reunió de forma indiferente de 1544 a 1563
El Concilio de Trento se reunió de forma indigente de 1544 a 1563
El Concilio de Trento se reunió de forma indolente de 1544 a 1563
El Concilio de Trento se reunió de forma indulgente de 1544 a 1563
El Concilio de Trento se reunió de forma ineficiente de 1544 a 1563
El Concilio de Trento se reunió de forma inexistente de 1544 a 1563
El Concilio de Trento se reunió de forma infidente de 1544 a 1563
El Concilio de Trento se reunió de forma influente de 1544 a 1563
El Concilio de Trento se reunió de forma influyente de 1544 a 1563
El Concilio de Trento se reunió de forma infrecuente de 1544 a 1563
El Concilio de Trento se reunió de forma ingente de 1544 a 1563
El Concilio de Trento se reunió de forma ingrediente de 1544 a 1563
El Concilio de Trento se reunió de forma inherente de 1544 a 1563
El Concilio de Trento se reunió de forma inmanente de 1544 a 1563
El Concilio de Trento se reunió de forma inminente de 1544 a 1563
El Concilio de Trento se reunió de forma inmunodeficiente de 1544 a 1563
El Concilio de Trento se reunió de forma innocente de 1544 a 1563
El Concilio de Trento se reunió de forma inobediente de 1544 a 1563
El Concilio de Trento se reunió de forma inocente de 1544 a 1563
El Concilio de Trento se reunió de forma insipiente de 1544 a 1563
El Concilio de Trento se reunió de forma insistente de 1544 a 1563
El Concilio de Trento se reunió de forma insolente de 1544 a 1563
El Concilio de Trento se reunió de forma insolvente de 1544 a 1563
El Concilio de Trento se reunió de forma instridente de 1544 a 1563
El Concilio de Trento se reunió de forma insubsistente de 1544 a 1563
El Concilio de Trento se reunió de forma insuficiente de 1544 a 1563
El Concilio de Trento se reunió de forma insulinodependiente de 1544 a 1563
El Concilio de Trento se reunió de forma insurgente de 1544 a 1563
El Concilio de Trento se reunió de forma inteligente de 1544 a 1563
El Concilio de Trento se reunió de forma intercadente de 1544 a 1563
El Concilio de Trento se reunió de forma intercurrente de 1544 a 1563
El Concilio de Trento se reunió de forma interdependiente de 1544 a 1563
El Concilio de Trento se reunió de forma intermitente de 1544 a 1563
El Concilio de Trento se reunió de forma interviniente de 1544 a 1563
El Concilio de Trento se reunió de forma interyacente de 1544 a 1563
El Concilio de Trento se reunió de forma intransigente de 1544 a 1563
El Concilio de Trento se reunió de forma intrascendente de 1544 a 1563
El Concilio de Trento se reunió de forma intumescente de 1544 a 1563
El Concilio de Trento se reunió de forma invidente de 1544 a 1563

Trabajo que no se ve

Esto forma parte del trabajo de un poeta y una bailarina de tango… ¿o no?

Toda profesión tiene sus pros y sus contras. No lo duda nadie, ya que, entre otras cosas, es un tópico.

Llevo toda la semana pegándome con código fuente HTMl y aprendiendo nuevas cosas sobre «webs responsive», para terminar de hacer pública la web de Clave 53.

Y quedan por arreglar pequeñeces (o no tanto) como la política de cookies que no resulta nada sencilla de implementar ni, mucho menos, satisfacer legalmente de manera estricta.

un día de trabajo

Esto no es una broma