Informática forense, brochure 2015

Está disponible una presentación en formato PDF del Máster en Informática Forense y Pericial que organizamos e impartimos en el CIIP (Campus Internacional de Inteligencia y Pericia).

Tenemos el placer de contar con alumnos de Colombia, Costa Rica, México y de nuestros Cuerpos y Fuerzas de Seguridad.

Para todos, y para ellos especialmente, hemos publicado una bibliografía actualizada a noviembre de 2015.

Áreas de avance en el Máster en Informática Forense y Pericial

Big Data y Business Intelligence de supervivencia

Durante los meses finales del año 2014, he ido anotando los términos que he oído en las reuniones en las que se hablaba de Big Data y de Inteligencia de Negocio, a veces nombrada por los interlocutores como BI, de su nombre en inglés Business Intelligence.

Son términos como Cassandra, Apache Lucene, Elasticsearch, Flume, Hadoop, HBase, Hive, Kafka, MongoDB, Spark, Storm, Pivotal, MapR, Hortonworks, Cloudera, Agile Software Development, Python, Java o Scala, NoSQL, R, MLlib, Weka, etc. en los que se mezcla un poco de todo, nombres de herramientas y entornos, de sistemas de gestión de bases de datos, de lenguajes de programación, de técnicas y de metodologías, tanto específicos para Big Data y Business Intelligence como para otros usos.

A comienzos de 2015 y a partir de ellos se me ocurrió redactar un vocabulario de supervivencia para estas reuniones empresariales de Big Data y Business Intelligence.

Ahora a finales de 2015 he seleccionado para presentar aquí 13 de los más frecuentes de esos términos, que son:

NoSQL: Término que sirve para hacer referencia a los sistemas de gestión de base de datos no relacionales. Comprende categorías como clave-valor, BigTable, bases documentales y bases de datos orientadas a grafos. Estos sistemas de gestión de bases de datos están optimizados para recuperar y agregar datos, pero no suelen ofrecer funcionalidades más allá de almacenar y recuperar registros, por ejemplo, usando un esquema de clave-valor. Estas limitaciones para algunos aspectos las compensan con ganancias en escalabilidad y rendimiento.

BigTable: Es un sistema de gestión de base de datos creado por Google, es distribuido, de alta eficiencia y propietario. Fue construido utilizando Google File System (GFS) y Chubby Lock Service. Funciona sobre computadores personales con procesadores Intel sencillos y baratos. Almacena la información en tablas multidimensionales, donde muchas celdas pueden estar vacías y, también, contener versiones temporales de sus valores históricos.

MongoDB: Su nombre procede de humongous / enorme. Es un sistema de base de datos NoSQL, orientado a documentos y desarrollado como código abierto.

Cassandra: Es un sistema de base de datos NoSql con las siguientes características: almacenamiento por clave-valor, Java, grandes volúmenes, escalabilidad lineal, alta disponibilidad, arquitectura distribuida con nodos iguales comunicados por un protocolo P2P con máxima redundancia, desarrollado por Apache Software Foundation.

Apache Lucene: Es un API, interfaz de aplicación, de código abierto para la recuperación de información, es útil para indexar y buscar a texto completo.

Multitenencia: Término que se emplea cuando una sola instancia de la aplicación se ejecuta en el servidor sirviendo a múltiples clientes u organizaciones. Este concepto se diferencia de las arquitecturas con múltiples instancias donde cada cliente u organización tiene su propia instancia instalada de la aplicación.

REST y RESTful: Los sistemas que siguen los principios REST se suelen llamar RESTful. Se dice que la web ha disfrutado de escalabilidad como resultado de una serie de diseños clave:

  • Un protocolo cliente / servidor sin estado, donde cada mensaje HTTP contiene toda la información necesaria para comprender la petición, ni cliente ni servidor necesitan recordar ningún estado de las comunicaciones entre mensajes, pero, en la práctica, muchas aplicaciones HTTP necesitan mecanismos como las cookies u otros para mantener el estado de la sesión.
  • Un conjunto de operaciones bien definidas que se aplican a todos los recursos de información, HTTP en sí define un conjunto pequeño de operaciones como POST, GET, PUT y DELETE.
  • Una sintaxis universal para identificar los recursos, en un sistema REST, cada recurso es direccionable únicamente a través de su URI.
  • El uso de hipermedios, para la información de la aplicación y para las transiciones de estado de la aplicación, la representación de este estado en un sistema REST son típicamente HTML o XML, por ello, es posible navegar de un recurso REST a otros, siguiendo enlaces sin requerir el uso de registros u otra infraestructura adicional.

JSON: JavaScript Object Notation, es un formato ligero para el intercambio de datos, por su simplicidad de JSON es una alternativa a XML en AJAX. Es sencillo escribir un analizador sintáctico (parser) de JSON. En JavaScript, un texto JSON se puede analizar usando la función eval().

Elasticsearch: Servidor de búsqueda basado en Lucene, motor de búsqueda de texto completo, distribuido y con capacidad de multitenencia con una interfaz web RESTful y con documentos JSON. En Java y publicado como OSS con licencia Apache.

Hadoop Apache: Framework que soporta aplicaciones distribuidas, licencia libre, permite a las aplicaciones trabajar con miles de nodos y muy altos volúmenes de datos, se inspira en los documentos Google para MapReduce y Google File System (GFS).

HBase: Sistema de gestión de base de datos que sigue el modelo BigTable Hypertable usado en Hadoop.

Cloudera Impala: Motor de consultas SQL OSS para el procesamiento masivo en paralelo de los datos almacenados en un clúster de computadoras ejecutando Apache Hadoop.

Pentaho BI Suite: Conjunto de programas libres para BI para: ETL (extracción, transformación y carga); Analysis Services (Modrian, OLAP, MDX, XML); Reporting con OpenOffice; Data Mining usando Weka para clasificación, regresión, reglas de asociación, clustering, análisis predictivo; Dashboard de informes, gráficos interactivos y cubos creados con las herramientas Pentaho Report Designer; y Apache Hadoop para acceder a grandes volúmenes de datos.

Notoriedad en verde frente a notoriedad estimada en marrón

Dentro de 3 años más de la mitad de estos términos, ahora tan notorios, o los habremos olvidado o nos olerán ya a naftalina.

Perito judicial en informática forense

Peritos Criminólogos y Expertos en Ciencias Periciales para los Tribunales de Justicia

Soy miembro de la La Asociación Nacional de Peritos Criminólogos y Expertos en Ciencias Periciales para los Tribunales de Justicia, ANPC y, a través de ella, Perito Judicial en Informática Forense de los Tribunales de Justicia, con Tarjeta de Identificación Personal TIP 114.005.

La ANPC, como puede consultarse en su dirección Asociacion-ANPC.es, agrupa a titulados universitarios en Criminología y a prestigiosos expertos en las diferentes especialidades de las áreas periciales y forenses.

  • Expert witness in computer forensic for the courts, with Personal Identification Card number 114.005, since 2015.
  • Perito judicial en informática forense de los Tribunales de Justicia, con Tarjeta de Identificación Personal TIP 114.005, desde 2015.

What is a consputer? consputer vs computer

A computer is a machine for automatic information processing.

The objetive of a computer must be helping you to make money.

The consumer is the one who pays for goods and services.

Nowadays, many of the new computers are designed to consume.

If you want to earn money, then use a computer.

If you want to waste money or time, then buy a consputer.

What is a consputer? A computer for a consumer.

A consputer is a computer for a consumer.

Diplomado en Criminología, Universidad Católica San Antonio

Este 25 de noviembre de 2013 he recibido el Diploma Superior en Criminología emitido por la Universidad Católica San Antonio.

Esta Diplomatura Superior en Criminología la organiza la Escuela de Criminología de la Universidad Católica San Antonio, tiene una duración de 180 créditos y su contenido formativo organizado en sus 3 cursos es el siguiente:

  • Primer curso: Criminología I, Psicología, Sociología, Derecho Penal I, Derecho Constitucional, Informática y Bases de Datos, Biología, Estadística Social, Teología y Doctrina Social de la Iglesia.
  • Segundo curso: Criminología II, Derecho Penal II, Técnicas de Investigación Criminal, Medicina Legal, Ciencia Penitenciaria, Sociología de la Desviación, Derecho Policial, Victimólogía, Ética y Deontología Profesional.
  • Tercer curso: Criminología III, Derecho Procesal Penal, Psiquiatría Forense, Grafología y Documentoscopia, Psicopatología Criminal Derecho y Delincuencia de Menores, Delincuencia Económica, Informática y Delincuencia, Prevención y Tratamiento para Delincuentes
  • Graduate in Criminology, San Antonio Catholic University, Murcia, 2013.
  • Diplomado en Criminología, Universidad Católica San Antonio, Murcia, 2013.

Cátedra Unesco, colaborador académico

Cátedra UNESCO de Educación para la Paz y Comprensión Internacional

El 29 de agosto de 2013 he tenido el honor de ser nombrado Colaborador Académico de la Red Iberoamericana de Cultura de Paz de la Cátedra UNESCO de Educación para la Paz y Comprensión Internacional.

  • Collaborator of the Ibero-American Network for a Culture of Peace of the UNESCO Chair on Education for Peace and International Understanding, 2013.
  • Colaborador Académico de la Red Iberoamericana de Cultura de Paz de la Cátedra UNESCO de Educación para la Paz y Comprensión Internacional, 2013.

Título de Máster en Informática Forense

Recibo el Título Propio de Máster en Informática Forense emitido por la Universidad Internacional de la República de Panamá. La Universidad Internacional, en inglés International University, fue fundada el 27 de marzo del 2000 y la que la Presidenta de la República de Panamá le otorgó autorización de funcionamiento mediante el Decreto Ejecutivo número 225 de 29 de mayo del 2003 del Ministerio de Educación.

  • Master in Computer Forensics, International University, Panama, 2012.
  • Máster en Informática Forense, Universidad Internacional, Panamá, 2012.

Licenciado en Criminología, International University

Recibo el Título Licenciado en Criminología, en la Especialidad de Criminalística Forense, emitido por la Universidad Internacional de la República de Panamá. La Universidad Internacional, en inglés International University, fue fundada el 27 de marzo del 2000 y la que la Presidenta de la República de Panamá le otorgó autorización de funcionamiento mediante el Decreto Ejecutivo número 225 de 29 de mayo del 2003 del Ministerio de Educación.

  • Degree in Criminology, Forensics Specialization, International University, Panama, 2012.
  • Licenciado en Criminología, Especialidad de Criminalística Forense, Universidad Internacional, Panamá, 2012.

Informática Forense y Pericial

Portada de los apuntes del título de Master y del de Especialista Universitario en Informática Forense y Pericial

Desarrollo de los programas de formación para los Títulos Propios de Máster, Especialista y Experto en Informática Forense y Pericial del Campus Internacional de Inteligencia y Pericia (CIIP).

Las 3 titulaciones se imparten de forma online y su plazo de matrícula está abierto a lo largo de todo el ciclo académico.

Dentro del marco de este proyecto se incluye el desarrollo del sitio web dedicado a estos cursos de formación en Informática Forense y Pericial, donde se puede encontrar información sobre: los objetivos y motivación de los 3 programas de formación, su estructuración en áreas de conocimiento y el recorrido por las áreas, los módulos de las áreas, su descripción y objetivos, los créditos European Credit Transfer System (ECTS) de los 3 títulos, los de sus áreas de conocimiento y módulos, el detalle de sus temas con sus créditos ECTS y, también, se describe del material formativo, documentación, esquemas, textos legales, casos prácticos y la bibliografía básica de soporte.

  • Author and director of the Master in Computer Forensics, CIIP, Cambridge, 2012-2015.
  • Autor y director del Máster en Informática Forense y Pericial, CIIP, Cambridge, 2012-2015.

Derecho Penal y las Nuevas Tecnologías

Asisto al curso organizado por Círculo Legal y el Institut of Audit and IT Governance (IAITG) con la colaboración de la Fundación Tejerina, dedicado al estudio, desde una óptica práctica, de los cambios que las nuevas tecnologías producen en el Derecho Penal y en la investigación de los delitos.

  • «Criminal Law and New Technologies», taught by judges and prosecutors of the Supreme Court, Legal Circle, 2012.
  • «Derecho Penal y las Nuevas Tecnologías», impartido por Magistrados y Fiscales del Tribunal Supremo, Círculo Legal, 2012.

Plan de Comercio Electrónico de la Comunidad de Madrid

Logística y transporte, Comercio Electrónico

Entre estos meses de febrero y marzo de 2012, he participado como experto en el Grupo de Trabajo de Logística y Distribución para el Plan de Promoción del Comercio Electrónico de la Dirección General de Comercio, de la Consejería de Economía y Hacienda de la Comunidad de Madrid.

Este llamado Programa DeC está dirigido a las pequeñas y medianas empresas (PYMES), autónomos y emprendedores del sector del comercio de la Comunidad de Madrid, con el objetivo institucional de aprovechar su potencial en la generación de crecimiento y empleo y para mejorar la competitividad de su tejido empresarial.

  • Collaborator for E-Commerce Plan of the Economy Department of the Community of Madrid, 2012.
  • Colaborador para el Plan de Comercio Electrónico de la Consejería de Economía de la Comunidad de Madrid, 2012.

Personalizar con A-PDF Text Replace

A-PDF Text Replace, muy bueno para retocar PDFs, también utilizable desde la línea de mandatos

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.

A-PDF Text Replace, mandato invocado desde TOL

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

A-PDF Text Replace, el PDF antes y después

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

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

Para comprobar el cociente y el resto de divisiones

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

Resolver 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: 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.

artthropods.net: Onthocazus Lathicornis

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

Resolver y solucion de un 3D Squares de insectos

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

Puertas lógicas AND, OR, XOR y Sumador con acarreo programados 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

Tablas de multiplicar y multiplicaciones de 1 cifras por varias

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

Informes estadísticos para la Agencia Nacional de Evaluación de la Calidad y Acreditación

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

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

Cálculo en Excel del máximo común divisor (MCD) 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

Portada del número 379 de Investigación y Ciencia

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

psoe.es y pp.es en la campaña electoral 2008

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.
Análisis sensorial de sistemas, Partido Popular, Mariano Rajoy
  • Author, «Sensory analysis of systems», Intellectual Property Register, number 16/2009/5854, Madrid, February of 2008. Essay on the analysis of computer systems through the senses and about how to lear this technique.
  • Autor, «Análisis sensorial de sistemas», Registro de la Propiedad Intelectual 16/2009/5854. Ensayo sobre el análisis de sistemas informáticos a través de los sentidos y sobre el aprendizaje de esta técnica.

Tabla ASCII generada con TOL

Tabla ASCII generada con el lenguaje de programación TOL

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

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

Excel con el 15 puzle (3x3) y 65 puzle (5x5) resueltos

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.

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

Excel para resolver el problema del triángulo mágico de la diosa 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).

Mini sistema de flujo de datos

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

Practicar las 4 operaciones básicas, 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

Practicar las 4 operaciones básicas, 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.

Superficie, trazos, sopas de letras, sudokus, series

Superficie, trazos, sopas de letras, sudokus y series

Cálculos de superficies de rectángulo y triángulos, trazos con numeración y laberinto, sopas de letras de capitales europeas, capitales de provincias españolas, continentes, océanos, animales carnívoros y hervívoros, mamíferos y reptiles, tres sudokus y series de cierto nivel.

Como curiosidad, el dibujo de Kim Possible está realizado únicamente con líneas rectas y arcos de elipses.

First Forecasting Event

Sas, First Forecasting Event, Vertice

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

Poner en HTML una imagen como una tabla

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

Mi página web 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.

  • April 2005 to date, consultant for: Andaira Technology, ANECA (National Agency for Quality Assessment and Accreditation), Antena 3 / A3 Advertising, Asisa, Atari / Namco Bandai, AVPPM (Association of Newspapers Kiosks of Madrid), City council of Madrid, City council of Guadalix, Banco de Santander, CECA (Spanish Confederation of Savings Banks), Colonial-Riofisa, Comaof, Data Segmento, Imperial Tobacco, Japan Tobacco International, Koch Media, Michelín, Microsoft, Vértice Sistemas, Army (Headquarters, Psychology Service, Command Headquarters of Canarias and Training and Doctrine Center), Complutense University of Madrid (Faculty of Economics and Business y School of Business Studies), University of Cádiz (Access and College Counseling), University of Navarra (Admissions Service and Quality Department), Technical University of Madrid (School of Agricultural Engineers), Rey Juan Carlos University (Higher Technical School of Telecommunications Engineering, Management and Information Systems), etc.
  • Desde 2005, consultor para empresas como: Andaira Technology, ANECA (Agencia Nacional de Evaluación de la Calidad y Acreditación), Antena 3 / A3 Advertising, Asisa, Atari / Namco Bandai, AVPPM (Asociación de Vendedores Profesionales de Prensa de Madrid), Ayuntamiento de Madrid, Ayuntamiento de Guadalix, Banco de Santander, CECA (Confederación Española de Cajas de Ahorros), Colonial-Riofisa, Comaof, Data Segmento, Imperial Tobacco, Japan Tobacco International, Koch Media, Michelín, Microsoft, Vértice Sistemas, Ejército de Tierra (Cuartel General de la Fuerza Terrestre, Servicio de Psicología, Cuartel General del Mando de Canarias y Mando de Adiestramiento y Doctrina), Universidad Complutense de Madrid (Facultad de Ciencias Económicas y Empresariales y Escuela Universitaria de Estudios Empresariales), Universidad de Cádiz (Acceso y Orientación Universitaria), Universidad de Navarra (Servicio de Admisión y Área de Calidad), Universidad Politécnica de Madrid (Escuela Técnica Superior de Ingenieros Agrónomos), Universidad Rey Juan Carlos (Escuela Técnica Superior de Ingenieros de Telecomunicaciones, Gestión de Sistemas e Informática), etc.

Manual Básico de Programación en TOL

Manual Básico de Programación en TOL (Time Oriented Language)

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.

Sopas de letras y astronomía

Sopas de letras y astronomía

Sopas de letras de animales domésticos y salvajes, muebles, medios de transporte, países de Europa y esquema del sistema solar y sopa de letras con 9 planetas.

Sumas y restas

A continuación se enumeran algunos de los ejercicios disponibles de sumas y restas:

  • Cinco páginas de ejercicios para practicar horizontales de 1 dígito sumas y restas horizontales de 1 dígito.
  • Contiene sumas y restas verticales de cuatro y cinco dígitos con resultados parciales de ayuda y sumas y restas verticales de cinco dígitos sin resultados parciales.
  • Contiene sumas y restas verticales de dos y tres dígitos, con resultados parciales de ayuda y sin resultados parciales.
  • Cinco páginas de ejercicios para practicar sumas y restas verticales de un dígito.

Periódicos y comprensión de noticias

Periódicos y comprensión de noticias

Lectura y comprension de noticias sencillas seleccionadas de Expansión, El Mundo, Diario de Noticias y Herald Tribune.

Ruedas y transmisión del movimiento

Ruedas y transmisión del movimiento

Cinco ejercicios para aprender el mecanismo de transmisión del movimiento con ruedas y correas de transmisión.

Planos y rutas en el Metro de Madrid

Planos y rutas en el Metro de Madrid

Tres ejercicios para aprender a moverse por el Metro de Madrid, trazando la ruta de una estación a otra con transbordos.

Multiplicaciones con cubos

Multiplicaciones con cubos

Cinco páginas de ejercicios para practicar multiplicaciones sencillas utilizando cubos.

Sumas por parejas

Sumas por parejas

Cinco páginas de ejercicios para practicar sumas por parejas.

Operaciones básicas con flujo de datos

Flujo de datos

Trece ejercicios para practicar las operaciones básicas (suma, resta, multiplicación y división) con máquinas de flujo de datos.

El reloj, numeración árabe y romana

El reloj, numeración árabe y romana

Once páginas de ejercicios para aprender la numeración árabe, romana y el reloj tradicional de manecillas.

Aprender a contar euros (€)

Aprender a contar euros

Cinco páginas de ejercicios para aprender a contar y sumar billetes de euros.

Series numéricas, de colores y figuras geométricas

Series numéricas, de colores y figuras geométricas

Diecisiete páginas con series numéricas, de colores y figuras geométricas de diversos grados de complejidad.

Series de colores y figuras geométricas

Series numéricas, de colores y figuras geométricas

Once páginas con series de colores y figuras geométricas de diversos grados de complejidad, seleccionadas del PDF general de series.

Series numéricas

Series numéricas

Cinco páginas con 25 series numéricas de diversos grados de complejidad, seleccionadas del PDF general de series.

Multiplicación, 1 dígito, vertical y horizontal

Multiplicaciones verticales y horizontales de un dígito

Once páginas de ejercicios con multiplicaciones horizontales y verticales de 1 dígito.

Sumas y restas horizontales de un dígito

Sumas y restas horizontales de un dígito

Cinco páginas de ejercicios para practicar sumas y restas horizontales de 1 dígito.

Sumas y restas verticales de cuatro y cinco dígitos

Sumas y restas verticales de cuatro y cinco dígitos

Contiene sumas y restas verticales de cuatro y cinco dígitos con resultados parciales de ayuda y sumas y restas verticales de cinco dígitos sin resultados parciales.

Sumas y restas verticales de dos y tres dígitos

Sumas y restas verticales de dos y tres dígitos

Contiene sumas y restas verticales de dos y tres dígitos, con resultados parciales de ayuda y sin resultados parciales.

Sumas y restas verticales de un dígito

Sumas y restas verticales de un dígito

Cinco páginas de ejercicios para practicar sumas y restas verticales de un dígito.

Aprender a contar

Aprender a contar

Veintinueve páginas de ejercicios dedicadas a aprender a contar los primeros números.

Lectura y vocabulario en inglés

Lectura y vocabulario en inglés

Diecisiete páginas de vocabulario en inglés con texto y fotos de animales domésticos y salvajes, frutas, muebles, vehículos de transporte y utensilios caseros, con letra de "arco y vuelta" ideal para niños.

Lectura y vocabulario

Lectura y vocabulario

Diecisiete páginas de vocabulario con texto y fotos de animales domésticos y salvajes, frutas, muebles, vehículos de transporte y utensilios caseros, con letra de "arco y vuelta" ideal para niños.

Alfabeto

Alfabeto

Cinco páginas de vocabulario con texto y fotos para aprender el vocabulario, con letra de "arco y vuelta" ideal para niños.

Trazos y poliedros

Trazos y poliedros

Once páginas de ejercicios para aprender a utilizar el lápiz y trazar utilizando como motivo poliedros.

Trazos y numeración

Trazos y numeración

Cinco páginas de ejercicios para aprender a utilizar el lápiz y trazar siguiendo la numeración.

Trazado y laberintos hexagonales

Trazado y laberintos hexagonales

Cinco páginas de ejercicios para aprender a utilizar el lápiz y trazar encontrando el camino de salida en laberintos hexagonales.

Trazado y laberintos de líneas rectas

Trazado y laberintos de líneas rectas

Cinco páginas de ejercicios para aprender a utilizar el lápiz y trazar encontrando el camino de salida en laberintos formados por líneas rectas.

Trazado y laberintos de bloques rectangulares

Trazado y laberintos de bloques rectangulares

Once páginas de ejercicios para aprender a utilizar el lápiz y trazar encontrando el camino de salida en laberintos formados por bloques rectangulares.

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

Level 10 of 10 in the hacking test, Instisec

Curso interesante, entretenido y, finalmente, genial organizado por Instituto para la Seguridad en Internet, Instisec. Primero recibí el curso y luego participé del primer reto de hacking boinas negras organizado por Instisec, donde obtuve un 10 de 10 y me entretuve en documentar todas las pruebas y medir su capacidad para filtrar aspirantes a superarlas.

  • «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 compañero 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 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.

Bayes Forecast, dirección general y clientes

  • Since 1995 to 2005: Leading and mentoring a group of 50+ economists, software engineers and mathematicians. Responsible for the commercial actions, whole planning, execution, and goal achievement of the projects for client companies like Coca-Cola, Microsoft, Telefónica, Spanish National Uranium Institute, Mercadona, Carrefour, Forces Elèctriques d’Andorra, Grupo Sogecable, Movistar, NCR, Unidad Editorial, etc. These projects included electronic capture of information, analysis and modelling of huge and dynamic operational and sales data, reporting and delivering forecast estimates, business intelligence and customer relationship management and marketing (CRM).
  • De 1995 a 2004: Liderando un grupo de más de 50 ingenieros de software, matemáticos y economistas. Con responsabilidad directa en la comercialización y el desarrollo de proyectos de modelización de la demanda y los mercados, sistemas de previsión de ventas, de optimización e inteligencia de negocio. Para clientes como Coca-Cola, Microsoft, Telefónica, Empresa Nacional de Uranio, Mercadona, Forces Elèctriques d’Andorra, Sogecable, Movistar, NCR, Unidad Editorial (El Mundo), Recoletos Compañía Editorial (Marca y Expansión), etc.

Bayes Forecast, diseñador inicial de TOL

Bayes Forecast, web crawlers especializados

  • Developer of several web crawling systems based on ad-hoc or heuristic search (references and keywords matching).
  • Creador de web crawlers especializados en la recopilación de información en internet por áreas de conocimiento.

Bayes Forecast, entorno software

  • Developement environment: Operating systems: Windows, Linux, Aix, Irix, and Solaris; Databases: Oracle, SQL Server, and Teradata (data warehouse); Languages: C++, C, JavaScript, Visual Basic, Html, and TOL (Time Oriented Language).
  • Entorno software: Sistemas operativos: Windows, Linux, Aix, Irix y Solaris; Bases de datos: Oracle, SQL Server y Teradata (data warehouse); Lenguajes: C++, C, JavaScript, Visual Basic, Html y TOL (Time Oriented Language).

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

De BMP de 16 bits de Windows a ICO Unix y a BIF

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.

Sistema Inteligente de Codificación

McEQ, SIC, Clipper, Sistema Inteligente de Codificación

Este Sistema Inteligente de Codificación (SIC) estaba basado en un primer prototipo de EQ Sistemas Inteligentes para el Instituto Nacional de Estadística (INE) de apoyo a la codificación automática de enfermedades según el Código Internacional de Enfermedades (CIE).

Este hardcopy muestra la arquitectura interna de SIC, que estaba basada en un esquema de pizarra. A continuación se incluye la documentación de este sistema inteligente de codificación, que se ha dejado adrede tal y como se documentaba al inicio de la década de los 90, aunque, por supuesto, ya disponíamos de unos estupendos Macintoshs.

+--------------------------------------------------------------------+
| SIC: SISTEMA INTELIGENTE DE CODIFICACION.                          |
+--------------------------------------------------------------------+
| 1.- INTRODUCCION.                                                  |
+--------------------------------------------------------------------+

SIC es una aplicación de demostración, desarrollada por EQ Sistemas
Inteligentes.  Su objetivo es presentar cómo puede realizarse una
codificación automática de literales a partir de una información que
puede ser parcial y/o errónea.

La tarea de codificación de SIC consiste en asignar códigos a
literales, aún cuando estos literales contengan errores, utilicen
sinónimos o no correspondan totalmente con los literales originales.
Para ello SIC cuenta con la siguiente información:

  a) Uno o varios dicionarios con las palabras que se manejan en los
     literales (un vocabulario básico del dominio de aplicación).
     Sobre estos diccionarios SIC aplica diversos métodos de búsqueda
     especializados en encontrar palabras a pesar de sus posibles
     errores (de tecleo, ortografía, fallos en lecturas por medios
     ópticos, por errores en transmisión, etc.). A estos métodos se
     les denomina especialistas.

  b) Un diccionario de sinónimos, que proporciona, para cada palabra,
     uno o varios sinónimos dependiendo, como se verá, del modo de
     trabajo de SIC.

  c) La tabla original de codificación en la que a cada código se le
     asocia un literal.  Sobre ella SIC construye un diccionario
     canónico (normalizado) que le permite manejar los literales con
     independencia del contexto en el que trabaja la aplicación.

Esta versión de demostración de SIC proporciana tres funcionalidades
principales:

  a) Validación de palabras durante la entrada de datos.

  b) Codificación asistida, dado un literal se codifica y en caso de
     dudas (cuando existen varias soluciones posibles) se consulta con
     el usuario.

  c) Codificación automática de conjuntos de literales.

A estas tres funcionalidades se accede a través de las tres primeras
opciones menú principal de la aplicación y son las tres consecuencia
de la arquitectura interna de SIC.

En el ejemplo escogido para esta demostración se utiliza una versión,
parcial, del Código Internacional de Enfermedades (CIE), realizado por
la Organización Mundial de la Salud (OMS).  Esta codificación de
enfermedades se aplica para la codificación partes de defunción (cada
parte está formado por cuatro causas de muerte).
  

+--------------------------------------------------------------------+
| 2.- ARQUITECTURA.                                                  |
+--------------------------------------------------------------------+

SIC posee una arquitectura general, esto es, independiente del dominio
o área de aplicación.  Por tanto aunque esta demostración se realice
para la codificación de enfermedades puede ser transportable a otras
áreas como, por ejemplo, la codificación postal (nombres de calles,
nombres de municipios, etc.), la codificación de productos a partir de
sus descripciones, la localización de títulos de libros, etc.

Frente casos complejos de codificación, diccionarios de gran volumen o
retricciones de tiempo, esta arquitectura general debe especializarse
(incluyéndole información sobre el dominio y el contexto en el que se
realiza la codificación) para que proporcione los rendimientos que se
requieran.

 +------------------------------------------------------------------+
 |    +------++--------------++-----------------------------------+ |
 | +--+---+ES|| ARQUITECTURA ||  DICCIONARIOS ORTOGRAFICOS (Dio)  | |
 | |PARTES|==|+--------------+|+-----+ +-----+   +-----+   +-----+| |
 | |======|==|  +-------+     ||DIO 1| |DIO 2|...|DIO i|...|DIO n|| |
 | |======+--+  |PIZARRA|     ||=====| |=====|   |=====|   |=====|| |
 | +-+----+     +-+-+-+-+     |+--+--+ +--+--+   +--+--+   +--+--+| |
 | +-+-----+ +>-+=|=|=|=+-+   |Ind#############################---+ |
 | |FILTRO | |  +-+-+-+-+ |   | +-+-+  +-+-+  +-+-+  +-+-+  +-+-+ | |
 | +-+-----+ |  |=|=|=|=| +>--+ |DIR|  |INV|  |BID|  |FON|  |ORT| | |
 | +-+-----+ |  +-+-+-+-+<+   | +---+  +---+  +---+  +---+  +---+ | |
 | |SCANNER+-+  |=|=|=|=| +---+ CLASE DE LOS ESPECIALISTAS  (Esp) | |
 | +-------+    +-+-+-+-+     +-----------------------------------+ |
 | +-------+    |=|=|=|=|     +---------+   +-----+   +---+-------+ |
 | |SINONIM+-<--+-+-+-+-+ +>--+GRAMATICA+->-+CANON+->-+COD|LITERAL| |
 | | (Sin) +->--+=|=|=|=+-+   |CANONICA |   |=====|   |===|=======| |
 | |=======|    +-+-+-+-+     +---------+   +-----+   |===|=======| |
 | |=======|    |=|=|=|=+<--------S-O-L-U-C-I-O-N---<-+===|=======| |
 | +-------+    +-+-+-+-+                             +---+-------+ |
 +------------------------------------------------------------------+
                Figura: Arquitectura de SIC.

Pulsando la combinación de teclas [Alt-U], una vez dentro de la
aplicación SIC, puede accederse a un menú de utilidades una de cuyas
opciones es un semi-gráfico, con una versión simplificada de la
arquitectura interna de la aplicación SIC (ver figura anterior).

Esta arquitectura esta basada en un sencillo mecanismo de PIZARRA, con
un control semi-rígido.  Sobre esta pizarra, los diferentes métodos
especialistas (DIRecto, INVerso, BIDireccional, FONético, etc.) en
localización de palabras apuntan sus resultados, decidiendo la pizarra
quién o quienes de ellos dan soluciones más verosímiles.

En líneas generales el funcionamiento de SIC es el siguiente (se ha
destacado en mayúscula, en cada punto, una palabra clave que permite
identificar la fase de proceso en la figura de la arquitectura):

   a) En una primera fase los literales son filtrados eliminando
      posibles caracteres extra¤os y transformados, bien a mayúsculas
      o a minúsculas (FILTRO).

   b) Posteriormente cada literal es procesado, separando las posibles
      palabras (o tokens) que lo constituyen (SCANNER).

   c) Cada palabra es buscada en los diccionarios por toda una familia
      de especialistas. Dependiendo de si la palabra es directamente
      correcta o de si tiene muchos errores este proceso se demorará
      más o menos. La PIZARRA controla este proceso y su resultado es
      una gama de posibles literales, constituidos por variantes de
      palabras. En la decisión sobre que variantes de palabras se
      eligen influyen las opiniones, coincidentes o discrepantes, de
      los diferentes especialistas y la importancia relativa de cada
      uno de ellos.

   d) La gama de posibles literales es procesada con el diccionario de
      SINONIMOS, sustituyéndose cada palabra por su sinónimo o
      sinónimos principales.  Dependiendo de si para cada palabra
      existen uno o varios sinónimos, la gama de literales originales
      puede simplificarse o complicarse.

   e) Cada literal, resultado de la fase anterior es normalizado según
      una forma CANONICA, ello facilita su confrontación con la tabla
      original de codificación.

   f) Finalmente, cada literal canónico (CANON) es confrontado con una
      versión canónica de la tabla de codificación. Devolviéndose los
      resultados a la pizarra.

   g) Cuando la pizarra dispone de todas las posibles variantes
      (SOLUCIONES) de codificación decide:
      =) bien cual de ellas es la correcta,
      =) bien que no dispone de criterios suficientes para discernir
         entre varias (en este caso y en codificación asistida se pide
         ayuda al usuario) o
      =) bien que ninguna de las soluciones propuestas es
         suficientemente válida.
  

+--------------------------------------------------------------------+
| 3.- CONFIGURACION.                                                 |
+--------------------------------------------------------------------+

Desde el mismo menú anterior ([Alt-U]) se puede acceder a una ventana
de configuración de esta versión de SIC, cuyas opciones son:

  a) Test en partes (S/N): Que permite decir si se desea o no realizar
     una verificación de palabras durante la entrada de datos.

  b) Control de pizarra (S/N):  Si se pone a "S" esta versión de SIC
     muestra, en cada paso de codificación, sus resultados
     intermedios.  Ello permite entender su funcionamiento interno.

  c) Modo de funcionamiento respecto a los sinónimos. SIC posee 2
     modos de trabajo (no modificable):

     =) Relación Palabras N:1 Principal (Sinónimos sencillos).
     =) Relación Palabras N:M Principal (Sinónimos complejos).

     Esto es:

     =) Si se dá el caso que en cada familia de sinónimos, todos
        con el mismo significado, puede escogerse, siempre, una sóla
        palabra principal representante de todos (relación N:1).

     =) O si por el contrario, una palabra puede tener varios
        sinónimos, con diferentes significados, dependiendo del
        contexto en el que se utilice (relación N:M).

     El diccionario de sinónimos de esta versión de SIC pertenecen a
     al segundo caso.

  d) Sonido (en décimas de segundo):  Si se pone un entero superior a
     cero SIC generará un pitido en cada fase de codificación.
     Permite, por tanto, controlar, de forma aproximada, la duración
     de las diferentes fases de codificación.

  e) Filtros de palabras y de códigos que facilitan a SIC la taréa de
     aceptar o rechazar palabras parecidas o códigos parecidos.  El
     comportamiento de SIC es muy dependiente de estos dos parámetros.

     =) Valores muy altos, cercanos a la unidad, harán que SIC tenga
        un comportamiento muy estricto, dando gran seguridad a su
        codificación, pero por el contrario rechazando algunos
        literales por pocas de diferencias.

     =) Valores muy bajos, cercanos al cero, harán que SIC tenga un
        comportamiento muy flexible, encontrando posibles soluciones
        para casi todo, pero generando, a menudo, excesivas variantes.

     Dependiendo del contexto de aplicación y de las restricciones que
     deban cumplirse deberán ajustarse dichos parámetros.  Por
     ejemplo, en un mismo dominio, para la verificación en entrada
     debe utilizarse un filtro de palabras más bajo que el que se
     utilizaría para la codificación asistida.
  

+--------------------------------------------------------------------+
| 4.- INSTALACION Y ARRANQUE.                                        |
+--------------------------------------------------------------------+

Cree un subdirectorio en su disco duro, por ejemplo, de nombre SIC.

C:\> MKDIR SIC

Copie el contenido del disco de distribución en el subdirectorio
subdirectorio anterior.

C:\> COPY A:*.* SIC

Ejecute el fichero SICDemo.Bat.

C:\> CD SIC
C:\> SICDEMO

Todo ello puede realizarse, directamente con el programa Instala.Bat

C:\> A:INSTALAR A: C:

SIC puede ejecutarse directamente sobre el disco flexible de
distribución, pero los tiempos de respuesta pueden ser desesperantes.

Si en el momento de ejecución de SIC y tras pulsar el [Intro]
correspondiente, pulsa la tecla [Del] (Suprimir) entra en un menú de
autoconfiguración del interfaz de usuario de la aplicación SIC.  Desde
este menú se puede modificar algunas de las caracteristicas del
interfaz de usuario de SIC.

De este menú se sale con la tecla escape [Esc].  Si algunas de las
opciones de este menú le da errores, NO SE PREOCUPE, está buscando
Pixmaps o configuraciones del entorno de desarrollo McEQ sobre el que
está construido SIC y que no se distribuyen junto a él.
  

+--------------------------------------------------------------------+
| 5.- CONTACTO.                                                      |
+--------------------------------------------------------------------+

Para cualquier cuestión o consulta no dude en ponerse en contacto con
nosotros:

                                 EQ Sistemas Inteligentes

+--------------------------------------------------------------------+
| GRACIAS POR SU ATENCION.                                           |
+--------------------------------------------------------------------+
  

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

Capitanía General de la Región Militar Centro

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

Ministerio de Educacion, Teseo, Antonio Salmerón
  • Doctor Cum Laude in Artificial Intelligence / Computer Science, Technical University, Madrid, 2+3 years, 1986-1988, 1989-1992.
  • Doctor en Inteligencia Artificial, UPM (Universidad Politécnica de Madrid), cum laude, director José Cuena, 2+3 años, 1989-1992.
Universidad Politécnica de Madrid, Tesis, Antonio Salmerón

Cuerpo Superior de Técnicos en TI

Apartado de restricciones del temario de la oposición

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.

EQ Sistemas Inteligentes, fundación y clientes

Miembro fundador de EQ Sistemas Inteligentes, S.L., 1991-95, empresa del área de la inteligencia artifical y del proceso avanzado de la información.

De entre los proyectos que desarrollamos en EQ Sistemas Inteligentes se podrían destacar:

  • Sistema experto de ayuda a la explotación para el Banco de España.
  • Elaboración del modelo informativo de Productos Bituminosos SA, PROBISA.
  • Sistema de planificación automática de rutas para obras para el Metro de Madrid.
  • Sistema de apoyo a la codificación automática de enfermedades, según el Código Internacional de Enfermedades, para el Instituto Nacional de Estadística INE.
  • Sistema de soporte a la presupuestación jerárquina para el Schindler Group.
  • Sistema de información sobre las posibilidades de construcción de un enlace fijo por el Estrecho de Gibraltar para la Sociedad Española de Estudios para la Comunicación Fija a través del Estrecho de Gibraltar SA, SECEGSA.

Además de otros servicios, cursos de formación y proyectos para entidades y empresas como la Comunidad de Madrid, Alcaltel o El Corte Inglés.

  • Since 1991 (startup of the company) to 1995: Advanced software systems developed for clients such as Alcatel, National Bank of Spain, National Statistics Institute, Madrid Underground Transport, El Corte Inglés, Schindler, PROBISA, etc.
  • De su creación en 1991 a 1995: Empresa especializada en el desarrollo de sistemas basados en el conocimiento con clientes como Alcatel, Banco de España, INE (Instituto Nacional de Estadística), Metro de Madrid, El Corte Inglés, Schindler, PROBISA, etc.

EQ Sistemas Inteligentes, entorno software

McEQ, agenda, Clipper, EQ Sistemas Inteligentes

Este hardcopy, capturado en 2015, muestra la pantalla de entrada de una aplicación de agenda comercial, que se desarrolló en 1993 por EQ Sistemas Inteligentes gracias a un entorno propio de desarrollo denominado McEQ, basado en Clipper y dBase.

Lo que realmente muestra la imagen del hardcopy es una aplicación de 16 bits de 1993, ejecutándose en 2015 sobre un computador de 64 bits, con sistema operativo Linux Mint, sobre el que VMWare virtualiza una máquina Windows 7 ultimate, sobre la que corre un DOSBox version 0.74 que emula DOS de Microsoft de 32 bits, que todavía era capaz de ejecutar aplicaciones de 16 bits.

  • Developement environment: Operating systems: HP-UX and Windows; Databases: dBase, Oracle and Informix; Languages: Clipper, C with OSF/Motif and DeCon (knowledge declaration).
  • Entorno software: Sistemas operativos: HP-UX y Windows; Bases de datos: dBase, Oracle e Informix; Lenguajes: Clipper, C y OSF/Motif y DeCon (declaración del conocimiento).

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

Capitanía General de la Región Militar Centro

Disfruté del servicio militar en el Centro de Psicología (CREPSI) de la Capitanía General de la Región Militar Centro, en Madrid, del año 1989 al año 90.

Tuve la suerte de poder colaborar en la organización informática del gabinete de selección y lectura óptica de datos (OMR, Optical Mark Reading ~ Optical Mark Recognition) en el diseño de las librerías básicas de desarrollo de aplicaciones de selección y psicología y en el desarrollo de un sistema de ayuda al diagnóstico de trastornos de la personalidad basado en el conocimiento.

  • Developer of systems for electronic capture (OMR, Optical Mark Reader) and reporting and diagnostic for a military psychology centre, Ministry of Defence Madrid, 1989-1990.
  • 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, 1989-1990.

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 en 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

Comencé estos estudios en septiembre de 1981, terminé los 5 cursos en junio de 1986 y presenté el proyecto de fin de carrera en 1987. Mi forma de recordar lo que cursé cada año es gracias a la coincidencia entre el curso y las unidades de la década de los 80, estos es, en 1981 entré en 1º de carrera, en 1982 pasé a 2º, en 1983 inicié 3º, en 1984 comencé 4º y, finalmente, en 1985 llegué a 5º que era el último curso de la carrera. Durante esos 5 años cursé las siguientes materias:

Licenciado en informática, Universidad Politécnica de Madrid
  • Primer curso, 1981-1982: Álgebra Lineal, Cálculo Infinitesimal, Física, Química y Dibujo Técnico. También cursé y aprobé Inglés I que era de 3º de carrera e Inglés II que era de 4º de carrera, por lo que al llegar al verano podía afirmar que no sólo había aprobado todo 1º sino que además una de 3º y otra de 4º.
  • Segundo curso, 1982-1983: Análisis Matemático, Teoría de Circuitos y Electrónica Básica, Programación, Lógica Formal e Informática Básica.
  • Tercer curso, 1983-1984: Análisis Numérico, Circuitos Lógicos Electrónicos, Informática Teórica, Probabilidades y Estadística, Investigación Operativa I y Teoría de Sistemas. También había en 3º una asignatura llamada Inglés I que cursé en 1º.
  • Cuarto curso, 1984-1985: Centros de Proceso de Datos, Traductores e Intérpretes, Inteligencia Artificial y Reconocimiento de Formas, Arquitectura de Ordenadores, Investigación Operativa II y Sistemas de Información I. También había en 4º una asignatura llamada Inglés II que cursé en 1º.
  • Quinto curso, 1985-1986: Teleinformática, Computadores Analógicos e Híbridos, Sistemas Operativos, Bases de Datos, Economía y Organización de Empresas y Sistemas de Información II. Con 3 notables, 1 sobresaliente y 2 matrículas de honor, 5º fue mi mejor curso, porque había ido aprendiendo, año a año, cómo se cursa una carrera.

Tras terminar los 5 años de estudios comencé a trabajar y, en paralelo, realicé mi proyecto de fin de carrera que presenté en 1987 y que fue calificado con un 10 por su tribunal. En octubre de 2015, revisando y actualizando este post, me llevé la sopresa, al incluir la imagen que lo acompaña, que la calificación de este proyecto de fin de carrera había sido un 10, pues durante años lo que recordaba era que había sido un 9.

Como puede verse en el enlace con el que finaliza este post, la antigua Facultad de Informática de la UPM, en la que estudié, se llama ahora Escuela Técnica Superior de Ingenieros Informáticos. Sin embargo, sigue conservando sus siglas originales en el subdominio de la Universidad Politécnica de Madrid fi.upm.es.

  • 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 de Madrid (UPM), 5+1 años, 1981-1986 y 1987.

Diseño y fabricación asistida por computador

Como administrador del centro de diseño y manufacturación asistida por ordenador (CAD/CAM) del Departamento de Investigación y Desarrollo de AMPER, S.A., durante 18 meses me encargué de la organización del centro y la definición de sus procesos y procedimientos, de la creación y administración de la base de datos gráfica de componentes electrónicos y del desarrollo de las aplicaciones para su consulta distribuida y de la implantación y automatización de los proceso para fabricación, incluyendo el trazado fotográfico, el taladrado industrial, el corte de placas, la inserción automática de componentes electrónicos, etc.

Entre otros muchos, desarrolle un programa que, a su vez, creaba programas de taladrado para taladradoras TRUDRIL, estos programas de taladrado se escribían en cinta de papel perforado, 6 bits por línea, unos y ceros, perforado o no perforado. Antes de enviarlas a fábrica, me sentaba en un taburete, y me leía estas cintas con todas sus líneas de perforaciones completamente, comprobando que eran correctas y que el programa creado automáticamente tenía sentido. Esta pudo ser una de mis primeras incursiones en la metaprogramación.

  • 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 del primer claustro democrático y constituyente de la UPM

Universidad Politécnica de Madrid, mi interpretación de su escudo

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 del 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.