[Rio-pm] a menor wiki do mundo

Breno G. de Oliveira breno em clavis.com.br
Segunda Julho 31 17:04:30 PDT 2006


Oi pessoal,

depois do meu último email enorme, muita gente me perguntou sobre a tal
"Wiki em 3 linhas de Perl". Para os que se impressionaram e para os
incrédulos, aí vão então mais informações!

Foi feito um concurso online para saber qual seria a menor Wiki do
mundo. Não havia qualquer restrição sobre qual linguagem utilizar, mas a
Wiki deveria possuir no mínimo os seguintes requisitos:

- Geração automática de links
- Conteúdo editável por todos (quem quer que "todos" seja)
- Regras de formatação de texto (não precisar escrever html)
- Backlinks (se página A te leva a B, então em B deve ter um link de
volta para A)

Dois competidores foram eliminados, por razões relativamente óbvias:

- BogoWiki: Essa wiki na verdade não existe. Seria hipoteticamente um
shell de apenas 1 caractere que invoca um processo de Wiki qualquer.

- Kwiki: 1 linha de Perl (39 caracteres):
  "use Kwiki;Kwiki->new->load_hub->process"
  Essa não valeu pois carrega um módulo contendo a wiki em si.


E a vencedora foi.... SigWik, 3 linhas, 222 caracteres de Perl:

-------8<---------
#!/usr/bin/perl
use CGI':all';path_info=~/\w+/;$_=`grep -l $&
*`.h1($&).escapeHTML$t=param(t)
||`dd<$&`;open F,">$&";print F$t;s/htt\S+|([A-Z]\w+){2,}/a{href,$&},$&/eg;
print header,pre"$_<form>",submit,textarea t,$t,9,70
-------8<---------

(o email não deixou a linha inteira aqui, por isso talvez saia com mais
do que 3 aqui - o importante é lembrar que uma linha tem no máximo 80
caracteres, e nesse caso temos a 1a linha começando com "use ...", a 2a
com "|| ..." e a 3a com "print ...")

Não preciso nem dizer que as 5 (cinco) primeiras colocadas foram *todas*
feitas em Perl. Os puristas podem reclamar que tem uma chamada a um
comando de "grep", então a SigWik na verdade teria sido feita em Perl e
Shell. Para eles, a menor colocada de fato é a NanoWiki, que ficou em 3o
no geral, com 5 linhas (295 caracteres!) do mais puro Perl:

-------8<---------
#!/usr/bin/perl
use CGI':all';$$_=param$_ for x,t;$z=($t&&"+>").$x;open z;print z$t
if$t;$_=escapeHTML($t||join"",<z>);s/([A-Z]\w+){2,}/v$&/ge;print
header,h1($x),pre($_,map{"\n".v$_}grep{open
_;grep/$x/,<_>}<*>),start_form,textarea(t),hidden(x,$x),submit,end_form;sub
v{a{href,url."?x=@_"}, em _}
-------8<---------

A primeira concorrente não-Perl chama-se WyPy e ficou em um longínquo
sexto lugar, com 11 gigantes linhas de código Python (814 caracteres!).
A quinta colocada (PeWi) tinha apenas 7 linhas de código (515 chars).

Demais posições de destaque foram:

7o) MuWiki - 15 linhas de PHP        (1203 caracteres)
8o) WjKj   - 16 linhas de Java (JSP) (1212 caracteres)
9o) WyRiki - 20 linhas de Ruby       (1361 caracteres)

Mais informações sobre o concurso:

http://c2.com/cgi/wiki?ShortestWikiContest


[]s

breno


Mais detalhes sobre a lista de discussão Rio-pm