Artículo sobre Optimización en Software

En este artículo el autor ( Shlomi Fish) discute un poco sobre optimización de algoritmos, y está orientado bastante a lo pragmático, desmitificando (o intentando derribar) algunos viejos “axiomas” de la programación. Para mí fue muy interesante la introducción de la idea de que optimizar factores constantes en la complejidad de un algoritmo también sirve; es decir, no sólo reducir órdenes de magnitud como único objetivo al optimizar, sino que también es importante hacerlo en factores. Con lo cual tiende a derribar dentro de su criterio el mito de “O(N²) es igual a O(2N²)”, por ejemplo. ...

February 19, 2009 · 1 min · mfernandez

QT será licenciado como LGPL

Creo que es la mejor noticia de los últimos (¿años?) con respecto al mundo del software libre en el escritorio: las bibliotecas de desarrollo QT, en su versión desktop y embedded, piedra fundamental de todo el entorno de escritorio KDE (y de muchísimas aplicaciones más), se distribuirá con licencia LGPL, a partir de su versión 4.5. Ahora los programadores seremos libres de desarrollar aplicaciones cerradas (“comerciales”) o no con QT, tanto para móviles/smartphones ( Windows CE, S60) y/o dispositivos varios como para el escritorio (Windows, Linux, Mac, y más). No todos podíamos pagar la licencia comercial de QT (no lo dice, pero era muy salada, por asiento y en euros), y nos perdíamos de usar una de las mejores bibliotecas de desarrollo de su tipo en existencia. ...

January 14, 2009 · 2 min · mfernandez

Nvidia CUDA

Estoy leyendo un artículo de la última Linux Journal, referido a la tecnología CUDA, que sacó hace un tiempito nomás NVidia. Básicamente se trata de una plataforma de software (compilador + libs + soporte en hardware) para que cualquier programador pueda acceder al enorme poder de cálculo que tienen las tarjetas gráficas actuales, que es mucho mayor que las CPUs que se utilizan todos los días; se comenta que la mejora de performance es de ¡uno a dos órdenes de magnitud como regla general! ...

October 24, 2008 · 3 min · mfernandez

Cómo Conectarse a Oracle desde Python en Ubuntu

Luego de luchar (y bastante) para acceder a una BD Oracle desde Python, me propuse escribir los pasos a realizar así quedan para la posteridad. Tengo entendido que el único driver que funciona bien para conectarse es el cx_Oracle, así que voy a tratar de explicar cómo se instala todo desde el comienzo, usando Ubuntu Hardy 8.04. Actualización: este método aún sirve sobre Ubuntu Lucid 10.04 y cx_Oracle 5.03. 1. Instalación del Oracle InstantClient Primero, hay que descargar el Oracle InstantClient para la plataforma Linux que se utilice (x86, x86_64, Power, Itanium, etc.) desde acá (es necesario registrarse, pero es gratuito). Los paquetes necesarios son “Instant Client Package - Basic Lite” y “Instant Client Package - SDK”. cx_Oracle debería funcionar con cualquiera de las versiones 9.x y 10.x, así que vamos a bajar la última versión de la serie 10.x (que en este momento es la 10.2.0.4). ...

October 21, 2008 · 7 min · mfernandez

Taller de Python en la UNLu

Hola! Les cuento de que tuve el honor de que la gente del CODES (Centro Organizado de Estudiantes de Sistemas de la Universidad Nacional de Luján) más la del UnluX (del cual soy parte), me invitó a llevar adelante un taller de programación Python para los alumnos de los primeros años de sistemas de dicha Universidad. Como no tuve tiempo de armar ninguna presentación como para tener de “apunte”, le pedí a Facundo Batista el permiso para utilizar las que él armó para las 7JRSL de Córdoba. Creo que sólo le modifiqué la primera página y el fondo, sin embargo, acá están para descargar. ...

September 9, 2007 · 2 min · mfernandez

Administrador SQLite - SQLiteman

Buenas… hace algún tiempo comenzamos a utilizar en desarrollos en estado “inicial” Bases de Datos SQLite… ya sea porque Python tiene mucha facilidad para crear y laburar con este tipo de BD, porque nos parece rápida y de sencilla administración, y porque para hacer pruebas… es bárbara. En fin, con SQLite, creás tu BD en un toque y te ponés a laburar. El tema es que si bien uno tiene siempre a mano el administrador de línea de comandos (“sqlite3”) para hacer querys, ver la descripción de alguna que otra tabla, etc., muchas otras veces (más que nada cuando quiero hacer querys complejos, como joins de varias tablas) siento la falta de algún administrador SQLite pero en formato GUI…. un montón de veces busqué y nunca encontré nada que me gustara. ...

September 9, 2007 · 2 min · mfernandez

Metaprogramación en Python

Python está bárbaro, es sencillo y todo… siempre leí que era muy fácil hacer metaprogramming con él, pero el problema es que uno haga metaprogramming de una forma fácil en su mente. :-P Veamos, la función getattr(), disponible en el módulo __builtins__ (o sea, disponible en todo momento), me permite cambiar esto: def get_transportistas_custodia(id_custodia): """ Devuelvo todos los transportistas que están relacionados con una custodia """ c = Custodia.objects.get(id=1) # Necesito el conjunto de transportistas de la custodia return c.transportistacustodia_set.all() def get_asegurados_custodia(id_custodia): """ Devuelvo todos los asegurados que están relacionados con una custodia """ ... (lo malo es que tengo que hacer una función por cada tipo de empresa relacionada con custodia). ...

August 4, 2007 · 3 min · mfernandez

Chusmeando SQLObject - Parte II

Continuando el post de ayer, otra desventaja del sistema de persistencia de Django es que no soporta atributos en relaciones “Muchos a Muchos”. Un caso podría ser Usuario <–> Rol, donde un Usuario puede tener varios Roles y a su vez un Rol ser referenciado por varios usuarios; además, necesito almacenar si alguna combinación usuario<->rol está activa o no. El atributo booleano “activo” sería una propiedad por cada Usuario<->Rol en particular, y esto es lo que no soporta Django con su ManyToManyField. ...

July 11, 2007 · 2 min · mfernandez

Chusmeando SQLObject - Parte I

Aprovechando que el ORM en Python es noticia (ya que Canonical liberó Storm)… comento un par de desventajas del framework para acceder a BDs desde Django y cómo las soluciona SQLObject (específicamente no lo usé, pero estuve leyendo algo…) Al momento de laburar con Django y la forma en que maneja la BD (definición de los modelos) nos encontramos dos limitaciones graves: No soporte de herencia entre tablas. Es decir, si yo desde mi “mundo real” tengo que representar: class Transporte(): modelo = '' largo = '' ancho = '' patente = '' class Auto(Vehiculo): tiene_baul = '' class Camion(Vehiculo): tiene_semi = '' No puedo representar esto en Django, ya que no soporta herencia. Por lo tanto, se puede “simular” la herencia usando relaciones “uno a uno” o copiando y pegando. Con la primera opción caímos en varios problemas, así que tuvimos que “copiar y pegar” las propiedades que deberían haber sido heredadas. ...

July 10, 2007 · 3 min · mfernandez

Esto es groso... Banshee Media Server

Después de entrar en esta página, sobre un servidor web de música, dije “es medio pobre, le falta algo de diseño…pero… funcionará?” Andá bárbaro!!! Pruébenlo. Me imagino que no es el primero en existir, pero sinceramente me sorprendió el equipo de Banshee (un reproductor de música desarrollado en Mono). Claro que está en desarrollo, pero parece que pronto reemplazo al Amarok (esperemos, pero si no tiene Crossfading no me cambio nada eh!). En este post hay más detalles al respecto (el sonido viene por un plugin Flash y es controlado con Javascript). ...

July 1, 2007 · 1 min · mfernandez