martes, 29 de septiembre de 2009

Error inaceptable en Windows Vista Home Premium Edition

Ultimamente estoy usando 80% Ubuntu, 20% Windows por lo que para mi es importante tener los dos S.O. operativos y actualizados. No soy un talibán ni nada por el estilo y puedo reconocer ventajas y desventajas en ambos. Por estos días actualicé mi Ubuntu de 8.04 a 8.10 y todavía estoy teniendo problemas con el Gestor de Paquetes Synaptic y el Gestor de Actualizaciones por lo que no puedo decir que en mi Ubuntu sean todas buenas pero la verdad es que todavía estoy indignado por la causa del error que me hizo perder su buen tiempo en Windows.
La historia empieza cuando bajé una colección de prueba para indexar en el software Lemur, que estoy usando por estos días para Information Retrieval, y accidentalmente descomprimí los 3000 documentos de esta colección sobre el Escritorio de mi Windows Vista, sin darme cuenta, pensando que el Winrar generaría una carpeta para descomprimirlos. Pero no, resulta que deperdigó por todo mi escritorio sus hermosos html. En el momento noté que la máquina empezó a (la vieja y conocida frase) "andar mas lenta" pero le resté importancia. El tema es que cuando intenté reiniciar, mi Windows era una carreta y no terminaba nunca de cargar el escritorio viendose todo negro y sin barra de inicio.
Sintesis y Solución: Parece que la basta cantidad de documentos sobrecargó mi escritorio (si, parece un chiste, pero no lo es!) y ya no podía cargarse. La solución fue iniciar desde mi Ubuntu, borrar los 3000 documentos de la colección y por las dudas Restaurar el Sistema a una fecha anterior al "accidente". De ahí que no tuve mas problemas pero sinceramente es algo que quería compartir con ustedes, especialmente los linuxeros que se deben estar matando de risa con esto...

Hasta la próxima!

lunes, 28 de septiembre de 2009

Error Python: 'module' object has no attribute 'AF_INET' en socket.py

Como conté antes, estoy aprendiendo Python para una materia de la Universidad y , la verdad que en general, creo que me voy enamorando de algunas de las ya conocidas bondades del lenguaje pero tiene sus secretillos, como todas las demás... :)
La historia empieza cuando quise correr el típico ejemplo de sockets en Python al que llamé, obviamente, socket.py.
El ejemplo es un pequeño cliente/servidor orientado a la conexión que hace una implementación del protocolo echo donde el servidor le replica al cliente un mensajito enviado por este:

#Código correspondiente al servidor
#==================================
import socket

host = 'XXX.XXX.X.X'  # IP o Hostname donde escucha
port = 3500   # Puerto de escucha, se recomienda un efímero
bytes = 1024   # Cantidad maxima de bytes a aceptar

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.bind((host,port)) # Indicamos al socket la direccion IP y Port de escucha
while 1:
    client, address = s.accept()  # Acepta las conexiones   
    data = client.recv(bytes)  # Se obtienen los datos desde el sock cliente 
    print "Conexion desde: %s:%i" %(address[0],address[1])
    if data:
        client.send(data)   # Enviamos el echo al cliente 
    client.close()     # Cerramos el sock cliente



#Código correspondiente al cliente
#=================================
import socket

host = 'XXX.XXX.X.XXX'
port = 3500
bytes = 1024

s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
s.connect((host,port))
s.send('Datos a enviar')
data = s.recv(bytes)
s.close()
print 'Echo de los datos enviados: ', data 


Este codigo no es mio ni mucho menos y se puede encontrar en cualquier rincón de la web que trate de sockets pero la anecdota es que cuando fui a hacer el "python socket.py" para correr el servidor me dió el siguiente error:

Traceback (most recent call last):
  File "socket.py", line 7, in 
    import socket
  File "/home/juan/Escritorio/Python/TP3/ejercicio1/socket.py", line 15, in 
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
AttributeError: 'module' object has no attribute 'AF_INET'
Error in sys.excepthook:
Traceback (most recent call last):
  File "/usr/lib/python2.5/site-packages/apport_python_hook.py", line 38, in apport_excepthook
    from apport.packaging_impl import impl as packaging
  File "/usr/lib/python2.5/site-packages/apport/__init__.py", line 1, in 
    from apport.report import Report
  File "/usr/lib/python2.5/site-packages/apport/report.py", line 14, in 
    import subprocess, tempfile, os.path, urllib, re, pwd, grp, os, sys
  File "/usr/lib/python2.5/urllib.py", line 26, in 
    import socket
  File "/home/juan/Escritorio/Python/TP3/ejercicio1/socket.py", line 15, in 
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
AttributeError: 'module' object has no attribute 'AF_INET'

Original exception was:
Traceback (most recent call last):
  File "socket.py", line 7, in 
    import socket
  File "/home/juan/Escritorio/Python/TP3/ejercicio1/socket.py", line 15, in 
    s = socket.socket(socket.AF_INET, socket.SOCK_STREAM)
AttributeError: 'module' object has no attribute 'AF_INET'

El tema es que busqué y busqué y no había forma de darme cuenta cual era el error, hasta q se me ocurrio cambiarle el nombre a socket.py por client_echo.py y... Bingo!
No soy muy apto tecnicamente para hablar de Python pero parece que el import socket importaba el script server pegado mas arriba y no el módulo socket original que tiene todas las definiciones de clase y funciones.
En fín, era para comentarles una de esas cosas que nos pueden tener renegando un buen rato con el objetivo de que ustedes se ahorren su rato haciendo uso del mio. :)

Hasta la próxima!

martes, 22 de septiembre de 2009

Hablando en Python

Por este tiempo estoy cursando la asignatura "Taller Libre II: Programación de Red". Esta asignatura propone la programación en python de protocolos de aplicación TCP/IP. Esto nos topa con dos desafíos:
  1. Implementar los protocolos estudiados teoricamente en el curso de Redes. 
  2. y aprender Python... pasemos a hablar del lenguaje. 
Realmente, conocía muy poco de Python, una de las cosas que mas me sorprendió es su simplicidad y la cantidad de módulos que extienden el lenguaje y que nos ayudan con diversas tareas. Con el poco conocimiento que tengo, ya me animaría a decir que no debe haber .py de complejidad considerable que no tenga un import. Ahora veamos, a modo de ejemplo, lo simple que puede ser en python crear un pequeño cliente POP3 que liste, borre y devuelva mails de una cuenta de correo:

#-*- coding: utf8 -*-
import poplib

#Servidor POP3
pop = poplib.POP3('pop3.servidor.com')

#Datos de teclado
user = raw_input("Usuario: ")
password = raw_input("Pasword: ")

#Autenticacion
pop.user(user)
pop.pass_(password)

#Menu ultra primitivo
print "1- Listar Mensajes"
print "2- Recuperar Mensaje"
print "3- Borrar Mensaje"
opcion = int(raw_input("Opcion -Salir con Otra Tecla-: "))

if opcion == 1:
 mensajes = pop.list()[1]
 print mensajes
elif opcion == 2:
 nro_msj = raw_input("Numero de mensaje a recuperar: ")
 print "Mensaje N°" + nro_msj
 print pop.retr(nro_msj);
elif opcion == 3:
 nro_msj = raw_input("Numero de mensaje a borrar: ")
 print pop.dele(nro_msj);
 print "Se ha borrado el mensaje N°" + nro_msj

pop.quit();

Me sorprende sobremanera el nivel de abstracción al que se ha llegado. Esto lo dice alguien que balbucea inglés, pero se observa a simple vista que Python es tan claro que se acerca muchisimo a ser un pseudo-código de los que aprendimos en las asignaturas introductorias a la programación y esto realmente ayuda sobre todo a leer code ajeno.

Por ahora, hasta acá llegamos con Python pero prometo mas posts a medida que vaya investigando.

Hasta la próxima!

Resaltar Código en Blogger

La primer entrada referida al tema que nos convoca que pensé en publicar era un ejemplo de sockets en Python, que es el lenguaje que (junto con Perl) estoy usando por estos días. Pero me encontré con un problema, en realidad con una necesidad, la de resaltar el código para que quede mas "lindo" y legible. Empecé a buscar "resaltar códido en blogger", "python blogger", etc, etc y llegué a Syntax Highlighter.
Es un "resaltador de código" desarrollado integramente en JavaScript muy versatil y completo.


Tenemos varias formas de utilizarlo en nuestra web/blog pero la mas simple que encontré es la que publicó en su blog Alejandro Sanchez de Venezuela.

Ahi va un ejemplo de un código PHP que use para un proyecto (parser de noticias) resaltado con Syntax Highlighter:

function parser_perfil() {
  include_once "/htdocs/ej/librerias/simplepie.inc";
  $urlfeed = "http://www.perfil.com/";
  $vfeed = new SimplePie();
  $vfeed->set_feed_url($urlfeed);
  $vfeed->init();
  $vfeed->handle_content_type();
  $vmax = $vfeed->get_item_quantity();
  $noticias = "";
  for ($x = 0; $x < 3; $x++) { 
   $vitem = $vfeed->get_item($x);
   #$noticias .= $vfeed->get_title();
   }
  return $noticias;
  }

lunes, 21 de septiembre de 2009

Mi primer post!

Nada mas trillado que el saludo del primer post, el voy a escribir de esto, me interesa lo otro, soy soltero/viudo/casado y todo lo demás...
Con tanta gente inteligente que hace esto, no veo el motivo de que sea yo quien rompa con esta regla.
Empezando... Estudio Licenciatura en Sistemas de Información en la Universidad Nacional de Luján y actualmente me quedan 4 materias + Trabajo Final para egresar (esperemos que sea pronto).
Cuando me decidi a crear el blog creo que fui motivado a aportar eso que googleando, yahooando, bingeando no pude encontrar y luego resolví solo (son los menos) o no (son los mas).
Por estas horas lo que mas me atrapa y roba horas de sueño es la programación así que...
Allá vamos...