A Quarta do Wear

Eu e o Moto 360

Quem me acompanha nas redes sociais já sabe de minha saga para comprar um Moto 360! E você pensa que eu queria comprar ele só para dizer que tenho um? É, tudo bem, admito que foi por isso também. 🙂 Mas como bom desenvolvedor nerd e sempre fã das tecnologias do Google, eu queria programar nessa plataforma e não tem motivação maior e melhor do que ter um dispositivo em mãos, certo? Claro que sim!

O que eu acho dos Wearables?

Os Wearables são, em minha humilde opinião, um caminho sem volta. Muita gente criticou os smartphones e/ou tablets, alegando que eram uma moda passageira. Como todo mundo viu, quebraram a cara feio. Vejo muita gente criticando os smartwatches, com alegações do tipo “sem utilidade”, “desnecessário”, “funcionalidades bobas”, “só pra tirar onda”… e vão quebrar a cara da mesma maneira. O mais engraçado é que algumas desses críticos já usaram ou usam um relógio cuja única funcionalidade é mostrar as horas. haha! 😛

Eu admito que nunca usei relógios de pulso e o motivo era bem simples: depois dos smartphones, passei a encarar os relógios como apenas um acessório estético. A partir dos smartwatches, entretanto, isso tende a mudar, pois agora não é apenas uma questão de olhar as horas. Os smartwatches lhe trazem informações relevantes, contextualizadas e de forma extremamente prática, sem necessidade de puxar um celular do bolso.

Vamos Desenvolver?

Bom, mas porque cargas d’água eu fiz esse post cheio de blá blá blá? É para convidar você, caro amigo desenvolvedor que reside em Salvador e RMS, para estudar o desenvolvimento de aplicativos para Android Wear junto comigo. No dia 26 de novembro de 2014 estaremos eu e Wilson no Salvador Shopping no bar Chalezinho, às 19:00, esperando por você. Vamos conversar um pouco sobre essa plataforma, instalar o ambiente de desenvolvimento, compartilhar ideias de aplicativos e, quem sabe, já iniciar a desenvolver alguma coisa?

Eu e Wilson já estamos com um Moto 360 em mãos e levaremos para lá. Aos curiosos, podem ir lá dar uma sacada e conversar junto com a gente. Não será nada formal. Ao contrário, será totalmente informal. Sem planejamento. Vamos sentar na mesa, bater um papo e trocar ideias! Estão todos convidados para o primeiro Quarta do Wear, que será contínuo! Espero vocês lá! Não perdaum!

AlienDroid no SERPRO

Já publiquei aqui sobre o AlienDroid, um framework de persistência de objetos que fiz para Android. Inclusive, publiquei sobre o prêmio no SBSI 2013 que ganhei com a publicação de um artigo sobre ele. Então, para que mais uma publicação sobre ele aqui, lindão? Bom, em primeiro lugar, para me gabar, é claro, e em segundo lugar, para dizer que ele ganhou holofotes aqui no Serpro recentemente.

Não lembro se já havia comentado, mas o AlienDroid foi utilizado em algumas soluções internas do Serpro, como o aplicativo Pessoa Física, e isso foi divulgando internamente, o que me levou a apresentá-lo internamente para a empresa. Bom, não tão internamente assim, pois a apresentação era pública através do Assiste Serpro. 🙂 Já saíram algumas matérias nos meios de comunicação do Serpro e agora saiu mais uma. Seguem os links:

AlienDroid é uma das Soluções Inovadoras do Serpro
https://www.serpro.gov.br/noticias/aliendroid-e-uma-solucoes-inovadoras-do-serpro-1

Mobilidade Garante Premiação no SBSI 2013
https://www.serpro.gov.br/noticias/mobilidade-garante-premiacao-no-sbsi-2013

Também encontrei o artigo publicado na internet, inteiro e de forma oficial. Segue o link:
http://www.lbd.dcc.ufmg.br/colecoes/sbsi/2013/0034.pdf

Android Cards

Vocês conhecem aqueles Cards da DZone? Eu acho eles sensacionais. Trazem um resumão sobre um determinado assunto em um formato de fácil consulta. Até impresso fica bem bacana. Pra quem tem tablet, também fica sucesso. Eu já gostava deles, mas sinto falta de uns cards mais específicos, menos “genéricos”.

Ultimamente teve um aumento na demanda por cursos de Android e uma forma que achei de me manter atualizado, relembrar e compartilhar esses estudos é fazendo uns cards bem no estilo dos RefCards da DZone. A diferença é que vou abordar de forma resumida cada assunto do Android. Por exemplo, farei cards sobre Activity, SQLite, SharedPreferences e por aí vai. Já comecei a fazer alguns e deixarei eles sob a licença Creative Commons – Attribution-NonCommercial-ShareAlike 3.0.

Fiz eles usando o Pages, para o Mac. Tanto os arquivos fonte (.pages) como os arquivos em PDF estão disponíveis em meu perfil no Github. Portanto, para quem quiser usar, compartilhar, melhorar e por aí vai, acessem o endereço  https://github.com/marloncarvalho/curso-android.

Espero que gostem!

#2 – FrostBite Redux – Setup

Vamos começar a montar o ambiente pra fazer o jogo. De cara, vou usar o Eclipse mesmo. Pensei em fazer no IntelliJ IDEA para testar a IDE, mas resolvi ficar com o velho Eclipse mesmo. Portanto, se você quer ter um ambiente parecido com o meu, baixe o Eclipse 4.2.0, conhecido como Juno, na opção Classic. Prefiro esta versão, é mais leve.

Depois disto, não esqueça de baixar o plugin do ADT e instalar ele. Você também vai precisar de um plugin a mais para poder interagir com o repositório no Github. Instale no Eclipse o plugin eGit! O SDK do Android você pode baixar direto do Eclipse com o plugin ADT mesmo. Com isto em mãos, agora precisamos ter a AndEngine baixada. A nova versão, batizada de GLES 2.0, não é mais fornecida como um arquivo .jar. Você precisa ter o código em sua máquina e referenciar ele a partir do seu código.

Agora, vamos passo a passo. Então, vai lá em File->Import->Projects from Git no Eclipse.

Agora, seleciona a opção URI e manda um Next na cara dele!

No primeiro campo, chamado URI, cola esse endereço aqui ó: https://github.com/nicolasgramlich/AndEngine.git. Ele já vai preencher os campos pra você, basta clicar em Next.

Agora, deixe selecionada APENAS a opção GLES2. Desmarque as outras mesmo. Manda bala no Next agora.

Não altere nada nesta tela. Aliás, altere se você quiser modificar onde o projeto vai ser guardado! 🙂 Mas deixe o Initial Branch quieto aí! Chuta mais um Next!

Agora, deixa marcada a opção Import Existing Project. Mais um Next!

Pronto! Agora é só fazer um Finisih e correr pro abraço! Não ligue pro Warning na parte de cima da imagem aí. É porque eu já tinha importado a AndEngine antes de fazer esse passo a passo!

Deu algum erro no projeto aí? Comigo não. Mas veja como está configurado ele aqui.

Então, agora você já tem a AndEngine em sua máquina, doido! Já podemos começar a criação do projeto. Mas isso fica pro próximo post!

#1- FrostBite Redux – Decisões Iniciais

Há muito tempo que tenho a ideia de fazer um jogo. Seja ele pra desktop ou mobile. Agora, eu vou levar essa ideia adiante, definitivamente! Vou fazer um jogo para Android. Ponto final. Será meu primeiro jogo, minha primeira experiência nessa área. E pretendo compartilhar aqui no blog tudo que passei nessa jornada.

O primeiro passo que tive foi pensar em um jogo simples para fazer. Não tenho intenção de fazer um mega jogo super revolucionário logo de cara. Nesse primeiro momento, quero apenas aprender e compartilhar o que aprendi. Imaginei logo aqueles jogos de Atari. Pensei em vários e lembrei que era viciado em FrostBite. Não é um jogo pra lá de viciante, mas eu sempre queria fazer o máximo de pontos nele. 🙂

Jogo decidido, me faltava agora escolher como fazer o jogo. Eu poderia fazer o jogo do ZERO. Ou seja, implementar até uma simples engine que atendesse apenas ao jogo. Também teria a opção de usar uma engine mais genérica. Decidi usar uma engine. Por que? Sei lá. Deu vontade. hehe! De cara, escolhi a AndEngine. Não fiz muitas pesquisas e nada. Simplesmente, escolhi ela e pronto. Entenda a situação: não quero ganhar dinheiro, nem fazer um killer game. Quero só aprender. Só isso! Quando eu partir para algo mais sério, eu faço uma pesquisa mais extensiva e penso melhor nas opções.

Bom, agora já tenho tudo em mãos. Só me falta aprender a usar a AndEngine. A partir de agora, vocês vão acompanhar uma série de Posts onde vou ilustrar como configurei meu ambiente, o que fiz, deixei de fazer, os passos e tudo mais. Inicialmente, fique sabendo que o código será opensource. Estará disponível no Github no endereço https://github.com/marloncarvalho/frostbite-redux.

E você? Quer se juntar a mim nesta brincadeira? Se sim, me fala que podemos marcar uns dias para fazermos programação em pares. Uns hangout também. Fique ligado nos próximos artigos! 🙂

Opa! O próximo post já chegou! Clique aqui para ver #2 – Frostbite Redux – Setup.

AlienDroid – ActiveRecord

Eu já comentei pelo meu Twitter sobre o AlienDroid, certo? Publiquei o link para o projeto e tudo mais. Só fiquei devendo um post aqui no blog explicando melhor o projeto e como ele funciona. Então, vamos pagar esta dívida agora. Lembram do DemoDroid? Foi uma tentativa minha de criar um pequeno framework para desenvolvimento em Android. Usei ele na criação do EncomendaZ e do BrasileirãoZ.

O DemoDroid estava até bacana, mas comecei a perceber que ele acabava criando mais uma complexidade no desenvolvimento. E achei ele um pouco pesado também. Percebi que os projetos Android normalmente são pequenos, possuem poucas entidades para persistir e tal. E o DemoDroid não levava isto em consideração. Acabava criando umas camadas extra desnecessárias. Por exemplo, não sou muito a favor de criar Business Controllers, DAOs e etc em projetos Android. Prefiro usar o padrão ActiveRecord com Models. Resolve o problema facilmente, é elegante, e deixa o código limpo.

Partindo destas premissas, abandonei o DemoDroid e fiz o AlienDroid. Desta vez, quero modularizar mais as coisas. Separei o projeto em, até agora, dois módulos. O primeiro é o Core. Este módulo é minúsculo. Pouquíssimas classes e que são mais de suporte para os demais módulos. Por exemplo, temos o módulo ActiveRecord para persistência de objetos. Você conhece o padrão de projeto ActiveRecord? Não? Quem já usou o Ruby on Rails conhece bem. Para aprender mais, visite a página do Martin Fowler sobre este padrão: ActiveRecord.

Agora, vamos começar a usar o AlienDroid. Primeiro, você pode usar ele pelo Maven. Ou sem Maven mesmo. Já publiquei o projeto no repositório de snapshots da Sonatype. Basta você ter uma dependência assim no seu projeto:


    com.alienlabz
    aliendroid-activerecord
    1.0.0-SNAPSHOT

Caso não use o Maven, você precisa de alguns arquivos. Primeiro, baixe estes dois: aliendroid-core.jar e aliendroid-activerecord.jar. Adicione eles na pasta /libs de seu projeto Android. Você precisa também das libs do RoboGuice:

  1. RoboGuice 2 Download
  2. Guice 3 No AOP
  3. JSR 305
  4. javax.inject

Agora, você precisa de uma classe que estende de android.app.Application. Crie ela e no método onCreate, faça uma chamada para AlienDroid.init(this). Com esta linha, você está iniciando o AlienDroid. E não se esqueça de referenciar esta nova classe no seu AndroidManifest.xml, hein! Pronto, meu caro. Agora basta você criar suas classes de Model estendendo de com.alienlabz.activerecord.Model. Vamos a um exemplo:

public class Contact extends Model {
    public String name;
    public Date birth;
    public Integer age;
}

E agora? Faço o que com esta classe? Vamos ver agora.

public MyActivity extends RoboActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Contact contact = new Contact();
        contact.name = "My Name";
        contact.birth = new Date();
        contact.age = 21;
        contact.save();
    }
}

Só isso? É, cara pálida. Só isso mesmo. O AlienDroid vai criar um banco de dados chamado database.sqlite para você. E também vai criar uma tabela Contact automaticamente. Você pode fazer consultas assim, ó:

public MyActivity extends RoboActivity {

    @Override
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.main);

        Contact contact = Model.load(Contact.class, 1);
        contact.name = "Changed Name";
        contact.save();

        List contacts = Model.findAll(Contact.class);
        List contacts = Model.where(Contact.class, "name like ?", new String[] {"name"});

        contact.delete();
    }
}

Curtiu? Eu também! 🙂 Quer tirar mais dúvidas? Quer usar o projeto? Quer ajudar? Então, entra em contato comigo. Pode ser pelo meu Twitter, Facebook, E-mail ou sei lá!

AdMob vale a pena?

Já pensou em colocar propaganda em seus aplicativos Android? Se sim, já deve saber que existe o AdMob, do Google. Basta você fazer sua conta, pegar um arquivo .jar, colocar na sua aplicação, criar uma área na aplicação para exibir as propagandas e pronto. Mas o AdMob não é exclusividade do Android. Também pode ser usado em BlackBerry e iOS. Eu resolvi fazer um teste com ele. Primeiro, eu comecei vendendo minhas duas aplicações: EncomendaZ e BrasileirãoZ. Depois, resolvi testar se valeria a pena colocar AdMob. Vamos para as conclusões deste teste.

Já me perguntaram várias vezes o que vale mais a pena, se é vender ou colocar propaganda. Espero ter dado a resposta ao final deste post. Caso você queira uma resposta direta, na cara, sem frescura e está com preguiça de ler o restante do post, então, é… depende, cara pálida. Deixe de preguiça e leia até o final, seu zé ruela. Vamos entender o contexto da coisa. Eu coloquei duas aplicações com AdMob. Uma valeria a pena ter as propagandas. A outra, não. A que valeria seria o BrasileirãoZ, mas ainda assim não tenho certeza absoluta. A que não valeria é o EncomendaZ.

Vamos entender a situação agora. O AdMob só vale a pena para aplicativos “Top Sellers” e de grande uso diário. Somente para eles. O retorno é baixo e você acaba conseguindo em um mês o dinheiro que você conseguiria em 1 ano de AdMob. Exemplo disto? Vamos lá. Eu vendi 30 licenças do EncomendaZ pela Android Market. São 30 dólares acumulados. Contudo, não consegui ainda nem 2 dólares com as propagandas oriundas dele após mais de 3 meses. Entendeu o contexto? O EncomendaZ é um aplicativo muito específico. Tem cerca de 600 downloads após quase 1 ano de publicado. E 600 pessoas usando é muito pouco. E, claro, não são 600 pessoas usando direto. O que posso saber é que 600 baixaram, mas não saber se tem uso constante. Acredito que destas 600, talvez umas 100 usem constantemente.

Já o BrasileirãoZ leva vantagem. O brasileiro adora futebol e certamente é um aplicativo de uso constante. O cara quer sempre saber como anda seu time, classificação e etc. E isto se comprovou na prática. O BrasileirãoZ corresponde a mais de 90% do total de 13 dólares que arrecadei usando o AdMob. Mas ainda é pouco. Ele tem cerca de 2200 downloads atualmente e, aparentemente, um uso constante. Contudo, ainda arrecadei mais vendendo ele do que com AdMob. Foram 17 doletas vendendo e cerca de 10 dólares vindos de propaganda.

Há algo mais que você precisa pesar: o AdMob deixa sua aplicação feia, rouba espaço da tela e é chato. É igual a você entrar em uma página cheia de AdSense e que dá vontade de fechar imediatamente. Então, se vai colocar propaganda, faça com cuidado e pense bem. Vale a pena abusar seu usuário com essa propaganda mesmo? Bom, vou deixar aqui minha dica se você coloca ou não essa maldita propaganda… se bem que dica de maluco vale nada. Mas vou dizer ela mesmo assim.

Acredito que um plano melhor seja criar uma versão free com propaganda e outra paga sem propagandas e talvez mais opções. Principalmente se sua aplicação é muito específica e tende a não ser de uso constante. E essa dica, eu mesmo tentarei seguir nas minhas próximas aplicações. Uma aplicação somente free e com propaganda vale a pena para Angry Birds e por aí vai. Acho muito melhor você mesclar os dois mundos. Você tende a ganhar dos dois lados usando esta tática. Caso o cara seja mão de vaca e use sempre a free, ganha na propaganda. Caso sua aplicação seja boa mesmo e a galera passe a comprar, melhor ainda. 🙂

Preguiça, Desmotivação, Novidades…

É o seguinte: depois de tanto tempo sem escrever, resolvi voltar a postar no blog, nem que seja um post ridículo. E eis aqui um post ridículo. Parei de escrever por diversos motivos, desde a mais pura e genuína preguiça até a desmotivação. Preguiça não é um problema, basta saber viver com ela em harmonia. Preguiça faz bem. O prejudicial sempre é o excesso, seja lá do que for. E eu tive preguiça em excesso. A parte da desmotivação é uma história complexa, sem graça e que não estou com vontade de contar.

Mas, vamos aos fatos. Muitas coisas aconteceram e eu gostaria de contar algumas e largar alguns comentários inocentes e escrotos ao mesmo tempo. Vou começar do mais recente, pois está fresco na memória. Fiz uma palestra no evento de comemoração dos 10 anos do Eclipse e que aconteceu na UNIRB. O comentário pertinente é que eu realmente não tinha a mínima ideia do que falar por lá. E inventei um tema. Não saiu como eu gostaria, mas tudo bem. A parte ruim é que o auditório estava vazio. Gatos pingados apenas. Mas nada que me surpreenda, pois Salvador é isso aí mesmo. Basta ver como eventos do porte do LinguÁgil e Maré de Agilidade recebem pouquíssimas pessoas. Se liga no vídeo aí embaixo.

Segundo fato de relevância para ser comentado é que… esqueci. Então, vamos ao terceiro fato de relevância a ser comentado. Como meu último post foi em Junho, saibam que eu fiz 34 anos em 17 de agosto. O quarto fato de relevância a ser comentado é que eu fui para o FISL12 e fiz lá uma apresentação sobre o Demoiselle 2. O que eu posso comentar é que o evento é do caralho, Porto Alegre é fria pra porra e eu já xinguei o suficiente para este post. Veja aí os vídeos da palestra e se emocione.



Quinto fato a ser comentado é que fiz também uma apresentação no LinguÁgil 2011. Muito louca, aliás. Foram 4 pessoas, cada uma defendendo “sua” linguagem ou ambiente de programação preferido. Como não poderia deixar de ser, eu protegi o Android. Mas, era tudo armação, a alma do LinguÁgil não é sacanear com o gosto de um ou de outro sobre uma linguagem. Então, se emocione pela segunda vez neste post, vendo o vídeo aí embaixo.

E está bom. O que eu tinha pra dizer, está dizido. Já já eu volto com um post menos idiota. Ponto final.

DSL no DemoDroid

Eu curto muito estas linguagens novas, como Groovy e Ruby. A sintaxe delas permite fazer códigos lindos. A melhor parte, para mim, é poder criar uma DSL de forma fácil e bem intuitiva. No Java, também é possível, mas não fica tão bonito como ficaria em um Groovy, por exemplo. Ah! Você está por fora do que é uma DSL? Tradução: Domain Specific Language. Eu gosto de dizer que uma DSL pode ser vista como um subconjunto de uma linguagem, ou até mesmo uma linguagem própria, para resolver problemas específicos.

Você vai por aí muitas DSLs. Já encontrei o Mirror, que é uma DSL para usar Reflexão em Java. Parece-me que é um projeto de brasileiros. Então, fica aqui meus parabéns! E você pode criar DSLs para diversos tipos de situações específicas. Olha como é o código do Mirror para definir o valor de um atributo de um objeto:

new Mirror().on(target).set().field(fieldName).withValue(value)

Percebe como a leitura deste código parece mais natural do que aquele monte de linhas da API de Reflection do Java? Você pode até ler naturalmente como: Mirror (new Mirror()), no (on) objeto tal (target) defina (set) o atributo tal (fieldName) com o valor tal (withValue). Bacana, né não? E que diabos eu quero com esse blá blá blá? Vamos lá! Nessa ideia de DSL, é que eu resolvi criar uma para incorporar no DemoDroid. Uma coisa recorrente no desenvolvimento em Android é precisar disparar uma tarefa que leva um tempo razoável de processamento e você quer exibir uma mensagem de progresso.

Para quem já programa em Android, sabe que é necessário usar a class android.os.AsyncTask. Veja abaixo um exemplo de utilização dela, retirado do BrasileirãoZ:

new AsyncTask<Void, Void, List<Jogo>>() {

	private ProgressDialog dialog;
			
	protected List<Jogo> doInBackground(Void... params) {
		try {
			return campeonato.getRodada(final_rodada).getJogos();
		} catch (Exception e) {
			messageContext.add("Erro");
		}
		return new ArrayList<Jogo>();
	}

	protected void onPreExecute() {
		if (dialog == null) {
			dialog = ProgressDialog.show(getView(), "Consultando...", "Obtendo Jogos.", true);
		}
	}

	protected void onPostExecute(java.util.List<Jogo> result) {
		JogosPresenter.this.getView().setJogos(result);
		JogosPresenter.this.getView().setRodada(final_rodada);
		dialog.dismiss();
	}
}.execute();

Nada mal, não é? Um monte de linha de código para fazer muito pouca coisa. E também pouco intuitivo para quem está lendo. Uma pessoa que pega este código para ler, precisa ter um conhecimento bem legal da classe AsyncTask para poder usá-la. E olhe que esta classe do Android até que é bem simples. Existem outras muito mais difíceis. E por que não trocar este monte de linha de código, por isso aí embaixo? Não acha mais intuitivo? Claro, ainda posso melhorar e fica aí para você me sugerir melhorias. Esse código faz um processamento muito semelhante ao daí de cima:

new Async()
	.using(getView())
	.call("getJogos").on(event.getClube()).noArgs()
	.during().show("Consultando...", "Obtendo Jogos do Clube.")
	.after().call("setJogos").on(getView()).withResultAsArg()
	.occurring().crash().alert("Tente novamente mais tarde",1)
	.occurring().success().alert("Jogos atualizados!", 1)
	.execute();  

Android: O Curso!

Gosta de programar? Já conhece o Android? Tem aquela vontade imensa de aprender a programar para Android e publicar várias aplicações no Android Market para ganhar aquela grana extra? Ah, entendi! Falta tempo para estudar através de livros e artigos. Aliás, você é daquelas pessoas que gostam de interagir com outras, trocar ideias ao vivo, tirar suas dúvidas rapidamente. Seja qual for seu perfil, se ligue nessa: estamos estruturando umas ideias para criar um curso de Android aqui em Salvador. Apresento-lhes o instrutor: eu mesmo!

As ideias são iniciais e seu feedback será essencial. O primeiro curso será para iniciantes mas que já tenham um entendimento bom de programação em Java. O objetivo é fazer um minicurso bem bacana. Vamos fugir do trivial “Professor Fala, Você Ouve, Você Acessa E-mail e Você Dorme”? Este tipo de aula é monótona e também acho que já está um pouco ultrapassada. Vamos aplicar Dojos e uma enorme interação entre todos os participantes! Vamos colocar um objetivo para o minicurso: criar uma aplicação e publicá-la na Android Market! Vamos ter um feedback rápido entre alunos e instrutor através dos Dojos, o que tornará o curso bastante dinâmico.

Não vamos apenas focar nas funcionalidades do Android, vendo componente por componente… Vamos passar dicas de como construir aplicativos bacanas. Vamos ver algumas técnicas que você pode usar ao programar para dispositivos. E como você pode entrar no Android Market para competir de verdade e não ser apenas mais um a fazer aplicativos meia-boca. Muita pretensão? Que nada, o negócio é pensar grande e sempre pra frente!

Você se pergunta: quem é esse cara que se acha bom o suficiente pra me ensinar Android? Já estou estudando Android desde o início do ano. Já tenho uma aplicação publicada lá, EncomendaZ. E o BrasileiraoZ já está bem próximo também. Ah, e não poderia esquecer do DemoDroid. Já tem um bom tempo que quero criar vídeo-aulas, tutoriais e um curso de Android. E chegou a hora. Acredito que tenho algo a contribuir na área!

E aí? O que acha? Topa? Tá colado na ideia? Deixe seu comentário e vamos tocar este curso pra frente! Se tem interesse em participar? Então, preencha este formulário. É importante para termos uma ideia da quantidade de pessoas interessadas! https://spreadsheets.google.com/embeddedform?formkey=dDlUT1E0VmtRdVFUd3NjbXpUUTNWMlE6MA