TinyP2P es el programa de Peer 2 Peer más pequeño del mundo. Con sólo 15 líneas en Python, su autor, Ed Felten lo creó para ilustrar lo sencillo y simple que puede resultar un programa P2P, y por lo tanto, la dificultad con la que se encontrará cualquier organismo o mafia de los derechos de autor (cough, cough) al intentar regularlo.
# tinyp2p.py 1.0 (documentation at http://freedom-to-tinker.com/tinyp2p.html)
import sys, os, SimpleXMLRPCServer, xmlrpclib, re, hmac # (C) 2004, E.W. Felten
ar,pw,res = (sys.argv,lambda u:hmac.new(sys.argv[1],u).hexdigest(),re.search)
pxy,xs = (xmlrpclib.ServerProxy,SimpleXMLRPCServer.SimpleXMLRPCServer)
def ls(p=""):return filter(lambda n: (p=="")or res(p,n),os.listdir(os.getcwd()))
if ar[2]!="client": # license: http://creativecommons.org/licenses/by-nc-sa/2.0
myU,prs,srv = ("http://"+ar[3]+":"+ar[4], ar[5:],lambda x: x.serve_forever())
def pr(x=[]): return ([(y in prs) or prs.append(y) for y in x] or 1) and prs
def c(n): return ((lambda f: (f.read(), f.close()))(file(n)))[0]
f=lambda p,n,a: (p==pw(myU))and(((n==0)and pr(a))or((n==1)and [ls(a)])or c(a))
def aug(u): return ((u==myU) and pr()) or pr(pxy(u).f(pw(u),0,pr([myU])))
pr() and [aug(s) for s in aug(pr()[0])]
(lambda sv:sv.register_function(f,"f") or srv(sv))(xs((ar[3],int(ar[4]))))
for url in pxy(ar[3]).f(pw(ar[3]),0,[]):
for fn in filter(lambda n:not n in ls(), (pxy(url).f(pw(url),1,ar[4]))[0]):
(lambda fi:fi.write(pxy(url).f(pw(url),2,fn)) or fi.close())(file(fn,"wc"))
Tan sencillo… que no me entero de nada!
Si funciona ya me sirve 😛 xD
No he programado nunca en python…pero que bonitas son esas lineas… (aunque no entienda nada ^^ ).
Me quedo con lo que comomentaba Tuxiradical…
a mi tampoco me mireis xD yo soy más bien de perl. miré un poco python para hacer cositas para karamba y superkaramba pero en cuanto me aburrí volví a perl. aunque python está bastante bien, pero cuando pillas la costumbre…
a ver si aprendo algo de ruby
Cuando mire ruby, no se me parecio muy parecido a python (quizas delirios mios).
:uch: Perl… interesante 😛
y no lo será. solo lo decía porque son los 3 lenguajes de script por excelencia, no porque tengan nada que ver
Y el chisme funciona?
ya te digo que funciona 😛
Sorprendente…
Habría estado bien, que el autor publicara la versión también sin ofuscar y en (25 lineas?). Así nos enteraríamos un poquillo.
Al igual que vosotros tampoco soy un maestro de Python.
Eso ya lo comente yo hace un tiempo y te puedo asegurar que NO es el mas pequeño del mundo 😉
En «El tamaño si importa» lo comente sacandolo de una nota de Kriptopolis:
Y como ya dije en su día: Si todos los programadores se picaran asi, me pregunto cuantos miles de mhz de potencia bruta nos sobrarian en los procesadores…
parece ser que molester ya ocupa solo 6 líneas xD pero hay ciertas informaciones que indican que podría no ser el más pequeño tampoco 😛 porque cuando molester ocupaba 9, Florian Gross creó uno en ruby en 6 líneas
y aquí el código de molester para quien se aburra y quiera echarle un vistazo:
me falla en línea7, en el if
if ar[2]!=»client»:
IndexError: list index out of range