The New Cult of Dead Cow

December 6, 2006






Leer un archivo en python

Filed under: Python

Y la pregunta del dia es :
  

¿ Quiero leer un fichero de texto en python, como le puedo hacer ?

Y lo logico, seria mandar al tio a google, pero como que amaneci de buen humor.

file = open(’archivo.txt’,'r’)
for linea in file.readlines():

    print linea

De ahi lo que quieras hacer con cada linea es cosa tuya. ;)

December 4, 2006






Generador de Claves Aleatorio

Filed under: Programacion, Linux, Python

Hoy tuvimos q dar de alta en la empresa a 1000 nuevos usuarios, el unico problema … la claves .
Ya antes en otro sitio habia cometido el descuido de ponerles un codigo de matricula y eso era rapidamente vulnerable. Claro que antes no era vital la seguridad.

Y aunque ahora tampoco lo es, si puede resultar fastidioso tener ese tipo de problemas.

La idea es construir un generador de claves aleatorias en python. Lo que haremos sera leer un diccionario de palabras y tomar una al azar, generar un numero de tambien aleatorio de dos digitos e incluirlo dentro de la palabra en un posicion aleatoria.

Para asegurarnos que la clave no sea tan sencilla, tambien validaremos que tenga cierta longitud minina. Y como no quiero q mi usuarios se quejen q no recuerdan su clave, haremos que tengan cierta longitud maxima.

#!/usr/bin/python

######################################
##
## Generador de Claves Aleatorias
## a partir de un listado de usuarios
##
######################################

import random

f = open(”/usr/share/dict/spanish”)
lineas = f.readlines()
clave = “”

while ( len(clave) < = 5 or len(clave) >= 9):
clave = lineas[random.randint(len(lineas))]

lonclave = len(clave)

indice = random.randint(2,lonclave-2)
aux = random.randint(10,99)
print clave
clave2 = clave[indice:] # A partir de indice … hacia delante
clave1 = clave[:indice] # Desde el principio hasta indice
clave = clave1 + str(aux) + clave2
print clave

July 13, 2006






Bases de Datos …

Todos los que estamos involucrados en el mundo del desarrollo del software hemos alguna vez tenido que utilizar el popular SQL, ya sea con bases de datos propietarias ( Oracle, MSSQL ), cacharros que se dicen base de datos personales ( MSAccess ), o bases de datos libres ( Mysql, Postgresql, etc).

El SQL (Structured Query Language) es un lenguaje que permite acceder a los contenidos de los DBMs (Data Base Managers).

En la epoca del popular C y del pascal, esto no era mayor problema. Sin embargo, hoy la mayoria de aplicaciones se construyen utilizando el paradigma orientado a objetos, las cuales al querer interrelacionarse con sistemas de base de datos relacionales degeneran en sistemas ineficientes cuando menos.

Este cambio de paradigma al desarrollar la aplicacion, trae varios incovenientes:

  • Mayores costos de capacitación, ya que los desarrolladores deben manejar correctamente ambos paradigmas y ser capaces de cambiar rapidamente de un modo de pensar al otro.
  • Mayores costos de desarrollo, ya que el simple hecho de mapeo entre obtejos y tablas relacionales llega a representar una gran parte del costo del proyecto. De esto se puede dar fe en casi cada proyecto web desarrollado con PHP5.
  • Problemas de Rendimiento, desde ya el simple hecho de convertir objetos a relacional conlleva ejecución de lineas de codigo extra. Este simple hecho ya implica una sobrecarga en el sistema.
  • Mayor costo de Mantenimiento, esto se debe a que un simple cambio en la logica del programa conlleva cambios tambien en el modelo de base de datos, y viceversa.

Desde hace ya algun tiempo, vengo buscando nuevas posibilidades en los sistemas de base de datos.
Una opción que me jora el entendimiento de los desarrolladores en su modelo de base de datos, es un software que realize automaticamente el mapping entre el modelo de objetos y el modelo relacional. Esto sin embargo conlleva la ejecución de codigo extra lo cual no beneficia en nada al rendimiento. Es más, no siempre genera un codigo mas limpio.
En esta opcion de mapeadores de objeto/relacional, existen 2 categorias:
  • De objetos a Tablas, estos permiten escribir un codigo muy sencillo y elegante, sin embargo no se le considera un codigo muy eficiente.
  • De Tablas a Objetos, estos utilizan un codigo que pareciera poco elegante, y a la vez arbitrario, sin  embargo, son los preferidos por los administradores de base de datos por su eficiencia.

Estas son las opciones de cara a seguir utilizando una base de datos relacional. La otra opción es cambiar a una base de datos Orientada a Objetos. En la actualidad existen pocos motores de Base de Datos Orientados a Objetos. En particular yo conozco solo dos:
  • db4o : Base de datos totalmente orientada a objetos. Funciona bajo java y mono.
  • ZODB : Base de datos desarrollada para la plataforma Zope de python. Totalmente orientada a objetos.
Una de las ventajas que más me gusta de usar bases de datos orientadas a objetos, es que ya no tengo q aprender otro lenguaje más (SQL). El modelo de la base de datos, se maneja de la misma manera en que se maneja la logica del resto de la aplicación.

Ejemplo de db4o

March 11, 2006






Glade-3

Filed under: Programacion, Linux, Mono, Python

La nueva version de Glade, aún en fase de desarrollo, incluye numerosas mejoras. Las principales a nivel de nucleo de la aplicación, aunque no por eso han descuidado la interfaz la cual incluye numerosas mejoras ( me confieso en lo particular devoto de la interfaz de gazpacho, pero como he tenido problemas de compatibilidad con este ultimo y python me he visto en la necesidad de volver a glade ), como son:

  • Se pueden abrir varios proyectos a la vez, en la misma ventana.
  • El manejo de controles en la paleta a cambiado a un combo para la seleccion de categorias, esto es particularmente util si tenemos en cuenta q en glade3 sera posible incorporar librerias con controles de terceros :D .
  • El manejo de las señales de los objetos, ha sido rediseñado. La nueva interfaz nos provee de una mayor facilidad de uso asi como de nuevas opciones, como son los datos de usuario entre otras.
  • La vista de arbol de los widgets, esta incorporada en la interfaz principal de la aplicacion, lo cual nos reduce el numero de ventanas abiertas.
  • La opcion de deshacer, incopora varios niveles acciones.
  • Ya no se encuentra la opcion de generar codigo C.
  • La implementacion de las ventanas de desarrollo, esta hecho de tal manera que permite ser incrustadas en otros entornos de desarrollo, MonoDevelop por ejemplo ?? .

Para los impacientes que desen probarlo, el codigo lo pueden descargar y las instrucciones para la compilacion son las universales :

      tar -xzf glade-3-2.90.0.tar.gz
      cd glade-3-2.90.0
      ./configure
      make
      sudo make install



March 5, 2006






Python y Glade

Filed under: Programacion, Python

Aca les dejo un pequeño tutorial sobre el uso de glade con python.

Para poder utilizar las librerias de glade, debemos tener los siguientes imports:

import pygtk
pygtk.require(’2.0′)
import gtk
import gtk.glade

Como primero paso, debemos crear un objeto glade.XML,

# Aca nos crea y muestra todas las ventanas, menus y otros objetos que estuvieran
# contenidos dentro del archivo XML
self.xml = gtk.glade.XML(’glade.glade’)

# Aca solo nos crea y muestra la ventana llamada window1, la cual debe de
# estar contenida dentro del archivo XML
self.xml = gtk.glade.XML(’glade.glade’,'window1′)


Una vez creado el objeto XML, el siguiente paso es conectar las señales con los metodos de nuestra clase. La forma mas sencilla de hacer esto, es dentro del glade definir las señales a escuchar y los metodos que se ejecutaran, y en nuestro codigo inmediatamente haber creado el objeto XML, le indicamos que conecte esas señales con nuestros metodos.

self.xml.signal_autoconnect(self)

El script arrojara error, si hemos definido alguna señal dentro del glade, para la la cual no exista una funcion en nuestro script.

Ahora, podemos ya ejecutar nuestro script el cual debera funcionar medianamente bien, sin embargo no somos capaces todavia de interactuar con los controles de nuestra ventana. Para poder hacer esto, debemos “declararlos”:

self.window = self.xml.get_widget(’window1′)
self.button1 = self.xml.get_widget(’button1′)

Una vez, hecho esto ya podemos usar los metodos y propiedades del control button, por ejemplo.






















Get free blog up and running in minutes with Blogsome
Theme designed by B A Khan