sábado, 28 de diciembre de 2013

Particle systems

Fuente: Irrlicht engine (http://irrlicht.sourceforge.net/)

Desde comienzos de siglo las funcionalidades para sistemas de partículas han sido integradas en la mayor parte de tecnologías gráficas. De este modo las APIs proporcionadas por los SDKs de nVidia o ATI, por ejemplo, extienden la capacidades proporcionadas en el ámbito de DirectX y OpenGL para alcanzar el máximo rendimiento de la GPU.
Los sistemas de partículas consisten en un conjunto de pequeños objetos que emanan de un objeto contenedor denominado emitter. El emitter actúa a modo de fuente generadora de partículas, controlando su posición en el espacio 3D, cantidad de partículas y su movimiento. Cada partícula contiene información de su tiempo de vida (lifespan), el color, la textura, la forma, etc. Además de estos objetos, otro módulo se encarga del comportamiento de la partícula aplicando efectos de gravedad, incluso diferentes tipos de aceleraciones, como una función euleriana o personalizada.

Para ilustrar esta idea, la siguiente imagen muestra un pseudo-diagrama de clases en UML con los diferentes tipos de componentes relacionados con un sistema de partículas:

 
Fuente: wiki/Blender

Como puede apreciarse, el objeto principal de Partícula controla la información de sus objetos de datos y mantiene una referencia al módulo predefinido de comportamiento. Los datos de la partícula se suelen asociar a la textura y sus atributos principales de simulación física (velocidad, aceleración, posición y fuerzas). En lo concerniente a la textura, es posible aplicar diferentes tipos de técnicas de rendering como: Billboards, Halos y Strands (para simular hierba y pelo). En la fase final de renderizado se decide el objeto 3D que representará a la partícula. En este caso se puede optar por simples píxeles, cruces, círculos y Strands; aunque para la representación de la partícula en sistemas de bajo rendimiento se utilizarán casi siempre píxeles.

Adicionalmente se puede añadir un objeto colisionador en la fase de simulación que deberá ser controlado y  redefinido por el módulo de comportamiento. El objeto colisionador puede ser cualquier objeto 3D o una simple superficie.

Finalmente cabe decir que el éxito de los motores de partículas no ha tardado en hacerse notar, pues su repercusión en la sociedad a través de videojuegos, cine y simulación de efectos astrofísicos ha sido sobresaliente.

------
 
Para código fuente pedagógico véase applet en el lenguaje Processing:

http://processing.org/examples/simpleparticlesystem.html

jueves, 12 de diciembre de 2013

Cutting edge design patterns


Fuente: Arbotante de la Catedral de Amiens (Wikipedia)

En 1979 el arquitecto Christopher Alexander publicó un impactante libro conocido como "The Timeless Way of Building" (El modo intemporal de construir), que supuso una mejora en la calidad de la construcción de edificios al introducir una serie de patrones basados principalmente en la arquitectura clásica y en menor medida en la vanguardista. En los años posteriores, Christopher Alexander y sus colegas publicaron el volumen "A Pattern Language" donde se recopilaba todo el conocimiento arquitectónico hasta la fecha.

La repercusión de estos libros se vio reflejado en el mundo de la ingeniería en 1987, cuando los informáticos Ward Cunningham y Kent Beck sorprendidos por el pobre conocimiento que se transmitía a los alumnos de programación orientada a objetos decidieron aplicar los conceptos de Alexander a las técnicas de polimorfismo y herencia de la OOP. Es así como surgen publicaciones exitosas como el libro "Dessign Patterns" del conocido grupo GoF (Gang of Four: Erich Gamma, Richard Helm, Ralph Johnson y John Vlisides) donde se aglutinan los patrones más conocidos hasta 1995. Otros libros como el "Thinking in Patterns" de Bruce Eckel han tenido también bastante repercusión en el mundo de la Ingeniería del Software y Java.


Hoy, los patrones permiten aplicar una posible solución correcta para un problema de diseño dentro de un contexto dado: aplicaciones cliente-servidor (patrón MVC), aplicación gráficas (patrón Command), dispositivos hardware (patrón Observer), bases de datos (patrón Facade), procesadores de texto (patrón Composite), etc. Incluso ya existen patrones de diseño para sistemas masivamente paralelos (MPP) de simulación de sistemas dinámicos (N-Body particle simulation) y análisis de modelos climáticos que pueden ser consultados en la página del departamento de Ingeniería Informática de la Universidad de Illinois:

La importancia de los patrones de diseño y arquitectónicos que propuso Christopher Alexander nos recuerda que a veces tenemos que olvidar la tendencia al desarrollo rápido de aplicaciones y volver a los fundamentos, a las bases iniciales, pues es allí donde se forjan los conocimientos clave para el desarrollo de aplicaciones duraderas y mantenibles en el tiempo.

Finalizamos esta entrada en el blog citando la frase del mítico literato T.S. Eliot, puesto que evoca la relevancia de la utilización de patrones también en Ingeniería Informática y TIC:  «La imaginación, cuando se ve forzada a trabajar dentro de un marco muy estricto, debe realizar el mayor de los esfuerzos, lo que le llevará a producir sus mejores ideas. Cuando se le ofrece una libertad total, probablemente su trabajo resulte deslavazado».

martes, 26 de noviembre de 2013

Novatadas: los rituales degradantes de las universidades presenciales

Fuente: Wikipedia (foto de una novatada de bajo grado)

Erróneamente se ha confundido la novatada con el proceso de iniciación de las sociedades arcaicas y tribus indígenas (rito de paso, léase "El arquetipo de iniciación" - Carl Gustav Jung: "El hombre y sus símbolos", 1964). Muy al contrario de este concepto, las novatadas en las universidades presenciales van mucho más allá de sus bases antropológicas. Si bien es cierto que actualmente no se llega al grado de intensidad alcanzado hace unas décadas, las novatadas no dejan de ser costumbres o rituales de mal gusto. 

La novatada encierra en sí una idea nociva que en general se le asocia con prácticas que implican humillación, acoso, relaciones de dominio-sumisión, abuso, ridiculizaciones, faltas de consideración y de respeto, y actividades peligrosas. Suele ser una práctica habitual realizada a alumnos profanos en los campus universitarios y en colegios mayores en los primeros meses del curso académico (típicamente octubre y noviembre) y está asociada a bromas que los mal llamados "veteranos" obligan a padecer a sus víctimas. La mayoría de las universidades occidentales y adaptadas a la modernidad han adquirido estos hábitos entre sus alumnos de forma alarmante. Si bien es sabido que en los últimos dos años están proliferando las asociaciones y los movimientos de sensibilización social hacia este acuciante problema que puede derivar en muchos casos en marginación y en terapia psíquica y emocional.

En este contexto existen asociaciones como la gallega “No Más Novatadas” que se responsabiliza de sensibilizar a la sociedad en este crucial tema y de recoger denuncias de víctimas en colegios mayores y universidades de todo el país.


También existe una gran repercusión en la prensa a causa de algunos precedentes ya sentados:


«Mano blanda con las novatadas. Los veteranos actúan con total impunidad: una sola sanción en tres años.» El Mundo:

http://apliweb.uned.es/comunicacion/prensa/ficheros_ver.asp?ID=5061010

Finalmente, recordamos que en la UNED nunca han existido novatadas, por lo que es de agradecer la iniciativa histórica de crear las jornadas de acogida y la concienciación al buen clima humano y social en los centros asociados.



sábado, 23 de noviembre de 2013

Guías de estilo de programación

Tim Lucas (Creative Commons)


«Ni la destreza ni la rapidez otorgan a una obra influencia duradera ni perfección en su belleza».


Plutarco (d.C. 46-50 - d.C.120), historiador y ensayista griego.

Millones de personas en el mundo escriben decenas de líneas de código al día. Programar es un arte que requiere una serie de aptitudes humanas que no solo incluyen la destreza en la resolución de problemas de razonamiento estricto (aptitud analítica). Así, un buen programador debe tener también capacidad de concentración, paciencia, interés por las últimas investigaciones (capacidad de cambio), memoria para recordar variables, funciones de ayuda y zonas de código, además debe de ser ordenado y limpio con el programa que está escribiendo. La imaginación juega también un papel importante en los talentos del programador, pues la capacidad de crear software original y atractivo que resuelva problemas a la sociedad es el punto de partida para el éxito como desarrollador e investigador. Los grandes programadores de la historia no se han destacado nunca por escribir programas "a la carrera", sino por su capacidad de innovación y creatividad en un producto complejo que les ha llevado años de trabajo. Por este motivo, el estudiante de la UNED, con su capacidades de autodisciplina, constancia y esfuerzo de superación es la persona ideal para embarcarse en proyectos software innovadores de alta complejidad que requieran dedicación a largo plazo.

Uno de los talones de Aquiles de los programadores actuales es la legibilidad y el orden del código. Escribir un buen programa requiere un estilo que implica muchos factores a tener en cuenta. De estos factores depende la calidad y el mantenimiento del proyecto. Es importante, en consecuencia, tener presente cómo usar las excepciones, el principio de la Ley de Demeter, los espacios en blanco, la tabulación, la capitalización de los identificadores, la estructuración de los paquetes, etc. De este modo, un proyecto se podrá refactorizar o leer por terceras personas siempre y cuando cumpla con estos preceptos de legibilidad. Esto implicará una mejor calidad final del producto ya que mejorará su seguridad integral.

Finalmente, si está interesado en mejorar la escritura de su código fuente, le proponemos la consulta de los siguientes estándares sobre cada lenguaje de programación:

martes, 12 de noviembre de 2013

Diseño de un motor de base de datos E/R

Fuente: Wikipedia

Desde un punto de vista simple y abstracto, un motor de base de datos permite al usuario realizar las operaciones habituales de creación, lectura, borrado y actualización de datos.  El SGBD (Sistema Gestor de Base de Datos) proporciona una API para el acceso a los servicios proporcionados por el motor de base de datos cuyos "drivers" se encuentran  en el exterior del núcleo del sistema operativo.

La historia de los motores de bases de datos comienza en los años 60, cuando un grupo de ingenieros encargados de diseñar el lenguaje COBOL desarrolla el sistema basado en árboles binarios CODASYL. Posteriormente, en los años 70, Edgar Codd no estaba satisfecho con el sistema CODASYL y comienza a elaborar las bases de lo que sería el modelo relacional (E/R) y las reglas de normalización (véase Forma normal de Boyce-Codd). Por entonces empieza a cristalizarse la idea del lenguaje SQL cuya sintaxis estaba inspirada en el álgebra relacional de tuplas y que permitía cualquier operación sobre bases de datos . Ya a finales de los 70 surgen iniciativas de IBM como DB2, Informix, Sybase (basados ambos en INGRES), y el sistema de alto rendimiento PostgreSQL. A partir de los años 80, con la invención de la programación orientada a objetos, los motores de bases de datos entran en un ciclo de mejora en aspectos de diseño y rendimiento. Actualmente las bases de datos soportan cualquier tipo de objeto (gráfico, sonido, vídeo, textos, XML, etc.), asimismo su incorporación a la Web 2.0 y 3.0 está completamente asentada. Un motor de base de datos utiliza estructuras de datos ampliamente conocidas en la carrera como son las tablas de dispersión (hashing), árboles B+ y montículos (heaps). Uno de los SGBD más conocidos en los entornos universitarios es MySQL (programado en C++ y GPL) con su sistema de almacenamiento GPL-InnoDB (http://en.wikipedia.org/wiki/InnoDB).

 
El diseño de un motor de bases de datos en los estudios de Ingeniería Informática e Ingeniería TIC es una materia de crucial importancia como lo es el diseño de sistemas operativos o el diseño de un lenguaje de programación. Por este motivo, proponemos la lectura o investigación de un modelo sencillo de base de datos relacional denominado SQLite, con la intención de conocer los entresijos de un motor escrito en C y con interfaz a C++. 


También proponemos la lectura de varios libros relacionados con el diseño de bases de datos y que se pueden consultar directamente a través de Google Books:



miércoles, 6 de noviembre de 2013

Ingeniería Informática vs. Ingeniería TIC: «el mismo perro con diferente collar»

Basada en un trabajo de Abilio Estefanía Castellanos (Creative Commons)

Actualmente la oferta de titulaciones a nivel de máster y doctorado de la Escuela de Ingeniería Informática por la UNED es bastante completa y diversificada. Es de elogiar el esfuerzo de los organizadores por crear un amplio rango de perfiles de máster basados en las disciplinas impartidas por los departamentos y  los sectores más demandados por la sociedad.  Sin embargo, a partir de la reforma educativa impuesta por Bolonia (EEES) para la conversión de las licenciaturas y las diplomaturas a un Grado de cuatro cursos se ha conseguido dar un giro de 180º en una dirección incorrecta.  

Bien es sabido por todos la exigua diferencia entre las titulaciones en Ingeniería TIC e Ingeniería Informática de la Escuela de Ingeniería Informática por la UNED. Quizá alguien pueda caer en el error de pensar que ambas titulaciones tienen un corpus curricular totalmente diferente. Nada más lejos de la realidad, los nuevos planes de estudio que se nos presentan desde la dirección de la Escuela son como reza la locución española: «el mismo perro pero con diferente collar».  Ciertamente estos perfiles de especialización son simplemente una escusa para confundir al nuevo alumnado. Se supone, en principio, que la diferencia entre las dos titulaciones estriba en la orientación hacia el mundo de la empresa o hacia el mundo de la investigación. Pero lo verdaderamente conseguido son dos titulaciones de Ingeniería Informática deficitarias, casi idénticas, en donde en una no se estudia "Programación Paralela", o los entresijos de la "Arquitectura TCP/IP" se imparten de manera optativa en otra. Asimismo, en Ingeniería TIC no se estudian "Compiladores" pero se estudia a fondo los lenguajes de programación e "Ingeniería de Software". Además existe demasiada carga lectiva en "Estructura de Computadores" y poca en lo verdaderamente esencial en un Informático: la destreza en programación, diseño y algorítmica.

Este desorden en las titulaciones únicamente puede derivar en la formación de un Ingeniero Informático incompleto y falto de conocimientos de Matemáticas, Ingeniería de Software, Programación Paralela y Redes.

Por este motivo esperamos, desde esta modesta entrada en el blog de la Escuela, que el equipo organizativo tome medidas de cara a la renovación de las titulaciones y fomente de manera más prudente la creación de otro tipo de perfiles más universitarios como podrían ser:
  • Ingeniería Informática y Matemáticas.
  • Ingeniería Informática y Física.
  • Ingeniería Informática: especialización en Arquitectura de Computadores.
  • Ingeniería Informática: especialización en Ingeniería de Software.
  • Ingeniería Informática: especialización en Inteligencia Artificial.
  • Ingeniería Informática: especialización en Lenguajes y Sistemas.
Para los dos primeras titulaciones se puede aprovechar la sinergia y la calidad de las facultades de ciencias e ingenierías para la creación de titulaciones mixtas.

martes, 1 de octubre de 2013

Software musical

Fuente: http://bellebonnesage.sourceforge.net/

Desde que el ingeniero Robert Moog creara su primer prototipo de sintetizador en los años veinte, el éxito de la electrónica aplicada al tratamiento musical no ha cesado en su carrera ascendente. Con la aparición de los primeros sintetizadores con puerto MIDI (Prophet 600 y Yamaha DX7) la interconexión de instrumentos digitales con el ordenador se ha generalizado hasta tal punto que la industria del software musical cuenta actualmente con software muy avanzado para la edición de música (véase Traktor, Cubase, Protools).

Uno de los hitos en el desarrollo de software musical a nivel de la demoscene en la época de los ochenta-noventa fue el de la generación de los Trackers. Estos editores y secuenciadores de música digital estaban basados en la técnica de síntesis en tabla de ondas (Wavetable) con desplazamiento de tonos, remuestreo y filtrado de la señal de audio. Dichos trackers se programaban en Pascal ó C/C++ (16-bit Borland TC++ y GCC) con rutinas en ensamblador del x86 y 68000 sobre MS-DOS, Linux, AtariST y AmigaOS.  Los poco conocidos trackers eran avanzadas estaciones de edición musical para aquella época (véase FastTracker II) que hace poco ha sido reeditado en versión multiplataforma por un compañero informático de nuestro país. Con ellos era posible crear música electrónica con una calidad de muestreo de 16-bit y 22kHz-44kHz, MIDI I/O y 32 canales simultáneos de polifonía.

Proporcionamos para su interés una lista de trackers que es posible descargar gratuitamente:


Por otro lado, en lo que respecta a los editores MIDI, es posible utilizar software gratuito para la composición musical con instrumentos conectados al ordenador. La ventaja de estos programas es la capacidad de enseñanza virtual de las personas que se encuentran estudiando solfeo o que desean adquirir un nivel más avanzado de sus aptitudes como compositores y/o músicos.

Actualmente existen decenas de aplicaciones para la edición MIDI que muestran las partituras y asisten en la composición. A continuación proporcionamos una lista de secuenciadores que le pueden ser de utilidad en el aprendizaje musical:


Por último, si su objetivo es el diseño y programación de software de audio o musical, existen también una gran cantidad de librerías y frameworks para el tratamiento digital de señal y la representación de notación:

Librería para la representación gráfica de partituras en C++:


Composición algorítmica de música con Linux:



Librería multiplataforma gratuita para la reproducción de cualquier formato de audio (MPEG:MP3, WAV, AIFF, MIDI, MOD, XM, etc.):


Librería para acceder a las APIs de audio en diferentes plataformas (WinMM, DirectSound, ALSA, OSS, OSX, etc.):


Lista de librerías de DSP para Linux (incluye también algunas compatibles con Windows):


miércoles, 25 de septiembre de 2013

A las puertas de la Web semántica

Image: Duncan Hull/Flickr (Creative Commons)


La Web semántica surge de la idea del científico Tim Berners-Lee como base precursora del conjunto de actividades de investigación llevadas a cabo por el organismo W3C. 

Básicamente, el concepto de partida de la Web 1.0 es la de una Web estática, mientras que la de la Web 2.0 la dota de contenidos sociales, dinámicos y abiertos. Son páginas que inicialmente se desarrollan codificando en HTML, XHTML, AJAX, CSS, RSS/ATOM, junto con las novedosas páginas que aglutinan diferentes servicios de la nube:  los Mashups. 

Según los apuntes de Sistemas Basados en el Conocimiento de los autores J. Mira Mira R. Martinéz Tomás (II-UNED): «la información contenida en las webs desarrolladas hasta el momento es del tipo convencional y con una metainformación orientada al humano, al lenguaje natural, y que por tanto hace muy difícil la interpretación, gestión y búsqueda de la información de manera automática. Desde luego, Google ha supuesto un gran avance en particular en la búsqueda de información, pero no deja de ser una búsqueda a partir de palabras clave. Esto es, se busca sobre páginas de semántica plana para el buscador.»

En consecuencia, y según las palabras de estos profesores, el objetivo que se intenta alcanzar es el de una Web con páginas de semántica propia, interpretable por agentes software y no solo por humanos. Obviamente, la estructura de la Web cambiará en un futuro próximo de acuerdo al esquema indicado a continuación y a la imagen anterior:

  • Unicode:  Codificación en caracteres en formato internacional de 16-bits.
  • URI (Unform Resource Identifier): Para especificar las referencias de recursos en Internet, especialmente URL (Uniform Resource Locator) y URN (Uniform Resource Name). A través de estos identificadores se podrá localizar cualquier objeto Web.
  • XML, ns, y xmlschema: Esta compleja capa se encargará de la intercomunicación de los agentes gracias a la capacidad de intercambio de documentos XML. Con los NS (namespaces) se podrá cualificar los contenidos del XML de dichos documentos, y con xmlschema se restringirá el formato de los documentos XML mediante una convención sintáctica.
  • RDF y rdfschema: Esta capa se basa en la anterior y permite especificar contenidos semánticos de acuerdo a la estructura sujeto-predicado-objeto. RDF es un lenguaje que define un modelo de datos orientado a objetos donde el sujeto y el predicado serán URIs y el objeto un URI o una cadena literal.
  • OWL: Es la capa de ontologías, donde se establece una estructura relacionada que define el conocimiento del dominio o dominios.
  • Reglas: Esta capa realizará razonamientos e inferencias basadas en la información de la capa anterior.
  • Comprobación: Se realizan pruebas en un lenguaje unificado de la Web semántica, facilitando las inferencias realizadas con las reglas anteriores.
  • Confianza: Los agentes software se mantienen escépticos hasta que la información proporcionada por la Web semántica se haya comprobado exhaustivamente.
  • Firma digital: Se utilizará la firma digital para asegurar la autenticidad e integridad de la fuente.
La Web semántica está todavía en fase de pruebas y solo se han implementado algunos proyectos pilotos como el de la Biblioteca Nacional de Francia y en resultados semánticos de búsquedas en Google.

Por otro lado, existe cierta controversia en la adopción de la Web semántica causada por su complejidad técnica y la falta de interés de los propios usuarios.
De ser realidad el desarrollo de las webs semánticas se daría un gran salto cualitativo en la búsqueda de información en Internet, pudiendo llegar a consultar contenidos insospechados y al alcance de unos pocos hasta el momento.

Respecto a la investigación en la generación de webs semánticas a partir de webs convencionales, existe una tesis doctoral realizada en nuestra Universidad que estudia cómo hacer efectiva dicha conversión:


martes, 24 de septiembre de 2013

Search engines design

Image: MoneyBlogNewz/Flickr (Creative Commons)

Existen, hoy en día, decenas de motores de búsqueda a lo largo de Internet. Todos ellos reúnen una gran cantidad de conocimientos en todas las áreas de la informática y la matemática. Actualmente, diseñar un motor de búsqueda para contenidos globales en Internet implica unas técnicas muy avanzadas sobre teoría del lenguaje, matemáticas, IA, sistemas distribuidos, redes, bases de datos y programación. 

Uno de los buscadores más avanzados es el conocido motor Google, con varios CPDs (Centro de Procesamiento de Datos) situados en diferentes países. Este alarde tecnológico precisa de ubicaciones en las latitudes más frías del planeta y un gasto energético considerable. Por este motivo necesitan de una política tecnológica de ahorro y optimización de procesos y recursos. 

Para programar sus servicios de búsqueda, Google utiliza generalmente C++, Java y Python, pero según el artículo de Wikipedia actualmente se decantan por el lenguaje "open-source" Go. Obviamente, los conocimientos avanzados de CORBA, Sockets y RMI son también fundamentales en este tipo de disciplinas informáticas. 

La historia de los buscadores en Internet comienza en 1993 con el primer motor "Wandex" desarrollado en el MIT. Posteriormente surgieron otros como "Lycos" y "WebCrawler" en el 1994. Como es lógico, se está empezando a escribir el futuro de la búsqueda de información en Internet, y lo que ahora se ha diseñado es solo una ínfima parte de lo que depararán los próximos años. 

En nuestra Universidad, el departamento de Lenguajes y Sistemas Informáticos tiene una larga trayectoria investigadora y un reconocido grupo de investigadores (premiados por Google Inc.) en el campo del procesamiento del lenguaje natural y recuperación de la información, a través del grupo NLP (Natural Language Processing). 

Uno de los productos resultado de las investigaciones del departamento es el buscador JBraindead: un buscador fuera de lo común que como característica novedosa opta por una aproximación basada en retículos en lugar de jerarquías, lo que facilita la representación de relaciones complejas que impliquen, por ejemplo, herencia múltiple.

Por último, si su interés es el estudio o investigación de los motores de búsqueda, le proponemos las siguientes lecturas y tutoriales:

lunes, 16 de septiembre de 2013

Software de navegación marítima


«La noche del 13 de enero de 2012, un capitán llamado Francesco Schettino, al mando de una mole de 17 pisos y 114.500 toneladas, con 4.200 pasajeros a bordo —entre ellos 3.216 turistas de 60 nacionalidades—, tuvo la ocurrencia de acercarse a la isla toscana del Giglio para que los paisanos de su jefe de comedor disfrutaran de un espectáculo único, pero calculó mal y la nave Costa Concordia encalló, 32 personas murieron y dos continúan desaparecidas.»

Fuente: El País/16/09/2013

La pregunta que debemos hacernos es: ¿se podría haber evitado el accidente mediante un sistema experto que avisara o bloqueara la nefasta maniobra del capitán?

El campo de investigación en software náutico es un tema de plena actualidad, en especial el de la Inteligencia Artificial orientada a la prevención de colisiones entre naves y la conducción automática de barcos. 

Desde la creación del sistema de posicionamiento vía satélite (GPS) y con la llegada en un futuro próximo del sistema de alta precisión europeo de posicionamiento (GALILEO), el software para la orientación de todo tipo de vehículo ha proliferado como producto estrella en las manufacturas de software crítico. En lo que respecta a la navegación marítima existen soluciones de todo tipo: desde software libre hasta complejos productos comerciales. Obviamente, todos estos sistemas de orientación todavía están basados en el conocido GPS. 

Para que se haga una idea de los productos que actualmente se utilizan en la navegación marítima, le proponemos la lectura de las siguientes webs relacionadas con el tema:

Con respecto a los artículos de investigación sobre sistemas náuticos inteligentes, proponemos las siguientes consultas:


Precisamente, España siempre ha sido un referente en la industria astillera, especialmente en la construcción de submarinos, simuladores y barcos para la armada:

En lo que respecta a nuestra Universidad, también se encuentra involucrada en la industria del sector marítimo por medio del Departamento de Informática y Automática (DIA):




jueves, 12 de septiembre de 2013

Las "Newsgroups" de la Escuela, ¿en migración?


Desde la creación del servidor de "news" de la UNED en los noventa, muchos son los compañeros que se han servido de ellas para preguntar sus dudas, intercambiar conocimientos, realizar consultas técnicas y/o académicas, debatir temas importantes o simplemente para "desahogar" sus penas.

Con el auge de las redes sociales como Facebook, Twitter, etc. en donde ya nadie esconde su pudor, los debates y las consultas de la Escuela en las "news" siguen manteniéndose candentes con el mismo buen hacer de siempre y con la colaboración desinteresada de algunos compañeros. 

Aún somos muchos los nostálgicos que reclamamos la continuidad del servicio de "news" de la Escuela, y por supuesto, tenemos el deseo de aglutinar a la mayor parte de alumnos y profesores en un mismo canal de comunicaciones plural y solidario. 

Muchas son las historias y problemas que se han resuelto en ellas desde su creación. Por esto mismo animamos a los compañeros a que se sumen a la iniciativa de preguntar y compartir sus conocimientos en las "news"  para fomentar la puesta en común de comentarios relacionados con nuestros estudios. A este servicio de Internet proporcionado desde la ETSII se puede acceder mediante las siguientes URLs:


pero debes configurar  tu cliente de "news" con el siguiente tutorial:


y por favor, consulta las reglas de uso cuando publiques:

  

Computación de altas prestaciones

Fuente: ibmphoto24/Flickr
La computación de alto rendimiento y paralela se utiliza en una inmensa cantidad de campos donde se requiere resolver problemas de una complejidad muy elevada o de tiempo real. La programación paralela ha abierto una línea de extensa labor investigadora que requiere de centros especializados donde ubicar los "mainframe" o supercomputadores enlazados por una red de alta velocidad.
Las tareas de los científicos que trabajan en esta línea de investigación consiste en aplicar sus conocimientos informáticos y matemáticos a la resolución de problemas orientados a los siguientes ámbitos:
  • Medicina: Sistemas de visión en tiempo real para procesado de imágenes e ingeniería genética.
  • Farmacéutico: Hallazgo de nuevos medicamentos más eficientes y eficaces.
  • Simulación: Requiere de experimentos que utilizan computación a gran escala con la finalidad de generar modelos para la predicción meteorológica y oceánica.
  • Desarrollo industrial: En el campo industrial se requieren de diseños más avanzados para la ingeniería, así como la investigación en Inteligencia Artificial para el reconocimientos de patrones en imágenes. 
En lo que respecta a nuestro país, contamos con una amplia tradición investigadora en sistemas de altas prestaciones. Por este motivo la Red Española de Supercomputación cuenta con los mejores investigadores en el campo y con los siguientes emplazamientos:


Si está interesado en profundizar en la computación y programación paralela de altas prestaciones, puede introducirse en el mundo mediante el siguiente tutorial:

 https://computing.llnl.gov/?set=training&page=index#training_materials

lunes, 2 de septiembre de 2013

Los "rankings" de universidades: una visión crítica

Fuente: European Southern Observatory  (Creative Commons) 

En los últimos años se han puesto de moda los estudios estadísticos sobre "rankings" universitarios. Han sido unas pocas instituciones públicas y principalmente privadas las que se han aventurado a medir de forma cuantitativa el prestigio investigador, docente y el rendimiento académico de nuestras universidades. Pero, ¿qué hay de realidad y de mito tras estos "rankings" de la enseñanza superior?  Es cierto que estos estudios son realizados por empresas e instituciones de cierto rigor científico a la hora de proponer las variables objetivas a considerar, por lo que no es de menospreciar la calidad investigadora de las personas implicadas y las técnicas estadísticas usadas. El problema surge cuando en ellos se consideran factores metodológicos que no son unánimes a todas las universidades, siendo la medida sesgada en favor de aquellas que tienen más volumen de éxito en el conjunto de sus estudiantes y del cuerpo docente. Es obvio que las discrepancias entre "rankings" (tanto nacionales como internacionales) son bastante llamativas, además la falta de aplicabilidad de los criterios a todas las universidades y los datos interpretados según la conveniencia de algunos hacen que ningún "ranking" sea enteramente fiable. En el caso de la UNED, en el que la tasa de abandono oscila en torno al 60-70%, siendo muy pocos los estudiantes que logran titularse con éxito, estos "rankings" no hacen justicia a los parámetros de volumen de alumnos y tasa de rendimiento del conjunto de estudiantes que finalizan sus estudios. En conclusión, la UNED es una institución superior docente que cuenta con unas características de enseñanza, investigación y aprendizaje peculiares (a distancia y mediante Internet) que difiere de los tópicos y baremos aplicados a otras universidades. Es por ello por lo que estos estudios deberían definirse con más rigor científico para este tipo de universidades y considerando las variables plenamente objetivas que son intrínsecas a ellas. Por otro lado los estudios realizados por diversos organismos privados no exponen de forma clara y precisa las técnicas ni las características metodológicas utilizadas en sus estudios, por lo que es muy difícil verificar o corroborar su exactitud.

Finalmente, y citando el artículo de [Martínez Rizo]: «contra lo que pretenden los medios de comunicación que patrocinan muchas de estas iniciativas, los rankings de programas particulares tampoco son apropiados para orientar a los futuros estudiantes en la delicada tarea de escoger la institución y programa en que tratarán de ser admitidos. Si se tiene en cuenta que no existe la mejor universidad ni el mejor programa en absoluto, sino que hay programas más o menos adecuados para ciertos aspirantes, se entenderá que los rankings más conocidos no sustituyen a un buen sistema de orientación vocacional».

Fuentes:

martes, 27 de agosto de 2013

Desarrollo español de videojuegos


Fuente: FileFront

El sector del videojuego en España ha sido siempre un referente mundial desde los exitosos juegos de la época dorada de los 8-bits diseñados por Indescomp, Dinamic y Opera Soft, entre otros. Con la llegada de la era de los procesadores de 32-bits y sistemas más avanzados como Windows 98 con tarjetas gráficas "true color" y sonido 16-bits estéreo, surgieron empresas como PyroStudios (Madrid), que allá en el año 1996 produjo el exitoso juego Commandos: Behind Enemy Lines  que no tardó en convertirse un éxito de ventas (un número uno) dentro y fuera de nuestras fronteras.  A partir de aquí se fomenta el mercado del videojuego español, apoyado por iniciativas de desarrollo tecnológico por parte del gobierno. Es así como surgen empresas como Arvirago con su juego Lord of the creatures que no vio la luz, pero de gran calidad artística y técnica; Virtual Toys con sus juegos multiplataforma; Digital Legends con juegos para sistemas móviles u Onan Studios (últimamente adquirida por Halfbrick studios) con su framework Mandreel (un transcompilador de juegos escritos en iOS o Android a HTML5 y Flash). 

Mucho ha llovido desde los primeros juegos escritos en la época de los ochenta, sobre todo para los que nos ilusionamos con aquellas joyas de pocos colores y en 2D (menos sofisticados pero no menos entretenidos) que hicieron más agradables las tardes de colegio y las delicias de muchos.

Actualmente, el sector del videojuego es una industria muy competitiva donde se requiere de profesionales titulados y "freelance" con la máxima experiencia en tecnología extrema: Matemáticas, Física, Geometría 3D, amplia experiencia y trayectoria en programación C++ y multiplataforma, redes y comunicaciones, hardware, etc. Por este motivo, uno de los factores determinantes a la hora de desarrollar un videojuego es la necesidad de inversión en capital humano, ya que este tipo de profesional con talento, vocacional y autodidacta es difícil de encontrar en el mercado artístico-informático convencional.

Finalmente, para los que le interese el estudio o la participación en el panorama actual del desarrollo de videojuegos en España, sugerimos la lectura de la Web de la Asociación Española de Empresas Desarrolladoras de Videojuegos y Software de Entretenimiento (DEV).

lunes, 26 de agosto de 2013

Model-Driven Engineering

Fuente: http://sanderhoogendoorn.com/blog/?cat=72

Desde la aparición en el año 2000 de MDA (Model-Driven Architecture) concebido por el OMG (Object-Management Group) no han cesado de surgir iniciativas y proyectos orientados al desarrollo dirigido por modelos MDD (Model-Driven Development) o MDE (Model-Driven Engineering). Con el auge de la programación hace 50 años, los problemas por la creciente complejidad del software siempre han sido un factor para la adopción de nuevas técnicas de abstracción de las capas bajas de la programación en entidades más abstractas de alto nivel e interrelacionadas. Con la irrupción de MDD, UML pasó a un segundo plano, siendo los DSL (Domain-Specific Languages) o lenguajes específicos del dominio los responsables de concebir desde cero un léxico y una sintaxis (visual o textual) para el modelado de aplicaciones dentro de un dominio concreto (ingeniería, gestión, medicina, etc.)

Con esta nueva idea es posible el modelado de aplicaciones de media-alta envergadura mediante el uso de DSLs por personal especializado, que posteriormente se convertirán por medio de un proceso de transformación o "model-mapping"  (véase MDA) en código o códigos específicos de la plataforma. 

Si está interesado en este nuevo paradigma para el desarrollo de alto nivel mediante desarrollo dirigido por modelos, le proponemos la lectura del PDF proporcionado por el Departamento de Lenguajes y Ciencias de la Computación de la Universidad de Málaga para su curso del máster en Ingeniería de Software e Inteligencia Artificial:


jueves, 22 de agosto de 2013

Filosofía de la Tecnología


La tecnología es fruto de la modernidad, ha cambiado nuestra forma de pensar, actuar y al conjunto de la sociedad, así como a la política, la economía y la cultura. La Filosofía de la Tecnología es una rama de la filosofía que surgió en el siglo XIX con  las teorías de el ingeniero y docente Ernst Kapp (1808-1896) cuya idea era que las tecnologías son herramientas y armas como extensión de los órganos que merecían una reflexión filosófica. También Lewis Mumford comienza a reflexionar sobre la naturaleza de la tecnología desde la tradición romántica norteamericana, contraponiendo a la visión técnica de Kapp, la humanista.

En el presente artículo se propone la lectura sobre la taxonomía de Mario Bunge (1997) acerca de las diferentes ramas de la Filosofía de la Tecnología: tecno-epistemología, tecno-metafísica, tecno-axiología, tecno-ética y tecno-praxiología. Al comienzo del documento, el autor introduce al lector en la historia y los conceptos básicos sobre esta rama de la filosofía originada con el fenómeno tecnológico.

Presentamos a continuación  el resumen sobre la clasificación de las ramas de la Filosofía de la Tecnología por el profesor Rodolfo Vergne de la Universidad Nacional de Cuyo (Argentina):


También es de interés el artículo sobre el Estado del Arte de la Filosofía de la Tecnología del profesor de Lógica y Filosofía de la Ciencia en la Universidad Autónoma de Madrid, Jesús Vega Encabo.

miércoles, 14 de agosto de 2013

Las redes sociales a debate

Foto: (Robert S. Donovan/Creative Commons)

Desde el "boom" de Internet en el año 2000 no han cesado de surgir aplicaciones que han favorecido o perjudicado alguna actividad civil, política o económica. Es el caso de programas tan controvertidos como los proveedores de descargas P2P y las redes sociales, los cuales son origen de frecuentes delitos auspiciados por ciberdelincuentes o usuarios irresponsables que llevan al extremo sus ideas perniciosas. Aunque el auge de Internet en esta última década ha cosechado exitosos resultados en todos los sectores, debido entre otros aspectos, a aplicaciones no necesariamente orientadas a la comunicación informal o amistosa entre personas, sí que es patente el daño producido por las redes sociales a diversos grupos desprotegidos como la infancia y la juventud.

Defendidas y criticadas hasta lo sumo, las redes sociales siguen acaparando un gran interés por el conjunto de la sociedad en todo el orbe (especialmente jóvenes), y cada día se registran miles de nuevos usuarios dispuestos a compartir sus experiencias e incluso su intimidad en público. Si no se usan con cautela, esto no puede más que acarrear consecuencias negativas de diferente índole en sectores sociales vulnerables. Por este motivo ya han surgido estudios psicológicos y sociológicos sobre los efectos colaterales de la dependencia y privacidad en las redes sociales, que a la postre se convertirán en futuras denuncias a la policía científica. 

Para promover el debate acerca del consumo en las nuevas tecnologías proliferan iniciativas como la de la Asociación de Estudios Psicológicos y Sociales en la que intervienen diversas instituciones públicas y privadas (entre ellas la UNED) y donde se realizan estudios constantes sobre las problemáticas del ámbito de las redes sociales y las nuevas tecnologías:

http://www.psicosociales.com/consumo.htm

sábado, 10 de agosto de 2013

Arquitecturas empresariales

Las arquitecturas de software empresarial tales como J2EE, ASP.NET y SAP R/3 son uno de los entornos más demandados por las compañías de desarrollo en software de gestión. Actualmente, son los sectores que más se demandan en nuestro país, por lo que ser un buen programador en entornos J2EE (Java), .NET y ABAP/4 aseguran un puesto de trabajo bien remunerado. Estos entornos de software se caracterizan por implementar una arquitectura de software cliente/servidor basada, "generalmente", en 3-capas (presentación, negocio y acceso a datos) y en las cuales se ubican los componentes principales para la correcta funcionalidad del sistema. 

Es importante destacar que los sistemas desarrollados en J2EE y SAP se utilizan por las grandes empresas de todo el mundo para la implementación de software de gestión de la propia organización como recursos humanos, finanzas, nóminas, facturación y comunicación.  

En esta sección proponemos dos documentos para la comparación y el análisis de sendas arquitecturas, en las cuales pretendemos resaltar los puntos débiles y fuertes de cada una de ellas:



Nota: El estudio y el desarrollo de aplicaciones empresariales cliente/servidor multicapa en J2EE era asignatura obligatoria en los estudios de 5º curso de Ingeniería Informática del plan 2000 de la UNED.

miércoles, 31 de julio de 2013

Escuela de ajedrez


El origen del ajedrez se remonta a tiempos muy pretéritos, posiblemente en la antigua India donde se jugaba a cuatro jugadores. Tras la conquista de Persia por los árabes, el ajedrez se divulgó en todo el imperio islámico, en especial en la España del siglo IX. Posteriormente, en el siglo XII el rey Alfonso X el Sabio promulgó el juego del ajedrez en su tratado Libro de los juegos cuyo éxito no tardó en extenderse por toda la Europa medieval. Pero no será hasta el siglo XV cuando se determinen las reglas del ajedrez moderno tal como lo conocemos en la actualidad.

El ajedrez es un juego que invita a la reflexión y a la lógica, con la idea de pasar un rato entretenido con amigos y familiares. También promueve el desarrollo intelectual y el carácter en las personas que lo practican.
Si está interesado en iniciarse en el juego, competir o mejorar sus aptitudes como jugador puede contactar con la Escuela de Ajedrez de la UNED:


"La Escuela de Ajedrez de la UNED desarrolla actividades de formación a distancia y promueve entre sus alumnos la participación en competiciones de ajedrez.
En el caso de las actividades a distancia, el sistema de funcionamiento es fundamentalmente por correspondencia y correo electrónico, con atención personalizada.
Los cursos de la Escuela están estructurados en tres niveles: Inicio (alumnos con experiencia nula o escasa), Medio (jugadores con experiencia en competiciones oficiales) y Alto  (jugadores con ELO nacional o internacional superior a 1900)". 


Herramientas para el estudio de grafos

La historia de los grafos comienza en la localidad de Königsberg (antigua Prusia, actualmente pertenenciente a Rusia) cuando el matemático suizo Leonhard Euler se vio en la necesidad de resolver el intrincado problema de cruzar, de una sola vez, todos los puentes situados en las dos islas del río Pregel, comenzando en un punto arbitrario y finalizando en el mismo lugar. Para resolver dicho problema surgió la teoría de grafos y el famoso problema de los siete puentes de Königsberg.

Hoy en día la utilidad de los grafos en informática es de importancia suma, pues se utiliza como estructura de datos para resolver problemas matemáticos en campos tan dispares como las redes de ordenadores, topología, sociología hasta el reconocimiento del lenguaje. 
En esta sección proponemos la aplicación con licencia Creative Commons (by-nc-sa) del profesor de la UPV Alejandro Rodríguez Villalobos para el estudio de los grafos http://arodrigu.webs.upv.es/grafos/doku.php?id=inicio

También incluimos una útil librería para grafos en Java: http://jgrapht.org/ y para C++: http://www.boost.org/doc/libs/1_54_0/libs/graph/doc/index.html

lunes, 29 de julio de 2013

Segmentación y RISC

Flickr: by rafkt

El estudio de las CPUs segmentadas cerca del ecuador de la carrera de informática es esencial para la compresión y el análisis de arquitecturas diferentes a las ya conocidas y basadas en procesadores multiciclo. La invención de la segmentación y la estructura de instrucciones RISC en el diseño de microprocesadores acarreó un avance considerable en el rendimiento del software, al conseguir un paralelismo a nivel de instrucción con un CPI óptimo (CPI = 1) y consiguientemente un aumento de los MIPS totales.

Por todo ello, cabe mencionar algunas arquitecturas de microprocesadores actuales que le ayudarán a comprender y aplicar sus conocimientos de programación RISC:


viernes, 12 de julio de 2013

Herramientas de cálculo simbólico

Fuente: Wiris

Desde muy temprana edad el conocimiento de las matemáticas es imprescindible para fomentar las capacidades cognitivas como la geometría, la lógica y la aritmética. En los estudios universitarios de ingeniería son fundamentales los conocimientos de Álgebra, Cálculo, Física, Estadística, Química y Geometría. En la carrera de Informática en particular, son necesarios los conocimientos específicos de Álgebra, Cálculo, Estadística, Lógica matemática y Física.

Para facilitar el aprendizaje y la práctica de los instrumentos matemáticos más habituales: integrales, derivas, ecuaciones diferenciales, límites, matrices, etc. proponemos una serie de herramientas de software libre para ejercitar dichas habilidades de cálculo simbólico:

Wiris:  Herramienta escrita en Java y en línea para la resolución de problemas matemáticos. Incluye lenguaje de programación muy elemental. 

GNU-Octave: Software open-source multiplataforma basado en el conocido programa MatLab y compatible con éste. 

wxMaxima:  Potente herramienta multiplataforma para el cálculo simbólico también gratuita. 

R: Potente programa gratuito y multiplataforma para el análisis estadístico y representación gráfica.  

Además, un estudio del profesor de secundaria Antonio Pérez Sanz del I.E.S Salvador Dalí de Madrid, sobre el software más adecuado para iniciarse en el mundo del álgebra, cálculo y geometría:

miércoles, 10 de julio de 2013

Linux kernel in depth

Fuente: Wikipedia (Linux kernel map)

Se acaba de liberar el kernel 3.10 de Linux el 30 de junio de 2013. Son muchos los desarrolladores de código libre los que han hecho posible la última versión del núcleo. Gracias a su licencia GPL (General Public License) muchos programadores y diseñadores de sistemas pueden beneficiarse del código del núcleo para mejorarlo o adaptarlo a otros dispositivos. El núcleo de Linux está programado íntegramente en lenguaje C y compilado con GCC, aunque algunas partes se encuentran implementadas en ensamblador.  
Las características y funcionalidades del núcleo de la familia Unix/Linux se estudian en segundo curso de las carreras de Ingeniería Informática e Ingeniería Técnica Informática de manera teórica y práctica. El estudio de su arquitectura es fundamental para conocer la estructura formal de un sistema operativo moderno. No obstante, si está interesado en profundizar en la temática o quizá ser un miembro activo del kernel de Linux, le proponemos la lectura del libro: "Understanding the Linux Kernel" de Daniel P. Bovet y Marco Cesati de la editorial O'Reilly. El presente libro se encuentra accesible para evaluación en Google Books en la siguiente dirección: 


Si está interesado en acceder a los repositorios de la última versión del núcleo, puede visitar la siguiente URL:  https://www.kernel.org/ 

lunes, 8 de julio de 2013

Sistemas criptográficos

Fuente: Wikipedia (Diffie-Hellman)

Los sistemas criptográficos han sido utilizados desde la antigüedad para cifrar mensajes estratégicos en campañas militares sin que pudieran ser reconocidos por el enemigo. También fueron muy utilizados en la Gran Guerra, y sobre todo, en la Segunda Guerra Mundial donde se utilizó la famosa máquina alemana Enigma. Tras la conclusión de la Segunda Guerra Mundial, la criptografía tiene un desarrollo teórico importante, siendo Claude Shannon y sus investigaciones sobre teoría de la información esenciales hitos en dicho desarrollo.

En este sección proponemos un tutorial muy práctico sobre criptografía proporcionado por el profesor de la Universidad de Jaén: Manuel J. Lucena López . Estos apuntes de tercer curso de Ingeniería Técnica en Informática de Gestión presentan de forma completa las técnicas para cifrar y descifrar mensajes basadas en un enfoque de la teoría de la información (TIC). En el presente documento podrá encontrar información que comprende desde los conceptos básicos, pasando por la complejidad algorítmica hasta las nuevas técnicas de cifrado asimétrico de doble clave, curvas elípticas y criptografía cuántica.

miércoles, 3 de julio de 2013

Técnicas de recolección de basura (Garbage collection)


Las técnicas y mecanismos para la recolección de basura son de gran relevancia cuando se diseñan lenguajes del tipo interpretados o semi-interpretados como Java, C#, Eiffel, Lua o Haskell. El concepto de recolección de basura fue inventado por John McCarthy en 1958 para evitar la gestión manual de memoria en el lenguaje Lisp. Desde entonces han surgido diferentes algoritmos con la idea de resolver el problema de la liberación de objetos residentes en la memoria del heap. Las técnicas de recolección de basura (garbage collection) son uno de los temas más complejos dentro del área de la Ingeniería Informática y más concretamente de la asignatura de Compiladores.

Si está interesado en tener unas leves nociones sobre dichas técnicas y algoritmos le proponemos las siguientes lecturas: