Gustavo Campanelli: Clase de Software as a Service gratuito

   Publicado:

Para los interesados, todavía están a tiempo de inscribirse en la clase de Software como Servicio (SaaS) que es brindada por dos docentes de la universidad de Berkeley en Coursera. Lamentablemente para algunos, es una clase en ingles, pero digamos la verdad, si les gusta la programación y no saben ingles están perdiéndose el 70% de los recursos disponibles para los programadores a nivel mundial.

Gustavo Campanelli: Leido: Darkness at the edge of town

   Publicado:

La cuarta de las novelas del Ultimate Thriler Box Set, al que ya le dediqué 3 entradas en el blog, es Darkness at the edge of town, de J.Carson Black. Este es un thriller policial con muchas cosas positivas y algunas negativas. La protagonista es Laura Cardinal, protagonista de otras dos novelas. Es una detective muy meticulosa de un ente estatal, o sea a medio camino entre un policía local y un

Anthony Lenton: Cosecha fina y cosecha gruesa

   Publicado:

Cosecha fina y cosecha gruesa

Anthony Lenton: La cuarta

   Publicado:

La cuarta

Joaquin Tita: Swig compiling issues Mac Os Lion

   Publicado:

One problem that happened to me, was the fact that working under a virtualenv with an specific python version as one can expect, works with ONLY that python version.
So if you try to import a module compiled with one version different with the one you are running, will no work.
The exception message:

Fatal Python error: Interpreter not initialized (version mismatch?)
Abort trap: 6

How we can solve this issue?
First, knowing which python version are we running and of course, compile the module to THAT version.
Below are some examples of how to compile a module to 2.6 or 2.7 (which is Mac Os Lion python default version)

To use python default version just type the following:

$ swig -python example.i
$ cc -c `python-config --cflags` example.c example_wrap.c
$ cc -bundle `python-config --ldflags` example.o example_wrap.o -o _example.so

If you run:

$ python-config --ldflags

the output is:

-L/System/Library/Frameworks/Python.framework/Versions/2.7/lib/python2.7/config -ldl -framework CoreFoundation -lpython2.7 -u _PyMac_Error /System/Library/Frameworks/Python.framework/Versions/2.7/Python
$ python-config --cflags
-I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -I/System/Library/Frameworks/Python.framework/Versions/2.7/include/python2.7 -fno-strict-aliasing -fno-common -dynamic -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -mno-fused-madd -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -fwrapv -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch i386 -arch x86_64

In case you want you use a different version of python (let's say 2.6) do the following:

$ swig -python example.i
$ cc -c `python2.6-config --cflags` example.c example_wrap.c
$ cc -bundle `python2.6-config --ldflags` example.o example_wrap.o -o _example.so

If you run

$ python2.6-config --ldflags

the output is:

-L/System/Library/Frameworks/Python.framework/Versions/2.6/lib/python2.6/config -ldl -framework CoreFoundation -lpython2.6

$ python2.6-config --cflags
-I/System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6 -I/System/Library/Frameworks/Python.framework/Versions/2.6/include/python2.6 -fno-strict-aliasing -fno-common -dynamic -g -Os -pipe -fno-common -fno-strict-aliasing -fwrapv -mno-fused-madd -DENABLE_DTRACE -DMACOSX -DNDEBUG -Wall -Wstrict-prototypes -Wshorten-64-to-32 -DNDEBUG -g -fwrapv -Os -Wall -Wstrict-prototypes -DENABLE_DTRACE -arch i386 -arch x86_64

To see other installed python versions:

$ ls /usr/bin/

alecu: Wikipedia in the Classroom

   Publicado:

Wikipedia en el aula

(en español)

Finally I got my hands on a copy of the DVDs that educ.ar released using CDPedia, the free software project that compresses as much as possible of the Spanish Wikipedia on a disc.

Thanks to the help of Jimmy Wales and Martín Varsavsky these 8.5Gb DVDs are being distributed to each and all schools in Argentina, and it’s a great thing because they contain 100% of the articles in the Spanish Wikipedia, and all of the accompanying images (some in reduced size), and -it’s also worth noting- they also may contain any error or vandalism that may have happened in Wikipedia at the time each page was downloaded.

This post is to celebrate the project coming full circle, so I’m going to tell the story of how it was completed, and I’m going to finish with some ideas for the next stage.

The story of the project

Our CDPedia project was born around 2006 with the idea of getting the knowledge accumulated on Wikipedia to the most remote schools in the country: those where there is no Internet.

Colección Ministerio de Educación

Some members of the Python Argentina user’s group got together on a few random sprints after free software events, and worked on improving the source code. As every amateur software project that’s starting up, CDPedia was developed during the free time of every contributor, and we released a first 0.5 version in 2009, during our first PyCon Argentina conference that took place just a week after Wikimanía in Buenos Aires.

Something unusual happened by the end of 2009: I got an email from Jimmy Wales, that was coming to Buenos Aires the following month and wanted to find out more about our project. We met him, showed him the 0.6 version we were working on, and he praised it because it looked so much like the online Wikipedia. That same day I had a meeting with him and some members of educ.ar, the educational web portal of the Argentine state, which through a grant of the Varsavsky Foundation would be able to publish a dual layer DVD with a CDPedia edition.

During that meeting we talked about the things that were needed to achieve an interesting result: we had to test CDPedia on many “relatively old” computers, such as the PCs that you can find through the country; also there were many bugs to fix, and most importantly of it all: due to technical issues the Wikimedia Foundation had stopped publishing the “html dumps” that our project used as a base. The final one was from June 2008, and we all agreed that it made no sense to publish a DVD in 2010 with content that was so old.

That’s how we managed to get financing for two interns from PyAr during three months part-time to fix bugs and polish every technical detail. But after trying through several channels and in diverse ways we were not able to get an up-to-date html dump similar to the one we were using, so we ended up using the hours assigned to the interns to build a replica of the Wikipedia setup starting from the DB dumps that Wikimedia did provide at the time. This road also proved worthless, because there were many configuration and performance details that were eluding us, and that meant that our Wikipedia test setup never worked fine.

The project was delayed, we were angry and hopeless, when at the post-PyCon 2010 asado in October 2010, one of the contributors suggested making a small program to download the whole of Wikipedia, one page at a time, and directly from his home. This was an option that we had half-jokingly suggested earlier on a meeting with educ.ar, so our reaction was one of true disbelief: a lot of things could go wrong with that idea. But as it so often happens, code beats opinions. Two days later SAn had achieved through an alternate road a Spanish Wikipedia html dump, something that we had not managed to achieve in months of efforts.

From there we worked a lot on updating our code due to every detail that had changed in Wikipedia since 2008, and on optimizing the disc space because the growth in pages and images had been exponential. We managed to send the final version to educ.ar by the end of June 2011, and we worked later so the disc covers and the disc itself had some kind of legend that encouraged the copying of the disc freely, but with the license restrictions of each part: the main content from Wikipedia, the classroom material made by educ.ar and the free software from the CDPedia project.

I must now focus the spot on these guys: Diego Mascialino, Facundo Batista and Santiago Picinnini for the amount of time they put in the project during the final race to the 0.7 version that was used in the educ.ar disc, and also on all the contributors that thru the lifetime of CDPedia helped with code and ideas. Having added my grain of sand to this project together with my friends from Python Argentina makes me so much proud.

Looking forward

This is also a good time to start thinking on some of the things we should work on to make CDPedia 1.0 much better. Here are a few: 

  • it ought to work fine in school servers with no Internet access, or where this access is limited, since CDPedia right now only works fine for only one user at a time
  • we should facilitate local installation, for educational laptops like the “Conectar Igualdad” plan in Argentina, or the OLPCs
  • we should work on improving the current CDPedia so it can be useful for other spanish speaking countries
  • we should work -probably with the Wikimedia Foundation- so it can be used for the offline editions of Wikipedia in other languages.

Links:

alecu: Wikipedia en el Aula

   Publicado:

Wikipedia en el aula

(in english)

Al fin llegó a mis manos una copia de los DVDs que educ.ar editó usando CDPedia, el proyecto de software libre que comprime lo máximo posible de Wikipedia en un disco.

Gracias a la gestión de Jimmy Wales y Martín Varsavsky estos DVDs de 8.5Gb están siendo distribuidos a todas y cada una de las escuelas de Argentina, y contienen el 100% de los artículos de la Wikipedia en Español y el 100% de sus imágenes respectivas (algunas en tamaño reducido), y vale la pena aclarar, tienen también cualquier error o vandalismo que pueda haber habido en Wikipedia al momento en que bajamos cada página.

Este post es para festejar que se completa el círculo, asi que voy a contar la historia de como se llevó a cabo, y voy a terminar con algunas ideas que tenemos para la próxima etapa.

Historia del proyecto

Nuestro proyecto CDPedia nació cerca del 2006, con la idea de llevar el conocimiento acumulado en Wikipedia a las escuelas más remotas del país: aquellas donde no llega Internet.

Colección Ministerio de Educación

Entre varios colaboradores del grupo de usuarios de Python de Argentina nos juntamos en varios sprints ocasionales tras algun evento de software libre, donde trabajamos para mejorar el código. Como todo proyecto amateur que arranca, CDPedia fue desarrollada en el tiempo libre de cada colaborador, y lanzamos una primera versión 0.5 en 2009, durante la primera conferencia PyCon en Argentina, que fue realizada justo una semana después de Wikimanía en Buenos Aires.

Algo muy raro sucedió a fines de 2009: recibí un mail de Jimmy Wales, que venía a Buenos Aires al mes siguiente y quería conocer más sobre nuestro proyecto. Nos reunimos con él, le mostramos la versión 0.6 en la que estabamos trabajando y nos elogió porque el resultado era muy similar a estar mirando Wikipedia conectado. Y ese mismo día tuve una reunión con él y con educ.ar, el portal educativo del estado argentino, que a través de un aporte de la Fundación Varsavsky estaba en condiciones de editar un DVD doble capa con una edición de CDPedia.

Durante la reunión charlamos las cosas que hacían falta para lograr una edición interesante: había que probar CDPedia en muchas computadoras relativamente “viejas”, tal como son las computadoras que se pueden encontrar en las escuelas del país, faltaban corregir muchos bugs, y lo más importante de todo: por problemas técnicos la Fundación Wikimedia había dejado de publicar los “dumps HTML” que nuestro proyecto aprovechaba como base. El último era de Junio de 2008 y todos acordamos que no tenía sentido editar un DVD en 2010 con contenido tan desactualizado.

Asi fue como conseguimos que se financien dos becarios de PyAr durante tres meses para corregir bugs y pulir todo los detalles técnicos. Pero por más que probamos por varios canales y de diversas maneras no conseguimos un dump HTML actualizado similar al que veníamos utilizando, por lo que se gastaron las horas asignadas a los becarios para armar una replica del software de wikimedia a partir de los dumps de bases de datos que Wikimedia si proveía en ese entonces. Este camino tampoco dio resultado, porque hay muchos detalles de configuración y de performance que se nos escapaban y nuestra instalación de prueba de Wikipedia nunca funcionaba bien.

El proyecto estaba demorado, estabamos enojados y desesperanzados, cuando, en el asado de PyCon en Octubre de 2010, uno de nuestros colaboradores sugirió hacer un programa para descargar completamente Wikipedia, página por página, directamente desde su casa. Sobre esta opción se había bromeado en una reunión organizativa de fines de Mayo. Nuestra reacción fue de incredulidad: había muchas cosas que podían fallar con esa idea pero, como suele pasar, el código le gana a la opinión: dos días más tarde SAn había conseguido por un camino alternativo un dump en HTML de Wikipedia en Español, algo que no habíamos logrado en meses de esfuerzos.

A partir de ahí estuvimos trabajando bastante en actualizar nuestro código debido a todos los detalles que habían cambiado en Wikipedia desde 2008, y en optimizar el espacio en disco porque el crecimiento de páginas e imágenes había sido exponencial. Conseguimos enviar la versión final a educ.ar a fin de Junio de 2011 y estuvimos trabajando luego para que las carátulas y el disco tuvieran alguna leyenda que incentivara la posibilidad de copiar el disco libremente, dentro de las limitaciones de las licencias de cada parte: el contenido principal de Wikipedia, el material para el aula realizado por educ.ar y el software libre de CDPedia.

Debo mencionar en este punto a Diego Mascialino, Facundo Batista y Santiago Piccinini por la cantidad de horas que le dedicaron en la recta final para la versión 0.7 que se utilizó en el disco de educ.ar, y a todos los colaboradores que a lo largo de la vida de CDPedia aportaron código e ideas. Haber puesto mi granito de arena en este proyecto junto a mis amigos de Python Argentina me llena de orgullo.

Mirando para adelante

Y también este es un buen momento para ponernos a pensar en algunas cosas en las que tenemos que trabajar de acá al futuro para que CDPedia 1.0 sea mucho mejor:

  • que pueda ser instalada en servers escolares que no tengan acceso a Internet o donde el acceso sea limitado, ya que actualmente fuciona bien para un solo usuario
  • una version para instalaciones locales, para laptops educativas como las del plan Conectar Igualdad o las de OLPC
  • conseguir que CDPedia pueda ser utilizada en otros países hispanoparlantes
  • trabajar en conjunto con la Fundación Wikimedia para que pueda ser utilizada en ediciones offline de Wikipedia en otros idiomas.

Enlaces:

Anthony Lenton: La Isoca

   Publicado:

La Isoca

Joaquin Tita: Swig Tutorial example Mac Os Lion

   Publicado:

This tutorial is based on Leopard Tutorial but still works, thou some warnings.

First, we create an example.c file with this content:

/* File : example.c */

#include <time.h>
double My_variable = 10.0;

int fact(int n) {
if (n else return n*fact(n-1);
}

int my_mod(int x, int y) {
return (x%y);
}

char *get_time()
{
time_t ltime;
time(&ltime);
return ctime(&ltime);
}

Second, we create the interface between C and Python with the following file:

/* example.i */
%module example
%{
/* Put header files here or function declarations like below */
extern double My_variable;
extern int fact(int n);
extern int my_mod(int x, int y);
extern char *get_time();
%}

extern double My_variable;
extern int fact(int n);
extern int my_mod(int x, int y);
extern char *get_time();

Now that we have all the source files we need, we compile them in this way:

$ swig -python example.i
$ cc -c `python-config --cflags` example.c example_wrap.c
$ cc -bundle `python-config --ldflags` example.o example_wrap.o -o _example.so

if you have problems with this step check this other post

So, everything looks nice, but how do we use the dynamic module in python?

>>> import example
>>> example
<module 'example' from 'example.pyc'>
>>> example.cvar.My_variable
10.0
>>> example.my_mod(20,10)
0
>>> example.fact(14)
1278945280
>>> example.get_time()
'Sat Feb 11 19:27:05 2012\n'

disclaimer: this is just the tutorial from the swig's homepage, it only shows how you can actually use some C power into python. For example, scipy package, in the module cluster uses a C function wrapped into python code.

Joaquin Tita: timeit example

   Publicado:

An example of how to time a statement

>>> import numpy as np
>>> arr1 = np.random.randint(0,1600,(3000,3000))
>>> timeit arr1.argmin()
10 loops, best of 3: 34.2 ms per loop

Tested under Mac Lion Os proc i7 and Python 2.7.1 r271:86832

Share