De Regreso del RECPAT 2009

El día primero de diciembre recibí la confirmación de que el trabajo que había enviado al VII Congreso Nacional de Reconocimiento de Patrones fue aceptado y luego de hacerle algunas correcciones el día 3 envié la versión camera-ready que fue la que finalmente envié.

Continue reading “De Regreso del RECPAT 2009”

Advertisements

Escribir gramáticas en LaTeX (latex-bnf)

Para la asignatura de Programación IV (Teoría de Lenguajes y Compilación) me ha tocado implementar un intérprete, al final me he decidido a utilizar ANTLR3. Al final como tengo que entregar un informe sobre la tarea, y como para todos mis informes de la Universidad utilizo LaTeX, pues me he puesto a buscar como escribir gramáticas en un documento de LaTeX, me encontré varios paquetes (simple búsqueda por grammar en la CTAN) sin embargo me decanté por latex-bnf la cuestión fue que cuando lo fuí a utilizar en mi Sistema (MacOS X 10.5.5 + MacTex 2007 + TextMate) y guiándome por el documento de ejemplo, me encuentro que daba error al tratar de utilizar pdflatex como generador del documento. 

La cuestión es que al parecer el paquete tiene su tiempito ya y en la documentación te especifican que para utilizarlo debes poner la línea:

\documentstyle[bnf]{article}

Sin embargo, cuando utilizamos esta línea en por ejemplo un artículo que estemos escribiendo, obtenemos el siguiente error:

Latex Error: ./untitled 2.tex:10 LaTeX Error: LaTeX2e command \usepackage in LaTeX 2.09 document.

En mi caso la solución que encontré luego de “trastear” un tiempo, fue que con un simple:

\documentclass{article}
\usepackage{bnf}

Teniendo el fichero: bnf.sty en el mismo directorio del documento que estemos redactando, o en su variante teniendo el paquete latex-bnf instalado correctamente en nuestro sistema LaTeX.

Autenticando contra un LDAP desde Python

Desde hace ya algún tiempo soy un lector asiduo de los blogs de Zuzel, Yasser, Luis y otros muchachos de la UH, que poseen su blog. Realmente son algunos de los escasos blogs que existen en Cuba que se actualicen y que además publican contenidos que me resulten interesantes :-).

En fin gracias a un trabajo que presentó Zuzel en la Jornada Científica en la Universidad de la Habana llegúe al DrProject, que según su propia web:

DrProject is a web-based project management portal that integrates revision control, issue tracking, mailing lists, a wiki, and other tools that software development teams need to succeed. DrProject was designed to be simple enough for undergraduate students to master in less than an hour, and is now being used by universities, open source projects, and commercial teams in several companies.

Me pareció bastante interesante y además mucho más sencillo que otros como el GForge, además el atribuido adicional de tener a una experta cerca era tentadora. Pues nada me puse en contacto con ella y como para ella no era ningún problema el venir hasta la Universidad, ayudarme a instalar y configurar, pues asi lo hicimos. Luego de luchar con algunas “p” mal escritas :-), se logró hacer funcionar todo sin mayores problemas.

De todo el proceso, la parte que más le interesaba a Zuzel era la de hacer autenticar al drproject contra el LDAP de la Universidad, luego de escribir algún que otro código lo dejamos con una autentificación, que en ese momento, pensé que funcionaba, la cuestión fue que al final, luego de probar varias veces llegué a la conclusión de que realmente no funcionaba, pues cualquier combinación de usuario / contraseña que le proporcionaba se logeaba perfectamente.

Entonces fue cuando comenzé a buscar información sobre la librería python-ldap que estábamos utilizando para la autentificación, luego de una búsqueda bastante amplia, no encontré ninguna información que me fuera del todo clara o que me proporcionara algún ejemplo que me permitiera adaptarlo de forma rápida y fácil a mis necesidades. Finalmente, pude encontrar en estos artículos la mejor información disponible, y aquí un ejemplo que aunque orientado a django me fue muy útil para lograr un script funcional. A continuación dejo el código del fichero validate.py que se encarga de realizar la autentificación desde la interfaz web del DrProject:

Expliquemos un poco el código:

AD_DNS_NAME = 'uci.cu'
AD_LDAP_PORT = 389
AD_SEARCH_DN = 'OU=UCI Domain Users,DC=uci,DC=cu'
AD_SEARCH_FIELDS = ['displayname', 'mail', 'mailnickname', 'title']
AD_LDAP_URL = 'ldap://%s:%s' % (AD_DNS_NAME, AD_LDAP_PORT)
DOMAIN = "uci.cu"

Estas líneas son simplemente de configuración para establecer el AD_LDAP_URL que es la URL que se utiliza para conectar al servidor LDAP.


username = sys.stdin.readline().strip("\n")
password = sys.stdin.readline().strip("\n")
try:
l = ldap.initialize(AD_LDAP_URL)
r = l.simple_bind_s("%s@%s"%(username, DOMAIN), password)
l.unbind_s()
sys.exit(0)
except ldap.LDAPError, e:
# print e.message['info']
if type(e.message) == dict and e.message.has_key('desc'):
print e.message['desc']
else:
print e
sys.exit(1)

Esta es la función validate que es la que encarga de corroborar las credenciales del usuario. En el caso particular de DrProject se leen el usuario y la contraseña mediante la entrada estándard y luego se comprueban con el servidor LDAP.

Finalmente lo que se incluye es una llamada a la función validate para ejecutarla:


if __name__ == '__main__': validate()

De esta forma se logra que el DrProject autentique directamente contra un servidor LDAP, lo cual puede ser útil debido a que la gestión de usuarios no queda de parte del DrProject y además se evita que los usuarios tengan que crearse nuevas cuentas y recordar más contraseñas 🙂