Wallapop

Estoy vendiendo lo poco que tengo que no uso, a través de la cuenta de Carmen en esa plataforma para venta de objetos de segunda mano para pagar alguna cosa de primera mano que me he visto forzado a comprar para los talleres online.

Es curioso pero hay personas que compran cosas que no se me ocurriría nunca.

El sábado pasado nos quitaron de las manos, como quien dice, un móvil de 2015 que casi no funcionaba, pero sí, arranca y puedes instalar aplicaciones menores y por supuesto el teléfono es operativo para llamar.

Tras varios años de uso con las aplicaciones de aquella época lejana, me vi usándolo como servidor ftp en casa y, más recientemente, usado por Carmen como router o «punto de acceso wifi» con una tarjeta adicional para conectar su teléfono móvil o su tablet en Ciudad Real.

Pero ya no creía que nadie iba a dar nada por él, así que pedí 40€ pero estaba dispuesto a dejarlo en 25€ o casi lo que fuera. Lo único que hacía de un tiempo a esta parte era acumular polvo. Tristeza de 110€ que se devaluó el aparatejo en sus 6 años de vida.

Y así, sin más dilación, subí el anuncio a ese servicio, con unas pocas fotos y en menos de 1 hora lo había vendido tras demostrar que se podía instalar aplicaciones en el mismo.

No me había dado tiempo ni a cargarlo completamente.

Espero que la persona que lo adquirió le encuentre utilidad y me hace sentir mejor que haberlo llevado a un punto limpio de la ciudad, de esos que no solo no abundan sino que ni siquiera quieren aceptar dispositivos, pues imponen unos límites absurdos a su entrega, como no poder aceptar más de un número determinado de ellos por entrega o cosas por el estilo.

Ahora a ver si vendo los siguientes items que tengo para recuperar lo gastado en una tablet que no tiene otra utilidad que hacer viables las clases mixtas (online + presenciales) de los Talleres de Poesía de este curso. Pasado ese periodo, será algo que acabe por intentar vender en Wallapop. Y el ciclo continúa.

Ser autónomo en el mundo linux

Vivir a la contra ya sabemos que tiene sus consecuencias, pero no por ello abandonaré mi aldea gala desde la que resistir una invasión que me ignora sin el más mínimo reparo. Soy la hormiga delante del elefante en la sala de cine. Y aun así sostengo que instalar (y sostener) linux es un acto político.

Pero cuando llega el momento de tener que instalar un certificado digital, un lector de DNI electrónico, un software de firma electrónica, etc, acaba todo por ser casi imposible.

Y por supuesto la administración ni se molesta en desarrollar para todo tipo de usuario de estas tecnologías cada día más necesarias.

No obstante, he logrado (tras dos días de investigación) en un ubuntu (studio) 20.04 firmar documentos en la web de la Comunidad de Madrid por los que solicitamos (Carmen y yo) una ayuda en la cuota de autónomos de este año.

Para ello he seguido los pasos recomendados en la web de autofirma:

# En realidad, estas 2 primeras operaciones las realicé con Synaptic instalando la openjdk-11 (por defecto)
sudo apt install openjdk-8-jre
sudo apt install libnss3-tools

mkdir temporal_autofirma
cd temporal_autofirma
wget http://estaticos.redsara.es/comunes/autofirma/currentversion/AutoFirma_Linux.zip
unzip AutoFirma_Linux.zip
sudo dpkg -i *.deb

cd ..
rm -rf temporal_autofirma

Y con esto estaría instalado el software de autofirma, pero era necesario tener un certificado digital (PKCS#12) que yo no tenía (Carmen sí), así que intenté todo lo posible por descargar el certificado u obtenerlo desde el DNIe-3.0 mediante NFC con el móvil de Android. No ha podido ser hasta ahora, así que tendré que obtener el mismo mediante solicitud y «personación» en una de las oficinas correspondientes.

Termino algún proyecto

o un fragmento de algún proyecto
o un fragm
y abro una terminal
para tener acceso a la línea de comandos
de linux

dirijo la ubicación
a la ruta sobre la que está montado
el disco de backup
y ejecuto el script
que lleva a cabo la sincronización
de las carpetas que incluyen aquella
sobre la que haya estado trabajando

dirijo la ubicación
a la ruta sobre la que está montado
un pendrive
con ciento veintiocho gigabytes
de capacidad
y ejecuto el script
que lleva a cabo un fragmento de la sincronización
de las carpetas que incluyen aquella
sobre la que haya estado trabajando

cierro
tecleando un comando de salida
la terminal abierta

siento cierta satisfacción
creyendo que controlo algo de la incertidumbre
que acarrea el futuro
creyendo que lo que guardo
es digno de guardarse
para una posteridad sorda

siento cierto poder
cierta sensación de dominio
cierto orgullo rayano en la pedantería
por el conocimiento de un lenguaje
con el que hacerme entender por una máquina
olvidando
que no domino el lenguaje
con el que hacerme entender por un humano

tras la pequeña excursión
pienso en comenzar otro proyecto
o un fragmento de algún proyecto
que esté fraguando

y así
día tras
día.

Los virus aprenden a escribir

Lo más preocupante de que un virus aprenda a escribir es que ya no puedes fiarte de ese instinto que te dice que si un correo electrónico viene con muchas y extrañas faltas ortográficas muy probablemente se trate de un correo peligroso, SPAM o troyano.

Hoy he recibido un par de emails con un asunto sorprendentemente bien escrito:

Espero que estés pasando un día fantástico

y un contenido también bien redactado, incluso haciendo uso de negritas en los lugares adecuados:

¡Es una oportunidad que no debes desaprovechar!

Indicaban que te convenía pinchar en un enlace de bit.ly (esto ya es sospechoso de por sí, pero hay gente que usa acortadores de URL algo inapropiados)

https://XXXbit.ly/3XXXX526XXXXWVh

Si quitas las X aún puedes ir a ver lo que aparece ahí, bajo tu responsabilidad o irresponsabilidad.

Yo, curioso con estas cosas, por viejos hábitos que no hacen al monje, quise ver qué había en ese enlace con la mayor de las seguridades posibles, así que en una máquina virtual Linux (que no tiene acceso a ninguna de las carpetas del anfitrión) dentro de mi sistema principal Linux habilité la compartición del portapapeles bidireccionalmente (lo que ya me pareció un riesgo alto, pero me dio pereza teclear la dirección manualmente), en esa máquina abrí un firefox y lancé a copiar la URL en cuestión, encontrándome que me dirigía a una web que no tiene una pinta muy maliciosa:

salvo para personas incautas que crean que si no pagan en esa pantalla van a tener algún problema. Navegué por otras páginas y cerré esa pestaña sin el más mínimo problema… aunque no probé con otros navegadores quizá más expuestos, móviles incluidos, pues mi curiosidad tiene un límite.

Cuando el diablo no sabe qué hacer con el rabo mata moscas

Dice el dicho.

Y yo me dedico a ver las tripas de una web como si no hubiese nada importante que hacer.
Quizá porque nada de lo que últimamente hago me parece importante.
Quizá porque nada me parece importante.
Quizá.

Hoy mi alumna Kay Woo, de quien tanto aprendo, nos ha presentado su preciosa web nueva https://www.kaywooart.com/ y me he puesto a curiosear sus entresijos, que lo ha hecho más difícil de lo normal con la típica obstrucción a la utilización del botón derecho del ratón, posiblemente con intención de que no se pueda descargar imágenes o similar, pero ya sabemos que eso siempre me resulta un reto, así que he descargado algunas de sus páginas para ver de qué manera lo impedían, esperando encontrar en el código algunas pistas de cómo estaba hecha.

Curiosamente, no era otra plantilla de wordpress, de las que tanto abundan, casi hasta en más de un tercio de mi propia web, sino que no podía identificar claramente cómo estaba hecha (salvo que usaba mucho javascript paquetizado) y lo único que he visto para saber de dónde provenía era un dominio al que se hacía referencia de cuando en cuando llamado cloudfront.net, que parece ser que tiene algo que ver con AWS CloudFront, pero puede que no sea propiedad de Amazon, sino tan solo algún tipo de herramienta compartida por ambos.

Pues según Kay estaba hecha en una plataforma denominada Portfoliobox que he de reconocer que tiene una pinta estupenda para plantillas sofisticadas y sencillas al mismo tiempo.

Lo que está claro es que los tiempos de programar webs (si es que alguna vez se llamó así) han muerto completamente en aras de plantillas más o menos personalizables que permiten hacer verdaderas virguerías como la elegantísima web de Kay Woo sin las complejidades innecesarias de bregar con programadores, codificaciones, etc… que dan más problemas que ventajas, por mucho que yo siga siendo un dinosaurio de la vieja guardia y renuncie a hacerlas si no es vía VI sobre Linux…

¡Ay, cuánta torpeza hay en la nostalgia o la cabezonería!

Llegará el día en que añore las clases online

El otro día veíamos en un grupo una clase dedicada a Emmy Hennings, una de las fundadoras (olvidada, por motivos obvios) del Cabaret Voltaire, que dio origen a Dadá.

Me alegró la tarde (que no iba mal) que las dos personas que estaban asistiendo, en cuanto se mencionó la palabra «Cabaret», sacaron sendas boas cabareteras de colores vibrantes y no supe ni reaccionar. Me habría partido de risa, pero yo estaba «en modo serio» y me pilló con el pie cambiado. Ahora bien, no perdí la oportunidad de hacer una captura de pantalla que recogiera ese momento.

Poco a poco las clases de los Talleres de Poesía y Escritura Creativa de la Asociación Cultural Clave 53 vuelven a ser presenciales; así, por ejemplo, ya van a serlo los dos grupos de los jueves (a las 8 y a las 9), salvo excepciones y, por supuesto, manteniendo todas las medidas recomendables para garantizar la seguridad, dentro de lo posible, además de ofrecer la posibilidad de conectarse online a quienes por la razón que sea no puedan o quieran venir presencialmente (lo que va a quedarse al menos durante un curso más, pues pronto volverá a haber nuevos oleajes que nos tendrán en vilo).

Esta opción es algo incómoda porque hay muchas dificultades tecnológicas que afrontar, como el hecho de tener que usar 2 dispositivos de cámara, uno para que se oriente hacia mí y otro hacia la gente que haya venido a la clase a seguirla de manera presencial. Pero al mismo tiempo evitando que los dispositivos de audio de ambos dispositivos se acoplen produciendo sonidos muy molestos que nos recuerdan que hay un medio, y no un fin.

He probado algunas configuraciones de equipos y seguro que podría ser mejor, si hiciese un desembolso de dinero irrazonable para el uso que le voy a dar… espero.

De momento, el portátil de backup de Carmen de la Rosa es el que utilizo para seguir la clase (es un equipo que ya no está en su punto álgido de rendimiento, pero que ha sido preparado para aguantar un poco más), mientras mi móvil (un Xiaomi de gama baja) es utilizado para que quienes no están puedan ver a quienes están presentes, montándolo sobre un trípode para que esté a una altura conveniente.

El problema es que necesitaría un micrófono con altavoz inalámbrico para conectarlo al móvil que pudiese poner en el centro de la mesa y nos oyesen con claridad, pero quiero ahorrar ese consumo utilizando los recursos que ya tengo, así que he montado una especie de Frankenstein con unos micrófonos inalámbricos que tenía y un auricular también inalámbrico que me regalaron mis alumnos hace más de un lustro.

Probaré un par de clases a ver si tengo que terminar por adquirir un chisme más que seguro que me da algún problema de compatibilidad con mi Ubuntu Studio

CD o DVD

Hoy estoy perdiendo el tiempo en busca de fuentes para obtener el número de personas sobre la faz de la tierra y ver la manera de convertir esa cifra en un número de bits que almacenar en un soporte como puede ser un CD o un DVD.

El objetivo sería escribir tantos bits como personas hay en el planeta (puedo caer en el «binarismo» de asignar 0 a un sexo y 1 al otro, o ignorarlo) en un CD e ir generando CDs con las estimaciones de Personas Vivas sobre la Tierra cada cierto periodo de tiempo.

He encontrado una fuente importante de datos en la ONU, como si fuese un organismo útil, pero no encuentro la manera de acceder a esos datos desde línea de comandos, lo que me encantaría.

Tampoco sé la manera de escribir un archivo en linux directamente en código binario, escribiendo bits y no bytes. Tendré que repasar la rama dura de la programación en C o en ensamblador.

Creo que lo que intento es tan ridículo como habitualmente hago, pero no por ello quiero dejar de hacerlo.

Un número son palabras

Qué mejor demostración de que un número son palabras que un traductor de números a palabras, así, tan absurdo como este que intenta transformar los números (dígitos) en palabras, especialmente orientado a crear un libro con las palabras de unos cuantos (indeterminados) decimales de números irracionales, pues hay pocas cosas más irracionales que este proyecto absurdo.

/********************************************************
    Proyecto tres14 (escrito en C)
    realizado por Giusseppe Domínguez
    a partir del día 8 de diciembre de 2019
********************************************************/

#include <stdio.h>
#include <string.h>
#include <stdlib.h>
#include <time.h>
#include <ctype.h>
#define OK 1
#define KO 0
#define MAX_LONG 10 // Longitud máxima de nombre de dígito

int firma();
int digitea(char caracter);
int nombranumero(int idioma, char caracter, char *nombre);
int instrucciones(char *comando);

int main(int argc, char *argv[])
{
  int i, idioma=0;
  char nombrenumero[MAX_LONG], caracter;
  FILE *fp;
 
  if ((argc < 2) || (argc > 3)) { instrucciones(argv[0]); } // Faltan argumentos
  else if (argc == 2) { // Número desde línea de comando
    for (i=0; i<strlen(argv[1]); i++) {
      caracter=argv[1][i];
      if(! nombranumero(idioma, caracter, nombrenumero)) { instrucciones(argv[0]); return KO; }
      puts(nombrenumero);
    }
  }
  else if (argc == 3) { // Número en fichero argv[2]
    if ( (! isdigit(argv[1][0])) || ((idioma = digitea(argv[1][0])) > 1) ) {
      printf("[ERROR] No conocemos el idioma: %s\n", argv[1]);
      instrucciones(argv[0]);
    } 
    else if ((fp = fopen(argv[2],"r")) == NULL) {
      printf("[ERROR] intentando abrir el archivo %s\n", argv[2]);
      instrucciones(argv[0]);
    }
    else {
      while ((caracter = fgetc(fp)) != EOF) {
        if (caracter != '\n') { // Ignoramos los saltos de línea
          if (! nombranumero(idioma, caracter, nombrenumero)) { instrucciones(argv[0]); return KO; }
          printf("%s ", nombrenumero);
        }
      }
    }
  }
  printf("\n");
  firma();
  return OK;
}


/******************************************
  La función instrucciones hace lo que su nombre
  indica: Imprime las instrucciones del programa.
******************************************/
int instrucciones(char *comando) {
    printf("\nUtilización: %s [número_positivo] [idioma fichero]\n\n", comando);
    puts("Si introducimos un nombre de fichero, el primer parámetro indica el idioma");
    puts("Idioma puede ser:");
    puts("\t0 - Español");
    puts("\t1 - Inglés");
}

/******************************************
  La función nombranumero nombra el número
  contenido en el caracter (si procede, claro)
  y devuelve error si no lo consigue.
  idioma = 0 (español)
           1 (inglés)
******************************************/
int nombranumero(int idioma, char caracter, char *nombre) {
  int digito;
  static int nomascomas=0; // Para no encontrar más de una coma en un argumento
  // char *numeros[] = { "cero", "uno", "dos", "tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve" };
  char *numeros[2][MAX_LONG] = {
    { "cero", "uno", "dos", "tres", "cuatro", "cinco", "seis", "siete", "ocho", "nueve" },
    { "zero", "one", "two", "three", "for", "five", "six", "seven", "eigth", "nine" }
  };
  char *coma[] = { "coma", "point" };

  if ((caracter == ',') || (caracter == '.')) {
    strcpy(nombre, coma[idioma]);
    if (++nomascomas > 1) {
      printf("Un número no puede tener más de una coma\n");
      return KO;
    }
    return OK;
  }
  else if (isdigit(caracter)) {
    digito = digitea(caracter);
    strcpy(nombre, numeros[idioma][digito]);
    return OK;
  }
  printf("[ERROR] |%c| No es un caracter válido en un número positivo\n", caracter);
  strcpy(nombre, "ERROR");
  return KO;
}
/******************************************
  La función digitea devuelve un número entero
  a partir del caracter (char) proporcionado
******************************************/
int digitea(char caracter)
{
  int digito;
  digito = (int) (caracter + '0');
  digito -= 96;
  return digito;
}


int firma()
{
  time_t tiempo = time(0);
  struct tm *tiempolocal = localtime(&tiempo);
  char txt_firma[128];
  strftime(txt_firma,128,"\nGiusseppe Domínguez, a las %H:%M. M-%Y%m%d\n",tiempolocal);
  printf("%s\n",txt_firma);
  return OK;
}

Diccionario RAE Completo

He decidido dar por concluida la ordenación del Diccionario de la RAE, que me descargué con el programa buscaenrae.sh y el programa descargarae.sh hecho para la ocasión y que leía el archivo con la lista de palabras (al que impropiamente denominaba diccionario), para descargar, una a una, las páginas correspondientes.

Todo partió del trabajo que realicé para el proyecto del Diccionario Personal de Isidoro Valcárcel Medina, en 2015.

Ahí nos encontramos con la negativa de la RAE a ceder el diccionario en modo digital, así que tuve que teclear las entradas del mismo a lo largo de más de 3 meses. Finalmente, acabé teniendo una lista de 90940 palabras, algunas de las cuales eran acepciones repetidas. Si quitábamos las palabras que tenían más de una acepción y que estaban en el archivo etiquetadas con un número 1,2,… según procediera, nos quedaban 88296 palabras (debería llamarlas «entradas»).

Por supuesto, estaban plagadas de errores:

  1. En primer lugar los propios de tecleo.
  2. En segundo lugar (oh, my god!) tenía incluidas en mi colección las palabras que Isidoro había decidido incluir en su diccionario personal independientemente de las que hubiera en el de la RAE.
  3. En tercer lugar (y esto resultó ser lo peor), muchas palabras han «desaparecido», pues la entrada no corresponde a la palabra… por ejemplo, la palabra «poeta, tisa», no está en el diccionario sino en «poetisa», así que la palabra poeta no se encuentra en la RAE como tal.

Así que el programa contemplaba la necesidad de decirme si tal o cual palabra no estaba en el diccionario de la RAE (en la versión online)

Actualización 2020
La Real Academia Española (RAE) y la Asociación de Academias de la Lengua Española (ASALE) han emprendido ya las tareas de redacción de la nueva edición de su Diccionario de la lengua española (DLE), que tendrá las características fijadas en la planta aprobada por todas las Academias de ASALE. Con el objetivo de que el desarrollo de esa nueva edición, forzosamente lento, no retrase la inclusión de nuevas palabras y acepciones ni la modificación de las ya incorporadas que necesiten enmienda, se ha optado por publicar estas actualizaciones anualmente.

La que ahora se pone a disposición de todas las personas interesadas recoge las modificaciones aprobadas por todas las Academias en 2020 y tendrá la consideración de versión electrónica 23.4.

Ya de paso, como podía hacerlo, me informé de si la palabra que estaba consultando era o no conjugada, lo que significaba que era un verbo. Un bonito plus que no esperaba.

Con la lista de errores generada, fui revisándolas palabra a palabra, las 1245 entradas no encontradas, entre las que estaban, ni más ni menos: poeta.

Así que a lo largo de los últimos meses del 2020 fui dejándome los ojos para ir revisando esos errores y fabricando una lista de palabras que se corresponda lo más posible con la «oficial» de la RAE.

Ha quedado una lista de 88024 «entradas» que se corresponden con 90452 palabras (ya teniendo en cuenta que algunas entradas o vocablos tienen varias palabras (a veces me confundo y denomino a eso acepciones).

Una vez corregida y revisada, aunque asumo aún un error considerable que no puedo prever, tengo la posibilidad de descargar el diccionario completo palabra a palabra con el programa buscaenrae.sh

 

#!/bin/bash

### FUNCIONES ÚTILES PARA EL PROGRAMA
# uso() Instrucciones del programa y salida en caso de error.
uso () {
  echo "Uso: $0 salida palabra"
  echo -e "\tsalida es un valor númerico que identifica:"
    echo -e "\t[0] para generar un archivo HTML con la respuesta"
    echo -e "\t[1] para generar un archivo TXT  con la respuesta"
    echo -e "\t[2] para generar una línea  TXT  con la respuesta"
  exit
}
f_verbos="00000_VERBOS.txt"
f_errores="00000_ERRORES.txt"

# CONTROL DE ENTRADA DE VARIABLES y ASIGNACIÓN
if [ $# -lt 2 ]
then
  # Reportar uso inapropiado
  uso
else
  salida=$1
  if [ $# -eq 2 ]; then
    palabra="$2"
  elif [ $# -eq 3 ]; then 
    palabra="$2 $3"
  elif [ $# -eq 4 ]; then 
    palabra="$2 $3 $4"
  elif [ $# -eq 5 ]; then 
    palabra="$2 $3 $4 $5"
  fi
  # echo "Palabra es #$palabra#"
fi

# CONSULTA DEL SERVIDOR de la RAE simulando ser uno de los diversos navegadores posibles
navegador=(
  "Mozilla/5.0 (X11; Ubuntu; Linux x86_64; rv:15.0) Gecko/20100101 Firefox/15.0.1"
  "Mozilla/5.0 (Windows NT 10.0; WOW64; rv:77.0) Gecko/20100101 Firefox/77.0"
  "Mozilla/5.0 (Windows NT 6.1; WOW64; rv:77.0) Gecko/20190101 Firefox/77.0"
  "Mozilla/5.0 (Macintosh; Intel Mac OS X 10_9_3) AppleWebKit/537.75.14 (KHTML, like Gecko) Version/7.0.3 Safari/7046A194A"
)
rnd=`echo $(($RANDOM%${#navegador[@]}))` # Elegimos un navegador al azar
# Hacemos la petición a la web de la RAE
curl -s --user-agent "${navegador[$rnd]}" https://dle.rae.es/"$palabra" > ./"$palabra.html"

# PROCESAMOS EL ARCHIVO OBTENIDO (Cortamos, retiramos lo innecesario, etc)
# Si se trata de un verbo, quitar las conjugaciones
id_conjugacion="<div id='conjugacion'>"
esunverbo=`grep -c "$id_conjugacion" ./"$palabra.html"`
if [ $esunverbo -gt 0 ]
then
  echo "$palabra es un verbo" >> $f_verbos
  # ELIMINAMOS la(s) CONJUGACIÓN(ES)
  sed -i "/${id_conjugacion}/d" ./"$palabra.html"
fi

# Si tiene más de una acepción (Calcular cuántas después de saber si es un verbo)
id_acepcion="<article id="
id_acepcion_fin="<\/article>"
num_acepciones=`grep -c "$id_acepcion" ./"$palabra.html"`
# Si no tiene acepciones, la palabra no existe. No continuamos.
if [ $num_acepciones -eq 0 ]
then
  echo "$palabra no se ha encontrado en la RAE" >> $f_errores
  rm "./$palabra.html"
  exit
fi

# PARTIR en $num_acepciones EL FICHERO $palabra.html"
# acepciones y acepciones_fin son 2 arrays de líneas PRECISO CONVERTIRLOS a cortes[]
acepciones=`grep -n "$id_acepcion" ./"$palabra.html"|awk -F":" '{print $1}'|sed ':a;N;$!ba;s/\n/ /g'`
c=0
for i in $acepciones
do
  let cortes[$c]=$(($i))
  let c=$(($c+1))
done
acepciones_fin=`grep -n "$id_acepcion_fin" ./"$palabra.html"|awk -F":" '{print $1}'|sed ':a;N;$!ba;s/\n/ /g'`
c=0
for i in $acepciones_fin
do
  let cortes_fin[$c]=$(($i))
  let c=$(($c+1))
done

# GENERA FICHEROS palabra.X.html por cada ACEPCIÓN
for (( i=0; i<$num_acepciones; i++ ))
do
  # echo "El comienzo del corte está en ${cortes[$((i))]}"
  # echo "El fin del corte está en ${cortes_fin[$((i))]}"
  sed "${cortes[$((i))]},${cortes_fin[$((i))]} !d" "./$palabra.html" > "./$palabra.$i.html"
  # Distintas salidas del programa, en función de la variable "salida"
  if [ $salida -gt 0 ]   # Salida a modo TXT
  then
    w3m "./$palabra.$i.html" > "./$palabra.$i.txt"
    if [ $salida -gt 1 ] # En una sóla línea
    then
      sed ':a;N;$!ba;s/\n/ /g' "./$palabra.$i.txt"|sed 's/  / /g' > "./$palabra.$i.1linea"
    fi
  fi
done

# BORRAR indica si dejar o no los archivos que no se deseen como salida 
BORRAR=1
if [[ $BORRAR -eq 1 ]] && [[ $salida -gt 0 ]]
then
  rm "./$palabra."*html
  if [ $salida -eq 2 ]
  then
    rm "./$palabra."*txt
  fi
fi
# SALIDA FORZADA
exit

 

Este programa era invocado con el siguiente miniprogramita que, leyendo de la lista de palabras corregidas que, impropiamente, denominé diccionariosinrepes.txt, obtiene las diversas, impropiamente denominadas, acepciones y las separa en 90452 archivos de una única línea.

#!/bin/bash

### FUNCIONES ÚTILES PARA EL PROGRAMA
# uso() Instrucciones del programa y salida en caso de error.
uso () {
  echo "Uso: $0 [diccionario]"
  exit
}

# CONTROL DE ENTRADA DE VARIABLES y ASIGNACIÓN
if [ $# -gt 1 ]
then
  # Reportar uso inapropiado
  uso
elif [ $# -eq 1 ]
then
  diccionario=$1
else
  diccionario=diccionariosinrepes.txt
fi

while IFS= read -r line
do
  buscaenrae.sh 2 $line
done < $diccionario

Descargadas y archivadas en una estructura de carpetas obvia:

dict -> LETRA

Se pueden reordenar o «recompilar» en una LETRA, con sus definiciones incluidas, sin incluir, etc…

Lo hago usando otro script simple:

#!/bin/bash

# El diccionario completo está por acepciones en las carpetas
# dict/LETRA
# Cada acepción (en realidad entrada en el diccionario) tiene
# un archivo denominado PALABRA.N.1linea conteniendo su definición.
# (donde N es el número de acepción contando desde cero)

letras="A B C D E F G H I J K L M N Ñ O P Q R S T U V W X Y Z"
for letra in $letras
do
  ls dict/$letra > dictporletra/$letra.archivos.txt
  awk -F"." '{print $1}' dictporletra/$letra.archivos.txt > dictporletra/$letra.acepciones.txt
  ls dict/$letra/*.0.1linea |awk -F"/" '{print $3}'|awk -F"." '{print $1}' > dictporletra/$letra.sinrepes.txt
  cat dict/$letra/* > dictporletra/$letra.definiciones.txt
done

cat dictporletra/*.archivos.txt > DICCIONARIO_TOTAL.archivos.txt
cat dictporletra/*.acepciones.txt > DICCIONARIO_TOTAL.acepciones.txt
cat dictporletra/*.sinrepes.txt > DICCIONARIO_TOTAL.sinrepes.txt
cat dictporletra/*.definiciones.txt > DICCIONARIO_TOTAL.definiciones.txt

Pero queda por resolver un problema que me tiene algo martirizado desde hace meses y es que la ordenación es muy compleja realizarla, pues muchas entradas en el diccionario son dobles, como «ad hoc», pero las definiciones descargadas incluyen líneas que son del tipo: «i Escrito con…» y desde el punto de vista del uso del comando sort, es más o menos lo mismo que decir que si quiero ordenar las primeras como «adhoc», la «iEscrito» se sale de su lugar.

He ordenado muchas manualmente sobre esta compilación, pero es un trabajo absolutamente aberrante y seguro que se puede hacer mejor, así que de momento he decidido dejar de trabajar en esto y dar por cerrado este proyecto que, en realidad, es la puerta de entrada a muchos otros.

Espero que el orden no sea algo tan terrible en esos otros proyectos venideros.

Dejo a disposición pública el Diccionario Completo que he generado de esta manera, con la estructura de carpetas generada, así como los programas utilizados para su procesamiento.

RAE-COMPLETO.tar

Repositorios microsoft en RaspBerry Pi con Raspbian

Desde que tengo mi Raspberry PI 3, he instalado diversas cosas, pero no recuerdo haber instalado nada de Microsoft ni por asomo. Sé que Raspbian no un Debian puro, pero de ahí a que me añadan un repositorio de Micro$oft… creo que va un abismo.

Así que estoy desando tener algo de tiempo libre para instalar mi servidor web y blog de backup o de desarrollo en un Debian puro sobre Raspberry, que sé que es posible, aunque aún no he encontrado ese huequito temporal.

No es algo que me preocupe mucho, pero he de reconocer que me molesta hacer tan siquiera un ping a un servidor de la empresa en cuestión.

Esto no es una broma