Archivos Mensuales: marzo 2013

Una experiencia programando en Otter.

Este programa lo conocí durante mi formación académica dentro de una asignatura donde veíamos sistemas de razonamiento automático. Siempre he pensado que el conocer diversos lenguajes de programación y sistemas o programas te dan la posibilidad de afrontar un mismo problema desde diversos puntos de vista y que lo que aprendes con lenguajes funcionales te puede ser útil del mismo modo que lo que te aportan los lenguajes imperativos, no me gusta hablar de que algo es mejor o peor, son maneras diferentes de afrontar problemas y te permiten afrontar los problemas con una batería más amplia, más completa de soluciones.

En este caso trataré el sistema Otter. Para aquellos que no lo conozcan decir que Otter es un demostrador automático para la Lógica de Primer Orden con Igualdad, es un demostrador automático por refutación, esto es, busca una contradicción en un conjunto de fórmulas, dando como resultado una prueba en forma de secuencia de fórmulas indicando como se obtienen a partir de las anteriores o de las de partida.  El programa, el manual y algunos ejemplos los podéis encontrar en el siguiente enlace Otter, está en inglés y pertenece a William McCune su desarrollador; también podemos encontrar recursos en este otro enlace Otter altenativo, que también está en inglés; pudiéndose encontrar versiones tanto para Linux como para Windows. Como curiosidad decir que el nombre del sistema Otter en español quiere decir nutria y es este animal el que encontraremos en el segundo de los enlaces como imagen del programa, aunque Otter es un acronimo de Organized Techniques for Theorem-proving and Effective Research.

El problema sobre el que trabajamos para encontrar la solución es un puzle al que denominamos el atasco. Dicho puzle lo podemos encontrar en El Profesor Layton y la Villa Misteriosa siendo el puzle denominado el aparcamiento; aunque es una versión más compleja que el que mostraré, es igualmente resoluble con este sistema sólo habría que implementarlo adecuadamente.

La idea del puzle es que tenemos una serie de piezas en un tablero y queremos sacar en concreto una de ellas por una zona concreta del tablero y solo pudiendo hacer desplazamientos horizontales o verticales de las piezas.

otter1En los casos solucionados siempre se busca llevar la pieza cero al hueco en la esquina inferior derecha del tablero, es algo que todos podemos hacer manualmente, pero que conforme aumentamos el tamaño del tablero y el número de piezas puede llevarnos cierto tiempo.

La complejidad de la solución reside en encontrar una manera de representar el problema correctamente de manera que podamos identificar los movimientos que hay que hacer para llegar a la solución. Toda la representación y las soluciones con una explicación detallada a las variaciones que se ven en la siguiente galería se pueden encontrar en el siguiente archivo solución atasco.

Con respecto a las soluciones hay que tener en cuenta que el sistema busca la solución que menos pasos da para llevar la pieza al objetivo, lo que no quiere decir que tarde poco en encontrarla de hecho hubo una solución que tarda unos veinte minutos para estas dimensiones, hace una busqueda exhaustiva realizando poda para no volver a situaciones repetidas pero aún así en los casos en que el sistema requiere realizar muchos movimientos tardará algo más de lo que uno quisiera, pero lo dicho a cambio tienes la solución con mínimos movimientos.

Anuncios

Desarrollando Webs

A lo largo de mi vida he tenido la posibilidad de realizar diversos trabajos de desarrollo web tanto a nivel profesional, personal como académico. En esta entrada y posteriores intentaré contar parte de esas experiencias, lo que he aprendido, intercambiar opiniones y consejos…

Lo primero que me gustaría comentar tiene que ver con el título de la entrada, desarrollo web, para mí realizar un desarrollo web supone hacer las funciones de diseño, programación, maquetación y lo que sea necesario para crear un sitio web, ya que considero que estas funciones aunque se realicen de forma separada o incluso por diversas personas no debe perderse la perspectiva de que son un conjunto con un objetivo común.

El desarrollo web ha supuesto poder poner en práctica lo que he ido aprendiendo en cursos y asignaturas a la hora de programar o maquetar, pero también dar rienda suelta a la creatividad en el diseño, tratando de buscar soluciones imaginativas a la vez que útiles. Además el mundo del desarrollo web es tan amplio y tan activo que siempre puedes aprender algo nuevo, puedes mejorar, descubrir soluciones diferentes, hay que estar atento y abierto a las novedades e ideas de todos.

Me gustaría finalizar esta entrada con algún ejemplo de desarrollo realizado por mí, no para presumir de ello sino para después de haber hablado tanto poner muestras propias. Aparte de este propio blog, se pueden ver muestras del trabajo realizado en la página realizada para la Asociación de Criadores Gaditanos de Gallinas Andaluzas Los Alcornocales www.gallinandaluza.com, o para la página de turismo de Alcalá de los Gazules www.turismodelosgazules.com.

Diseñando en 3D

Como dije soy aficionado a diseñar en 3D, me gusta intentar ser creativo y mejorar estas habilidades, ya que nunca sabes cuando te pueden servir, ya sea para diseñar un logo, añadir contenido en una web de una forma distinta o simplemente plasmar una idea.

A continuación una pequeña muestra de algunos diseños realizados

El pase de diapositivas requiere JavaScript.

Geometría Plana, una biblioteca para Maxima

Gracias a una asignatura cursada en la carrera, la asignatura se llamaba Cálculo Simbólico y Álgebra Computacional, conocí este programa Maxima y su versión para Windows wxMaxima, se trata de un programa en el que se pueden realizar cálculos numéricos y/o algebraicos; hablaré de este sistema en un post aparte donde contar la experiencia ya que considero que es un muy buen sistema quizás algo desconocido, simplemente decir que me recordaba a la forma de trabajar con Matlab o Mathematica.

Dentro de esta asignatura vimos como el programa puede apliarse usando su propio lenguaje de programación muy similar a Lisp, de hecho también se puede ampliar usando Lisp ya que Maxima está creado usándo este lenguaje.

Cómo trabajo en esta asignatura se decidió realizar algún tipo de ampliación del lenguaje e investigando qué podía faltarle y que además no estuviese desarrollado aparte en la comunidad de Maxima en Sourceforge, encontré que la geometría en 2D o geometría plana no estaba implementada, así que con esfuerzo realicé una biblioteca con cierto número de funciones para trabajar con este tipo de problemas, ya fuese el cálculo de áreas y perímetros de polígonos dados sus vértices, el trabajo con rectas ya sea con ecuaciones paramétricas o implícitas, la representación gráfica de polígonos y otros problemas como es la determinación de punto en polígono o el cálculo de intersección de polígonos usando el algoritmo de Weiler-Atherton.

Este trabajo puedes obtenerlo en los siguientes enlaces de dropbox, en español: GeometríaPlana, o en inglés: PlanarGeometry; el motivo de que esté en ambos idiomas es por deferencia hacia la comunidad de Maxima que es ampliamente angloparlante, de hecho también se puede encontrar en el siguiente enlace del foro de Maxima en Sourceforge: foro Maxima.

No quiero terminar este post sin agradecer la labor de los profesores de esta asignatura, Ignacio y Luis, por haberme dado la posibilidad de conocer este programa y animarnos tanto a ampliarlo como a luego publicar este trabajo.

Comienza…

Comienza aquí la andadura de este blog, en el que compartiré mis experiencias como programador, como desarrollador web y como aficionado al diseño 3D.

Trataré de tratar diversos temas de programación, inluyendo algunos desarrollos en lenguajes no muy usuales en los que he tenido experiencias, del mismo modo iré mostrando algunos diseños en 3D que vaya o que he ido creando en estos años que es una afición que he ido desarrollado.

Sin más aquí comienza…