P2P in sole 9 righe di codice

Slashdot come al solito offre ottimi spunti. Un botta e risposta tra un professore di informatica di Princeton e un giovane programmatore Canadese ha prodotto il più piccolo programma di file sharing mai concepito: solo 9 righe di codice.

Inizialmente il professor Ed Felten di Princeton coadiuvato dallo studente J. Alex Halderman ha realizzato quello che sembrava essere la più piccola applicazione P2P al mondo. TinyP2P, questo il nome del programma, è racchiuso in sole 15 righe di codice in linguaggio Python. Lavora sul protocollo HTTP e sul protocollo XML-RPC e non consente l’utilizzo su network molto estesi.
Ecco il listato:

# 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"))



Per tutta risposta Matthew Skala, insoddisfatto del risultato di Felten, ha prodotto un programma di sole 9 righe di codice scritto nel linguaggio Perl. Si tratta di Molester, probabilmente il più piccolo programma di file sharing mai realizzato.
Ecco il listato:

$p=shift;$a=shift;i(shift);use Socket;socket S,PF_INET,SOCK_STREAM,6;
bind S,&a($a);listen S,5;$/=undef;while(@ARGV&&($_="$p $a f".shift)||
accept(C,S)&&($_=<c>)&&close C){m!^(.*?) (.*?) ([e-i])([^/]*)/(.*)$!s&&&#xD;
$1 eq$p&&&$3($2,$4,$5);}sub e{open F,'>',$_[1];print F $_[2];close F}&#xD;
sub f{&s($_,@_)foreach keys %k}sub g{open(F,'<',$_[1])&&&s($_[0],$a,&#xD;
"e$_[1]",<f>);close F}sub h{&s($_[0],$_,'i')foreach keys %k}sub i{$k{&#xD;
$_[0]}=1}sub a{$_[0]=~/^(.*):(\d+)$/&&$2>2e3&&sockaddr_in($2,inet_aton(&#xD;
$1))}sub s{socket X,PF_INET,SOCK_STREAM,6;$w=shift;if(connect X,&a($w)&#xD;
){print X "$p $_[0] $_[1]/$_[2]";close X}else{undef $k{$p}}}