lunes, septiembre 12, 2005

Compiladores e interpretes


El tema surgió con una discusión amigable con Hector. Según el:
  • Un compilador traducía de un lenguaje a otro.
  • Un interprete ejecutaba con sólo una pasada (el código)

Según yo:
  • El compilador traducía, pero de un lenguaje a lenguaje maquina.
  • El interprete no tiene porque dar una sola pasada.
Mirando en la wikipedia las definiciones de compilador e interprete (o las mas completas de la edición inglesa: compiler y interpreter), la cosa no queda clara. Se inclinaba mas a lo que decía Hector; pero esas definiciones tienen contradicciones.
Por lo tanto decidimos tomar como referencia lo de la asignatura que tuvimos en cuarto de carrera de Ingeniería Informática, Procesadores del Lenguaje. Según un cuaderno técnico que yo tenía(Conceptos básicos de traductores, compiladores e interpretes. Juan Manuel Cueva Lovelle. 3ª Edición, Octubre 1992. Cuadernos Didácticos de la Universidad de Oviedo.):

  • Traductor: programa que procesa un texto fuente y genera un texto objeto. El traductor está escrito en un lenguaje de implementación (LI). El texto fuente esta escrito en un lenguaje fuente (LF). El texto objeto está escrito en un lenguaje objeto (LO).

  • Ensamblador: Traductor cuyo LF es el lenguaje ‘ensamblador’ y el LO es el ‘lenguaje maquina’.

  • Compilador: Traductor que transforma textos fuente de lenguajes de alto nivel a lenguaje maquina o a lenguaje ensamblador.

  • Interprete: Traduce el texto fuente simultáneamente a su ejecución, coexistiendo en memoria el programa fuente y el programa intérprete. La compilación ocurre en tiempo de ejecución.


Según uno de Hector (Una Edición posterior: Conceptos básicos de traductores, compiladores e interpretes. Juan Manuel Cueva Lovelle. 4ª Edición, Diciembre 1994. Cuadernos Didácticos de la Universidad de Oviedo):

  • Compilador (Página 10): Traductor que transforma textos fuente de lenguajes de alto nivel a lenguajes de bajo nivel.

Según estas definiciones en lo del interprete yo tenía razón, y en lo del compilador, realmente ni él ni yo (exactamente).
Han publicado un tutorial sobre Python 2.4 en Español.

domingo, septiembre 11, 2005

Esta vez va de HW

Desde que quise tener un reproductor de MP3 de los pequeñitos (descartamos tipo ipod y rivales, con HD y mas pesados), mis requisitos siempre fueron, el tener radio FM y poder grabar de la radio.
Ahora mismo ya voy por mi segundo reproductor. Con esta experiencia añadiria los siguientes requisitos: al menos 512 MB, USB 2.0, bateria de litio.

Tras tener un primer reproductor con baterias AAA, decidí que el segundo fuera con batería interna de litio, ya que lo de andar recargando las baterias AAA, se me hacía un poco coñazo.
Otro de los motivos que motivaron el cambio fue el que cuando quería grabar de la radio (directamente a MP3) las baterías se fundian. Vamos el cacharrito se las merendaba a una velocidad...


A diferencia del primero el segundo graba en formato WAV. Esto tiene la pega de que las canciones no estan comprimidas (si usas encoding PCM).

Aparte de esto el primero tenia un problema de usabilidad con la radio, y es que no guardaba tras apagarlo la emisora que habias estado escuchando por ultima vez, ni podias tener sintonias grabadas (presintonias). Eso si, la usabilidad del aparato es mejor que la del segundo.

Aparte de mi reproductor MP3 he podido probar otro de características similares. En ambos ocurren un par de cosas que no me gustan nada nada:

  • Al conectar el reproductor al cable USB del ordenador, no puedes usarlo. Vamos que no lo puedes estar cargando a la vez que lo usas (si lo conectas a AC tampoco).
  • No te indica cuando se ha terminado de cargar la bateria.
A la hora de comprar uno de estos aparatitos me he encontrado con un problema, y es que cuando estas en las tiendas mirando las características que suelen, estas son muy genéricas (e incluso pueden estar equivocadas), con lo cual lo mejor una visto un modelo, lo mejor sería mirar la caja. Pero ni con esas... en la caja los fabricantes tampoco te dan toda la información necesaria. Un paso mas sería mirar el manual del reproductor, o mejor aun probarlo.

En fin, tras mi experiencia puedo concluir que para comprar uno de estos cacharritos, lo mejor es probarlo con manual en mano. La proxima vez que vaya a cambiar esta será mi premisa. El establecimiento me deberá dejar. O bien compraré algo que sepa que está bien a ciencia cierta.

Bueno, para acabar los modelos que han paso por mis manos han sido:

  • DENVER mp-111 (128 Mb): El primerito.
    • Muy buena usabilidad.
    • Baterias AAA. No incluidas.
    • USB 1.1
    • Grabación directa a MP3.
    • Buena documentación

  • MxOnda mx-mp5794fm (512 Mb). El mio.
    • Mala usabilidad.
    • Bateria interna de litio. Carga a USB y AC.
    • USB 2.0.
    • Grabación a WAV (32 Khz). Aparte del encoding a PCM soporta otros, que comprimen, pero la calidad es peor.
    • Calidad de la documentación intermedia.
    • No tiene mucha facilidad para usar la radio sin ser en modo de presintonias. Pero hay truquis (El pero es que en el modo search no puedes cambiar el volumen. Vamos que esta mas pensado para presintonias. Una forma facil de solventar esto es usar una presintonia para tener en ella la emisora que quieras y lo vas cambiando.)
    • Pantalla a color

  • RIMAX USBeat 323 (512 Mb). Otro que he probado.
    • Usabilidad intermedia.
    • Bateria interna de Litio. Carga a USB y adaptador para AC.
    • No se que version de USB tiene.
    • Grabación a WAV (32 Khz).
    • Documentación poble.
    • No trae para colgarlo. ¡Hay que ser cutre!
    • La radio muy buena usabilidad (busqueda manual, automatica y presiontonias)), pero la calidad de sintonia, me pareció peor que con los otros modelos.




Mediamark


La verdad es que en mediamark a veces tienen unos precios...
  • Un HD TrekStor externo (USB 2.0) de 200 GB por 99 euros.
  • Un reproductor MP3/FM de 512 Mb y batería de litio por 69 leuros (Inovix IMP 36 512). Eso si, no se si graba voz.
  • Y ya la caña, un reproductor de DVD por 29 leuros (soportando DIV-X)
Lo que si que es cierto, es que por ejemplo en Salamanca (las ofertas anteriores) las ofertas son diferentes que en Madrid. De hecho son mejores.

miércoles, septiembre 07, 2005

Optimizaciones en python


Me han pasado hoy un extracto del libro 'Python in a Nutshell', sobre optimizaciones.
Hay sobre todo dos que son muy interesantes:

Expandiendo Listas
Es posible mejorar el rendimiento si sabemos a priori el tamaño que va a alcanzar la lista, reservando el espacio de la siguiente manera, result=[None]*N. Posteriormente accederemos a cada posición con el operador [].

Expandiendo Cadenas
La idea es en lugar de hacer appends, ir metiendo los elementos en una lista y luego pasarlos a la cadena.

big_string = ''.join(temp_list)

Indican también otra forma O(N) de crear cadenas concatenando las piezas a una instancia de un array.array('c'), o escribiendo las piezas a una instancia de cStringIO.StringIO.

Otra optimización, pero menos importante es hacer uso del operador %. Ejemplo:

oneway = str(x)+' eggs and '+str(y)+' slices of '+k+' ham'
another = '%s eggs and %s slices of %s ham' % (x, y, k)

Pruebas
He estado haciendo unas pruebas sobre las difefentes formas de concatenar cadenas:



from time import time
tini = time()

#----- 0.016
#s = ''
#for i in range(10000):
# s += ' '
#----- 0.006
#l = []
#for i in range(10000):
# l.append(' ')
#s = ''.join(l)
#----- 0.004
#l = [None] * 10000
#for i in range(10000):
# l[i] = ' '
#s = ''.join(l)
#----- 0.007
#import array
#a = array.array('c')
#for i in range(10000):
# a.append(' ')
#s = str(a)
#----- 0.008
#import cStringIO
#io = cStringIO.StringIO()
#for i in range(10000):
# io.write(' ')
#io.seek(0)
#s = io.read()
#----- 0.021
#x = "1"
#y = "2"
#k = "3"
#for i in range(10000):
# oneway = str(x)+' eggs and '+str(y)+' slices of '+k+' ham'
#----- 0.011
#x = "1"
#y = "2"
#k = "3"
#for i in range(10000):
# another = '%s eggs and %s slices of %s ham' % (x, y, k)
#-----

tfin = time()

print (tfin - tini)





Esta aplicación parece ser interesante: VLC - the cross-platform media player and streaming server.

martes, septiembre 06, 2005

Unas noticias de barrapunto:

Y de SlashDot:

domingo, septiembre 04, 2005

La coctelera


Mirando un blog he estado echando un vistazo al sitio de publicación La coctelera. Estas son mis observaciones.
A favor:
  • Esta muy bien el que puedas buscar. Cosa que blogger ahora mismo no tiene.
  • Puedes meter categorías.
  • Se puede cambiar la apariencia
  • Pueden contactar contigo anónimamente
  • Te puedes sindicar
  • Puedes tener una seccion de enlaces
  • Puedes subir archivos de hasta un mega.

En contra:

  • No puedes desactivar los comentarios
  • No se el espacio que te dan
  • No puedes cambiar el sitio de publicación (ni puedes publicar por ftp a un site diferente de los 2 que ellos te ofrecen)

Concluyendo: Una muy buena alternativa a blogger, aunque sería deseable mas flexibilidad en el formato.

Y es que me estoy planteando migrar de blogger, ya ahora no puedo buscar en mis entradas, y para mi es fundamental. No se si será un cambio temporal o definitivo....

gmail


Son la caña los tios de google. Como no, tienes una opción de bajarte todos los archivos adjuntos a un documento, ¿pues no van los tios y ya te crean un zip?

lunes, agosto 29, 2005

Un link interesante sobre matemáticas, MathWorld.
Una noticia de barrapunto y un post de mi interés:

Este finde hablando con JJ, me comentó sobre POJO. Un par de links relacionados:

miércoles, agosto 24, 2005

Hoy hay un par de noticias sobre google e IM:
Habrá que probarlo.

martes, agosto 23, 2005

Inclusión mutua de módulos en python



Pensando en un desarrollo que voy a iniciar, me dí cuenta que podía tener una inclusión mutua de módulos, y como no tenía claro como se comporta python, decidí probarlo con:


# A.py
from B import B

class R:
def __str__(self):
return "hello world"

if (__name__ == "__main__"):
b = B()
b.r = R()
print "b: ",b



from A import R
class B:

def __init__(self):
self.r = R()

def __str__(self):
s = str(self.r)
return s


Dándome el error que comento en este post [comp.lang.python].
El post lo puse cuando no había encontrado nada sobre el problema, luego buscando mas correctamente me encontré un post en los grupos. De hecho hay varios, buscando por 'mutual'
Y una entrada en la faq de python.
En una respuesta del post me pasaron este link.

Y volviendo al problema...

Al ser python un lenguaje interpretado, es muy posible que realmente no sea necesario hacer el import (como va a ser mi caso). El tipo del objeto definido en 'A' y que usará 'B', se determinará en tiempo de ejecución. Una mente acostumbrada a lenguajes compilados, como la mía, no cayó en esto.

De todas formas, siempre estaría la solución de refactorizar el código (la que mas me gusta personalmente), o bien hacer el import dentro de un método o función (lo he probado y funciona).

Para acabar, muestro el código final, sin necesidad del import:


# A.py
from B import B

class R:
def __str__(self):
return "hello world"

if (__name__ == "__main__"):
b = B()
b.r = R()
print "b: ",b




# B.py
class B:

def __init__(self):
self.r = None

def __str__(self):
s = str(self.r)
return s

lunes, agosto 22, 2005

Me pasa Hector un link sobre como acelerar eMule.

Un par de noticias de barrapunto:

viernes, agosto 19, 2005

Sobre pythfilter.py

Hace ya tiempo comenté ([1],[2])sobre este filtro python para convertir código python a esqueletos en C++. La utilidad del mismo es para luego poder usar doxygen.

Lo estoy echando un vistazo con mas detalle, y seguramente le meta mano, para poder incluir en la documentación los atributos de las clases.

De momento quería añadir unos detalles:

  • La opción -f se usa para filtrar simplemente un fichero. El uso normal será usarlo con dos argumentos, el directorio origen y el destino. Usándolo de este modo, el mismo se invoca recursivamente con la opción -f, con lo cual es necesario que python este en el path.
  • Si posteriormente queremos usar doxygen, los diagramas de colaboración estarán incompletos, por no tener los miembros generados
  • Con los diagramas de herencia cuando heredemos de clases que no estén en nuestro paquete, tampoco saldrán, a no ser que hagamos que doxygen sea capaz de localizar sus esqueletos de C++. Con clases internas de python, como no se necesita hacer imports, habrá que hacer algún tipo de procesamiento, para incluir en los ficheros que nos interesen una referencia a algún fichero en el cual tengamos las declaraciones que nos interesen.
Pythfilter usa el modulo tokenizer. En esta página hay un par de ejemplos majos.
Contenidos Web 2.0 en Español [barrapunto.com]

jueves, agosto 18, 2005

martes, agosto 16, 2005

Python, xml y unicode


Sobre este tema hace unos dias puse un par de links. Ya he tenido tiempo de leerlos y son recomendables.

De el Python Unicode Tutorial esta interesante el ejemplo de recoder de latin-1 a utf-8:



import codecs
#Encoding / decoding functions

def encode(latin1_data):
return unicode(latin1_data,'latin-1').encode('utf-8'),len(latin1_data)

def decode(utf8_data):
return unicode(utf8_data,'utf-8').encode('latin-1'),len(utf8_data)

#StreamCodecs

class Codec(codecs.Codec):
def encode(self,latin1_data):
return encode(latin1_data)
def decode(self,utf8_data):
return decode(utf8_data)

class StreamWriter(Codec,codecs.StreamWriter):
pass

class StreamReader(Codec,codecs.StreamReader):
pass

#Codec registry entry point

def getregntry():
return(encode,decode,StreamReader,StreamWriter)



Y aquí podemos ver un ejemplo de uso.

Con respecto al default encoding de unicode, parece que en sys puede existir, o en algún momento ha existido la función setdefaultencoding. Pero al menos en mi distribución no viene.
De todas formas si queremos probar a cambiar el encoding por defecto, lo que podemos hacer es cambiar el valor de la variable encoding de site.py.
Un par de noticias de barrapunto:

viernes, agosto 12, 2005

Generating DOM Magic


Tenia pendiente echar un vistazo a este artículo de Uche Ogbuji.

El artículo en si está interesante, ya que muestra varias rutinas que trabajan sobre un árbol XML.
Las rutinas se centran en el uso de generators, y los comparan con el uso de recursión y xpath.
La técnica mas lenta es usando xpath. Es bueno saberlo.
Entre generators y el uso de recursión están ahí ahí, pero claro, con la prueba realizada. Con otros ejemplos posiblemente se incremente la diferencia a favor de los generators.

¡Ah! los generators por lo visto también son mas eficientes que los iterators.

Pero lo mas interesante del articulo, es que muestra enlaces a una serie de temas en python de los cuales no tenía constancia, y que pueden ser englobados dentro de Stackless Python. Dentro de stackless python tenemos por ejemplo: continuations, generators y microthreads (o coroutines).

Para finalizar unos links a unos artículos:
Ya comenté sobre Python Pitfalls en otro post. Dos articulos relacionados son:

Y para acabar un libro online sobre Python, Python Languaje Reference Manual.

Static Local Variables in Python


Pues eso variables estaticas locales en Python, con un ejemplo:

>>> def foo(v=[1]):
... print v[0],
... v[0] += 1
...
>>> foo()
1
>>> foo()
2
>>> foo()
3


Tengo que echar un vistazo a FreeMind, una aplicación para representar mapas mentales.
A ver si me animo esta tarde...
También tengo que echar un vistazo a la licencia Copyleft. Unos enlaces al respecto:

jueves, agosto 11, 2005

Guide to Python introspection.

Python y XML


Desde luego esta es la columna sobre Python y XML.
Los dos ultimos articulos que he estado ojeando:
El autor de la columna es Uche Ogbuji. Es el fundador de Fouthought empresa que desarrolla 4suite.
Dentro de 4Suite esta Domlettes, una implementacion DOM muy ligera. Dentro de Domlletes tenemos FtMinidom:

FtMiniDom - available only in 4Suite 0.12.0a1 through 1.0a4, FtMiniDom is identical to cDomlette, but is implemented completely in Python. In most cases, it uses your platform's PyExpat to do the XML parsing. FtMiniDom is very much like the xml.dom.minidom that comes with Python and the xml.dom.minidom replacement that comes with PyXML, but it does have some differences and added features. You can force the use of FtMiniDom by setting USE_MINIDOM=1 in your environment before importing Ft.Xml.Domlette.


Para acabar un par de enlaces mas:



miércoles, agosto 10, 2005

De HTML a XML con python


Ya hace tiempo, estuve mirando algun enlace al respecto, ya que intuía que me iba a tocar trastear con estos temas.
De nuevo me he encontrado con el siguiente articulo 'Wrestling HTML'. Es bueno, te cuenta lo que tienes que hacer para pasar de html a xml usando varias posibles herramientas. Menciona en el articulo tanto uTidyLib, como libxml2 HTMLParser.

El mismo autor tiene otro articulo sobre eluso de libxml.

Y para acabar este post unos links mas:

Pyrex


¡¡¡Redios!!! La de cosas que hay por ahí, relacionadas con Python. Me acabo de encontrar con Pyrex, según comentan en la introducción, se trata de un lenguaje para extender python, de manera que podamos mezclar codigo python con tipos de C.

Se ve que lxml lo usa.

DOM Parser


Voy a ver si hoy pruebo un parser DOM. El candidato va a ser libxml2, el cual es un parser para C, pero que tiene bindings para python.
Por lo que he podido leer, no es muy recomendable su uso, de ahí que vaya a usar lxml.

Ya para acabar, lxml usa como API el modulo ElementTree. Parece muy util, para ser usado, incluso sin usar un parser DOM.

lunes, agosto 08, 2005

Tidy



Tidy es una herramienta muy util para evitar errores de parseo usando parsers html, ya que 'corrige' el html.
Para usarlo dese python, he encontrado dos librerias:

El segundo (el unico que he probado) requiere:

  • tener instalado tidylib.
  • y tener instalado ctypes.

viernes, agosto 05, 2005

Parsers html en python


Este tema me dará para hablar para largo, pero para empezar solo comentar que hay dos parsers estandard, es decir que vienen con la distribución:

En el proyecto en el que estoy actualmente han usado el primero, pero tampoco fueron conscientes en su momento de la existencia del segundo.

Python standard logging


Por lo visto el sistema de logs que viene con python esta basado en el de log4j.
Varios enlaces al respecto:

Nota: El termino PEP viene de Python Enhacement Proposal. Y hay unos cuantos.
He encontrado un link muy interesante, sobre python pitfalls.
De todas formas, buscando en google por 'python pitfalls', salen unos cuantos links.

valgrind



Hoy me ha comentado Carlos sobre valgrind. La idea sería usarlo para detertar memory leaks. La lista de proyectos que lo usan es espectacular. Debe de estar realmente bien.

jueves, agosto 04, 2005

WikiBooks


Al hacer una busqueda me salio este wikibook sobre computer programming. A partir de ese enlace saqué las paginas principales en inglés y español de los wikibooks.

Fedora



Me comenta JJ que Fedora Core 4 esta que te cagas.

Daemon Tools



No conocia estas herramientas. Muy interesesantes. Te permiten teniendo una imagen ISO de un CD en el disco duro, montarlo como unidad.
Un par de noticias de barrapunto:

martes, agosto 02, 2005

Un buen punto de partida para documentacion sobre Python y XML.

viernes, julio 15, 2005

miércoles, julio 13, 2005

martes, julio 12, 2005

Depurador para el nucleo de Linux [barrapunto.com].

martes, julio 05, 2005

El arbol del html: HTML Tree.
En esta pagina se pueden ver todos los tags, de padre a hijos.

jueves, junio 30, 2005

Un libro online sobre python que no tiene mala pinta: Dive Into Python.
¡Vaya! El proyecto en el que estoy de TPI, Noxtrum, de noticia en el Pais.

miércoles, junio 29, 2005

lunes, junio 27, 2005

De nuevo sobre documentacion de codigo python


Usando epydoc, ya veo una pega.
Al documentar por ejemplo las variables de clase, epydoc es capaz de extraer el tipo, pero lo que no mola nada es que con un comentario al lado de la declaración de la variables no sea capaz de extraer el comentario sobre la variable y lo tengas que hacer en el docstring.
Con pydoxy, se podría mejorar fácilmente.

Además de lo latoso que es, tiene como desventaja de que se te puede quedar documentación no actualizada si eliminas alguna variable.

FHS


FHS = Filesystem Hierarchy Standard. O lo que es lo mismo, un estándar para un sistema de ficheros jeráquico. Describe la estructura de directorios típica de Unix.

viernes, junio 24, 2005

Sobre las XIV pruebas para el Cuerpo Superior de Sistemas y TIC del estado.
Yahoo lanza Photomail, una herramienta para compartir fotos mas facilmente, una herramienta para compartir fotos mas facilmente.
De momento está en beta y sólo disponible para Windows e IE.

jueves, junio 23, 2005

Algunas noticias de barrapunto:


Por cierto, google ha sacado un servicio de Mapas, se llama Google Maps.
La noticia, aquí.
Muy, pero que muy interesante. Este mes se ha publicado un estudio público sobre las Características de la Web de España.

miércoles, junio 22, 2005

Noticia de barrapunto sobre una base de datos topografica y motor de busqueda.

martes, junio 21, 2005

Un tema recurrente, el chiringuito informático.
En estas noticia de barrapunto:

hay algunos post interesantes (como siempre, conveniente filtrar para eliminar la morralla).

lunes, junio 20, 2005

El codigo kernel de Linux, será gestionado por git, una solución 'desarrollada' por Linus Torvalds.
De barrapunto: ¿Por qué P2P es legal y un servidor FTP es ilegal? Tiene algunos posts interesantes.

viernes, junio 17, 2005

Documentando python


Bueno, tras una pequeña investigacion sobre que herramientas hay disponibles para documentar python puedo afirmar que las dos finalistas son:
Desde luego epydoc por ser el mas especifico para python, es el mejor. Aparte de generar html, también genera pdf y latex.

De doxygen que se puede decir que no sepamos ya.... Es la caña de España. La única pega, es que no soporta directamente python. Es por ello que tenemos que usar un filtro que haga una traducción a un lenguaje que ya entienda. En este caso C++.

Pythfilter, traduce codigo python a stubs en C++. La unica pega que le he visto, con unas pruebas muy simples, es que no trata atributos en clases ni variables de ambito global. Con pruebas mas profundas podrían aparecer mas pegas.

La ventaja de pydoxy sobre epydoc, es que los diagramas de herencia son graficos, y proporciona además diagramas de colaboración y de relación entre modulos. El que sean gráficos tiene la ventaja de que pueden ser usados para generar documentación mas formal (ej. documentos de diseño).

Concluyendo:
  • si no queremos complicarnos nada la vida, yo usaria epydoc, pero lo complementaria con doxygen para poder obtener diagramas graficos.
  • en caso contrario, y disponemos del tiempo, mejoraría pythfilter y usaría epydox.
Para ver mas información sobre que herramientas hay disponibles, Gehard tiene un informe sobre python SCDUs. No incluye los enlaces pero con google se obtienen facilmente.

Sobre A9


Esta currado el buscador este. Sobre todo el tema del clustering y su presentacion.
Como sospechaba, usa por debajo google. Habra que probarlo cuando tenga que buscar algo, a ver que tal se porta... (por cierto, ya hace tiempo mi hermano me comentó sobre él).

jueves, junio 16, 2005

¡Vaya! Un Lematizador online.
Una pagina muy interesante sobre ingeniería linguística.
Un stemmer para español.

martes, junio 14, 2005

Probando generación de UML desde python


De las herramientas que he mencionado anteriormente, he estado probando pyUMLGraph y pyReverse.

pyUMLGraph
Usa Graphviz para generar los gráficos.
Con los ejemplo moñas funciona bien, pero ya con código mio (usando python 2.3) me dio un par de problemas con un par de tipos (uno de ellos el Set). Tras amañar el código, la hice funcionar.
Lo mas particular es como funciona, ya que no parsea el código y genera los modelos, sino que lo ejecuta y lo genera para el código ejecutado.
Si lo que queremos es documentar una aplicación este compartamiento no es valido, ya que puede quedar código sin ejecutar.
Podria ser mas una herramienta (un poco rara) de ayuda a la depuracion. O también podria servir para genrar documentación de una ejecución partitular.
Otro problema de esta forma de funcionar es que cuando nuestro código se va a ejecutar en un framework, no va a ser posible su prueba.


pyReverse

Se pueden generar archivos para VCG (existe también xvcg) o bien para argoUML.
Ha diferencia de pyReverse, esta no la tengo probada del todo, pero casi.
Al igual que con pyUMLGraph, la probé con python 2.3.
Requiere para su uso la instalacion de pyXML y Logilab´s common library.
Si queremos generar los ficheros para argoUML debemos ejecutar pyArgo en caso de querer generarlos para VCG debemos ejecutar pyVcg.
En la prueba realizada, me posicioné en un directorio por encima del paquete a documentar y use la opcion -p . Me dio un fallo que solucioné metiendo en el paquete el fichero __init__.py. Tiene unas cuantas opciones que no he explorado...

  • Generación para argoUML: no tiene mucha utilidad. Además de que no he logrado ver diagramas de clases (supongo que tengo que jugar con los ficheros de configuración ademas de aprender algo mas sobre argoUML). Lo que quedaria por saber es si se pueden exportar diagramas de clases desde argoUML. Si es así se podría considerar. Una nota final sobre argoUML, no generar código python.
  • Generación para VCG: Tengo pendiente ver los diagramas, ya que no me pude bajar la aplicación por no tener acceso a ftp. Lo que si ya he visto es que solo exporta a bmp.
Y hasta aqui lo que he visto.

Realmente ninguna de estas herramientas son comparables a doxygen. Quizás la mejor alternativa sería probar el pythfilter para doxygen. Lo que hace es pasar el código python a C++ para luego poder usar doxygen con este código C++.

Ya para acabar el post. Unas herramientas de documentación:

Mas sobre python



Buscando sobre lo de UML me he encontrado este post en un thread que es interesante (habla de python y ruby).
Y un par de directorios con herramientas para python:
Nota: he visto que el segundo incluyen exactamente lo mismo que el 'open directory'.

Del 'open directory' me han llamado la atencion las siguientes tools:


Aparte hay un par de debuggers.

Diagramas UML para python


PyUMLGraph permite generar diagramas UML a partir del código fuente.

Otra herramienta que hace ingeniería inversa de código python es PyReverse. Genera ficheros para ArgoUML.

Buscando un poco en la web, sobre programas de modelado que soporten python me he encontrado:
  • PyUt. Esta me da a mi que debe ser pobre, pero nunca se sabe... habría que probarla.
  • ObjectDomain. De pago.

Together creo que lo soporta asi, como Rational.
Finalmente me he encontrado argouml (de gratis además). Tienen muy buena pinta, pero no estoy seguro de que lo soporte.

Finalmente... en esta pagina aparece un listado de herramientas de modelado clasificadas por precio. Es muy interesante.

Redes Neuronales en Python


Bueno tras una pequeña busqueda en google sobre el tema he encontrado:
Para completar, un resultado de yahoo: Creating Neural Nets in Pyro. Aquí una introducción. Pyro es un framework en python para explorar 'AI' y 'robotics'.

Y unas entradas de la wikipedia:
Una noticia interesante de barrapunto: ¿Cuánto consume tu PC? Mas o menos viene a salir a unos 14/15 leuros por dia, estando 24 horas encendido.
Se pueden rebajar estos consumos por lo visto con cajas buenas, y por supuesto teniendo el monitor apagado. En el precio anterior no se si estará incluido el monitor encendido.


lunes, junio 13, 2005

Generacion de documentacion en python



Aparte de pydoc se tiene epydoc. Por alguna documentacion que he visto generada con el segundo, parece mas potente.

Tratamiento de argumentos de programa en python



Tenemos dos opciones (por lo que he visto):
Sin entrar a profundizar en ambos (ahora no tengo el tiempo). Parece mas potente el segundo.

Ummm, habiendo una busqueda para confirmar mis sospechas, parece ser que es correcto, según indican es mas potente el segundo, pero solo esta disponible a partir de la versión 2.3 de python.

viernes, junio 10, 2005

Unos cuantos links de barrapunto (mas que las noticias en si, haciendo un filtrado por los mas puntuados, hay algun post interesante, vamos..., como siempre:

Y una entrada en un blog, sobre la Declaración de Bolonia.

miércoles, junio 08, 2005

Un 'pitfall' de python, scope.
Mas info, aquí.
Segun nos comenta Mauro (Mahouu de focofijo.com), la empresa que lleva esto es Secuenzia Pixels.
ummm, tras ver la pagina web, ya no estoy seguro de lo que acabo de afirmar, a ver que me dice Mauro de nuevo...

martes, junio 07, 2005

lunes, junio 06, 2005

Un thread interesante sobre unicode en python. Interesantes los comentarios de M.-A. Lemburg.

Una pagina de regalo sobre lo mismo. Y un Python Unicode Tutorial.

Y ya para acabar he encontrado esta pagina: How to use UTF-8 in Python.

viernes, junio 03, 2005

Arrays en Python


Inicialmente se disponia de Numerical Python. Actualmente sigue existiendo pero parece que finalmente acabará existinendo solamente dentro de SciPy (Scientific Tools for Python).

Y actualmente se dispone de NumArray.

De hecho, nltk dependiendo de que version de python y NLTK tengamos usa o bien NumArray o bien Numeric.
Red Hat libera Directory Server.
Hay un post interesante:

"Aunque la noticia salió hace una semana [escomposlinux.org] en otros sitios [eweek.com] no fue muy comentada.

En las comparativas de rendimiento de hace unos años los mejores servicios de LDAP eran el de Novell y el de Netscape, con mucha diferencia sobre los demás. Lo siento por Openldap, pero nunca es triste la verdad, lo que no tiene es remedio

Si os interesa, el rendimiento de un servidor LDAP de Redhat es muy bueno,
... anteriormente llamado Sun Directory Server,
... anteriormente llamado IPlanet Directory Server,
... anteriormente llamado Netscape Directory Server.
Y si quieres saber los tumbos que ha dado este software tan bueno, de empresa en empresa puedes leer el articulo de la wikipedia sobre IPlanet [wikipedia.org]

El rendimiento no es la única ventaja en este LDAP, los padres de este software (Netscape) pusieron especial énfasis en que satisfaciese los estándares del protocolo, ahora estoy migrándo -por imperativo empresarial- a un producto de Oracle y noto aún más esta característica.

Era necesario que hubiese más de un software de LDAP en el software libre, Openldap es buena solución (sobre todo el cambio de versión 1.x a 2.x) pero no se podía comparar a éste software -ahora de Redhat, pero creado por los de Netscape que fueron un poco los padres del protocolo- ni se podía compara con Novell, que de directorios saben un rato (dicen las malas lenguas que Hasecorp contrató a desarrolladores de Novell para hacer Active Directory)

Una nota final: LDAP es un protocolo, no un servicio. Hablais de servidores de RPC? o servidores SMTP? o servidores HTTP? o decís servicio web? servidores de correo? ...medítese"




jueves, junio 02, 2005

miércoles, junio 01, 2005

Sobre franquicias:

viernes, mayo 27, 2005

Sobre dos encodings:
Y es que la wikipedia es la nea...
La RFC 1738, sobre Uniform Resource Locators (URL).
Lo mas importante del URL encoding es lo siguiente:

URL encoding of a character consists of a "%" symbol, followed by the two-digit hexadecimal representation (case-insensitive) of the ISO-Latin code point for the character.

Para mas info sobre url encoding ver este post anterior.
Ummm, veo que Cetus sigue manteniendo sus links: cetus-links.
Antes cuando no se usaba tanto un buscador (es decir google) y tirabamos mas de favoritos solia usarlos.
El siguiente paper, comparando Google con CiteSeer, está bien. Es muy sencillo a modo de introducción de como funciona Google. Google lo conocemos todos, no asi CiteSeer.

jueves, mayo 26, 2005

Comparativa de webmails. [barrapunto.com]
Documentacion de vim. Esta bien, muestra: identación.
Y otra pagina con tips de vim.

miércoles, mayo 25, 2005

Configuración de color en putty para terminales con fondo negro


Por defecto la configuración de color de ls te muestra los directorios (por ejemplo) en un azul muy molesto. Una opción es cambiarlo a cyan.

La configuración de color se puede hacer para el comando ls, pero si se comparte el usuario con otros puede no ser lo mas conveniente.

Otra opción si se usa putty es cambiar los valores RGB de color a los de Cyan. En concreto hay que poner los del color ANSI Blue Bold (85,85,255) por los del ANSI Cyan Bold (85,255,255).

Si este cambio lo queremos hacer permanente, habrá que hacerlo en alguna sesión que tengamos creada y salvarla.

Vim, por defecto muestra los comentarios también en azul, pero en este caso es el ANSI Blue. Lo suyo es que tambien lo pongamos con los valores del ANSI Cyan Bold.
Un fanzine de Python, pyzine.
Ummm, veo que no es de gratis, aunque algunos articulos si lo son.

martes, mayo 24, 2005

Redirecciones de la shell


Me he encontrado la siguiente pagina, donde te explica las redirecciones (avanzadas) de la shell.

Tratar ficheros .doc como html


Necesito tratar ficheros word (.doc) como html. Para ello he encontrado Antiword, el cual es un producto libre que permite pasar de .doc a texto. Parar de texto a .html es obvio.

lunes, mayo 23, 2005

Greasemonkey es una extensión para Firefox que permite asignar "scripts de usuario", en javascript, a una o varias páginas. [barrapunto.com]

viernes, mayo 20, 2005

Cuando se daran cuenta que lo importante es la calidad


Ahora tengo entre manos empezar en un proyecto, que tiene un codigo que ahora esta en mis manos, que ha tenido su función, y la ha cumplido correctamente. Pero si la tiene que repetir va a ser complicado.
No hay documentos de analisis, es dificil saber que vale y que no vale, y hay porciones de codigo muy cripticas.
Si se hubieran molestado mas en la calidad, recoger esto seria un coser y cantar. Me veo reaciendo muchas cosas. En fin...

jueves, mayo 19, 2005

¿Alternativas libres al software de contabilidad? [barrapunto.com]

Python y expresiones regulares


Al igual que Perl, Python es muy potente para trabajar con Expresiones Regulares.
Para probarlas hay una aplicacion que esta muy bien, se trata de Kodos.

Y el mejor link para empezar, es 'Regular Expression HOWTO'.

Actualización

En la web de Regular Expression Library, hay expresiones regulares disponibles.

miércoles, mayo 18, 2005

Como todos los dias se aprende algo, hoy me ha tocado con NAT.

Para conectarme a un cliente, tenia que tener una IP fija, para el tunel vpn (a través de una 'tuneladora'), pero aunque llegaba al cliente no a la red que me interesaba, y es que la IP que me habian dado era la privada de polar, pero no la publica con la cual salia, con lo cual no era valida para meter la regla pertinente en el firewall.

martes, mayo 17, 2005

lunes, mayo 16, 2005

Mambo, un CMS.
El modelo económico del 'open source'. De ahí he sacado este blog, chochurro.

domingo, mayo 15, 2005

ImageVenuve



Un image hosting que me pasa vlady.

miércoles, mayo 11, 2005

Tengoq que probar el siguiente X11 Window Manager: Window Maker. Lo tenia Carlos con cygwin y la verdad, tenía muy buena pinta.

martes, mayo 10, 2005

Kodos, The Python Regex Debugger. Me comentan que es util.
Sobre las expresiones regulares, pues en la documentacion de python.
Tambien es muy bueno el tutorial de perl.
Y en linux podemos ver el 'regex' tanto en el man, como en el info.

Y si usamos google con busquedas similares a ' regular expressions tutorial', pues como que obtendremos varias paginas utiles. Como esta.

viernes, mayo 06, 2005

Y mas noticias atrasadas. Estas de google y gmail


Noticias que tenia atrasadas, pendientes de meter aqui (de barrapunto)


Oscar recibia unos correos de esta pagina: freshdevices.com. Parece que tiene algunas utilidades interesantes, pero claro, habría que probarlas.

Offline browser



No se quien me pasó este link: Teleport.
El blog técnico de mi hermano.
Y ya de paso otro, Dakewl. Este lo saque de una lista de esas con buenos blogs. Es técnico.

jueves, mayo 05, 2005

Compatir fotos; picasa y hello


Me ha pedido mi hermano información sobre donde puede compartir fotos. Le redirigí a este post mio.

He usado ya Picasa un poco mas y puedo decir que estoy encantado. Lo que le veo de bueno:
  • Intuitivo.
  • Si como yo tienes fotos dispersas en directorios, te permite tenerlas mas organizadas (centralizadas)
  • Para editar rapidamente está muy bien.
  • Los cambios que haces sobre las fotos no los hace realmente sobre las originales, sino que lo debe de mantener en una BD (la unica pega la ocupación en disco). Cuando exportas ya están aplicados.
  • Muy facil exportar pudiendo redimensionar.

Por otro lado, Hello como ya comenté, en mi caso particular no le veo mucha utilidad, que la puede tener salvo para publicar fotos en blogger. Pero vamos que con flickr también lo puedes hacer.
A la hora de publicar las fotos, escoges en que bitacora las vas a publicar y te tienes que logar a una cuenta de blogger (una afirmación de mi post anterior no era cierta :( ).
Unos cuantos enlaces de barrapunto: