Archivo de la categoría: Programación

Installing scipy in a Python virtual environment

Using virtualenv to create different python environments is a common practice while working in multiple projects. In addition, it may happen that we don’t have root access (i.e. admin rights) in the machine that we are using. Virtual environments are also quite useful in such situations. However, some python packages require extra dependencies that are not straightforward to install.

Installing scipy in a virtual environment should be initially quite straightforward:

python virtualenv.py myVE
source myVE/bin/activate
pip install scipy

However, during the installation of scipy I found the following three problems that took me several hours to solve. Here I share the solutions that worked for me in case they can be useful for someone else (specially myself in the future).

ImportError: libatlas.so.3: cannot open shared object file: No such file or directory
This error appears even having Atlas library properly installed. Apparently, it’s an error that only happens with numpy 1.9.2 in a virtual environment as I found in a small comment in Stack Overflow. The solution is to install the previous version:

pip install numpy==1.9.1

error: library dfftpack has Fortran sources but no Fortran compiler found
Despite my system had 3 different versions of gfortran, none of them were found by the installer. The solution is to create a symbolic link and then include it in your PATH variable.

ln -s /usr/bin/gfortran-4.7 ~/bin/gfortran
export PATH=$PATH:~/bin

ImportError: libopenblas.so.0: cannot open shared object file: No such file or directory
In this case, OpenBLAS library was not installed in the system, so the solution was to compile and install it manually. You can get the sources in the OpenBLAS website and then follow the installation guide.

make
make PREFIX=~/openblas install
export LD_LIBRARY_PATH=$LD_LIBRARY_PATH:~/openblas/lib
export PATH=$PATH:~/openblas/bin

Robust PCA in Java using R

If you want to avoid the curse of dimensionality when working with large datasets, you need to apply certain methods to reduce the number of attributes/features of your data. One common technique is Principal Component Analysis (PCA), but it does not work properly in datasets with outliers. Hence, Robust PCA technique was developed to overcome this issue.

I have been looking for a Java implementation of Robust PCA, but unfortunately I couldn’t find any. Luckily, I came upon an R implementation available in rrcov package. My initial plan was to translate this method to Java language, but it was going to take a lot of time. Therefore, I developed a Java wrapper that connects with R interface using JRI library, which is included in rJava package (a low-level R to Java interface). You can get the code here: RobustPCA.java (mirror).

If you are looking for a Robust PCA Matlab implementation you can get the code of LIBRA project, a Matlab library for robust analysis, but I encourage you to use R instead for a number of reasons.

Image: Copyright by Matthias Scholz

moa-screenshot

How to import MOA into Eclipse

Several people have asked me how to set up MOA (Massive Online Analysis) for developing new classifiers. With this quick tutorial I explain how to load MOA source code in Eclipse for Windows, although it should be very similar in Linux or Mac.

  1. Download and install the latest version of Java SDK (not JRE) if you don’t have it already.
  2. Download the latest version of Eclipse (Classic should be enough). Extract it in any suitable location of your hard drive.
  3. Download and install TortoiseHg (or similar) in order to clone the MOA repository.
  4. Open TortoiseHG and go to File, Clone repository. Set the Source to https://code.google.com/p/moa/ and the Destination to a folder of your choice (e.g. C:\Users\Manuel\moa-hg). Click on Clone button and you’ll get the code of MOA in your chosen folder.
  5. Open Eclipse and go to Help, Install new software. Set “Work with” to your Eclipse repository (in my case is Juno). Look for m2e plugin and install it (also you can install the slf4j for Maven plugin).
  6. Once Eclipse is restarted, go to File, Import. Select “Existing Maven Projects” option. Set “Root Directory” to your MOA code folder (in my case C:\Users\Manuel\moa-hg). Follow all the steps of the wizard. It is possible that you get this error, but just ignore it. Plugin execution not covered by lifecycle configuration: org.codehaus.mojo:license-maven-plugin:1.1:add-third-party (execution: add-third-party, phase: generate-resources). Eclipse will restart again.
  7. Now you should have three projects folder in the Package Explorer tab: moa, moa-pom and weka-package. For running MOA GUI, look for moa/src/main/java/moa.gui/GUI.java file and run it as a Java application.

Please, let me know if you have any problem with this steps or if you know how to solve the error of step 6. Also you can subscribe and participate in MOA development email list.

empleo-frameworks-php

Frameworks para desarrollo web: PHP

Para cualquiera que se dedique a programar aplicaciones web sabe que hoy día es una locura empezar a desarrollar desde cero. Para hacernos la vida más fácil existen muchas herramientas que nos ayudarán a programar mejor y más rápido nuestras webs. Y son muy útiles para aquellas personas que no saben cómo crear su página web o que tienen poca experiencia. Estas herramientas suelen recibir el anglicismo “framework“.

La mayoría de estos frameworks siguen la arquitectura MVC (Modelo-Vista-Controlador), que permite un desarrollo estructurado que sea más ágil y colaborativo. A continuación os presento una lista de los frameworks más usados para desarrollo web agrupados por lenguaje. En este primer post trataremos los frameworks PHP más populares.

PHP

  • WordPress: aunque inicialmente fue ideado como un software de creación blogs, hoy día es usado para multitud de sitios webs. Su amplia comunidad, la facilidad de instalación y el extenso repositorio de plugins lo hacen una buena elección. Este es uno de mis favoritos.
  • Drupal: al igual que WordPress, es uno de los más populares. Su versatilidad y su amplia comunidad lo hacen uno de los mejores. Es quizá uno de los más longevos, ya que su primera versión fue lanzada en 2001.
  • Joomla: junto con WordPress y Drupal, es uno de los más extendidos. Personalmente no he tenido buenas experiencias con él, ya que su interfaz de administración me parece poco intuitiva. Puedes ver un infografía de WordPress, Drupal y Joomla aquí.
  • CakePHP: surgió inicialmente para llevar la filosofía de Ruby on Rails a PHP, de manera que se ofrece como un framework de desarrollo ágil. De los mismos creadores de CakePHP surgió Lithium, que parte desde PHP 5.3 para aprovechar al máximo las posibilidades de este lenguaje y permite la conexión con bases de datos NoSQL.
  • Zend: es uno de los frameworks más robustos y con un buen apoyo de la industria. Se autodefine como extremedamente simple y productivo, pero no he tenido la ocasión de comprobarlo.
  • Symfony: uno de sus puntos fuertes es el rendimiento. Usa twig como sistema de plantillas (derivado del de django). Al igual que Zend, tampoco lo he probado, pero he oído buenas críticas de él.

En el próximo post veremos los frameworks para python. Espero que aportéis vuestras experiencias con los distintos framworks y cuál es vuestro favorito.

Podéis consultar una comparativa más extensa de frameworks en la Wikipedia (sólo en inglés).

Saving and loading tasks in MOA

MOA (Massive Online Analysis) is a great opensource and free software for data stream mining. If you are an enthusiastic of machine learning, classification or clustering, you should try it.

You can work with MOA using the GUI, as well as the command line interface via Java. If you are using the graphical interface, you can’t save and load previous tasks. Because of this, i have done some modifications in order to make my work easy.

As you can see in the image, I have add a couple of buttons to the interface:

  • Save Log: create a log file with the strings of the tasks previously executed (you can select one or more from the task list).
  • Set task manually: load a panel in which you can write the command of the task to run (for example, you can copy and paste a task from a previous log file).

The patch for moa.gui.TaskManagerPanel class is available in pastebin.

boxee-miso: first steps

Some months ago, Miso team announced that they will be release an API. If you don’t know, Miso is a social platform for sharing your media activities (something like Foursquare but for tv shows and movies). So, a few days ago, this API was released and I registered an application named boxee-miso. My goal is have a nice way to integrate Miso into Boxee fabulous interface. If you haven’t Boxee, don’t wait to download it!

The first thing I did was looking for the code which paint the “share” window in Boxee. I’m using MacOS X, so I found it in

/Applications/Boxee.app/Contents/Resources/Boxee/skin/boxee/720p/boxee_share.xml

. This XML file has a lot of elements, but what we need is to paint a button for checking in our Miso account. I add a new item (the middle one) like you can see in the next code:

I still don’t know what is the purpose of “controlid” param, but the others is quite easy to understand. The key of problem is to use well the “onclick” param. Fortunately, Boxee is based in XBMC, and I could found good documentation in this wiki. So we will use RunScript in order to execute a python script which will receive some params (like name of the show, season or episode).

The image specified by “thumb” param is stored in

/Applications/Boxee.app/Contents/Resources/Boxee/skin/boxee/media/icons/miso_top_logo.png

.

Thanks to all of this, I have reached write some content in the Boxee log using the script test.py specified in the “onclick” param. Now, I am working with the OAuth authentication of Miso API. I will keep you informed.

Extensiones útiles para MediaWiki

Estoy trabajando con Esteban Romero para migrar Descuadrando a MediaWiki, ya que actualmente funciona con DokuWiki. Por si no lo sabéis, MediaWiki es un software para wikis libre (GPL) y es el que usa Wikipedia.

La puesta en marcha de un sistema MediaWiki es bastante más compleja que con DokuWiki, pero a largo plazo tiene mucha más flexibilidad y muchas extensiones (plugins) que permiten ampliar funcionalidades. En este post os voy a enumerar las que estamos usado en Descuadrando.

  • reCAPTCHA: permite la integración de un captcha en el registro de usuarios.
  • SelectCategoryTagCloud: añade una nube de categorías en la creación de un post, para que sea más sencillo seleccionar una.
  • Widgets: permite añadir multitud de widgets a nuestras páginas.
  • ParserFunctions: permite añadir sintaxis más compleja como sentencias if o switch.
  • ExpandTemplates: similar a la anterior, pero con otro tipo de expresiones. Especialmente útil para plantillas.
  • InputBox: permite añadir formularios a las páginas.
  • AntiBot: bot para evitar spam y otras técnicas maliciosas.
  • UsabilityInitiative: proporciona mejoras de usabilidad, sobre todo en el editor.
  • ImageMap: permite crear image maps, es decir, una imagen con diferentes enlaces definidos por coordenadas.
  • StubManager: framework necesario para otras extensiones.
  • ImageLink: permite insertar imágenes con enlaces y añadirles ciertos atributos.
  • Cite: permite crear notas a pie de página.
  • CategoryTree: permite ver las categorías de forma jerarquizada.

En cada uno de los enlaces a la página de MediaWiki explican como se instalan cada una. Para la mayoría basta con subir los archivos al directorio “extensions” y luego añadir una línea al fichero LocalSettings.php.

Mostrar metadatos de música, imágenes y pdf en Nautilus

Intentando organizar un poco los artículos en PDF que tengo, me he dado cuenta que sería útil poder visualizar el autor y el título del mismo en el navegador de archivos de Gnome (Nautilus).

Buscando en Google he encontrado que ya existía algo similar, pero que solo servía para música e imágenes. Es una extensión que se llama nautilus-columns (hebra en Ubuntu Forums). Al ver que estaba hecha en python me he puesto a modificarla para añadirle soporte de PDFs. No ha resultado muy complicado gracias a la librería pyPdf.

Podéis descargar el script en http://pastebin.com/WxspTtvL

Son necesarias las siguientes dependencias:

# apt-get install python-nautilus python-mutagen python-pyexiv2 \
python-kaa-metadata libnautilus-extension1 python-pypdf

Una vez instalado, tenéis que activar los campos Title y Artist, para mostrar el título y el autor, respectivamente.

Editado: si usáis Ubuntu, podéis descargar la extensión con esta nueva modificación desde el repositorio oficial.


$ sudo add-apt-repository ppa:nilarimogard/webupd8
$ sudo apt-get update
$ sudo apt-get install nautilus-columns
$ nautilus -q