Não tenho muito pra falar do Anima Mundi desse ano, já que acabei vendo uma única sessão. Mas valeu a breve visita, pois vi o quase-longa-metragem Æblet og Ormen (trailer em dinamarquês) que, à parte de perder um tiquinho do ritmo lá pelo meio (mas recuperar no final), é uma história interessante e muitíssimo bem desenhada e animada. Quem puder, veja.
FISL 11, cruzalinhas e iG Code Golf
A edição desse ano do Fórum Internacional Software Livre foi interessante como de costume: palestrantes de renome e a troca de experiências dentro e fora do evento com as pessoas que fazem o software livre acontecer seguramente justificam passar esses dias em Porto Alegre. Esse ano fiz dois lances bacanas por lá:
O primeiro foi preparar e apresentar uma palestra-relâmpago sobre o cruzalinhas (slides aqui, vídeo em breve). Resolvi fazer isso na última hora, e me surpreendi com o interesse de pessoas de outras cidades (Manaus, Campinas, Florianópolis e da própria Porto Alegre) em fazer a mesma coisa, já que, segundo esse pessoal, a dificuldade em obter informações sobre o transporte público é a mesma.
O outro foi participar do Code Golf do iG, uma proposta inusitada, na qual são apresentados cinco problemas de programação. Eles são relativamente simples – o desafio é escrever o menor código-fonte que resolva cada um.
Claro que um código Python é bem menor que o seu equivalente Java, e por isso haviam categorias isoladas para cada linguagem suportada (Perl, Python, PHP, Java e Ruby). Fui o vencedor da categoria Java, com os códigos que estão no final do post.
Um aviso: NUNCA escreva código assim, a não ser que esteja participando de um Code Golf. O objetivo era sempre reduzir o tamanho e compensar a proibição de imports explícitos. Isso tem um custo: a performance quase sempre é horrível, a legibilidade é zero, é quase impossível modificar. Senti esse último lance na prática: tive que fazer uma gambiarra na questão 4 (o formato da entrada mudou, e o fix apropriado implicaria em reescrever tudo) – o tamanho dobrou e fui penalizado por isso.
Minhas soluções para o Code Golf (enunciados aqui)
Problema 1:
public class c{public static void main(String x[])throws Exception{int a=,b=1,c,i;for(i=Integer.parseInt(x[]);i>;i--){System.out.print(b+(i==1?"":", "));b=b+a;a=b-a;}}}Problema 2:
public class c{public static void main(String x[]) throws Exception{char m,s[]=x[].replace(" ","").toLowerCase().toCharArray(),i=;int f[]=new int[255],c,l=s.length;boolean p=true;for(;i<l;i++){p=p&&s[i]==s[l-i-1];f[s[i]]++;}System.out.println((p?"":"Não é ")+"Palíndrome");while(true){m=;for(i=;i<255;i++){m=f[m]>f[i]?m:i;}if(f[m]==)return;System.out.println(f[m]+" "+m);f[m]=;}}}Problema 3:
public class c{public static void main(String x[]) throws Exception{long a=,m=,b,c,F=0xFFFFFFFF;int i,j=;for(;j<2;j++){c=;for(i=;i<4;i++)c=c*256+Integer.parseInt(x[j].split("\\.")[i]);a=m;m=c;}a=a|(F-m);b=32;for(c=0xFF000000l;c>;c/=256){System.out.print(((a&c)>>(b-=8))+(b==?" /":"."));}for(b=32;(m&1)==;m/=2)b--;System.out.print(b);}}Problema 4:
public class c{static int h=-1;static void w(int i){if(h!=i)System.out.print(i+" ");h=i;}public static void main(String y[])throws Exception{String[]x=(y[]+",-,"+y[1]).split(",");int m,l=x.length,n[]=new int[l],p=,i=,a=;for(;i<l;i++)if(x[i].equals("-")){a=i;p=i+1;}else n[i]=Integer.parseInt(x[i]);for(i=;(i<a&&p<l);){if(n[i]<n[p]){m=n[i];i++;}else{m=n[p];p++;}w(m);}for(;i<a;i++)w(n[i]);for(;p<l;p++)w(n[p]);}}Problema 5:
public class c{public static void main(String x[])throws Exception{int c,p,t=,v[]={1,3,3,5,10,50};while((c=System.in.read())>-1){p=("pcbtar".indexOf(c));t+=p>-1?v[p]:;}System.out.print(t);}}Coders At Work (Peter Seibel)
Depois de ter curtido tanto as entrevistas com os fundadores das startups mais famosas no Founders At Work, eu esperava que o Coders at Work – fosse ser ainda mais bacana. Afinal, a lista de entrevistados é diversificada e impressionante: vai de gente mais “próxima” como os criadores do memcached, JavaScript e JSON até decanos como Fran Allen e Donald Knuth, cujos méritos acadêmicos e na indústria tornam desnecessárias quaisquer apresentações.
Super Munchkin
Eu até curto um jogo de cartas/tabuleiro mais elaborado, mas tenho alergia àqueles onde você queima horas aprendendo para só aí começar a jogar decentemente e se divertir. Felizmente o @btco me apresentou o Munchkin – jogo de cartas que, segundo o próprio fabricante, “captura a essência da experiência da aventura-em-masmorra, sem aquela parafernália de RPG” – o que seria uma afirmação à toa, se o fabricante em questão não fosse a própria Steve Jackson Games¹ – pioneira do gênero RPG nos EUA.
Esse tipo de humor auto-depreciativo mostra o diferencial do Munchkin: ao invés de vender a ilusão de que uma mecânica complexa demonstra algum tipo de superioridade intelectual dos participantes (como fazem tantos RPGs e jogos de carta/tabuleiro por aí), ele se baseia em um conjunto simples de regras. Os detalhes mais cabeludos ficam por conta de cada carta, facilitando muito o aprendizado e tornando-o divertido de imediato.
O jogo original deu origem a variantes temáticas – a que eu tenho, claro, é o Super Munchkin, na qual jogadores e monstros são, respectivamente, super-heróis e vilões. Assim como o original satiriza o gênero RPG medieval, esse não poupa os comics da ironia: a carta “erro de continuidade” anula tudo o que foi feito numa batalha (causando grande confusão), o nível do jogador sobe com cartas do tipo ”cueca pra fora da roupa”, e por aí vai.
Um pré-requisito é entender inglês – não apenas para interpretar as cartas, mas para apreciar o humor nerd em cada uma delas. A Devir lançou uma versão nacional do original, mas parece que esgotou e não se encontra mais em lugar nenhum. O melhor é importar (ou procurar um pouco por aqui) e encarar o idioma.
¹ Quem leu o livro-reportagem The Hacker Crackdown deve lembrar que o serviço secreto americano investigou de forma truculenta a empresa quando soube que um dos seus colaboradores (responsável pelo GURPS Cyberpunk) circulava no submundo hacker – pesquisa de campo é isso aí, o resto é resto.
Outliers (Fora de Série), por Malcolm Gladwell
Peguei Outliers para ler no ano passado, mas só agora deu tempo de escrever. Ele abre apontando uma relação estatística entre o horóscopo e as chances de sucesso de um jogador de hóquei – e o nome original¹ pode dar a entender que se trata de outro livro na linha do Freakonomics.
tilewriter – desenhando ladrilhos em JavaScript
Eu fiquei vidrado no layout de “ladrinhos” do logotipo do site do RHoK, que lembra os micros de 8 bits sem deixar de ser moderno, e pensei “taí, vou roubar me inspirar criar um trabalho artístico derivativo para o próximo update visual do meu blog”.
O chato é que não apenas sou um zero à esquerda em GIMP/PhotoShop, mas também queria algo que pesasse menos no carregamento. Solução: programar.
O canvas do HTML5 viria a calhar, mas o suporte dos browsers ainda está longe do ideal. Resolvi, então, criar uma biblioteca minimalista para fazer desenhos nesse estilo usando elementos de HTML.
Urban Fact (Fato Urbano) / RHoK #1 SP
O Random Hacks of Kindness (RHoK) reuniu programadores em vários locais do mundo simultaneamente ao longo do último fim-de-semana, com o objetivo de desenvolver ferramentas que possam ajudar a lidar com os desafios gerados pelo risco de desastres naturais.
O esforço foi patrocinado e liderado por gente do Google, Yahoo!, Microsoft, NASA e do Banco Mundial, e eu não só tive a oportunidade de participar da primeira edição de São Paulo, que aconteceu aqui na Fundação Getúlio Vargas (FGV), mas também tive a alegria de ter o projeto do meu grupo, o Urban Fact, premiado com o segundo lugar.
cruzalinhas
O site da SPTrans oferece várias informações sobre as linhas de ônibus, trem e metrô que operam na cidade de São Paulo. A navegação, entretanto, deixa um pouco a desejar – razão que leva as pessoas a alternativas como o Tô a Pé e o eficiente sistema de rotas do Google Maps.
Este último resolve bem a minha vida, mas às vezes tudo o que eu quero é saber quais ônibus passam por um determinado local. Ou ainda: quais, dentre eles, passam por um segundo local, e quais passam entre este e um terceiro, i.e., quais minhas opções para ir do ponto A ao ponto B, e dele ao ponto C, e por aí em diante.
Misturando essa demanda com um desejo de colocar as informações de itinerário do transporte público de São Paulo nas mãos da população, desenvolvi o cruzalinhas. A aplicação ainda precisa de muitas melhorias (eu diria que é “beta”, mas o que não é?) mas já permite responder às perguntas acima.
Como de costume, o código-fonte é livre (licença MIT), e esse post vai falar um pouco sobre o funcionamento do mesmo.
Minificação automática de JavaScript no Eclipse
Esse post mostra como configurar o Eclipse/Aptana para gerar uma versão compacta e unificada dos .js do seu projeto sempre que você salvar um deles – um lance que eu tentei explicar em 140 caracteres, mas não deu muito certo…
The 99
Os webcomics ainda são o melhor lugar para buscar inovação em quadrinhos, por conta da ausência de editores/intermediários e da disponibilidade. Mas de vez em quando os quadrinhos tradicionais revelam surpresas agradáveis como The 99 – ou The Ninety-Nine *para alguns, e *al-tisa’a wa tisaun para outros.
