Novedades: actualmente estoy impulsando el proyecto Argentina en Python, desde aquí (ver mapa)

¿Podemos salvar la OLPC de Windows?

Nota

Este post no es el original, sino una migración de Wordpress a Nikola. Si no se visualiza correctamente, podés ir al original (en Wordpress) haciendo click aquí

Me tomé el atrevimiento de traducir el artículo de Richard M. Stallman de su blog:

por Richard Stallman

Leí la declaración de Negroponte presentando la OLPC XO como una plataforma para Windows en las circunstancias más irónicas posibles: durante una semana en la que me preparaba, bajo una fecha límite, para migrar personalmente a una XO.

Tomé esta decisión por una razón específica: libertad. Las IBM T23 que he usado por muchos años son suficiente en la práctica, y el sistema y las aplicaciones instalados en ellas son  enteramente software libre, pero el BIOS no lo es. Quiero usar una laptop con un BIOS libre, y la XO es la única.

El software usualmente cargado en la XO cargado no es 100% libre; tiene un firmware no libre para manejar el chip de wireless. Esto significa que no puedo promocionar completamente la XO como está, pero resultó fácil resolver ese problema en mi máquina: borré ese archivo. Esto hizo que el chip interno de wireless deje de funcionar, pero me las arreglo sin eso.

Como siempre ocurre, surgieron problemas que retrasaron la migración hasta la semana pasada. El viernes, cuando charlamos algunos problemas técnicos con el staff de la OLPC, también pensamos como salvar el futuro del proyecto.

Algunos entusiastas de los sistemas GNU/Linux están muy decepcionados por la perspectiva  de que la XO, si resulta un éxito, no sea una plataforma para el sistema que aman. Aquellos que han apoyado el proyecto de la OLPC con su esfuerzo o su dinero quizás se sientan traicionados. Sin embargo, esas preocupaciones son disminuidas por lo que aquí está en juego: si la XO es una influencia para la libertad o es una influencia para el sometimiento.

Desde que se anunció el proyecto OLPC, lo hemos imaginado como una manera de acercar la informática en libertad a millones de niños alrededor del mundo. El proyecto anunció su intención de dar a los niños un camino para aprender sobre computadoras, permitiéndoles estudiar y experimentar con el software. Es posible que todavía lo hagan, pero está el peligro de que no. Si la mayoría de las XOs que son realmente usadas corren Windows, el efecto total será el contrario.

El software privativo deja a los usuario divididos y sin ayuda. Su funcionamiento es secreto, por lo que es incompatible con el espíritu del aprendizaje. Enseñar a los niños a usar un sistema privativo (no libre) tal como Windows no hace al mundo un lugar mejor, debido a que los pone bajo el poder del desarrollador de sistemas, tal vez permanentemente. Es como darles de probar una droga adictiva. Si la XO resulta ser una plataforma para la difusión del uso de software privativo, su efecto en el mundo será negativo.

Y además es superfluo. La OLPC ya ha inspirado otras computadoras baratas; si el objetivo es tan sólo hacer computadoras baratas, el proyecto OLPC ha tenido éxito, ya sea que se fabriquen más XOs o no. Entonces, ¿Para qué construir más XOs?. Hacer realidad la libertad sería una buena razón.

La decisión del proyecto no es final; la comunidad de software libre debe hacer todo lo posible para convencer a OLPC de continuar siendo (salvo un paquete de firmware) una fuerza por la libertad.

Parte de lo que podemos hacer es ayudar al mismísimo software libre del proyecto. OLPC esperaba que la comunidad contribuyese en el desarrollo de su interfaz, Sugar, pero esto no ha resultado totalmente. En parte porque OLPC no estructuró su desarrollo como para llegar a la comunidad en busca de ayuda -- esto significa, cuando lo vemos en terminos constructivos, que OLPC puede obtener más contribuciones si empieza a hacerlo.

Sugar es software libre, y contribuir a que avance es algo bueno. Pero no olvidemos el objetivo: las contribuciones útiles son son aquellas que mejoran Sugar sobre un sistema operativo libre. Portarlo a Windows está permitido por la licencia, pero no es una buena idea.

Estoy escribiendo estas palabras en una XO. Mientras viaje y dé charlas en las próximas semanas, la señalaré durante mis charlas para plantear esta cuestión.


Colaborando con Python

Nota

Este post no es el original, sino una migración de Wordpress a Nikola. Si no se visualiza correctamente, podés ir al original (en Wordpress) haciendo click aquí

Después de preguntar varias veces lo mismo a la gente de Python Argentina sobre cómo solucionar un bug de cualquier tipo, decidí escribir un Mini-Como sobre "¿Cómo colaborar con Python?" indicando de dónde hay que descargar el código, como se compila y demás.

Está en la primer versión recién, todavía falta terminar algunas secciones y agregar otras, pero como para tener una idea general de por dónde hay que empezar.

Link: ¿Cómo colaborar con Python?


Caso de estudio: "Dependencia Funcional"

Nota

Este post no es el original, sino una migración de Wordpress a Nikola. Si no se visualiza correctamente, podés ir al original (en Wordpress) haciendo click aquí

Hoy fui a la facultad a la materia Gestión de Datos e hicimos un ejercicio de la guía de actividades prácticas. Estamos dando el tema "Dependencia funcional y normalización". El enunciado es este:

Se desea construir una BD para gestionar la información de los electores en un censo electoral con los siguientes supuestos semánticos:

  • Un elector es identificado por su DNI (D). Todos los electores tienen DNI. Un elector tiene un nombre (N), fecha de nacimiento (F) y sexo (S)
  • Un municipio se identifica por la provincia a la que pertenece (P) y su código de municipio (C). No pueden existir dos municipios con igual código en la misma provincia.
  • Dos municipios pueden tener el mismo nombre (B) pero sólo si pertenecen a provincias diferentes
  • Una mesa está identificada por su municipio, número de distrito (T), número de sección (NS) y número de mesa (M). Los números de distrito se pueden repetir para municipios diferentes pero no dentro del mismo municipio. Igual ocurre con los números de sección respecto de los distritos y con los números de mesa respecto de las secciones.
  • Un elector está inscrito en una mesa, incluida en una sección, a su vez incluida en un distrito, que a su vez pertenece a un municipio.
  • Un elector tiene una dirección, es decir, una calle (L) y un número de calle (E).
  • Todos los electores que residen en la misma calle del mismo municipio están inscritos en la misma sección, aunque pueden estar en mesas diferentes según el número de la calle.

Se pide:

  1. Realizar un modelo de tablas que represente la BD a ser utilizada por el sistema tratando de minimizar la cantidad de tablas.
  2. Llevar el modelo anterior a la tercera forma normal (3FN).

Sinceramente yo no tenía ni idea como arrancar, esto lo dimos en la clase de teoría hace dos semanas creo y no me acordaba nada, asique agarré el libro y me puse a leer. Termino de leer la primer forma normal, comienzo a hacerlo, y la profesora explica como resolverlo. Escuho, atiendo, y me pongo a resolverlo de la forma que explicó. Me quedó así:

  • DNI(D) ->Nombre(N), Fecha de nacimiento(F), Sexo(S)
  • Calle(L), Provincia(P), Código(C) -> Número de sección(NS)
  • Provincia(P), Código(C), Calle(L), Número de calle(E), Número de sección(NS), Número de distrito(T) -> Número de mesa(M)
  • Provincia(P), Código(C) ->Nombre(B)
  • DNI(D) ->Número de sección(NS)
  • DNI(D) ->Calle(L), Número de calle(E)

Justo cuando terminamos de hacer esto, la profesora empieza a desarrollarlo en el pizarrón y agrega una dependencia funcional que nosotros no teníamos:

  • DNI(D) -> Nombre(N), Fecha de nacimiento(F), Sexo(S), Calle(L), Provincia(P), Código(C), Número de sección(NS), Número de calle(E), Número de distrito(T), Número de mesa(M), Nombre(B)

Resumiendo, el DNI determina todos los otros campos. Con los chicos que lo estaba haciendo empezamos buscar a ver si se nos había pasado un axioma en dónde podía llegar a estar dicha relación, aunque sin éxito, no la encontramos. Uno de nosotros pregunta:

  • Alumno: "¿Porqué DNI determina Provincia(P) y Código(C)? Por ejemplo"
  • Profesora: "Mmm... No sé como explicártelo, creo que se deduce del enunciado, es como en la vida, vos sabés dónde votas con tu DNI. Osea, podés saber todos los datos de tu mesa"

En ese momento, sinceramente, no podía creer lo que nos estaba diciendo: "No sé como explicártelo" y además, "Creo que se deduce del enunciado". Supongo que si hay un enunciado de un problema es para que lo respetemos y que no queden cosas que se sobre entienden, porque justamente esto es lo que trae consigo muchos problemas a la hora de interpretar algo.

Igualmente, me quedó picando y capaz que tenga razón, que se deduzca del enunciado porque existen las reglas de Armstrong con las cuales se pueden inferir en otras dependencias funcionales. Asique cuando llegué a mi casa me puse a leer éstas reglas y a ver si llegaba a la respuesta de la profesora. Estas son las reglas:

  • Reflexividad: si B es subconjunto de A, entonces A->B
  • Aumento: si A->B, entonces AC->BC
  • Transitividad: si A->B y B->C, entonces A->C

De estas tres reglas se pueden deducir otras tres más:

  • Descomposición o proyección: si A->BC, entonces A->B y A->C
  • Unión o adición: si A->B y B->C, entonces A->BC
  • Pseudo-Transitividad: A->B y DB->E, entonces AD->E

La que acabo de encontrar (es la primera vez que lo hago realmente) es esta:

  • Por Unión: DNI(D) -> Nombre(N), Fecha de nacimiento(F), Sexo(S), Calle(L), Número de calle(E), Número de sección(NS).

En ningún lado veo que exista la dependecia de Provincia(P) y Código(C) con DNI(D). Por lo tanto no entiendo de dónde está sacando que sabiendo el DNI de un persona se puede saber la Mesa(M) en cuál vota o la Provincia(P) en la cual vive. Por lo tanto el resto del ejercicio por supuesto que lo tenía todo mal hecho ya que yo trabajé sobre la base de datos del enunciado y ella trabajó sobre la de la vida misma


#1 Modulo: commands

Nota

Este post no es el original, sino una migración de Wordpress a Nikola. Si no se visualiza correctamente, podés ir al original (en Wordpress) haciendo click aquí

Para capturar la salida de un comando generalmente utilizaba el módulo subprocessde Python de esta forma:

>>> from subprocess import Popen, PIPE
>>> Popen(['date'], stdout=PIPE).stdout.read()
'mar abr 29 17:08:17 ART 2008\n'
>>>

Hoy viendo el código fuente de un programa (pydf) encontré que utilizaba el módulo commands y como no lo conocía me fijé de qué se trataba. Sirve para hacer lo mismo de una manera más sencilla y legible:

>>> import commands
>>> commands.getoutput('date')
'mar abr 29 17:04:22 ART 2008'
>>>

PD: funciona sólamente en Unix