sábado, 12 de septiembre de 2015

Nueva etapa.

Una vez concluidos mis estudios en de licenciatura en la UNAM, he decidido entrar a la Maestría en la Universidad Autónoma de México. Será de Ciencias de la Computación, así que espero compartir con todos ustedes las experiencias y los nuevos apredizajes que tendré. Sobre el tema de la tesis que iré trabajando aún no estoy seguro si deba seguir sobre mi línea de algoritmia de búsqueda de caminos en gráficos o un sistema de NLP sobre idioma wixarika.

miércoles, 22 de abril de 2015

Mi implementación del algoritmo Fringe Search para la búsqueda de caminos que tienden a ser óptimos en gráficos de maya.

El algoritmo Fringe Search propuesto en http://webdocs.cs.ualberta.ca/~holte/Publications/fringe.pdf por Yngvi Bjornsson Markus Enzenberger, Robert C. Holte y Jonathan Schaeffer produce caminos que tienden a ser óptimos, pero mejoran la velocidad de ejecución de A* de una manera significativa. Pongo a disposición de todos el código fuente usado en mi tesis titulada: "El Algoritmo Fringe Search como solución superior a A* en la búsqueda de caminos sobre gráficos de malla" presentada en la UNAM, en el cual implemento este algoritmo en lenguaje C. Espero sea útil. 


El código puede ser descargado o clonado desde: https://github.com/pywirrarika/fringesearch

miércoles, 8 de abril de 2015

Mi implementación del algoritmo A* para gráficos de malla.

Dejo a disposición de todo aquel interesado mi repositorio de GitHub donde se puede encontrar el código de mi implementación del algoritmo A* escrito en C. He usado una skiplist para la lista cerrada junto con arreglos de punteros para un acceso rápido y un buen nivel de optimización para mejorar el tiempo de ejecución. El programa lee un archivo
BMP del cual cargará las partes negras como obstáculos o como nodos intransitables. Como salida genera un archivo BMP nuevo donde se representa el área en la cual se ha buscado y el mejor camino del nodo de inicio al nodo de destino.

Para obtener el código simplemente será necesario introducir el siguiente comando en la terminal:

git clone https://github.com/pywirrarika/astarmesh

O descargarlo directamente de la página: https://github.com/pywirrarika/astarmesh


martes, 30 de diciembre de 2014

Python: Convertir todos las las imágenes de una carpeta a otro tamaño.

Pequeño script que convierte todas las imágenes de una cierta carpeta a un nuevo tamaño que se especifica en los argumentos de la línea de comandos.
# -*- coding:utf-8 -*-
# Author: Jesús Mager
# Licence: GPL v.3


import os, sys
import Image

if len(sys.argv) != 3:
    print "Syntaxis: imgsize.py xsize ysize"
    exit()
else:
    try:
        x = int(sys.argv[1])
        y = int(sys.argv[2])
    except ValueError:
        print "The arguments must be integers."
        exit()
    size = x,y

def makethumb(inf):
    out = inf + ".new"
    if inf.split(".")[-1]=="new":
        print "%s: Skiped" % inf
        return 0
    
    if inf is not out: 
        try:
            im = Image.open(inf)
            im.thumbnail(size, Image.ANTIALIAS)
            im.save(out, "JPEG")
            print "%s: Done" % inf
        except IOError:
            print "Error opening %s" % inf


if __name__ == "__main__":
    files = [ f for f in os.listdir(".") if os.path.isfile(os.path.join(".",f)) ]
    for f in files:
        makethumb(f)

jueves, 6 de febrero de 2014

Adecuar la navegación hjkl de VIM a una posición más cómoda.

Sólo quiero compartiles una configuración muy simple en VIM que podría ayudar a varios haciendo más fácil la navegación. En vez de usar el desnaturalizado HJKL que viene por defecto en VIM para subir, bajar, e ir a izquierda y derecha, prefiero usar JKLÑ en mi teclado o para los teclados ingleses JKL;.
He aquí el código que hay que agregar a .vimrc en nuestro directorio $HOME.

set nocompatible
noremap ñ l
noremap l k
noremap k j
noremap j h
 De esta manera podremos usar ñ para ir a la izquierda, j para ir a la derecha,  k para bajar y l para subir.

Contar líneas de código C

¿Quieres saber cuántas líneas de código en C que has escrito en tus archivos de código fuente en una carpeta dada? ¿Además quieres contar sólo las líneas de código sin contar los comentarios y las líneas en blanco? Aquí un pequeño comando en nuestra terminal GNU/Linux o en cualquier sistema *nix.
cat * | sed '/^\s*#/d;/^\s*$/d' | wc -l
Obviamente se puede ajustar a todas las necesidades.

miércoles, 5 de febrero de 2014

¿Por qué sigue usándose Turbo C/C++ en las escuelas?

Turbo C es un compilador creado por Borland en 1987 para el desarrollo en MS-DOS(aunque también hubo versiones para Atari y OS/2)  el cual fue reemplazado por Turbo C++ en 1990.La última versión de Turbo C++, la 3.01, en 1992, con lo que posteriormente se concentraría la empresa en su producto Borland C++ y C++ Builder.
A pesar de ser un compilador histórico, donde muchos de nosotros dimos nuestros primeros pasos en la programación en C y C++, se debe reconocer que nuestro compilador de 16bits ha pasado a la historia y su lugar es estar en una vitrina en el museo de la informática. 
Sin embargo, un gran número de escuelas, tienen como su compilador de cabezera ese viejo conocido: ¡Turbo C! No es extraño encontrarnos hoy en día, en diversos foros de programación código que usa las viejas bibliotecas.
¿Me pueden ayudar con este código? ... y se lee: gotoxy(23,5); clrscr(); etc. 

Parecería ser que el tiempo no ha cambiado en nada, que MS-DOS sigue siendo un sistema operativo, y no una terminal emulada por los sistemas windows modernos. A este ritmo no nos sorprendería ver código que invoque resoluciones de 320x200 con 256 colores indexados.

                            void SetVideo (void)
                            {
                                    asm{
                                                mov ah,0
                                                mov al,13h
                                                int 10h
                                          }
                            }


A pesar de que tenemos buenos recuerdos, y extrañamos los hacks del Modo 13h y Modo X, y otras curiosidades, es una verdadera barbaridad que a los alumnos no se enseñe a escribir código en compiladores modernos. Pareciera ser que los maestros, sin ganas de desarrollar nuevos retos de programación para sus alumnos, intentan reproducir una y otra vez los mismos ejercicios obsoletos.
El problema no solo es que la lógica no se puede reducir a producir cuadros de texto con colores en una consola de los años 90's sobre MS-DOS, sino que no dejan una verdadera experiencia de como se realiza la programación en C y C++ para sistemas modernos (lo cual no necesariamente quiere decir que se requiera una GUI.)
Recomiendo, para todos aquellos a quienes aún les estén enseñando con este compilador obsoleto, guardarlo en una carpeta llamada muso y descargar la versión del compilador GCC u otro compilador de nueva generación (como VC++ en Windowos) para su sistema operativo. Si requiere alguien de programación gráfica para ver los resultados de su lógica palpables en la pantalla puede usar SDL, que es una excelente biblioteca gráfica multiplataforma. 


  • Para Windows recomiendo ampliamente usar la distribución más actual de MingW, en concreto esta: http://nuwen.net/mingw.html (Evite usar Dev-C++ que su desarrollo ha sido parado, y si requiere un entorno gráfico use http://wxdsgn.sourceforge.net/ a pesar de también ya llevar 2 años sin actividad.)
  • En GNU/Linux: Instalar el compilador GCC desde su repositorio. ej. en debian like: sudo apt-get install build-essential
  • En Mac OS X: Instale sus herramientas de desarrollador que incluirán la versión más adecuada de GCC.