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;
}

Desde hace ya un año (o más)

El 13 de marzo de 2020 hice esta fotografía a petición de una amiga escritora que me pedía que le enviase un registro de algo que hubiese modificado a raíz del confinamiento duro al que estábamos abocados dada la pandemia debida a la COVID-19 (es femenino (el virus/la enfermedad…)).

Se agotó el papel higiénico en todas las tiendas, se escribió largo y tendido sobre ello, se publicaron análisis socio-económicos sobre la simbología del papel higiénico, sobre la sensación de protección, etc, etc, etc.

Nosotros teníamos bastantes rollos, pero a partir de esa fecha cambiamos algunos hábitos y algunos de los usos que hacíamos del papel higiénico los derivamos a papel de cocina, del que también teníamos varios rollos, para prolongar la vida de nuestras reservas higiénicas.

De momento, no hemos vuelto a los antiguos usos del papel higiénico, porque el uso más racional del papel de cocina facilita algunas cosas, así como reducimos el consumo del higiénico.

Nunca estoy plenamente convencido de que nuestras decisiones sean más ecológicamente recomendables que las opuestas, pero esta parece tener sentido en ese sentido, valga la redundancia.

Los primeros taxis de Madrid

Dicen que los primeros taxis de Madrid fueron los conocidos como «las sillas de mano», una de cuyas paradas estaba en la Plaza de Herradores, donde suelo ir a comprar mi pan preferido.

Hace unos días pasé por esta plaza donde se encuentra el Museo del Pan Gallego, de camino al estudio desde la plaza de Sol, recorrida la calle Arenal hasta casi el final, pero esquivándola para evitar unas ruidosas obras de reconstrucción del suelo.

Y al llegar a la plaza hice una pequeña parada en la parada de las sillas de mano. No había visto el letrero antes o no había reparado en él.

Hoy me pregunto si habría sillas de mano de segunda mano.

Tonterías…

Porcentajes

Encontrado este texto incrustado en una imagen en una red social, lo leo y resuelvo que es bastante acertado, aunque colocarlo en facebook no sea quizá la manera menos perversa de combatir lo que se denuncia.

No obstante, como todo en estas redes de incomunicación, ha desatado un pequeño debate que, ni mucho menos, estoy dispuesto a continuar. Tan sólo unos apuntes:

XXXXXXXX Dice:
Que estupidez más grande… EEUU cuenta con 769.000km2 de bosques naturales un 0,008% de toda su extensión y Rusia cuenta con 1.178.000km2 de bosques un 0,007% de su extensión.

YYYYYYYY Responde:
Creo que no has entendido lo que quiere decir. No habla de los bosques, sino más bien de la relación del capitalismo con la Ecología: nula relación, pues el capitalismo lo que busca es el beneficio económico, ningún otro.

Quería sumarme a lo dicho por YYYYYYYY, pero veo el ridículo de entablar batallas como esta en esos medios, así que me precipito a centrarme en otras cosas:

Si EEUU cuenta con 769.000 km2 bosques naturales de un total territorial de 9.147.593 km2, se trata de una fracción del 0,08406583, lo que aproximadamente equivale a un 8%, que es mil veces superior a los 0,008% que XXXXXXXX había dicho.

Si Rusia cuenta con 1.178.000 km2 bosques naturales de un total territorial de 17.125.191 km2, se trata de una fracción del 0,068787554, lo que aproximadamente equivale a un 7%, que es mil veces superior a los 0,007% que XXXXXXXX había dicho.

Es decir, que XXXXXXXX ha cometido dos errores de tres órdenes de magnitud en la medida: algo así como afirmar que yo mido más de mil quinientos metros de altura o «peso» más de 70 toneladas. Con alguien que comete estos errores, la compresión sobre lo que ese texto simplón incrustado en una imagen quieren decir, no es algo que se pueda dar por supuesta.

Pero ¿qué importa?

Nadie da importancia a las matemáticas. Al fin y al cabo, se trata de emitir opiniones basadas en vísceras, no en razonamientos. Cada día me parece más evidente. Y quizá no sea un problema. Siempre que nos reunamos con aquellas personas cuyas vísceras emitan los mismos gruñidos.

Mind-full

Me ha hecho mucha gracia esta imagen sobre la diferencia entre «mind-full» y «mindful», ese método de relajación activa que está haciendo furor.

Pero no he podido evitar un comentario sobre lo que echaba de menos al respecto:

Como amante de lo iterativo, me habría encantado en el «bocadillo» del pensamiento canino un hombre y un perro caminando que van teniendo sendos pensamientos, donde el del can incluye un hombre y un perro caminando que van teniendo sendos pensamientos… etc, etc, etc.

Saturno devorando a su hijo

Siempre me han encantado las pinturas más románticas de Goya: los fusilamientos, las mitologías y por supuesto los cuadros negros a los que el Museo del Prado les dedicaba una sala a la que solía ir cuando empecé a vivir solo en las cercanías del mismo hace ya 3 décadas.

Salía de la Universidad Autónoma de Madrid donde trabajaba en el IIC, para ir a casa tomando el tren que me dejaba en Atocha y subía desde allí dándome un paseo por el Paseo del Prado hasta entrar en el museo un ratito (en aquella época era gratuito) y acercarme a la sala de las pinturas negras de Goya.

El resto apenas me interesaba, así que no perdía tiempo deteniéndome en la exhaustiva colección de obra que siempre me parecía destruible. (Y eso que aún no había descubierto a DADÁ)

Saturno devorando a su hijo

Hoy en una red social me encuentro una publicación que usa de excusa Saturno devorando a su hijo para hablar de los males de la sociedad y, sin embargo, dada la banalidad del contexto, lo único que he pensado es:

¿Se lo come sin pan?

Soy un fan de la línea de comandos linux

Quizá porque mi primer contacto con un ordenador fue con línea de comandos, allá por los tiempos en los que en la UAM usé un AIX desde una terminal conectada a un ordenador central que era el único que tenía entorno gráfico.

Quizá porque es más rápida y consume menos recursos que los sofisticados programas de gestión de software que vienen con las distribuciones populares de Linux (yo, de hecho, lo primero que instalo es Synaptic).

Quizá porque lo puedo hacer remotamente desde mi teléfono móvil o, como hoy, desde mi PC mediante una conexión (bien configurado su acceso PKI) por SSH, conectándome a la Raspberry que tengo de servidor de backup y de desarrollo, al mismo tiempo que me conecto al PC que habitualmente usa Carmen para trabajar (mientras ella está trabajando, de hecho).

Cada noche hago un repaso de los dispositivos conectados y tecleo un

sudo apt update
sudo apt upgrade

 

(y si procede un sudo apt autoremove, para limpiar lo innecesario)

Termino con un shutdown now que me remite a aquellos tiempos de mis primeros tecleos… donde una broma habitual era hacerse con la password de root y proceder a un apagado de los 5 terminales conectados al central. ¡Qué vandalismo!.

Había una forma muy sencilla que consistía en simular una pantalla con un «login» en el que la persona que había de encender y administrar los equipos se conectaba y devolver un pantallazo tras haber capturado su contraseña. A continuación, se volvía a mostrar la verdadera pantalla de login y parecía un minúsculo error de tecleo… Sigue siendo un ataque eficaz a pesar de lo poco sofisticado del método.

Esto no es una broma