Blog do Rodrigo Carvalho

Tecnologia, música e liberdade

Em busca de um Github para músicas

Este ano estou voltando a me dedicar à música, depois de alguns anos inativo. Montei uma banda e, como já falei aqui, estou fazendo diversos cursos online no Coursera (dois deles já terminei e já publiquei reviews aqui e aqui).

Novo tema visual!

Depois de muito tempo (provavelmente anos) insatisfeito com o visual “retrô” do blog e testando diversos temas para tentar deixá-lo mais moderno, finalmente consegui um tema que consegue reunir todas as qualidades que procurava. Um tema minimalista, sóbrio, que oferece boa legibilidade e que aproveita bem o espaço em tela.

Cursos online de música gratuitos

O Coursera é um site que oferece diversos cursos online de forma totalmente gratuita. Existem cursos de praticamente todas as áreas, como por exemplo biologia, economia, computação e direito. O melhor de tudo é que são cursos ministrados por algumas das melhores universidades do mundo! Ano passado fiz alguns cursos voltados para a área de computação e foram bem interessantes.

Mas foi no final do ano passado que fizeram um anúncio que realmente me deixou muito feliz: o Coursera fechou uma parceria com a Berklee College of Music! Para quem não conhece, ela é considerada uma melhores universidades de música do mundo e onde nasceu a banda Dream Theater. De lá para cá, vários outros cursos de música foram adicionados ao catálogo:

Cursos de música no Coursera

Clique para ver no site

 

Para quem, além de músico (ou aspirante a músico), é desenvolvedor de software, no curso “Survey of Music Technology” os alunos terão oportunidade de escrever programas de computador para fazer música.

Já fiz minha matrícula em quase todos os curso da lista. O “Introduction to Digital Sound Design” começou esta semana e ainda dá tempo de se matricular e acompanhar!

Transferência de arquivos do Linux para o Android sem complicações

Desde que comprei meu celular novo, com Android 4, passei a ter muitos problemas para transferir arquivos para ele através do Linux. O problema é que, a partir da versão 3 do Android, a transferência de arquivos via cabo USB é feita utilizando o protocolo MTP, que traz a vantagem de não bloquear o cartão SD. Ou seja, você não precisa parar de ouvir música no celular para transferir mais músicas! No entanto, a implementação atual do MTP do Linux não tem uma compatibilidade muito boa com a implementação do Android – às vezes funciona e às vezes não.

Cansado desta situação, resolvi encontrar uma solução e acabei encontrando algo muito melhor: o AirDroid. Ele é um aplicativo móvel que carrega uma aplicação web no próprio aparelho e que você pode acessar de um navegador do seu computador! Além de transferir arquivos dá para fazer muito mais com ele, como pode ver na tela abaixo.

Tela do AirDroid

Resumindo: procurava uma solução para resolver meu problema de transferência de arquivos via cabo USB para o Android e acabei com uma solução muito mais completa. E, o melhor: sem precisar mais de cabos! Realmente o AirDroid virou o mais novo aplicativo Android essencial para mim :)

Atualização: O Ubuntu, a partir da versão 13.04, já vem com suporte ao protocolo MTP compatível com o Android nativamente.

Produtividade no desenvolvimento Android: testando o AQuery e o RoboGuice

Como último estágio antes da retomada do desenvolvimento da nova versão do aplicativo da Revista Espírito Livre, resolvi testar dois frameworks que prometem mais produtividade e código mais limpo para suas aplicações Android. O objetivo dos testes é escolher um deles para utilizar na próxima versão do aplicativo.

O primeiro será o AQuery, componente que provê uma API ao estilo do framework Javascript JQuery, tornando o código mais compacto e expressivo.

O segundo será o RoboGuice, uma extensão do framework Java de IOC Google Guice com funcionalidades específicas para o mundo Android.

Para os testes, utilizarei a primeira versão do aplicativo da REL. Segue um trecho de código do aplicativo original para servir como comparativo:

AQuery

Antes de tecer qualquer comentário, segue abaixo como ficou o código original portado para o AQuery:

Pontos positivos

  • Conforme prometido, o código ficou realmente mais compacto e expressivo. É possível fazer muitas configurações num mesmo objeto com apenas 1 linha de código sem perder a legibilidade.
  • O uso de interface fluente é muito positivo e grande responsável pelo código enxuto e limpo.
  • Pelo que vi na documentação, o tratamento de XML e Json parece bastante poderoso, apesar de não ter utilizado.

Pontos negativos

  • O componente ainda é um pouco limitado no que se refere a abrangência das funcionalidades do Android e, basicamente, se limita a configurar componentes visuais.
  • O uso do AQuery em apenas algumas partes do código, o torna despadronizado e estranho, pois uma parte fica com cara de Java e outra não. O ponto acima torna este problema mais evidente, pois o uso da API é pequeno em relação ao restante do código.
  • Comparado ao RoboGuice, ele não é tão maduro, pois é uma biblioteca mais jovem e ainda nem atingiu sua versão 1.0. Apesar do fato de não ter chegado na versão 1.0 não significar que o componente tem muitos bugs, é comum ocorrerem quebras de API antes do lançamento desta versão.

RoboGuice

Vamos partir agora para o teste do RoboGuice. Veja como o código original ficou com a utilização do framework:

Pontos positivos

  • O código de interface gráfica fica um pouco mais limpo, mas não muito.
  • Ele é um framework de injeção de dependências completo para sua aplicação móvel! Não cabe a este artigo falar das vantagens disso, mas traz grandes possibilidades de melhorar o código.
  • Possui diversas funcionalidades (nem todas foram exploradas no teste), sendo algumas que mais me chamaram atenção:
  • Injeção de todo o tipo de objetos do Android, além dos componentes de interface, como Activity, Context e Application;
  • Processamento de tarefas assíncronas (AsyncTask);
  • API de logging melhorada;

  • Parece ser uma API madura, além de se basear no Guice que é bastante maduro.

Pontos negativos

  • A documentação da versão atual (2.0) está muito pobre ainda. Documentação completa só para a versão 1.1.
  • Algo que nem é muito relevante é a certa complexidade para conjugar seu uso com o ActionBarSherlock. O problema é que ambos exigem que suas Activity’s estendam suas próprias classes, mas Java não tem herança múltipla para poder herdar de ambas. Mas isto foi fácil de solucionar, pois já existe código pronto para resolver o problema.

Conclusão

Avaliadas as duas opções, decidi por utilizar o RoboGuice em meus futuros projetos. Ele é bastante poderoso e trará grandes vantagens para a qualidade do código e para a produtividade no desenvolvimento. O que eu fiquei mais impressionado com o framework foi a quantidade de recursos úteis que ele dispõe.

Não explorei a fundo tudo o que o RoboGuice poderia me proporcionar, pois exigiria uma refatoração completa de uma aplicação que será jogada fora. Isto não significa que o RoboGuice seja intrusivo no código, mas porque ele reforça boas práticas de programação.

Se você discordou de alguma avaliação minha ou tem alguma coisa a acrescentar, utilize a sessão de comentários logo abaixo para compartilhar comigo!

Veja também:

Resenha: RESTful Web Services Cookbook

Recentemente mudei de emprego e tenho trabalhado num projeto de um web service REST. É um meu primeiro projeto utilizando este estilo arquitetural, mas eu sempre tive muito interesse nele.

Como estava sem nada para ler, resolvi comprar um livro que pudesse me ajudar no meu trabalho além de abordar um assunto que há muito tempo estava querendo me aprofundar: um livro sobre REST.

Foi então que encontrei os livros “RESTful Web Services Cookbook” e “REST in Practice“, ambos com excelentes notas e comentários na Amazon. Decidi começar os estudos pelo primeiro, por sua abordagem mais prática que seria mais útil para ser aplicado num projeto em andamento, e é sobre ele que irei escrever.

Capa do livro "Restful Web Services Cookbook"Estrutura do livro

O RESTful Web Services Cookbook, como o nome diz, é um livro de receitas (“cookbook”) com soluções para problemas comuns no desenvolvimento de web services REST. É um livro ideal para você ter ao lado de sua estação de trabalho para fazer consultas sobre tópicos bastante específicos.

A cada receita, o autor descreve um problema e sua solução de forma sucinta e objetiva. Em seguida, ele discute a razão da solução ter sido escolhida, exemplifica sua implementação e, em muitas vezes, dá alternativas. Sendo assim, o leitor além de ter um guia para aplicação rápida de soluções, também terá a oportunidade de entender profundamente a solução e, assim, reforçar seu conhecimento da tecnologia.

Didática

A didática do autor é excelente, sempre explicando cada tópico de forma bastante clara. Apesar deste ser um típico livro para consultas, a leitura do início ao fim (como estou fazendo) é bastante prazerosa.

Outro ponto muito positivo é que ele não se prende à teoria. Ele explica que existem situações onde a solução mais “RESTful” não é a ideal para o cliente que utiliza o serviço e dá as soluções alternativas, dizendo os prós e os contras de cada uma.

Conclusão

Ainda não terminei o livro (estou no finalzinho), mas já tenho plena capacidade de recomendá-lo para qualquer pessoa que esteja trabalhando com web services REST (independenta da tecnologia utilizada). Este é aquele livro que você irá consultar quando encontrar uma situação um pouco diferente do mundo perfeito da teoria e precisa de uma abordagem mais prática.

Desenvolvimento Android com Maven + ActionBarSherlock 4

Estes últimos dias, estou tentando retomar o projeto do aplicativo da Revista Espírito Livre para Android. A primeira versão que desenvolvi foi bem simples, mas serviu para me dar uma boa visão sobre os rumos da plataforma e me incentivou a estudar bastante. Com isso, vi que dava para melhorar o aplicativo em vários pontos e que a melhor opção seria começar uma nova versão do zero.

Uma das minhas ideias para esta nova versão era começar a utilizar o Maven para gerenciar as dependências do aplicativo. Quem conhece a ferramenta, sabe que ela oferece diversos benefícios como, por exemplo, o build independente de IDE e eliminar a necessidade de versionar os binários das APIs dependentes.

Maven no Android

Comecei a pesquisar e encontrei o android-maven-plugin. Este plugin adiciona ao ciclo de vida do Maven as especificidades da compilação de um projeto Android.

Além disso, existem arquétipos (archetypes) que criam a estrutura de diretórios e arquivos básicos de qualquer projeto Android, além de já incluir no pom.xml o android-maven-plugin configurado com a versão desejada do Android. O arquétipo que mais me interessou foi o “android-release” que, além do projeto principal, cria um projeto de testes e configura o projeto para gerar um pacote para distribuição.

Maven + Android + Eclipse

Com o projeto Maven pronto, já dá para compilar e gerar um pacote da aplicação pela linha de comando. No entanto, apesar do Eclipse (a partir da versão 3.7 “Indigo”) suportar projetos Maven nativamente, ao tentar importar o projeto, ele apresentará um erro.

Assim como Maven precisa de um plugin para lidar com as especificidades da compilação para Android, o Eclipse também precisa. O ADT por si só não consegue lidar com o projeto, pois ele não espera um projeto no formato Maven.

Mas para configurar é muito fácil. Considerando que está utilizando a versão 3.7, você deverá utilizar o plugin m2e-android. Para instalá-lo é bem simples e está explicado em sua página.

Atenção: Não confundir este com o “m2eclipse-android-integration”, que é a versão antiga do m2e-android. Parece bobeira, mas eu bati muito a cabeça com isso!

ActionBarSherlock 4

Superados os problemas do Maven e sua integração com o Eclipse, chegou a hora de incluir no projeto o ActionBarSherlock, componente que já mencionei num post anterior. Como estava desenvolvendo uma versão nova do aplicativo, também decidi atualizar a biblioteca para a versão 4.0. No entanto, ao incluí-la no projeto, tive um erro.

Infelizmente, documentação não é o forte do componente e, depois de bater muito a cabeça, descobri que a versão nova exige que a compilação seja feita para Android 4 (e não para Android 3, como a versão antiga). Sendo assim, você deve configurar seu projeto para o API level 15 e a versão do Android 4.0.1.2.

Além disso, tentei rodar a aplicação num emulador rodando Android 1.6 (versão mínima compatível na versão 3.0) e tive outro erro. Também depois de perder algum tempo, descobri que a versão agora só suportava versões do Android a partir da 2.1.

Conclusão

Apesar destes problemas, vale muito a pena utilizar o Maven nos projetos. Eu bati muito a cabeça, mas espero que este artigo te ajude a evitar estes problemas e que consiga utilizar a ferramenta muito mais tranquilamente.

Uma última dica para quem utiliza o ActionBarSherlock, é utilizar o arquétipo Maven para gerar o projeto e, durante a geração, escolher a API level 15. Você deve tomar cuidado que o padrão é a API level 10, mas você pode negar esta escolha e forçar a versão desejada.

Por fim, torço muito para que o ambiente Maven para Android seja cada vez mais utilizado e fique cada vez mais estável e fácil de usar.