viernes, octubre 21, 2005

Me ha comentado JJ que estan usando una Wiki, cuyo motor está en python, se trata de MoinMoin. En la wikipedia tienen hasta una entrada, sobre él.

En la wikipedia se puede seguir navegando sobre temas afines. Uno muy interesante es una comparación sobre 'wiki software'.

Según me comenta JJ, el mejor es MediaWiki.
Una noticia de barrapunto:

jueves, octubre 20, 2005

Ajax


Me ha extrañado que no hubiese escrito nada al respecto, ya que JJ me había comentado sobre ello. Ajax es una tecnología (o un conjungo) que usa entre otros google.
En el siguiente artículo dan una descripción muy clarita de él. El primer artículo sobre el mismo fue de un tal James Garret.

Según me comenta oreques, lo que no hay por ahí son muchos ejemplo disponibles (lo confieso, yo no he buscado), pero parece que ibm si tiene algo.
Me pasa my bro un proveedor de hosting que dice es interesante (no lo he mirado): bluehost.
Unas noticias de barrapunto:

lunes, octubre 17, 2005

Componentes electrónicos en madrid


Me han dicho que Conectrol es la caña (en Jorge Juan, al lado de Goya). Por lo visto tienen 2 tiendas (enfrente una de otra), una mas de informatica y otra de componentes electrónicos.

(1 día despues)

Antes de salir del curro me comentó JJ sobre Telkron, que me pilla mas cerca del curro, y como la otra, me pilla también de camino a casa (está en Avda. Donostiarra).
Me pasé por la primera y lo que buscaba lo tenían agotado, entonces probé con Conectrol. En la tienda de informatica si que lo tenían, pero como tenía que preguntar otra cosilla me fuí a la de electrónica. Vaya pasada....
Un par de noticias de barrapunto:

viernes, octubre 14, 2005

jueves, octubre 13, 2005

lunes, octubre 10, 2005

miércoles, octubre 05, 2005

Compilar codigo en python


Cuando se invoca a 'python' siempre se genera un fichero '.pyc', el cual contiene el bytecode correspondiente al codigo python. Este bytecode se ejecutará en la maquina virtual de python.

Si lo que queremos es generar el bytecode pero sin ejecutar, tenemos dos modulos que nos lo permiten: py_compile y compileall.

Ejecución dinamica en python


La funcion interna exec, nos permite ejecutar codigo python que obtenemos en tiempo de ejecución.
exec code[ in globals[,locals]]

code, puede ser una cadena, un fichero o bien un objeto compilado.
Hay otra función, rexec, que permite la ejecución en un entorno limitado (como en el caso de los Applets de Java).

Para compilar objetos podemos usar la función compile.

Y finalmente tenemos la función eval, que permite evaluar expresiones.

Mas información en la documentación de python.
El libreo de O'Really Python in a Nutshell, habla de exec en el punto 13.1 ('Dynamic Execution and the exec Statement') y en 13.2 sobre 'Restricted Execution'.
Barrapunto hoy viene cargadito:

martes, octubre 04, 2005

lunes, octubre 03, 2005

miércoles, septiembre 21, 2005

Una pagina de ayuda sobre adsl.
Una noticia de barrapunto:
Hay también otra noticia, de google. Casi no pasa un día de que no tengamos una noticia de google. Se están metiendo en multiples temas. La verdad es que es un poco preocupante, esto puede llegar a ser el monopolio del siglo. Desde luego si que han sido visionarios...
La misma noticia, en telecinco (un poco mas sensacionalista): El último reto de Google: una red wifi gratuita y arruinar a las telecos.

martes, septiembre 20, 2005

La 'machine' que tiene JJ para MP3, el HP140 de iriver.
Un posts de barrapunto:

Ver page rank


Para ver el page rank de una pagina, se puede hacer tal que:

http://rankwhere.com/google-page-rank.php?url=cesarob.blogspot.com


lunes, septiembre 19, 2005

Hacer un poll por correo


Tengo necesidad de hacer un poll o encuesta a través del correo. Por lo que ando a la búsqueda de algún sitio que me proporcione este servicio de forma gratuita.

En principio yahoo groups no me sirve, ya que te obliga a que los votantes, tengan cuenta de yahoo. Tengo que probar los grupos de google.

Buscando en la web, en desarrolloweb, me han orientado a elistas y egrupos. Habrá que probarlo también...
Unas noticias de barrapunto:

Y como siempre que estoy con JJ, sale alguna conversación técnica y de ella recursos de interés como (unos cuantos sobre persistencia de objetos):

viernes, septiembre 16, 2005

Hay una noticia en barrapunto sobre la profesión informática, que como siempre ha atraído la atención de muchos de nosotros. Ya tenia mas de 500 comentarios y el servidor de barrapunto esta caído, mientras escribo estas lineas. Supongo que por la cantidad de accesos que deben de estar teniendo.

Otras noticias de hoy:

jueves, septiembre 15, 2005

Sobre ADSL


Me han comentado que el ADSL de Jazztel es el mejor, si ellos te proveen el servicio directamente. Esto depende de las zonas. En caso de que su red no te llegue, lo harán con Telefónica.
Si eres afortunado, puedes tener hasta 4Mb.
Me han comentado también que en bandaancha hay mucha información interesante.
Por lo visto en la entrada de la toma telefónica en casa, hay como unas cucarachitas que limitan mucho la velocidad, lo suyo es cambiarlas por jumpers (de los del ordenador).
En bandaancha seguro dicen algo al respecto...

miércoles, septiembre 14, 2005

Unas noticias de barrapunto


Búsquedas en blogs



La noticia anterior sobre google es para mi una gran noticia, ya que era algo que estaba echando mucho de menos.
De hecho ya mi blog personal esta indexado. Este parece que no. Tendré que echarle un vistazo...
Ahora solo me queda que modificar la template para poder buscar en él. ¡Genial!
Yo podía buscar, cosa que hago a menudo, cuando estaba logado en blogger pero ahora se abre el campo a posibles visitantes.
Aprovechando la noticia he estado echando un vistazo a technorati. Está bien. Ya tienen mi blog personal, y supongo que este en breve...

Con blogger los pings de notificación los reciben, en caso contrario lo puedes hacer manualmente mediante un ping. O bien puedes consultar como hacerlo aquí.

Ah! la direccion para buscar en google es blogsearch.google.com.

martes, septiembre 13, 2005

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: