Sebastian Durandeu Blog

  • Visitantes

Archive for the ‘Uncategorized’ Category

Utilizar NLTK desde IronPython 2.7 y Visual Studio

Posted by sebastiandurandeu on September 13, 2011

NLTK (Natural Language Toolkit – http://www.nltk.org/) es una suite de bibliotecas para realizar procesamiento de lenguaje natural (NLP – Natural Language Processing) en Python, publicado bajo licencia GPL. El campo del procesamiento del lenguaje natural permite realizar procesamiento de texto utilizando técnicas de aprendizaje automático, por ejemplo, clasificación de documentos, búsqueda de documentos relevantes en base a un tema, traducción automática, entre otras cosas.

Mas concretamente yo estoy utilizando NLTK desde IronPython para realizar análisis de sentimiento para saber si un texto sobre un tema en particular representa una opinión positiva o negativa. Hay algunos ejemplos en este otro artículo: http://streamhacker.com/2010/05/10/text-classification-sentiment-analysis-naive-bayes-classifier/

Una fuente muy, muy completa sobre aplicaciones de NLTK al procesamiento de texto se puede encontrar en el siguiente libro Python Text Processing with NLTK 2.0 Cookbook. Sino, como referencia general pueden revisar este libro online: http://www.nltk.org/book

Para utilizar NLTK desde IronPython y Visual Studio deben seguir lo siguientes pasos:

  1. Si aún no lo tienen instalado, instalar IronPython desde http://ironpython.codeplex.com/releases/view/54498. Por default se va a instalar en “C:\Program Files\IronPython 2.7”.
  2. Descargar PyYAML (3.10) en su versión zip desde http://pyyaml.org/wiki/PyYAML y descoprimirlo en cualquier carpeta.
  3. Abrir una consola (con permisos de administrador) donde descomprimieron el zip de PyYAML y ejecutar el siguiente lo siguiente desde una consola (suponiendo que IronPython esta instalado en la carpeta default).
    "C:\Program Files\IronPython 2.7\ipy.exe" setup.py install
  4. Ejecutar los siguientes pasos para instalar Expat (se pueden ver los pasos orginales en http://code.google.com/p/robotframework/issues/detail?id=154):
    1. Descargar el Python 2.7.2 compressed source tarball desde http://www.python.org/ftp/python/2.7.2/Python-2.7.2.tgz. Extraer el contenido. Esto lo hacemos para obtener algunos archivos que no se incluyen por default con IronPython.
    2. Copiar expatbuilder.py desde la carpeta Lib\xml\dom de los archivos de Python descomprimidos a C:\Program Files\IronPython 2.7\Lib\xml\dom
    3. Copiar expat.py desde la carpeta Python\Lib\xml\parsers de los archivos de Python descomprimidos a C:\Program Files\IronPython 2.7\Lib\xml\parsers
    4. Descargar el siguiente archivo https://fepy.svn.sourceforge.net/svnroot/fepy/trunk/lib/pyexpat.py y copiarlo a C:\Program Files\IronPython 2.7\Lib
  5. Descargar el instalador de NLTK (msi o exe) desde http://www.nltk.org/download.
  6. Instalar NLTK, pero como no tenemos instalado Python, el instalador va a crear una carpeta Lib en la misma carpeta donde lo descargamos.
  7. Abrir la carpeta Lib donde se instalo NLTK y copiar el contenido a C:\Program Files\IronPython 2.7\Lib.

Tengan en cuenta que una vez que instalaron NLTK, puede ser que necesiten descargar manualmente alguno de sus módulos usando el NLTK Downloader. Para esto abran una consola de IronPython desde C:\Program Files\IronPython 2.7\ipy.exe y ingresen:

>>> import nltk

>>> nltk.download()

Posted in Uncategorized | Leave a Comment »

Ejemplo de Trazabilidad en un Proyecto de Software

Posted by sebastiandurandeu on June 27, 2010

Si bien la palabra Trazabilidad no existe en el diccionario castellano. Según la Wikipedia se puede especificar como “seguimiento del producto” y según ISO:

La trazabilidad o rastreabilidad es la "aptitud para rastrear la historia, la aplicación o la localización de una entidad mediante indicaciones registradas".

En el caso del Software se refiere a la capacidad de relacionar los requerimientos hacia “atrás” con las necesidades de negocio que originaron estos requerimientos y hacia “adelante” con los componentes de código, pruebas y defectos que se generaron a partir de estos requerimientos.

En el trabajo práctico que realizamos para la materia Taller de Desarrollo de Proyectos II uno de los objetivos era poder mantener la Trazabilidad de todos los puntos del proyecto. El siguiente gráfico intenta explicar como logramos este objetivo, utilizando como elemento central las User Stories.

image

Posted in Uncategorized | Leave a Comment »

Introduccción a “Identity”

Posted by sebastiandurandeu on March 25, 2010

Necesitamos encarar un proyecto relacionado con “identity” para la facultad (el porque lo dejamos para otro momento). Aún no sabemos especificamente que problematica queremos atacar dentro de esta gran bolsa, pero creemos estar seguros que el tema central debe ser éste. Para introducirme en el tema decidimos ir en busca de información introductoria y esto es lo que encontramos (tanto en inglés como en castellano):

Problablemente la cosa venga por el lado de Federated Identity. Claramente estamos medio perdidos aún 😛 , pero mejoraremos…

Posted in Uncategorized | Leave a Comment »

‘WORK EXPANDS SO AS TO FILL THE TIME AVAILABLE FOR ITS COMPLETION’

Posted by sebastiandurandeu on July 11, 2008

This is also known as the Parkinson’s Law, written by Prof. Cyril Northcote Parkinson in an article from 1957.

“General recognition of this fact is shown in the proverbial phrase ‘It is the busiest man who has time to spare.’ Thus, an elderly lady of leisure can spend the entire day in writing and dispatching a postcard to her niece at Bognor Regis. An hour will be spent finding the postcard, another in hunting for spectacles, half an hour in a search for the address, an hour and a quarter in composition, and twenty minutes in deciding whether or not to take an umbrella when going to the pillar box in the next street. The total effort that would occupy a busy man for three minutes all told may in this fashion leave another person prostrate after a day of doubt, anxiety, and toil.

[…]”

Extracted from the Parkinson’s article.

“Parkinson’s Law dictates that a task will swell in (perceived) importance and complexity in relation to the time allotted for its completion. It is the magic of the imminent deadline. If I give you 24 hours to complete a project, the time pressure forces you to focus on execution, and you have no choice but to do only the bare essentials.

If I give you a week to complete the same task, it’s six days of making a mountain out of a molehill. If I give you two months, God forbid, it becomes a mental monster. The end product of the shorter deadline is almost inevitably of equal or higher quality due to greater focus.
This presents a very curious phenomenon. There are two synergistic approaches for increasing productivity that are inversions of one another:
1.) Limit tasks to the important to shorten work time. (80/20)
2.) Shorten work time to limit tasks to the important. (Parkinson’s Law).
The best solution is to use both together: Identify the few critical tasks that contribute most to income and schedule them with very short and clear deadlines.”

Extracted from Book Excerpt: The 4 Hour Workweek.

Summarizing: “If you have only one letter to write, it will take all day to do it. If you have twenty letters to write, you’ll get them done in one day“.

This fact can be also stated as a Gas Principle, where everything expands up to fill every available space.

Posted in Uncategorized | Leave a Comment »

Síndrome de los “Veintipico”

Posted by sebastiandurandeu on May 21, 2008

Esto no lo escribí yo, me lo mando por mail un amigo (Gracias Maro!), pero creo que esta muy bueno. Ahí va:

Le llaman la ‘crisis del cuarto de vida’.

Te empiezas a sentir inseguro y te preguntas dónde estarás en un año o dos, pero luego te asustas al darte cuenta que apenas sabes donde estás ahora.

Te empiezas a dar cuenta de que hay un montón de cosas sobre ti mismo de las que no sabías y que quizás no te gusten.

Te empiezas a dar cuenta de que tu círculo de amigos es más pequeño que hace unos años atrás. Te das cuenta de que cada vez es más difícil ver a tus amigos y coordinar horarios por diferentes cuestiones: trabajo, estudio, pareja, etc. Y cada vez disfrutas más de esa cervecita que sirve como excusa para charlar un rato. Las multitudes ya no son ‘tan divertidas’, hasta a veces te incomodan.

Y extrañas la comodidad de la escuela, de los grupos, de socializar con la misma gente de forma constante.
Pero te empiezas a dar cuenta que mientras algunos eran verdaderos amigos, otros no eran tan especiales después de todo.

Te empiezas a dar cuenta de que algunas personas son egoístas y que, a lo mejor, esos amigos que creías cercanos no son exactamente las mejores personas que has conocido y que la gente con las que has perdido contacto resultan ser amigos de los más importantes para ti.

Ríes con más ganas, pero lloras con menos lágrimas, y con más dolor.

Te rompen el corazón y te preguntas como esa persona que amaste tanto te pudo hacer tanto mal. O quizás te acuestes por las noches y te preguntes por qué no puedes conocer a alguien lo suficientemente interesante como para querer conocerlo mejor.

Pareciera como si todos los que conoces ya llevan años de novios y algunos empiezan a casarse. Quizás tú también amas realmente a alguien, pero simplemente no estás seguro si te sientes preparado para comprometerte por el resto de tu vida.

Atraviesas por las mismas emociones y preguntas una y otra vez, y hablas con tus amigos sobre los mismos temas porque no terminas de tomar una decisión.

Los ligues y las citas de una noche te empiezan a parecer baratos, y emborracharte y actuar como un idiota empieza a parecerte verdaderamente estúpido.

Salir tres veces por fin de semana resulta agotador y significa mucho dinero.

Miras tu trabajo y quizás no estés ni un poco cerca de lo que pensabas que estarías haciendo. O quizás estés buscando algún trabajo y piensas que tienes que comenzar desde abajo y te da un poco de miedo.

Tratas día a día de empezar a entenderte a ti mismo, sobre lo que quieres y lo que no.

Tus opiniones se vuelven más fuertes. Ves lo que los demás están haciendo y te encuentras a ti mismo juzgando un poco más de lo usual porque de repente tienes ciertos lazos en tu vida y adicionas cosas a tu lista de lo que es aceptable y de lo que no lo es.

A veces te sientes genial e invencible, y otras, solo, con miedo y confundido.

De repente tratas de aferrarte al pasado, pero te das cuenta de que el pasado cada vez se aleja más y que no hay otra opción que seguir avanzando.

Te preocupas por el futuro, préstamos, dinero, etc. y por hacer una vida para ti. Y mientras ganar la carrera sería grandioso, ahora tan solo quisieras estar compitiendo en ella.

Lo que puede que no te des cuenta es que todos los que estamos leyendo esto nos identificamos con ello. Todos nosotros tenemos ‘veintitantos’ y nos gustaría volver a los 15-16 algunas veces. Parece ser un lugar inestable, un camino en tránsito, un desbarajuste en la cabeza… pero todos dicen que es la mejor época de nuestras vidas y no tenemos que desaprovecharla por culpa de nuestros miedos. Dicen que estos tiempos son los cimientos de nuestro futuro.
Parece que fue ayer que teníamos 16… ¿Entonces mañana tendremos 30? ¿Así de rápido? Hagamos valer nuestro tiempo. Que no se nos pase!
La vida no se mide por las veces que respiras, sino por aquellos momentos que te dejan sin aliento.

Mostrale esto a tus amigos de veintitantos. Quizá le ayude a alguien a darse cuenta que no esta solo entre tanta confusión.

Posted in Uncategorized | Leave a Comment »

Sistemas Operativos (75.08) – Trabajo Práctico – 2do Cuat 2008

Posted by sebastiandurandeu on May 1, 2008

Este es el trabajo práctico que hicimos con mi grupo para la materia Sistemas Operativos de FIUBA. EL TP esta hecho en Bash scripting y PERL.

Se puede descargar de:
http://www.divshare.com/download/4392050-6ba

La idea del TP es mas o menos la siguiente:

La AFIP (Agencia Federal de Ingresos Públicos) brinda a los contribuyentes (según Resolución General 1361) inscriptos en el IVA (Impuesto al Valor Agregado) la facilidad de almacenar en sus servidores el duplicado electrónico de comprobantes que intervienen en la liquidación de ese impuesto

Los contribuyentes que soliciten este servicio son habilitados y a partir de esa fecha deben enviar periódicamente  a la AFIP los archivos con la información de los comprobantes.

La AFIP recibe los archivos, los valida, genera una clave de autorización electrónica (CAE) y los almacena.

Una vez efectuado este proceso los contribuyentes pueden acceder al sitio correspondiente de la AFIP para consultar los comprobantes, emitir copia fiel, etc.

En este TP se pide desarrollar parte de este trabajo, haciendo foco solo en el procesamiento de duplicados de Compras.

Para ello se deberá:

Desarrollar usando shell script los siguientes comandos:

  • Comando de instalación (InstalC): Este instalable debe ser del tipo self-extractable. Esto significa que será un shell que realice todas las tareas de la instalación normales (ej.: crear directorios) pero que también genere, sin recurrir a archivos externos, los archivos de datos, los comandos, etc.,  a partir de la información que contiene él mismo.
  • Comando de Inicialización de Ambiente (IniciaC): Este comando es el primero en orden de ejecución. No graba en el Archivo de Log y se invoca manualmente. Su propósito es preparar el ambiente necesario para la correcta ejecución del TP, como por ejemplo: Setear adecuadamente el Path y otras variables de ambiente, adecuar permisos, verificar espacio, etc.
  • Comando de Recepción de Archivos de Compras (RecibeC): Este comando es el segundo en orden de ejecución. Graba un archivo de log llamado recibec.log. Se invoca en forma manual o a través del comando IniciaC. El propósito de este comando es detectar la llegada de archivos al directorio $grupo/arribos, moverlos al directorio correspondiente, dormir un tiempo x y volver a ejecutarse. 
  • Comando de Validación de Comprobantes de Compras (ValidCo): Este comando es el tercero en orden de ejecución. Graba un archivo de log llamado validco.log. Se invoca en forma manual o a través del comando RecibeC. El propósito de este comando es formatear los registros recibidos y validarlos a fin de poder almacenarlos con la estructura adecuada en el directorio correspondiente.
  • Comando de Consultas de Comprobantes – PERL (ConsulC): Este comando es el cuarto en orden de ejecución. No graba un archivo de log. Se invoca en forma manual con las opciones y parámetros adecuados. El propósito de este comando es obtener algunos listados que permitan conocer la recaudación probable por período. Siempre se deben mostrar los resultados por pantalla, pero si se invoca al comando con la opción –w, se deben grabar los resultados en un archivo (en el directorio $grupo/consultas).
  • Comando Auxiliar para la escritura de los archivos de log que graban los comandos: RecibeC y ValidCo – PERL o BASH (GrabaL) 

 La otra gente del grupo:

  • Mariana Gambande
  • Leandro Ferrigno
  • Alejandro Lamprópulos
  • Czelada Esteban

Posted in Uncategorized | Leave a Comment »

101 Great Computer Programming Quotes

Posted by sebastiandurandeu on March 29, 2008

A really good article at http://www.devtopics.com/101-great-computer-programming-quotes/.

A quick sample:

  •  “That’s what’s cool about working with computers.  They don’t argue, they remember everything, and they don’t drink all your beer.”
    (Paul Leary)
  • “Never trust a computer you can’t throw out a window.”
    (Steve Wozniak)
  • “It is not about bits, bytes and protocols, but profits, losses and margins.”
    (Lou Gerstner)
  • “Don’t worry if it doesn’t work right.  If everything did, you’d be out of a job.”
    (Mosher’s Law of Software Engineering)
  • “The best thing about a boolean is even if you are wrong, you are only off by a bit.”
    (Anonymous)
  • “C++ : Where friends have access to your private members.”
    (Gavin Russell Baker)
  • “Software is like sex: It’s better when it’s free.”
    (Linus Torvalds)
  • “If McDonalds were run like a software company, one out of every hundred Big Macs would give you food poisoning, and the response would be, ‘We’re sorry, here’s a coupon for two more.’ ”
    (Mark Minasi)
  • “Programming is like sex: one mistake and you’re providing support for a lifetime.”
    (Michael Sinz)
  • “To err is human, but to really foul things up you need a computer.”
    (Paul Ehrlich)

Posted in Uncategorized | Leave a Comment »

Software Development Quotes

Posted by sebastiandurandeu on February 8, 2008

“The challenge and the mission are to find real solutions to real problems on actual schedules with available resources.”
(The Mythical Man-Month, F. Brooks, 1975)

The following is a definition (a good one I think…) about the Dependency Injection pattern extracted from http://ctrl-shift-b.blogspot.com/2008/01/art-of-separation-of-concerns.html:

Dependency Injection is a term applied to the inversion of concerns which relate to obtaining external dependencies. This term was conceived to more clearly describe the behavior of a class of frameworks concerned with this form of inversion. The goal of dependency injection is to separate the concerns of how a dependency is obtained from the core concerns of a boundary. This improves reusability by enabling components to be supplied with dependencies which may vary depending on context.

Posted in Uncategorized | Leave a Comment »