Personalizar con A-PDF Text Replace

He empezado a utilizar A-PDF Text Replace que es una herramienta muy útil para modificar documentos en formato PDF.

Por ejemplo, sirve para personalizar un mismo documento PDF para diferentes personas. Para ello se puede poner en el documento PDF original un texto que haga de campo a reemplazar, por ejemplo, _NOMBRE_, y luego utilizar A-PDF Text Replace para cambiar _NOMBRE_ por el nombre de cada persona. Como con A-PDF Text Replace se pueden dar varias órdenes de cambio en la misma ejecución, se puede personalizar simultáneamente el nombre, la fecha, la dirección u otros campos.

A-PDF Text Replace es también invocable desde la línea de mandatos, por lo que puede invocarse con System() desde el lenguaje TOL, como se muestra en el siguiente código:

///////////////////////////////////////////////////////////////////
Real PdfReplace(Text inpPth, // Input file path
                Text outPth, // Output file path
                Text namCus) // Customer name
///////////////////////////////////////////////////////////////////
{
  Text pdfCmd = W("bin/apdf/ptrcmd.exe"); // A-Pdf executable path
  Text inpDos = Q(W(inpPth));
  Text outDos = Q(W(outPth));

  Text forOld = Q(":e:");
  Text namOld = Q(":a:");
  Text dteOld = Q(":c:");

  Text forNew = Q("Edición personalizada para");
  Text namNew = Q(namCus);
  Text dteNew = Q("el "+Dte2Spa(Now)+"."); // Spanish date

  Text cmdTxt = pdfCmd+" "+inpDos+" "+outDos+" "+
                           forOld+" "+forNew+" "+
                           namOld+" "+namNew+" "+
                           dteOld+" "+dteNew;
                            
  Real sysRet = System(cmdTxt); // Execute

  sysRet // Returns
};
  

Donde Q() y W() son dos pequeñas funciones donde la primera pone comillas en los caminos de los ficheros, por si esos nombres contuvieran caracteres blancos, y la segunda cambia el slash normal ( / ) por el back slash de los caminos de Windows ( \ ).

///////////////////////////////////////////////////////////////////
Text Q(Text txt) // Text
///////////////////////////////////////////////////////////////////
{ Char(34)+txt+Char(34) };

///////////////////////////////////////////////////////////////////
Text W(Text txt) // Text
///////////////////////////////////////////////////////////////////
{ Replace(txt, "/", "\\") };
  

La siguiente ventana muestra la ejecución de A-PDF Text Replace invocado desde TOL. El mandato que se esta ejecutando en la ventana es:

bin\apdf\ptrcmd.exe
"..\Ediciones\9788493912901.Becquer.Gustavo. Adolfo.Leyendas\
BecquerGA.Leyendas.20110802.aContracorriente.PackDigital\BecquerGA.
Leyendas.20110801.aContracorriente.pdf"
"aContracorriente\BecquerGA.Leyendas.20110801.aContracorriente.pdf"
":e:" "Edición personalizada para"
":a:" "Antonio Salmeron"
":c:" "el 9 de septiembre de 2011."
    
Donde ":e:", ":a:" y ":c:" son los campos que se utilizan para ser remplazados por los texto de personalización.

El resultado es el que se muestra en la siguiente imagen. A la izquierda el PDF original, a la derecha el PDF modificado.

Es la personalización de una edición digital de las Leyendas de Gustavo Adolfo Bécquer. Los campos seleccionados en el primer PDF corresponden a las marcas, los campos seleccionados en el segundo PDF a los valores finales de la personalización.

Buscar datos en Mozilla Backup de Thunderbird

Para buscar datos (direcciones, teléfonos, fechas de envío, etc.) que estaban en un email borrado, pero guardado en un backup realizado con Mozilla Backup (MozBackup) para el sistema de gestión de correo electrónico Thunderbird, no es necesario restaurar el backup. Lo que es especialmente relevante para backups de más de un Gbyte.

El fichero de MozBackup (extensión .pcv) es un fichero comprimido, que se puede abrir con 7-zip, también con WinZip y WinRar, y volcar todo su contenido a un directorio temporal. Este directorio sigue la estructura de los directorios de trabajo de Thunderbird.

Una vez volcado se puede navegar, manualmente, por el árbol de directorios para localizar la carpeta en la que se cree que esta el correo. Esta navegación también se podría hacer dentro del fichero comprimido, pero me resulta mucho más incómoda.

Si no se sabe muy bien donde pueden estar los datos o los correos electrónicos, se puede localizar el fichero o los ficheros que los contienen con alguna utilidad de búsqueda recursiva en un árbol de directorios y aquellos patrones de búsqueda que creamos más significativos. En estos casos, en Windows, utilizo grep.exe de GNU (GnuGrep) con la opción -r de recursivo, por ejemplo: \bin\gnuwin32\bin\grep -r -l -c "asolver.com" ImapMail para buscar correos del dominio asolver.com sólo en la carpeta ImapMail, lo más cómodo es buscarlo en el total (.).

Hay que tener en cuenta que el caracter arroba (@) típico de las direcciones de correos a veces aparece como tal en las cabeceras de los correos electrónicos y otras como =40 siendo el 40 el código ASCII hexadecimal de la arroba (64 decimal, el anterior a la A y el doble que el caracter blanco), como sucede en el cuerpo de los correos. Por lo que se podrían probar búsquedas como "asalmeron@asolver.com" o "asalmeron=40asolver.com".

Si finalmente hay que examinar visualmente el fichero o los ficheros localizados por grep.exe, como son ficheros planos, pueden abrirse con un editor de textos para buscar la información localmente. De todos los editores posibles utilizo para ello Notepad2.

Resolver ecuaciones de segundo grado

Pequeño fichero Excel (Libro de Excel 97-2003) con una sola hoja de cálculo que permite resolver las ecuaciones de segundo grado y obtener sus dos soluciones.

En la parte izquierda de la hoja de cálculo, a partir de la ecuación sen encuentran sus 2 raices, se factoriza la ecuación de segundo grado como (x - 1ª raiz) . (x - 2ª raiz) y se vuelve a reconstruir la ecuación para comprobar que todo es correcto.

La parte derecha de la hoja de cálculo, permite generar problemas sencillos de ecuaciones de segundo grado para su posterior solución.

Las celdas azules son para introducir los datos y las celdas verdes para ver los resultados.

Comprobar divisiones con resto

Pequeño fichero Excel (Libro de Excel 97-2003) con una sola hoja de cálculo que permite comprobar el cociente y el resto de divisiones.

También permite comprobar divisiones cuando se pide calcular el cociente con 2 decimales.

Las celdas azules son para introducir los datos y las celdas verdes para ver los resultados.

Ecuaciones de 2 a 6 incógnitas con matrices

Fichero Excel (Libro de Excel 97-2003) con 6 hojas de cálculo para resolver pequeños sistemas de ecuaciones de 2 a 6 incógnitas.

En las 2 primeras hojas de cálculo se resuelven sistemas de 2 ecuaciones de con 2 incógnitas. En la primera mediante la función Excel inversa de una matriz y en la segunda mediante el cálculo paso a paso de la inversa de una matriz 2x2.

En las 4 siguientes hojas de cálculo se resuelven sistemas de ecuaciones con 3, 4, 5 y 6 incógnitas, mediante la función Excel inversa de una matriz (MINVERSA()).

Las 2 últimas hojas de cálculo (con 5 y 6 ecuaciones) también contienen un área de celdas para la comprobación de los resultados.

Estas hojas de cálculo Excel permiten conocer el mecanismo de cálculo empleado, mediante:

  • su diseño de cálculo por fases, especialmente en la 2ª hoja, con datos de entrada, resultados intermedios y resultados finales y
  • las fórmulas visibles dentro de sus celdas.

La función Excel MINVERSA() es una fórmula matricial que afecta a varias celdas de forma simultánea. La introducción de este tipo de fórmulas matriciales es diferente al de las funciones normales de Excel. Los pasos para introducir una fórmula matricial son:

  • Se selecciona el rango de celdas que ocupará la matriz destino, por ejemplo, un rango 2x2, empezando por la celda de la esquina superior izquierda.
  • Se pulsa la tecla F2 que activa la posibilidad de introducir una fórmula en la celda de la esquina superior izquierda (que es por la que se comenzó la selección). Entonces se teclea la fórmula matricial, por ejemplo: =MINVERSA(T6:U7).
  • Una vez tecleada la fórmula y con el rango de celdas destino que sigue seleccionado se pulsan simultáneamente las teclas Control+Shift+Intro. Entonces la fórmula matricial se expande a todo el área seleccionada y Excel la visualiza entre corchetes, como {=MINVERSA(T6:U7)}, para señalar que es una fórmula matricial.
  • Nota: Una vez tecleada la fórmula no hay que pulsar Intro, ni el botón llamado introducir (v) que está a la izquierda del área de introducción de fórmulas.

artthropods.net: bichos de material reciclado

Artthropods.net es una web deliciosa de Miguel Ángel Nuñez. Fue desarrollada en 2002 por un querido amigo suyo que ya no está entre nosotros.

Inicialmente estaba albergada en un servidor de Arsys, pero tras una actualización por parte de Arsys de la versión del sistema operativo de ese servidor, la web dejo de funcionar y tampoco es que los de Arsys proporcionaran mucha ayuda a sus recuperación.

En 2010, a partir de un backup de la web, corregí en su código todo aquello que hacía que hubiera dejado de funcionar, cree el nuevo dominio Artthropods.net, la albergue en un servidor mio y, desde entonces, vuelve a estar operativa.

La web contiene una fabulosa tienda y un museo de bichos realizados a mano por Miguel Ángel Núñez con material reciclado. Aunque agrupados por especies (Insectos, Crustáceos y Arácnidos) y familias (Halogenatae, Cohoniaceae, Bichiidae, Escaracazolae, Saltavoltiaceae, Viniliidae, Picnicpterae, Latharontidae, Microchupterae, Anthiparridae, Calzadoriaceae, Recycliidae, Macrochupopterae, Scorpioniidae, Malahosstiaceae, Calandrakae, Casualidea, Malakostrakae y Aranyas), cada bicho es totalmente diferente y con nombre propio:

Agaffosperma capronna, Anthiparris vacuum, Bishogordus tontorronis, Bombus jamacucus, Cascanut goliath, Chupoptera grappadora, Duploclippaa primigenia, Escaracazus inox, Fagopringatta seductora, Fornica docarallo, Gamba manolopozus, Grillotata longuipatta, Lacusta coloreatta, Lataronthias mejillonii, Malahossssthia elegans (hembra y macho), Neuropteris fabafacialis, Onthocazus lathicornis, Patachunga blueyes, Pompilia sublimis, Raybannia lenti-macarria, Recyclida miniwattia, Saltavoltios chamaleon, Scorpio dipostre, Tabanus inox, Tippex magnum, Vespachappa splendens, Vespina brebis, Zumbix violacea, Zumbonia lunaria, etc.

Pueden adquirirse a unos precios muy razonables para el trabajo que tienen y lo bonitos que son. Tanto si tienes interés por conseguir algún ejemplar (el mio es como el que aparece en la imagen de la izquierda) o sólo por contemplar los que se muestran en su Museo te recomiendo que visites la web.

Esta web está desarrollada en HTML con JavaScript para el lado del cliente y con Active Server Pages (ASP) para el lado del servidor, soportado por una base de datos Access de Microsoft y por los dos últimos productos ha de albergarse en un servidor Windows con Internet Information Services (IIS).

Solución a un 3D Squares

Hay puzzles que les regalan a los niños que parecen triviales y no lo son, a veces ni para los niños ni para los adultos. Para mi este es un caso claro.

Para resolverlo tuve que programar un solucionador en TOL que no resulto muy complicado. De hecho mucho menos complicado que resolver manualmente el puzzle 3D Squares. Aunque el código completo junto con su traza de ejecución puede obtenerse en PDF al final de este post, pongo a continuación en algoritmo recursivo fundamental. Este algoritmo encuentra 4 soluciones iguales, pues unas resultan de un giro de 90º de otras:

///////////////////////////////////////////////////////////////////
Real SolCua(Set entSol, Set entPie) // Resuelve
///////////////////////////////////////////////////////////////////
{
  Real crdSol = Card(entSol);
  Text Write(FormatReal(crdSol,"%.0lf"));

  If(EQ(crdSol, 9), SolVer(entSol), // Ha encontrado una solucion
  {                 // Busca soluciones
    EvalWhile(entPie, Real(Text unoPie)
    {
      Set salPie = entPie - [[unoPie]];
      Set varPie = VarAll(unoPie);
      EvalWhile(varPie, Real(Text unoVar)
      {
        Set salSol = entSol << [[ unoVar ]];
        If(SolBue(salSol), SolCua(salSol, salPie), FALSE)
      })
    })
  })
};
  

Puertas lógicas AND, OR, XOR y Sumador en Excel

Ejemplo de programación en Excel de puertas lógicas AND, OR, XOR y Sumadores con acarreo (la versión es la de Excel 97-2003).

En la primera hoja se ven las puertas lógicas AND (Y), OR (O) y XOR (O exclusivo) y sus tablas de verdad. En la segunda hoja un sumador con acarreo y su tabla de verdad construido mediante las puertas anteriores. La tercera hoja contiene 3 versiones de sumadores con acarreo similares al de la hoja anterior. En la cuarta hoja se implementa un sumador de 3 bits a partir de los sumadores anteriores.

Incluye todas las pistas de conexión entre las puertas, con diferentes colores, para ver la transmisión de la información.

Tablas de multiplicar y multiplicaciones

Fichero Excel de Microsoft con tablas de multiplicar y multiplicaciones de 1, 2, 3, 4 y 5 dígitos por 1 dígito. Plantea multiplicaciones, hay que teclear los resultado e informa de los errores de tal manera que si el número sale azul es que la multiplicación está bien, si sale en rojo es que está mal.

En cada una de las 6 hojas Excel hay una celda negra que permite generar 9 conjuntos diferentes de combinaciones de operaciones (del 1 al 9). Las soluciones también pueden consultarse en la parte inferior de cada hoja Excel en el área coloreada de gris. La versión es la de Excel 97-2003.

Informes estadísticos para ANECA

Automatización de la generación de informes estadísticos sobre los resultados de la evaluación del profesorado universitario para la Agencia Nacional de Evaluación de la Calidad y Acreditación (ANECA).

Realizado en colaboración con Cetiver, es un desarrollo en lenguaje TOL, contra una base de datos SQL-Server, con generación de informes en formato PDF y envío automático de los informes por email a 44 Vicerrectores de Universidades Españolas.

Se trata de un programa de los que llamo nocturnos, capaz de funcionar sólo, por las noches, activado por el programador de tareas del sistema, sin necesidad de intervención humana. Fue la primera aplicación real de mis experimentos de generación de informes PDF, desde el lenguaje TOL, mediante la creación de páginas HTML intermedias y su conversión a PDF con Two Pilots.

El código específico de esta aplicación es privado, por lo que sólo incluyo un pequeño ejemplo de las 15 líneas de código de la función de llamada a Two Pilots, para la conversión de un informe HTML a PDF, que es completemente genérico y útil para el que desee invocar a este conversor en su modo de línea de mandatos.

///////////////////////////////////////////////////////////////////
Real PdfBuild(Text filInp, // Input html file
              Text filOut) // Output pdf file
///////////////////////////////////////////////////////////////////
{
  If(Not(FileExist(filInp)), FALSE, // Nothing to do
  {
    // with back slash
    Text dosInp = Replace(PdfAbs+filInp, "/", "\\");
    Text dosOut = Replace(PdfAbs+filOut, "/", "\\");
        
    Text cmdTxt = PdfExe+" "+           // Executable pdf convertor
                  dosInp+" "+           // Input file
                  dosOut+               // Output file
                  " /jpeg 100 /author Aneca";
    Text WriteLn("  Pdf: "+filOut);

    System(cmdTxt) // Execute html to pdf conversion
  })
};
///////////////////////////////////////////////////////////////////
PutDescription(
"Returns true if can create a pdf file filOut from "+
"an html file filInp.",
PdfBuild);
///////////////////////////////////////////////////////////////////
  

Contador de separadores de campos

En una gran aseduradora nos volcaban ficheros inmensos de datos de operaciones sobre polizas desde el host, ficheros con millones de registros. Eran ficheros planos y ellos mismos elegían el carácter separador de campos. Esos ficheros los subíamos, a su vez, a otra base de datos que los cargaba utilizando, para interpretar la separación de campos, el carácter indicado en cada caso. Esta carga se realizaba empleando el programa de carga suministrado junto con el sistema de gestión de la base de datos.

El proceso de carga era lento y, además, con frecuencia, el carácter que habían elegido, aparecía en algún campo de texto de algún registro. Por ejemplo, elegían el asterisco y algunos campos de observaciones contenían asteriscos. Al llegar al primer registro con más separadores de los esperados el proceso de carga abortaba tras horas de ejecución.

La solución era programar un comprobador de ficheros, muy rápido, que antes de iniciar el proceso de carga, comprobara que todas las líneas del fichero contuvieran el mismo números de caracteres separadores de campo, asumiendo como correcto el número de separadores de la primera línea del fichero. Y sólo comenzar la carga a la base de datos tras comprobar que el fichero era correcto.

Hacía ya mucho tiempo que no programaba en C y esta era una ocasión para volver a él. El programa se llama chksep.exe, esta hecho en lenguaje C en pocas horas, por lo que seguro que se puede mejorar. Se ejecuta como chksep 42 < fichero.txt, donde el 42 es el código ASCII del caracter *, que era el separador de campos habitual, aunque se puede elegir cualquier otro carácter, por ejemplo, chksep 59 < fichero.txt, para el punto y coma.

El programa visualiza las líneas donde el número de separadores de campo es diferente al de la primera línea. En un computador portatil normal este programa es capaz de revisar un Giga en 2 minutos 15 segundos, lo que equivalía con los ficheros reales que nos daban a unos 800.000 registros por minuto. Por lo que en 5 ó 10 minutos se podía evitar que luego abortara una carga de horas. El programa también cuenta el número de líneas del fichero.

A continuación pongo el ciclo principal del programa y en el fichero PDF adjunto a este post el código fuente completo.

Me gustan mucho los programas eficaces de pocas líneas de código y que sean eficientes ya lo considero un regalo.

while((chrInp=getc(stdin)) != EOF)
{
       if(chrInp==sepChr) { sepCnt++; }     /* Es un separador */
  else if(chrInp==EOL)                 /* Es un salto de linea */
  {
    if(linCnt==1)                  /* Estabamos en la 1ª linea */
    {
      sepFst = sepCnt;   /* Referencia para el resto de lineas */
      printf("\n[%d] [%s] en la primera linea.", sepFst, sepStr);
    }
    else                                       /* Linea normal */
    {
      if(sepFst!=sepCnt)        /* Faltan o sobran separadores */
      {
        printf("\nlinea %d: [%d] [%s] en vez de [%d].",
               linCnt, sepCnt, sepStr, sepFst);
      }
    }
    linCnt++;             /* Incrementar el contador de lineas */
    sepCnt = 0;     /* Poner a cero el contador de separadores */
  }
}
printf("\nProcesadas [%d] lineas.", linCnt);
  

Página del abogado Bartolomé Quesada Valles

Realización del registro de dominio .es, diseño, maquetación, desarrollo y mantenimiento en internet de la primera versión de la página web del despacho de abogados de Bartolomé Quesada Valles.

Bartolomé Quesada Valles es abogado, tiene más de 20 años de ejercicio profesional y está colegiado en el Ilustre Colegio de Abogados de Madrid (ICAM).

Esta primera versión de la página web estuvo operativa desde mediados del verano de 2008 hasta inicios del verano de 2010.

Actualmente está en funcionamiento la segunda versión de esta página web, que ha sido desarrollada en Joomla! por Luis Torrijos de OnlineBizLab.

Máximo común divisor de 2 números

Ejemplo de hoja Excel para calcular el máximo común divisor (MCD) entre 2 números. El fichero Excel de Microsoft está formado por una sola hoja de cálculo en la que los 2 números para los que se quiere calcular su máximo común divisor se introducen en las celdas azules. La hoja Excel visualiza en la zona gris los divisores encontrados y arriba en grande y azul el máximo común divisor. Este ejemplo Excel tiene limitaciones en el tamaño de los números y el método de cálculo. La versión es la de Excel 97-2003.

Pedro Reina, cifras y letras

Tuve la suerte de conocer a Pedro Reina en 1991, en la primera edición del curso Sistemas expertos en la empresa.

En 1992, Pedro acometió el desarrollo de dos programas cuyo objetivo era resolver los problemas del programa televisivo «Cifras y Letras». Primero desarrollo el programa que resolvía el problema de las cifras y luego el de las letras. Durante ese tiempo pude discutir con Pedro sus enfoques de solución a esos dos problemas.

En abril de 2008, Juan M. R. Parrondo dedicó su sección de Juegos Matemáticos de la revista Investigación y Ciencia, a los dos algoritmos desarrollados por Pedro Reina para resolver los problemas de «Cifras y Letras». En este artículo, Pedro Reina me cita amablemente a la hora de describir el mecanismo usado para resolver el problema de las letras:

«...la solución que nos ofrece Reina es muy sencilla, gracias a una idea sumamente ingeniosa que el propio autor atribuye al profesor de inteligencia artificial Antonio Salmerón...».

Juan M. R. Parrondo, «Cifras y Letras de Pedro Reina», sección de Juegos matemáticos, revista Investigación y Ciencia (traducción española de Scientific America), ISSN 0210-136X, número 379, páginas 90-91, Barcelona, abril de 2008.

  • Cited in «Numbers and Letters of Pedro Reina» by Juan M. R. Parrondo, Reseach & Science Magazine, Barcelona, April of 2008.
  • Citado en «Cifras y Letras de Pedro Reina» por Juan M. R. Parrondo, Revista Investigación y Ciencia, Barcelona, abril de 2008.

Análisis sensorial de sistemas

Cuaderno con casos prácticos:

psoe.es y pp.es en la campaña electoral 2008 y otros casos de estudio, elaborado del 21 al 29 de febrero de 2008.

Cuando somos niños creemos que los personajes de los libros, de las obras de teatro o de las películas hablan por sí mismos, sin embargo, pronto aprendemos que son los autores los que hablan a través de ellos y que, por tanto, podemos intentar conocer y comprender a los autores a través de sus obras.

Cuando interactuamos con sistemas a menudo seguimos creyendo, como los niños, que son dichos sistemas los que dicen y hacen y no los autores que los programaron y las entidades que los crearon.

Como en cualquier creación humana, podemos conocer y comprender a las entidades, su dueños, directivos y trabajadores a través de los comportamientos, acciones, mensajes y errores de los sistemas que fabrican o de los que se sirven. A menudo las verdaderas ideas y sentimientos de las personas y los grupos se pueden ver mejor reflejadas en sus sistemas que en sus mensajes comerciales, ya que mientras en otros tipos de comunicación se presta especial atención a los mensajes que se emiten, en los sistemas hay 2 razones por la que los sentimientos auténticos de la organización afloran con mayor facilidad:

  1. la atención a los aspectos tecnológicos, la subcontratación y las dificultades de desarrollo restan atención al cuidado de los mensajes que se emiten diciendo más directamente lo que se piensa y
  2. la conexión directa de muchos sistemas con el aparato de la organización hace que a través de esas conexiones aflore su verdadera personalidad.
  • Author, «Sensory analysis of systems», Intellectual Property Register, number 16/2009/5854, Madrid, February of 2008.
  • Autor, «Análisis sensorial de sistemas», Registro de la Propiedad Intelectual, número 16/2009/5854, Madrid, febrero de 2008.

De BMP Windows a ICO Unix

Este es un programa sencillo, orientado al aprendizaje del lenguaje TOL.

El programa escribe un fichero con los 128 primeros caracteres de la tabla ASCII.

Los 32 primeros son caracteres especiales por lo que sus siglas se almacenan en un conjunto TOL (Set).

Los siguientes caracteres se generan mediante la función TOL Text Char(Real asc).

Se muestra a continuación el código completo del programa que también se puede consultar en el documento PDF adjunto a este post, se incluye junto con el código el fichero resultante con la tabla ASCII.

Set AscFst =
[[
  "NUL", "SOH", "STX", "ETX", "EOT", "ENQ", "ACK", "BEL",
  "BS ", "TAB", "LF ", "VT ", "FF ", "CR ", "SO ", "SI ",
  "DLE", "DC1", "DC2", "DC3", "DC4", "NAK", "SYN", "ETB", 
  "CAN", "EM ", "SUB", "ESC", "FS ", "GS ", "RS ", "US "
]];

Text fil = "ascii.txt";
Text WriteFile(fil, "Tabla ASCII");

Set  cic = For(0, 127, Text(Real asc)
{
  // Each 8 jump new line
  Text new = If(asc % 4, "", "\n");

  // The fist 32 are special characters
  Text chr = If(LT(asc, 32), AscFst[asc+1], "["+Char(asc)+"]");

  // Append character to file
  Text lin = new + FormatReal(asc, "%03.0lf") + " " + chr +" | ";
  Text AppendFile(fil, lin);
  
  chr // Return the character
});
  

Triángulo mágico de la diosa hindú Durga

Fichero Excel (Libro de Excel 97-2003) con 4 hojas de cálculo. En la primera hoja se plantea resolver el problema del llamado triángulo mágico de la diosa hindú Durga.

Hay que poner los números del 1 al 9, todos y sin repetición, en los 3 lados del triángulo, de forma que los 3 lados sumen lo mismo. En cada lado se ponen 4 números del 1 al 9 y hay 3 celdas que son comunes a 2 lados, teniendo en total 9 celdas.

Las 3 hojas siguiente muestran las 3 soluciones posibles. En principio no habría que verlas hasta haber solucionado por uno mismo el problema del triángulo.

Las operaciones se corrigen automáticamente. Si el número introducido sale azul es que está bien y si sale en rojo es que está mal.

En la primera hoja hay una celda de control que permite fijar la solución que hay que buscar de entre las 3 existentes (sin contar giros).

15 puzle (3x3) y 65 puzle (5x5)

Fichero Excel de Microsoft formado por una sola hoja de cálculo, que contiene:

  • El llamado problema del 15 puzle, de 3x3 celdas, con todos los números de 1 al 9, uno por celda sin repetirse, que suman siempre 15 tanto por filas, como por columnas y diagonales, y
  • El problema del 65 puzle, menos conocido que el anterior, de 5x5 celdas, con todos los números de 1 al 25, uno por celda sin repetirse, que suman siempre 65 tanto por filas, como por columnas y diagonales.

En este fichero Excel se muestran ambos problemas ya resueltos. La versión es la de Excel 97-2003.

Mini sistema de flujo de datos

Fichero con dos hojas Excel (Libro de Excel 97-2003) para practicar suma y resta con un mini sistema de flujo de datos. Las dos hojas Excel contienen el mismo flujo de datos, sólo difiere su anchura.

Las celdas de fondo verde claro son las que contienen los datos de partida. En las celdas de fondo azul claro es en las que hay que introducir los resultados. Las operaciones se corrigen automáticamente. Si el número introducido sale azul es que está bien y si sale en rojo es que está mal.

En la hoja hay dos celdas negras de control, arriba a la izquierda, que permiten fijar la complejidad de las operaciones (máximo) y generar diferentes conjuntos de operaciones.

Operaciones básicas + - x /, disposición horizontal

Fichero Excel (Libro de Excel 97-2003) con 4 hojas de cálculo para practicar sumas, restas, multiplicaciones y divisiones básicas.

Las operaciones se corrigen automáticamente. Si el número introducido sale azul es que está bien y si sale en rojo es que está mal.

En cada hoja hay dos celdas negras de control que permiten fijar la complejidad de las operaciones (máximo) y generar diferentes conjuntos de operaciones (actuando de semilla para la generación aleatoria de operaciones).

Operaciones básicas + - x /, disposición vertical

Fichero Excel (Libro de Excel 97-2003) con 7 hojas de cálculo para practicar las operaciones básicas en disposición vertical:

  1. Hoja de sumas básicas.
  2. Hoja de restas básicas.
  3. Hoja para practicar las tablas de multiplicar.
  4. Dos hojas de multiplicaciones básicas.
  5. Dos hojas de divisiones básicas.

Las operaciones se corrigen automáticamente. Si el número introducido sale azul es que está bien y si sale en rojo es que está mal.

En cada hoja hay una celda negra de control que permiten generar nueve diferentes conjuntos de operaciones.

First Forecasting Event

Desde Cetiver, participación junto con Luis Torrijos en el First Forecasting Event de SAS Institute. Ambos trabajamos sobre una presentación conjunta a partir de la cual cada uno realizada su ponencia. La mía titulada «Automatización a gran escala de previsiones de base estadística: Soluciones racionales a problemas de incertidumbre masiva».

La portada de la presentación corresponde a un diseño de Luis Torrijos a partir de su idea de las gafas y la carretera.

  • Speaker, «First Forecasting Event», SAS Institute, Madrid, June of 2006.
  • Ponente, «Primer Evento sobre Previsión», SAS Institute, Madrid, Junio de 2006.

Imágenes como tablas en HTML

Hace unos meses me encontré con el problema de tener que realizar páginas HTML de texto puro sin poder incrustar imágenes. Sin embargo, había que insertar un pequeño logotipo del cliente.

El problema puede resolverse convirtiendo la imagen del logotipo en una gran tabla HTML de celdas de tamaño de 1 pixel por 1 pixel y cada una del color de fondo de su pixel asociado.

En la imagen de este post puede verse el logotipo en imagen PNG, en este caso de ejemplo mi propio logotipo, no el del cliente, y abajo la misma imagen como tabla.

Como para esta publicación no he utilizado el logotipo original de la empresa que me lo encargó, sino el mio, y para simplificar el ejemplo sólo he utilizado 3 colores en la tabla, es por eso que se nota el pixelado. Pero si se usan más colores el resultado puede se muy parecido al logotipo original en imagen.

En estos casos, y limitándome a 16 colores, suelo convertir las imágenes en formato BMP (bitmap) a especificaciones en texto utilizando el conversor Bmp2Ico realizado por Juan Ramón Miráz y por mi.

Incluyo dos realizaciones del mismo código fuente: con CSS sólo para la página y con CSS para las celdas de la tabla por lo que el tamaño del código a 1/3. Como página HTML de resultado sólo incluyo en el PDF la última, por ser más reducida.

A continuación se muestra parte del código TOL utilizado para esta conversión, aunque reducido en la parte del mapa de letras del logotipo para no saturar el post. En el código PDF que se adjunta a este post se puede ver el código fuente completo.

Set repTab = 
[[
  [["+", "<td class='r'></td>"]],
  [[".", "<td class='b'></td>"]],
  [["-", "<td class='s'></td>"]]
]];

Set picSet = [[
"+++++++-..................++++++++++++++++++++++++++++++++++",
"++++++-................+++++++++++++++++++++++++++++++++++++",
"++++++-...............++++++++++++++++++++++++++++++++++++++",
"+++++-..............++++++++++++++++++++++++++++++++++++++++",
... recortado ...
"++++++++++++++++++++++++++++++++++++++++++++++++++++++++++++"
]];

Set repCic = EvalSet(picSet, Text(Text lin)
{ // Replace 1 time
  "    <tr>\n      "+ReplaceTable(lin, repTab, 1)+"\n    </tr>\n" 
});

Text outHtm =
"
<html>
<head>
<style type='text/css'>
body { margin: 20px 20px 20px 20px; background-color: #ffffff; }
td.b { width: 1px; height: 1px; background-color: #ffffff; }
td.r { width: 1px; height: 1px; background-color: #ff0000; }
td.s { width: 1px; height: 1px; background-color: #ff9090; }
</style>
<title>Imagen en tabla</title>
</head>
<body>
  <img src='logo.bmp'>
  <br>
  <br>
  <br>
  <table bgcolor='+ffffff' cellpadding=0 cellspacing=0 border=0>
"+
  BinGroup("+",repCic)+
"
  </table>
</body>
</html>
";

Text WriteFile("logocss.htm", outHtm);
  

Mi página web profesional ASolver.com

Realización del registro del dominio ASolver.com, diseño, maquetación, desarrollo y mantenimiento en internet de mi propia página web profesional ASolver.com.

En el principio esta página web estaba albergada en mi proveedor de internet Bitmailer, empresa que posteriormente fue comprada por Sarenet. Actualmente sigue en Sarenet que es uno de mis cuatro proveedores de internet.

La imagen de la página que aparece a la derecha de este post es de una versión más actual de esta página web. De la página web original, cuya estructura era más apaisada, sólo conservo los diseños iniciales.

La página está desarrollada a mano, no se cuantos seguimos haciendo páginas webs a mano, pero no quedamos muchos, en HTML y Cascading Style Sheets (CSS) y es ya una página completamente desarrollada con estructuras div, a diferencia de las que clásicamente, y con anterioridad, desarrollaba con estructuras table.

Manual Básico de Programación en TOL

Los autores de este libro son, con su posición en el momento de publicación: Clara Simón de Blas (profesora ayudante doctor de la Universidad Rey Juan Carlos), Ana García Sipols (profesora titular interina de la Universidad Rey Juan Carlos), Raquel Montes (Profesora Contratada Doctor de la Universidad Rey Juan Carlos) y Antonio Salmerón (doctor por la Universidad Politécnica de Madrid) que aporté, fundamentalmente, los ejemplos y el material de base que dan soporte al libro.

Descripción completa del libro { Título: Time oriented language (F/TOL): manual básico de programación; ISBN (13): 978-84-96285-10-1; ISBN (10): 84-96285-10-3; Depósito legal: M 37389; Ref: Libro; Clave: L; Lengua: publicación: Castellano; Edición: 1ª ed., 1ª imp.; Publicación: Madrid. Maths Universidad SL, 01/2005; Descripción: 130 p. ; 29x21 cm; Encuadernación: rústica; Materias: Ciencia y tecnología de los ordenadores, Informática; CDU: 004 }

El objetivo de este manual es orientar a las personas que comienzan a programar en TOL, que es un lenguaje creado como Open Source por la empresa Bayes Inference SA, para la modelización del comportamiento temporal y fui unos de los 3 miembros del equipo inicial de ideación y creación del lenguaje.

El manual comienza con una descripción del lenguaje, cómo obtener el software y el entorno de trabajo. Los dos siguientes capítulos están dedicados a la programación con el lenguaje TOL. Los capítulos restantes describen los tipos de objetos propios de TOL para la explotación de la información temporal. El libro incluye ejemplos de programación a lo largo de todo el manual.

  • Coauthor, «Time Oriented Language (TOL): Basic Programming Guide», book with 130 pages, Madrid, February of 2005.
  • Coautor, «Time Oriented Language (TOL): Manual Básico de Programación», libro de 130 páginas, Madrid, febrero de 2005.

Electrical data modelling, UPM

  • Speaker, «Electrical data modelling», Industrial Engineering School (Technical University of Madrid), Madrid, 2004.
  • Ponente, «Modelización de la demanda eléctrica», ETSI Industriales (Universidad Politécnica de Madrid), Madrid, 2004.

Level 10 of 10 in the hacking test, Instisec

La dirección del Instituto para la Seguridad en Internet es http://www.instisec.com.

  • «Internet Application Security» and level 10 of 10 in the hacking test of the Internet Security Institute, Madrid, 2003.
  • «Aplicaciones seguras en internet» y nivel 10 de 10 en el test de hacking del Instituto para la Seguridad en Internet, Madrid, 2003.

Architecture for time oriented systems

Organizado por mi amigo y antiguo socio Manuel Alonso, Doctor por la Universidad Politécnica de Madrid y, por entonces, profesor de la Universidad Antonio de Nebrija.

  • Speaker, «Architecture for time oriented systems», Antonio de Nebrija University, Madrid, 2000.
  • Ponente, «Arquitectura de sistemas orientados al tiempo», Universidad Antonio de Nebrija, Madrid, 2000.

Dynamic modelling of markets

Participación en 2 ediciones de las jornadas organizadas por Departamento de Estadística de la Universidad de Salamanca.

  • Speaker, «Dynamic modelling of markets», Salamanca University, Salamanca, 2 editions, 1999 & 2001.
  • Ponente, «Modelización dinámica de los mercados», Universidad de Salamanca, Salamanca, 2 ediciones, 1999 y 2001.

Advanced forecasting, IIR

Ponencia para el Institute for International Research (IIR) y en calidad de Director General y socio de Bayes Inference SA.

  • Speaker, «Advanced forecasting», Institute of International Research (IIR), Madrid, 1996.
  • Ponente, «Modelos avanzados de previsión», Institute of International Research (IIR), Madrid, 1996.

Diccionario de informática

  • Coauthor, «Computer science dictionary», Foundation for Industrial Innovation & Computer Sciences School (UPM), Madrid, 1996.
  • Coautor, «Diccionario de informática», Fundación para la Innovación Industrial y Facultad de Informática de Madrid (UPM), Madrid, 1996.

Investigación Operativa, UNED

  • Collaborator in forecasting programming with the Department of Operations Research, UNED University, Madrid, 1988-1989.
  • Colaborador en programación de previsiones con el Departamento de Investigación Operativa, UNED, Madrid, 1988-1989.

MAP y Fundación Ortega y Gasset

Profesor de la asignatura «Conceptos fundamentales de informática», del Curso de Postgrado en Administración Pública, del Ministerio para las Administraciones Públicas (MAP), el Instituto Nacional de Administraciones Públicas (INAP) y la Fundación Ortega y Gasset, dos ediciones, Madrid, 1995 y 1996.

  • Teacher, «Computer science concepts», Ministry of Public Administration & Ortega y Gasset Foundation, Madrid, 2 editions, 1995 & 1996.
  • Profesor, «Conceptos fundamentales de informática», Ministerio para las Administraciones Públicas y Fundación Ortega y Gasset, Madrid, 2 ediciones, 1995 y 1996.

De BMP Windows a ICO Unix

El programa de conversión de Bitmaps (BMP) de 16 bits de Windows al formato ICO (de icono) de Unix lo comenzó a desarrollar Juan Ramón Miraz, al comienzo de los noventa, y la versión final que se adjunta en este post la terminé yo.

El formato ICO de Unix especifica un mapa de bits como una matriz de caracteres ASCII, donde cada letra se asocia con el color del pixel de su misma fila y columna. Hubo una época que los bitmaps de los botones de los interfaces de usuario yo lo pintaba así, utilizando el editor vi de Unix y letra a letra. Por ejemplo, asociaba la v al verde, la b al blanco, la r al rojo, etc., para que me fuera más fácil, e iba poniendo letras, una a una, hasta que el botón quedaba bien. Para mi era una gratificante labor artesanal.

A partir de este programa también desarrollé el que convierte del formato BMP al formato BIF, que era un formato propio mio, que utilizaba en combinación con Clipper.

Aunque ahora se podrían recompilar estos dos códigos fuente para las versiones de Windows de 64 bits, sigo utilizando los ejecutables originales de 16 bits. Antes estos ejecutables de 16 bits podían correr mediante emulación en Windows de 32 bits, pero ahora el Windows de 64 bits ya no emula al de 16 bits.

Para poder seguir ejecutando estas pequeñas joyas históricas, sin necesidad de recompilarlas (y más aun en aquellos casos en el que el compilador es también de 16 bits) utilizo el emulador de x86 con DOS de DOSBox que se publica con licencia GNU GPL y aceptan donaciones (yo se la di).

Aunque adjunto en PDF el código fuente completo de los 2 programas de conversión y un ejemplo del formato ICO generado con mi logotipo personal, pongo a continuación el ciclo fundamental de extracción de pixels de un Bitmap (BMP) de 16 colores. Como curiosidad, en esta época, por razones de normalización con el equipo de software con el que trabajaba, los corchetes { } están en la vertical del bloque de código y no dos caracteres antes como es mi costumbre habitual:

for (Y=0, YMax=Bmih.biHeight; Y < YMax; Y++)
  {
  fseek(Bmp, RowStart, SEEK_SET);
  for (X=0, XMax=Bmih.biWidth; X < XMax; X++)
    {
    Arg = fgetc(Bmp);
    H = (Arg >> 4) & 0x0F;  H = Color[H];
    L = Arg & 0x0F;         L = Color[L];
    X++;
    fprintf(Pix,"%c%c",(char)H,(char)L);
    }
  RowStart -= RowBytes;
  fprintf(Pix,"\n");
  fputc('.',stdout); fflush(stdout);
  }
  

Master de Ingeniería de Tráfico, DGT

Profesor de la asignatura «Panorámica del hardware», en el Master de Ingeniería de Tráfico, organizado por la Asociación para la Carretera, la Dirección General de Tráfico (DGT) y la Universidad Politécnica de Madrid (UPM). Impartido en la Escuela Universitaria de Ingeniería Técnica de Obras Públicas (UPM). Participé las dos ediciones de 1994 y 1995.

  • Teacher, «Hardware concepts», Master of Traffic Engineering, DGT, 2 editions, Madrid, 1994 & 1995.
  • Profesor, «Panorámica del hardware», Master de Ingeniería de Tráfico, DGT, 2 ediciones, Madrid, 1994 y 1995.

Herramienta TIRS, IBM

Profesor del curso «Desarrollo de sistemas basados en el conocimiento con la herramienta TIRS». Dos ediciones, la primera para El Corte Inglés y la segunda para el Instituto Nacional de Estadística (INE).

  • Teacher, «IBM Tirs Tool», National Statistics Institute & El Corte Ingles, 2 editions, Madrid, 1993.
  • Profesor, «Herramienta Tirs de IBM», Instituto Nacional de Estadística & El Corte Inglés, 2 ediciones, Madrid, 1993.

Sigart Bulletin, ACM Press

Referencia de mi tesis doctoral en el número 1, del volumen 4, de la revista Sigart Bulletin, de ACM Press. Edición al cuidado de W. Lewis Johnson, USC, Information Sciences Institute, California, USA.

  • Doctoral thesis referenced in the «Sigart Bulletin», volume 4, issue 1, ACM Press, Information Sciences Institute, California, January of 1993.
  • Referencia de mi tesis doctoral en el «Sigart Bulletin», volumen 4, número 1, ACM Press, Information Sciences Institute, California, enero de 1993.

Equiparación de perfiles de personalidad

Colaborador del trabajo «PCCP: Una aplicación de la ingeniería del conocimiento para la evaluación de cuestionarios de personalidad de las Fuerzas Armadas», bajo la dirección de Miguel Ángel Núñez del Centro Regional de Psicología (CREPSI) durante mi servicio militar (este fue uno de los trabajos que realicé dentro de las áreas de las aplicaciones a la psicología militar y de la captura óptica de datos).

Este trabajo galardonado con el 2º Premio de Investigación en Psicología Militar «General González del Pino», del Ministerio de Defensa en 1992 (BOE número 282, del martes 24 noviembre 1992, Resolución 421/39369/1992, de 18 de noviembre, de la Secretaria de Estado de Administración Militar, por la que se otorga el Premio de Investigación Psicológica «General González del Pino»).

Resumen: Para dicha aplicación desarrollé el módulo de equiparación de patrones de perfiles de personalidad de los individuos a evaluar con los individuos ya evaluados y clasificados en un banco de datos histórico. Los nuevos individuos podían entrar a formar parte de este banco de datos tras su evaluación, clasificación y seguimiento, con lo que se producía un enriquecimiento constante del banco de datos inicial. La equiparación se realizaba a través de la definición de una medida de distancia entre todos los atributos de la personalidad que medía la aplicación y los de los individuos registrados en el banco de datos. Para optar al premio, también participé en la redacción de la parte de la memoria correspondiente a este módulo de equiparación de perfiles de personalidad.

  • Collaborator of Miguel Angel Núñez, «Application of the knowledge engineering for the evaluation of personality questionnaires», Awarded with the second prize in military psychology research, Ministry of Defence, Madrid, 1992.
  • Colaborador de Miguel Ángel Núñez, «Aplicación de la ingeniería del conocimiento para la evaluación de cuestionarios de personalidad», Galardonado con el 2º premio en investigación en psicología militar, Ministerio de Defensa, Madrid, 1992.

PhD, Inteligencia Artificial, UPM

  • Doctor Cum Laude in Artificial Intelligence / Computer Science, Technical University, Madrid, 2+3 years, 1986-1988, 1989-1992.
  • Doctor Cum Laude en Inteligencia Artificial / Informática, Universidad Politécnica, Madrid, 2+3 años, 1986-1988, 1989-1992.

Cuerpo Superior de Técnicos en TI

Temario de la oposición al Cuerpo Superior de Técnicos en Tecnologías de la Información.

Inicialmente se hizo un sólo tema coordinado por Francisco López Crespo, luego se ampliaron a cuatro temas (coordinados por mí) y, a partir de ahí, el contenido de estos módulos fue reutilizado por los organismos encargados del temario de forma independiente a los autores iniciales.

Estos autores iniciales fueron, por orden alfabético: Manuel Alonso González, María Jesús Díaz García, Ana García Serrano, Martín Molina González, Eduardo Izquierdo Lázaro, Sascha Ossowski y Antonio Salmerón.

Tengo conocimiento de, al menos, cuatro ediciones, cuya historia describo a continuación, aunque es posible que haya habido muchas más.

Cuatro ediciones:

  1. Coautor del tema 15, Inteligencia Artificial y Sistemas Expertos, coordinado por Francisco López Crespo, Ministerio para las Administraciones Públicas (MAP), Madrid 1992.
  2. Coautor y coordinador técnico de los temas 24, 25, 26 y 27 del nuevo temario de 1996, también para el Ministerio para las Administraciones Públicas (MAP).
  3. En la edición de 2002, los temas anteriores, se volvieron a editar con los números 19, 20, 21 y 22, siguiendo el orden de la convocatoria del Boletín Oficial del Estado (BOE) 215 de 2002/09/07, en una edición que corrió a cargo de la Asociación Profesional del Cuerpo Superior de Sistemas y Tecnologías de la Información de la Administración del Estado (ASTIC).
  4. Finalmente en 2009, esto temas, se refundieron en el tema 65, «Gestión del conocimiento: Representación del conocimiento. Sistemas expertos. Herramientas», del segundo volumen de la edición de ASTIC.

  • Coauthor and technical coordinator, «Modules of artificial intelligence & experts systems», Ministry of Public Administration, 4 editions, Madrid, 1992, 1996, 2002 & 2009.
  • Coautor y coordinador técnico, «Módulos de inteligencia artificial y sistemas expertos», Ministerio para las Administraciones Públicas, 4 ediciones, Madrid, 1992, 1996, 2002 y 2009.

Arquitecturas de 2ª generación de diagnóstico

Ponencia titulada «Arquitecturas de segunda generación para el diagnóstico profundo en instalaciones industriales», dentro del curso sobre Técnicas Avanzadas de la Inteligencia Artificial, de la Universidad de Extremadura (UNEX) en 1992.

Pertenece al conjunto de ponencias realizadas ya cerca, y en el marco, de la presentación de mi tesis doctoral. Cada ponencia representaba un paso adelante en el refino de las ideas de la tesis.

  • Speaker, «2nd generation architectures for the deep diagnosis in industrial plants», Universidad de Extremadura, Caceres, 1992.
  • Ponente, «Arquitecturas de 2ª generación para el diagnóstico profundo en instalaciones industriales», Universidad de Extremadura, Cáceres, 1992.

Centro Superior de Investigaciones Científicas

Presentación científica titulada «Arquitecturas de segunda generación para el diagnóstico profundo en instalaciones industriales», realizada en el Centro Superior de Investigaciones Científicas (CSIC), en Madrid el 24 de octubre de 1991, en la IV Reunión Técnica de la Asociación Española Para la Inteligencia Artificial (AEPIA).

El artículo, escrito con mi director de tesis José Cuena, que da soporte a esta presentación científica está publicado en las Actas de la IV Reunión Técnica de la AEPIA, en la sección IV de «Arquitecturas Avanzadas», de las páginas 351 a 365.

Es una de las presentaciones de la que guardo más grato recuerdo, tal vez por el entorno del salón de actos del CSIC, por la presencia de mi director de tesis José Cuena (que fue Presidente AEPIA de 1983 a este año 1991) y por la de Felisa Verdejo (directora del Departamento de Lenguajes y Sistemas Informáticos de la UNED y del grupo de investigación Procesamiento del Lenguaje Natural), sentada junto a él y que luego formaría parte de mi tribunal de tesis.

El mosaico de la portada de las Actas, que combina en verdes el logotipo de la AEPIA, y su versión en grises del Programa de mano de la reunión es una creación mía realizada con un Apple Macintosh. Este mosaico también fue utilizado para la V Conferencia de la AEPIA en 1993 pero en naranjas.

  • Coauthor, «2nd generation architectures for the deep diagnosis in industrial plants», Papers of the 4th Technical Meeting of the AEPIA, Scientific Research Council, Madrid, 1991.
  • Coautor, «Arquitecturas de 2ª generación para el diagnóstico profundo en instalaciones industriales», Actas de la IV Reunión Técnica de la AEPIA, Centro Superior de Investigaciones Científicas, Madrid, 1991.

Representación en restricciones

Ponente de la conferencia titulada «Representación en restricciones de conocimiento profundo sobre instalaciones industriales», centrada en la «Programación con restricciones». La ponencia está basada en artículo del mismo nombre, escrito con José Cuena, que se publicó en las actas de las jornadas de Programación Declarativa, Universidad de Málaga, Málaga, celebrada del 2 al 4 de octubre de 1991.

  • Coauthor, «Constraint programming», Papers of the Declarative Programming Symposium, Malaga University, Malaga, October of 1991.
  • Coautor, «Programación con restricciones», Actas de las Jornadas de Programación Declarativa, Universidad de Málaga, Málaga, octubre de 1991.

Sistemas expertos en la empresa

Profesor y coordinador técnico master de «Sistemas expertos en la empresa», impartido durante 5 ediciones de 620 horas cada una. Organizado por la Comunidad Autónoma de Madrid, Consejería de Educación, Instituto Madrileño de Formación (IMAF). Fue impartido primero en la Universidad Carlos III de Leganés, curso 1990-91. Posteriormente en el Centro de Enseñanza de las Tecnologías de la Información (CETICAM) de Carabanchel, cursos 1991-1992, 1992-1993, 1993-1994 y 1994-1995.

Fui profesor de las asignaturas Conceptos básicos de informática, Conceptos fundamentales de Inteligencia Artificial, Diseño y construcción de sistemas expertos. Profesor de los laboratorios de lenguaje C, lenguaje Lisp, lenguaje Clipper y de proyectos de fin de master. En los tres últimas ediciones fui coordinador técnico del master.

  • Technical coordinator and teacher, «Master in commercial expert systems», IMAF, Community of Madrid, 5 annual editions of 620 hours each, Madrid, 1991-1995.
  • Coordinador técnico y profesor, «Sistemas expertos en la empresa», IMAF, Comunidad de Madrid, 5 ediciones anuales de 620 horas, Madrid, 1991-1995.

Referencia en The 1991 AI Directory

Referenciado en «The 1991 AI Directory: The Directory of the Artificial Intelligence Industry», en la página 69, directorio editado por American Association for Artificial Intelligence (AAAI, Menlo Park, California), Association for Computing Machinery Special Interest Group on Artificial Intelligence (ACM-SIGART), Canadian Society for Computational Studies of Intelligence (CSCSI) y Sociedad Mexicana de Inteligencia Artificial (SMIA) en 1991.

  • Referenced in «The 1991 AI Directory: The Directory of the Artificial Intelligence Industry», page 69, AAAI, ACM-SIGART, CSCSI y SMIA, California, 1991.
  • Referenciado en «El Directorio de la IA, 1991: El Directorio de la Industria de la Inteligencia Artificial», página 69, AAAI, ACM-SIGART, CSCSI y SMIA, California, 1991.

IA y sistemas basados en el conocimiento

Ponencia titulada «Inteligencia artificial y sistemas basados en el conocimiento», en la Facultad de Ciencias Físicas y Matemáticas de la Universidad Complutense de Madrid.

  • Speaker, «Artificial intelligence & knowledge based systems», Complutense University, Madrid, 1991.
  • Ponente, «Inteligencia artificial y sistemas basados en el conocimiento», Universidad Complutense, Madrid, 1991.

Servicio militar en psicología

  • Developer of systems for electronic capture (OMR, Optical Mark Reader) and reporting and diagnostic for a military psychology centre, Ministry of Defence Madrid, 1990-1991.
  • Desarrollador de sistemas de captura electrónica (OMR, lectura óptica de marcas) y de generación de informes y diagnósticos para un centro de psicología militar, Ministerio de Defensa, Madrid, 1990-1991.

Modelling of industrial problems, INCOM’89

En 1989 escribí el artículo «A knowledge based environment for artificial intelligence modelling of industrial problems: Preliminary concepts», bajo la dirección de José Cuena, que se publicó en Preprints of the 6th Symposium on Information Control Problem in Manufacturing Technology (INCOM’89) de la International Federation of Automatic Control (IFAC).

Esta fue una de las primeras veces que tuve que presentar un artículo en una conferencia internacional. Al llegar la hora de la inscripción me pidieron pagar la entrada al curso. Era incapaz de comprenderlo, expliqué una y otra vez que iba de ponente, no de asistente, yo no concebía que además de que no me pagaran por hablar tuviera que pagar por asistir. Armé tal lío que tuvo que llegar mi tutor José Cuena a pagar mi entrada y hacerme pasar, pues llegaba tarde a mi ponencia. Han pasado los años y sigo creyendo que si lo que vas a contar tiene contenido hay que negarse a pagar y si no tiene contenido entonces ni hay que hablar.

  • Coauthor, «A knowledge based environment for artificial intelligence modelling of industrial problems: Preliminary concepts», INCOM’89, IFAC, Madrid, 1989.
  • Coautor, «Un entorno basado en el conocimiento para la modelización con IA de problemas industriales: Conceptos preliminares», INCOM’89, IFAC, Madrid, 1989.

Herramienta Guru, IBM

Profesor de la «Herramienta Guru» en el Curso de Formación Continua «Sistemas Expertos, Conceptos, técnicas y métodos básicos», de la Escuela Universitaria de Informática de la Universidad Politécnica de Madrid en 1989.

Guru era una herramienta desarrollada por IBM para la construcción de sistemas expertos.

  • Teacher, «IBM Guru tool», University School of Computer Science, Technical University, Madrid, 1989.
  • Profesor, «Herramienta Guru de IBM», Escuela Universitaria de Informática, Universidad Politécnica, Madrid, 1989.

Reasoning over the behaviour of physical systems

Autor del artículo «Reasoning over the behaviour of physical systems», en Civil Engineering Expert Systems, Civil Engineering European Cursus, Programa COMET, Madrid, 1989.

Fui sólo el autor del artículo, porque no pude asistir a la conferencia como ponente y lo tuvo que presentar por mí Manuel Alonso, compañero en el Laboratorio de Inteligencia Artificial y luego socio de la empresa EQ Sistemas Inteligentes.

  • Author, «Reasoning over the behaviour of physical systems», Civil Engineering Expert Systems, Civil Engineering European Cursus, Madrid, 1989.
  • Autor, «Razonamiento sobre el comportamiento de sistemas físicos», Sistemas Expertos en Ingeniería Civil, Curso Europeo de Ingeniería Civil, Madrid, 1989.

Diagnóstico profundo y simulación cualitativa

  • Researcher in deep diagnosis and qualitative risk simulation for Repsol (petro-chemical industry), Tarragona, 1988-1989.
  • Investigador en diagnóstico profundo y simulación cualitativa de riesgos para Repsol (sector pretro-químico), Tarragona, 1988-1989.

Optimización de queries a bases de datos

Publicación del artículo titulado «Optimizadores: Mejorar el acceso a los datos», en la revista Chip, número 76, páginas 37-47, Ediciones Arcadia, Madrid, 1988.

Artículo escrito con y bajo la dirección de Adoración de Miguel Castaño, por entonces mi profesora de bases de datos y modelos de datos. Los ejemplos para ilustrar la lógica de la optimización estaban programados en Prolog.

  • Coauthor, «Database query optimization», Chip Magazine, number 76, pages 37-47, Arcadia Editions, Madrid, 1988.
  • Coautor, «Optimizadores: Mejorar el acceso a los datos», Revista Chip, número 76, páginas 37-47, Ediciones Arcadia, Madrid, 1988.

Sistema de Ayuda Inteligente al Diseño

Coautor con José Cuena de «Sistema de ayuda inteligente al diseño», publicado en Contributes Papers of the International Conference on Artificial Intelligence, II World Basque Congress, que se celebró en San Sebastián del 31 de agosto al 22 de octubre de 1987.

Allí expuse el sistema de ayuda al diseño de estructuras creado en mi proyecto de fin de carrera. Cuando escribí mi proyecto no disponía de un buen procesador de textos (WordPerfect 1.0 empezó a popularizarse hacia finales de los ochenta y yo no lo tenía), por lo que para poder hacer la memoria del proyecto tuve que construirme mi propio procesador de textos (del que yo fui su único usuario) junto con un módulo gráfico para que el Sistema de Ayuda Inteligente al Diseño pudiera imprimir gráficamente las estructuras que él creaba. Años después, me plantee que dicho procesador de textos y el módulo gráfico de impresión, valían, como proyecto de fin de carrera, mucho más que el propio proyecto presentado. Sin embargo, este artículo ya estaba escrito con el procesador de textos de un Apple Macintosh.

  • Coauthor, «Intelligent computer-aided design», Contributes Papers of the International Conference on Artificial Intelligence, II World Basque Congress, Donosti, September of 1987.
  • Coautor, «Sistema de ayuda inteligente al diseño», Documentos de la Conferencia Internacional en Inteligencia Artificial, 2º Congreso Mundial Vasco, San Sebastián, septiembre de 1987.

Licenciado en informática, UPM

  • Software engineer, Computer Science School, Technical University, Madrid, 5+1 years, 1981-1986, and 1987.
  • Licenciado en Informática, Facultad de Informática, Universidad Politécnica, Madrid, 5+1 años, 1981-1986 y 1987.

Diseño y fabricación asistida por computador

  • Manager of the Computer-aided Design and Manufacturing Group in Amper (electronic industry), Madrid, 1986-1987.
  • Administrador del Centro de Diseño y fabricación asistida por computador en Amper (sector de la electrónica), Madrid, 1986-1987.

Tesis de Francisco Javier Gisbert Cantó

Francisco Javier Gisbert Cantó es (2011) Vicedecano Secretario de la Facultad de Informática de la Universidad Politécnica de Madrid (UPM). Presentó su tesis doctoral titulada «Contribución para una nueva generación de sistemas de diseño asistido por computador basados en inteligencia artificial» en 1986. Con Ana García Serrano y Rafael María Gosálbez colaboré en esta tesis que dirigió mi director José Cuena.

  • Cited by Francisco Javier Gisbert as collaborator in his doctoral thesis about «Intelligent computer-aided design systems», page V, Technical University, Madrid, 1986.
  • Citado por Francisco Javier Gisbert como colaborador en su tesis doctoral sobre «Sistemas de ayuda inteligente al diseño», página V, Universidad Politécnica, Madrid, 1986.

Lenguaje Prolog, AEPIA

Jesús García San Luis y yo colaboramos con nuestra tutora Ana María García Serrano en la preparación y presentación de la ponencia denominada «Prolog II» en las Jornadas de Inteligencia Artificial de la Asociación Española Para la Inteligencia Artificial (AEPIA), que se celebró en 1985, en el Rectorado de la Universidad Politécnica de Madrid (UPM).

Ana María García Serrano es (2008) profesora asociada del Departamento de Inteligencia Artificial de la Facultad de Informática de la UPM y Jesús García San Luis es (2008) Director de Exploración y Producción I+D de Repsol.

El Rectorado de la UPM está en la calle Ramiro de Maeztu, en la Ciudad Universitaria, allí también pasé ese verano trabajando como becario, donde disponía de una máquina Digital Vax, a veces para mí solo, cuando en la Facultad, en los inviernos anteriores, había que hacer largas colas a primera hora de la mañana para conseguir sólo un poco de tiempo en otro Digital Vax de menor potencia.

  • Coauthor, «Prolog II language», Artificial Intelligence Symposium, AEPIA, Madrid, 1985.
  • Coautor, «Lenguaje Prolog II», Jornadas de Inteligencia Artificial, AEPIA, Madrid, 1985.

Riesgos de crédito para el Banco de Santander

Como becario trabaje en el desarrollo en Prolog II de un sistema experto de la clase MYCIN para la evaluación del riesgos de crédito para el Banco de Santander, en el área de créditos a empresas. La beca estaba dentro del marco de colaboración entre el Banco de Santander y el grupo de investigación creado por José Cuena en la Universidad Politécnica de Madrid (UPM).

Prolog es un lenguaje de programación lógico e interpretado con un mecanismo de inferencia mediante encadenamiento en profundidad de reglas. Por estas fechas, al poco tiempo de aprender a programar en Prolog (en especial Prolog II de Marsella), cree dos reglas capaces de procesar a otro conjunto de reglas, que recibían como argumentos de entrada, pero lo hice de forma que la exploración de dicho conjunto de reglas realizaba en anchura, no en profundidad. Mi director José Cuena me dijo divertido: «le dejo un motor de inferencia y lo primero que hace usted es cambiarle la dirección». Aquellas dos reglas ayudaron a la creación de sistemas expertos de acumulación y transmisión de evidencia (del tipo MYCIN, con una orientación semibayesiana) a partir de los a priori de los expertos, ya que la acumulación de la evidencia aportada por un conjunto de reglas necesita su evaluación conjunta, esto es en anchura, para poder ser combinada.

  • Scholar, «Risk assessment expert system», Santander Bank, Madrid, 1985-1986.
  • Becario, «Sistema experto de evaluación de riesgos», Banco de Santander, Madrid, 1985-1986.

Miembro de la primer claustro democrático y constituyente de la UPM

Fui miembro de la primer claustro democrático y constituyente de la Universidad Politécnica de Madrid y participé en la redacción de sus primeros estatus democráticos (aprobados por Real Decreto 2.536/1985, de 27 de diciembre).

  • Students' representative in the Legislative Congress of the Technical University, Madrid, 1984-1985.
  • Miembro de la primer claustro democrático y constituyente de la Universidad Politécnica, Madrid, 1984-1985.

Claustral de la Facultad de Informática

  • Students' representative in the Council of the Computer Science Faculty, Technical University, Madrid, 1983-1984.
  • Miembro del claustro de la Facultad de Informática, Universidad Politécnica, Madrid, 1983-1984.

Delegado de 3º de la Facultad de Informática

  • Students' representative of the third course of the Computer Science Faculty, Technical University, Madrid, 1983-1984.
  • Delegado del curso 3º de la Facultad de Informática, Universidad Politécnica, Madrid, 1983-1984.

Sistema operativo RPS, Series/1 de IBM

Detalle del Series/1 de IBM con sistema operativo RPS

En 1983 colaboré como profesor ayudante de prácticas del Sistema operativo RPS (Real-time Programming System) del Series/1 de IBM, en el Centro de Cálculo de la Facultad de Informática, de la Universidad Politécnica de Madrid (UPM), bajo la dirección de Arturo Ribagorda Garnacho.

Arturo Ribagorda Garnacho es, actualmente (2010), Catedrático de Ciencia de la Computación e Inteligencia Artificial en la Universidad Carlos III de Madrid (UC3M) en el Campus de Leganés.

Por aquel entonces empezaba a utilizar discos flexibles de 8 pulgadas como el que aparece en la imagen, aunque todavía no habían salido de mí vida ni la programación ni con cinta, ni con tarjetas perforadas.

  • Teacher assistant, «IBM Series/1 RPS operating system», Computer Science School, Technical University, Madrid, 1983.
  • Profesor ayudante, «Sistema operativo RPS, Series/1 de IBM», Facultad de Informática, Universidad Politécnica, Madrid, 1983.