chester's blog

technology, travel, comics, books, math, web, software and random thoughts

FISL 11, cruzalinhas e iG Code Golf

25 Jul 2010 | Comments

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)

  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;}}}
  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.l
    ength;boolean p=true;for(;i<l;i++){p=p&&s[i]==s[l-i-1];f[s[i]]++;}System.out.pri
    ntln((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]=;}}}
  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.pa
    rseInt(x[j].split("\\.")[i]);a=m;m=c;}a=a|(F-m);b=32;for(c=0xFF000000l;c>;c/=25
    6){System.out.print(((a&c)>>(b-=8))+(b==?" /":"."));}for(b=32;(m&1)==;m/=2)b--
    ;System.out.print(b);}}
  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]);}}
  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)

14 Jul 2010 | Comments

Coders At Work, Peter SeibelDepois 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.

O livro foca no dia-a-dia dessas pessoas, em particular no momento em que estão criando código. Isso até é interessante: saber se um ninja desses depura código com um debugger ou com printf, quanto ele pensa antes de sair codando, se ele implementa código de forma top-down ou bottom-up e a visão deles de como o desenvolvimento de software evoluiu (ou não) nos dias de hoje sem dúvida dá uma nova perspectiva para o meu cotidiano.

Infelizmente, isso não impede que os capítulos se tornem repetitivos e maçantes ao longo do tempo – ao contrário do Founders, no qual cada entrevistado leva a reportagem para um lado diferente (e sempre interessante). Não sei se o quanto isso influenciou, mas o entrevistador, embora autor de um livro popular sobre Common Lisp e um dos primeiros funcionários da WebLogic, não é personagem de destaque no meio. Em contrapartida, a cicerone do Founders é co-fundadora do Y Combinator – uma credencial e tanto para quem quer falar de startups.

O Julio Daio Borges afirma em um review bacana do livro que “…a maioria dos programadores no livro são, basicamente, executores. Visionários são os empreendedores.” Não concordo plenamente com a afirmação – poucos ali são empresários, mas cada um deles empreendeu e inovou no seu campo – mas ela evidencia o fato: o livro anterior foca nesse lado empreendedor, este no lado pragmático/coder. Eu curto as duas coisas, mas em projetos editoriais desse porte, a primeira vai mais longe.

Super Munchkin

12 Jul 2010 | Comments

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. cartas de munchkin 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

09 Jul 2010 | Comments

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.

Mas a proposta é outra: Malcolm Gladwell desconstrói alguns mitos sobre o que faz alguém se destacar nos negócios, esportes, artes ou qualquer outro campo. Ele ataca em particular aquela idéia comum de que o sucesso depende largamente do talento, em menor grau da dedicação e bem pouquinho da sorte.

Sem negar a influência desses fatores, o livro demonstra que o que entendemos por sorte tem muito a ver com as oportunidades e com estar no lugar e na hora certa. Também desfaz a lenda do “expert instantâneo”, chegando a postular que existe uma quantidade de tempo mínima que qualquer pessoa de destaque (dos Beatles a Bill Joy) dedica ao assunto de interesse antes ser considerada um expert: 10.000 horas.

São propostas ousadas – colocadas dessa forma, devem gerar muitas expressões de “ah, duvido”. E é isso que torna o livro interessante: após a sua leitura, todas elas se tornam no mínimo bastante plausíveis. Não sei se a tradução é boa, mas no original valeu muito a pena.

¹ Em Estatística, outlier é o nome que se dá àqueles dados completamente diferentes dos demais, os “fora da curva”.

tilewriter – desenhando ladrilhos em JavaScript

20 Jun 2010 | Comments

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

07 Jun 2010 | Comments

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

04 Jun 2010 | Comments

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.

cruzalinhas

The 99

15 May 2010 | Comments

The 99: OriginsOs 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.

Produzido por uma editora do Kuwait, o gibi é co-escrito pelo seu idealizador, o médico humanista Dr. Naif A. Al-Mutawa e pelo americano Stuart Moore. Esta combinação (aliada ao trabalho visual de vários artistas populares dos comics Marvel/DC) dá ao quadrinho o tom multi-cultural que o diferencia.

A história não é radicalmente original: uma tentativa de evitar a destruição de uma biblioteca em Bagdá (nos moldes da Biblioteca de Alexandria, só que na Idade Média) por um ataque bárbaro transforma o conhecimento ali contido em 99 artefatos místicos, que se perdem durante a guerra. Na nossa época, o Dr. Ramzi dirige uma operação humanitária da UNESCO em zonas de guerra, enquanto busca estas relíquias, na esperança de que o conhecimento ali contido possa trazer a paz ao mundo atual.

Os artefatos começam a ser localizados por pessoas comuns, que descobrem que o conhecimento contido neles transformou-se em fonte de poderes especiais, levando o Dr. Ramzi a ajudá-los a controlar este poder e ajudá-lo em sua missão pacifista. Claro, ele não é o único com uma agenda, e a partir disso a história se desenrola.

Pode parecer, à primeira vista, uma versão islâmica dos X-Men. Mas o blend (ao menos nas três edições que li) é mais interessante que isso: mesmo sem o (justificado) rancor contra a autoridade islâmica de um Persépolis, ele tem em comum com a autobiografia de Satrapi a apresentação de valores humanistas e pacifistas nos quais uma parcela significativa do mundo árabe/islâmico acredita, mas que são mascarados por regimes retrógrados e violadores dos direitos humanos fundamentais.

Tudo isso vem embalado num quadrinho divertido que, nos moldes de suas contrapartes ocidentais, vai virar desenho animado em breve. Ele também já conta com um parque temático, e não vou me espantar se virar filme, na esteira dos blockbusters da Marvel dos últimos anos. A história tem todos os ingredientes necessários, só é preciso encontrar uma produtora com os culhões que faltaram ao Comedy Central – que, à revelia dos autores, censurou episódios de South Park por conta de referências a Maomé.

Mas a inovação não pára por aí: como a edição em papel tem alcance limitado, o mesmo site que disponibiliza a edição “Origins” gratuitamente para download, permite comprar qualquer uma das edições pela bagatela de US$ 1.99. Isso mesmo: por míseros R$ 3,55 você pode ler uma edição completa no seu computador, sem sair de casa. O pagamento é via PayPal, ou seja, 100% seguro – se você já tem PayPal, é clicar, autenticar, comprar e baixar. E o melhor de tudo: é um arquivo .PDF sem qualquer tipo de DRM. O gibi é seu, exatamente como os de papel.

Já comprei os dois primeiros e pretendo continuar lendo (cadê o genérico do iPad, hein?) – e acho que nesse aspecto da venda online as editoras americanas é que deviam se inspirar nos caras…

Entenda Lost

27 Apr 2010 | Comments

Em uma lista de e-mail o @lucasfontes resumiu bem (e me autorizou a publicar) tudo o que você precisa saber sobre essa série:

Primeira temporada: Assim.. um aviao caiu numa ilha…. e uh… essa ilha tem umas pessoas… e uh…. essas pessoas vao tentar atacar os caras do aviao. nota da producao: JURAMOS q as pessoas nao estao mortas, vcs vao adorar essa serie!

Segunda temporada: Uh… as pessoas da ilha sao malvadas e andam descalco.. eles tem um lider q nunca aparece nota da producao: a trama esta apenas comecando, teremos 15 temporadas, action figures e canecas de cafe

Terceira temporada: Uh…. agora as pessoas da ilha nao tem computador, internet e satelite….. e o lider na verdade nem existe.. eh tudo invencao.. Mataram o Santoro com apenas 2 falas em 3 temporadas… nota da producao: eles nao estao mortos…tudo sera explicado, no seu tempo.

Quarta temporada: Tem um cara q consegue sair e voltar da ilha… acho q precisamos trazer aquele lider de volta hein? nota da producao: precisamos comecar matar os personagens caros ( tipo o Michael ), CGI esta mais barato q filmar em Ibiza

Quinta temporada: Vamo leva todo mundo pra fora da ilha, dar um final feliz, e rezar pra NBC cancelar a gente pra nao precisarmos explicar a farofa q fizemos nas temporadas anteriores nota da producao: precisamos dar um tempo…. ( entre quinta e sexta, teve quase 1 ano de espera )

Sexta temporada: Fodeu galere… vamos ter q explicar tudo! O lider existe, vamo mata ele, colocar um outro malvadao na historia. E agora a grande sacada do show……. eles estao mortos. nota da producao: se o final nao colar, a gente ainda consegue fazer um dvd com uns extras e tal….. AH, e ainda temos algumas daquelas canecas pra vender!