[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