quinta-feira, 5 de dezembro de 2013

Mais uma batalha na guerra Oracle x Google

 Ontem, 04/12/2013, foi o dia em que ocorreu a argumentação oral sobre o processo que a Oracle move contra a Google, sobre a API Java x API Android.
 A Oracle acusa a Google de violar seus direitos autorais ao usar a API Java na API Android, a Google, é claro, contra-argumenta que API não é protegida por patentes.
 Controvérsias à parte, pode ser uma guerra muito longa.
 Acho, que quem perde é a comunidade. Quanto ganharíamos se as duas trabalhassem em conjunto?

Vamos ver.

http://www.project-disco.org/intellectual-property/120413-complexities-evident-in-todays-oral-argument-in-oracle-v-google/

Abraços

quarta-feira, 4 de dezembro de 2013

Novo projeto do Andy Rubin

Larry Page:
"Estou animado com o próximo projeto de Andy Rubin. Sua última grande aposta, Android, começou como uma idéia maluca que acabou colocando um supercomputador em centenas de milhões de bolsos. Ainda é muito cedo para isso, mas eu não posso esperar para ver o progresso."

Google Puts Money on Robots, Using the Man Behind Android

terça-feira, 3 de dezembro de 2013

Programação: tópicos para estudar

- fundamentos de computação
- fundamentos de matemática para computação
- fundamentos de cálculo numérico
- lógica
- algoritmos
- estrutura de dados
- conceitos de orientação a objetos
- design patterns
- file I/O
- banco de dados
- SQL
- processamento concorrente
- técnicas/métodos/frameworks de desenvolvimento de sistemas
- testes unitários

E claro, uma linguagem para treinar tudo isso.
Hoje estou usando o Java for Android.

Abraços


domingo, 1 de dezembro de 2013

Exemplo de uso do Singleton

 Este exemplo usa um Singleton para salvar dados provenientes de diversas activities e usá-los em uma outra activity.
 A lógica do processo é o seguinte:
 -Na activity inicial inicializa os campos
-Na activity 1, salva o(s) campo(s). No exemplo uso um TextWatcher para salvar os dados logo após a edição.
-Na activity n, salva o(s) campo(s).
-Na activity que vai usar os campos basta usar os campos do singleton.

 Primeiro crie a classe MySingleton.java:

Inicializa o Singleton.

Seta o listener para capturar as alterações:

Finalmente, recupera os dados:

Não coloquei checagens, mas é necessário consistir os dados para garantir que são válidos.

 Não testei os códigos, é apenas um roteiro. Caso testem, por favor, postem seus comentários. 

Abraços

quarta-feira, 13 de novembro de 2013

Novo VM Android: Android Runtime - ART

Essa é muito importante: a Google está trabalhando num substituto do Dalvik, o Android Runtime (ART).
Se você já está usando o SDK 4.4 pode testar o ART assim: Settings > Developer Options > Select Runtime.
Mais detalhes nesse link:
http://www.extremetech.com/computing/170677-android-art-google-finally-moves-to-replace-dalvik-to-boost-performance-and-battery-life

Abraços

PS: em português está no menu: Selecionar tempo de execução, usar Dalvik ou usar ART.

segunda-feira, 11 de novembro de 2013

Dica: SQLite Android - uso do foreign-key

O foreign-key no SQLite, por enquanto, vem setado como off.

Para utilizar, eu uso o código abaixo:




No código acima, primeiro é setado o FK para On, depois é feito uma leitura que retorna um cursor com uma coluna, contendo 0 ou 1, se o FK estiver Off ou On, respectivamente.

É isso, testem se a implementação do SQLite tem suporte para o foreign-key.

PS: Precisa setar toda vez que fizer uma conexão ao banco de dados.

Abraços

segunda-feira, 28 de outubro de 2013

Dica: usando o StrictMode para melhorar o código Android

O StrictMode é uma ferramenta de desenvolvimento que detecta coisas indevidas que você poderia estar fazendo por descuido ou desconhecimento e gravar logs para que você possa corrigi-los.



O StrictMode é uma ferramenta interessante para detectar práticas não recomendadas em aplicativos Android.

Adicione o código acima em uma activity e veja as mensagens no logCat.

fonte

 PS: Não se esqueça de setar false em DEVELOPER_MODE na versão de produção!

 Bons códigos!

quinta-feira, 24 de outubro de 2013

Impressões sobre a leitura do livro Google Android da Casa do Código

Livro: "Google Android: crie aplicações para celulares e tablets"
Autor: João Bosco Monteiro
Editora: Casa do Código
Número de paginas: 312
ISBN: 978-85-66250-02-2

O livro está organizado nos seguintes capítulos:
 1. Construa sua primeira aplicação
Capítulo introdutório com um pouco da história do Android, a preparação do ambiente de desenvolvimento e o famoso primeiro app Hello World.
 2. Entenda o funcionamento do Android
Visão geral da arquitetura Android, os compponentes de uma aplicação, o ciclo de vida das activities, as Intents e Intent Filters, os Layouts,Widgets e Temas
 3. Domine os principais elementos de Interface Gráfica
Componentes da interface visual, views, layouts, widgets, viewGroups.
Aplicativo de controle  de gastos de viagens: Boa Viagem
Telas e respectivas activities: Login, Dashboard(Menu), Cadastro de Viagens, Cadastro de Gastos, Configuração, Lista de Viagens e Lista de Gastos.
 4. Persistência de dados no Android com SQLite
Uso do SQLite através das classes SQLiteOpenHelper, SQLiteDatabase.
Implementação básica do CRUD.
Boas práticas: Classes domínio da app (Viagem e Gasto), classe DAO
 5. Compartilhe dados entre aplicações com os Content Providers
Funcionamento do Content Provider, acesso ao CP Contatos e a criação do CP BoaViagem.
 6. Integração de aplicações Android com serviços REST
Acesso a serviços Rest + Jason, Twiter Search API.
 7. Utilize Google APIs e crie funcionalidades interessantes
Exemplo de integração com o Google Calendar
 8. Explore os recursos de hardware
Fotos, vídeos e GPS
 9. Suporte Tablets e outros dispositivos
Versões do Android, tamanhos de tela, Fragments e Loaders
10. Publicação no Google Play


Um livro interessante que, através do desenvolvimento de um app chamado Boa Viagem, mostra algumas potencialidades para se desenvolver um aplicativo Android.
É fácil e rápido de ler, não aborda com profundidade os temas mas é de uma leitura agradável e dá uma boa visão da construção de um aplicativo Android.

Mas, dá para indicar o livro? Respondo: dá, com a ressalva que o próprio autor faz no final: "...é importante saber que seus estudos não podem parar por aqui.".

Abraços

quarta-feira, 23 de outubro de 2013

Meus estudos

Continuo sem tempo para dedicar-me ao desenvolvimento.

Estava lendo toda a documentação do API Guides, acho que li um pouco  menos da metade.
Estava ficando monótono, resolvi dar uma pausa e ler o livro "Google Android: crie aplicações para celulares e tablets" do João Bosco Monteiro.
Estou quase no fim, outro dia postarei o que achei da leitura.

Também estou dando uma pesquisada em desenvolvimento ágil, mais especificamente no Scrum.

Abraços!


sábado, 5 de outubro de 2013

Receita para ser um grande programador

Estava pensando em escrever uma receita de como ser um grande programador, aí me lembrei da receita feita pelo Peter Norvig, fiz umas adaptações, coloquei alguns ingredientes, vejam aí como ficou.

Uma receita para o sucesso em programação:

Amar programar e programar porque gosta. Certifique-se sempre de que continue gostando o suficiente, pois você vai dedicar dez anos ou 10.000 horas de sua vida nisso.

Programe. Programe muito. A melhor receita de aprendizado é aprender fazendo.

Troque ideias com outros programadores; estude programas de outros programadores.

Trabalho em grupo. Trabalhe em projetos com outros programadores. São oportunidades para interagir, influenciar e estimular uns aos outros.

Trabalhe em manutenção de projetos legados. Entenda um programa escrito por outra pessoa.

Manutenção - desenvolva seus programas para torná-los mais fáceis para aqueles que irão mantê-los (pode ser você mesmo!).

Aprenda mais de uma linguagem de programação.

Qualificação. Esteja preparado: estamos lidando com uma área que mais evolui cotidianamente. Então esteja atento às novidades. Não durma no ponto!

Faça e siga um plano de carreira.

Graduação é importante, mas, não é imprescindível.
Dependendo do plano de carreira é fundamental.

Livros, importantes desde que estudados, entendidos e incorporados.

Língua: aprenda inglês. Até bem pouco tempo bastava o chamado inglês técnico, hoje em dia precisa, em alguns casos, ser fluente.

E lembre-se, estamos falando de programação de computador. Então, conheça o computador, as suas partes constituintes, o hardware e o software. A CPU, o sistema operacional, JVM, o compilador, etc.

E, para terminar: "Nem todo mundo pode se tornar um grande programador, mas um grande programador pode vir de qualquer lugar". Isso pressupõe que algumas pessoas já possuem as qualidades necessárias para se tornar um grande programador. São as qualidades inatas, que chamamos de talento, que independem da sua formação.

Mas, não se iludam, a dedicação, persistência, sacrifício e o trabalho duro continuam sendo os grandes diferenciais dos vencedores.

Boa Sorte!
Abraços

quarta-feira, 25 de setembro de 2013

A sua app cancelou? Você sabe analisar as mensagens de erros?

  Se você está iniciando em programação, a habilidade em encontrar e corrigir erros é fundamental.
  E, como sempre, você só vai adquirir essa capacitação praticando. Então, não saia procurando ajuda logo após um erro: solucione você mesmo!
  Essa capacidade é fundamental para produzir um código correto e confiável. Afinal, se não consegue corrigir um erro, é um sinal de que não está entendendo alguma coisa, e, se não está entendendo...

  Lembre-se: um bom programador não é aquele que não comete erros, é aquele que consegue encontrar, analisar e corrigir a causa do erro.
Veja aqui uma dica.

  Abraço.

sexta-feira, 13 de setembro de 2013

Dia do Programador

Parabéns programadores!
Hoje comemoramos o Dia do Programador.
Mas, como foi escolhido esse dia?
Escolheu-se comemorar o nosso dia, no 256° dia do ano, isso ocorre no dia 13 de setembro (em ano bissexto no dia 12),  isso foi na Rússia.
E porquê 256? Por que é o número de valores distintos que podem ser representados com um byte de 8 bits.
Tem outras explicações, mas aí é pura numerologia!

Parabéns a todos!

terça-feira, 10 de setembro de 2013

Dicas: Cuidados ao publicar um app

 Se alterar o "package name" no Manifest ou trocar o Certificado usado para assinar o aplicativo, o seu app será tratado de forma diferente no Google play.
 Se alterar o "package name", o app será considerado como um novo app. Podendo instalar os dois no mesmo aparelho.
 Se trocar o certificado, o novo app só poderá ser instalado se desinstalar a versão anterior.
Então, não esqueça de fazer o backup do certificado!

Abraços

sexta-feira, 6 de setembro de 2013

quinta-feira, 5 de setembro de 2013

Recursos para processamento assíncrono no Android

São os seguintes recursos que se pode utilizar para executar tarefas assíncronas no Android:
1- Thread
2- Executor
3- HandlerThread
4- AsyncTask
5- Service + Thread
6- IntentService
7- AsyncQueryHandler
8- Loader

Mais a classe utilitária Handler.

quarta-feira, 4 de setembro de 2013

Meus estudos

Estou sem tempo para dedicar-me ao desenvolvimento.
Então, para aproveitar o pouco tempo disponível, estou iniciando um novo ciclo de estudos da plataforma Android.
O objetivo é (re)ler, pelo menos, toda a documentação do API Guides.
Vamos ver.


A compra da Nokia pela Microsoft

Vamos ver se com a compra da divisão de celulares da Nokia pela Microsoft consiga alavancar o crescimento do Windows Phone, afinal, com o Android beirando os 80% do mercado de smartphones, a Google pode ficar tentada a diminuir o ritmo das inovações!
Vamos aguardar!
Abraços

segunda-feira, 2 de setembro de 2013

quinta-feira, 22 de agosto de 2013

Lista de blogs sobre programação Android

Estou fazendo uma lista de blogs sobre programação Android, se você conhece um por favor coloque o link num comentário.

Obrigado!

Abraços

Alguns links:

Felipe Bonezi http://debugcodigos.blogspot.com/

Marcos Vasconcelos http://markytechs.wordpress.com/android-development

Jansen Felipe http://www.jansenfelipe.com.br/

Nelson Glauber de Vasconcelos Leal http://nglauber.blogspot.com.br/

Pablo Rodrigo androidxe.blogspot.com

Pedreiros do Software https://pedreirosdosoftware-pedreiros.rhcloud.com/

Android Brasil Projetos http://www.androidbrasilprojetos.org/

Clube do Android http://www.clubedoandroid.com.br/

Código Google http://codigo-google.blogspot.com.br/

domingo, 14 de julho de 2013

Sincronizando ciclos de vida de uma work thread e da activity

 Para comemorar o aniversário do Blog Agorandroid, como um presente especial para os leitores, segue um exemplo de código que uso em algumas situações.
 Muitas vezes temos a necessidade de executar uma tarefa em segundo plano de uma forma contínua, ficando em loop enquanto uma activity esteja sendo executada. Mas, com uma característica adicional: desejamos sincronizar o ciclo de vida da tarefa com o ciclo de vida da activity.
 Para isso vamos definir uma classe MyTask que implementa a interface Runnable, e usar dois loops aninhados para controlar o ciclo de vida da tarefa. No loop externo, vamos usar a característica blocante da queue com bloqueio para aguardar/liberar a execução do serviço no loop interno.
 Implementamos os seguintes métodos do ciclo de vida da tarefa:
 -resume() - para (re)iniciar a tarefa;
 -pause() - para encerrar o loop interno;
 -stop() - para encerrar a tarefa;
 E os métodos auxiliares para setar/checar o status da tarefa: setStatus() e isRunning().
 O método doSomething() representa o serviço a ser executado pela tarefa, no caso, apenas incrementamos um contador e usamos o handler para atualizar a tela.

 Na activity, implementamos os seguintes métodos:
 -onCreate - instanciamos o textView e o button, e colocamos código para pausar/reiniciar a contagem da tarefa;
 -onStart - instanciamos a tarefa, a thread e startamos a thread;
 -onResume - chamamos o método resume da tarefa;
 -onPause - chamamos o método pause da tarefa;
 -onStop - chamamos o método stop da tarefa e esperamos a finalização da thread.

 Notem que o objetivo é manter a tarefa ativa somente quando a activity estiver no status "resumed".

 Seguem os códigos:

main.xml


TesteThread5Activity.class


O código está cheio de Log´s para podermos acompanhar a execução dos métodos.

Vejam um teste que executei:



Espero que gostem,

 Abraços

Aniversário do Blog

O blog está completando 2 anos hoje.
Parabéns a todos os leitores que tem visitado os meus posts.
Renovo agora o que disse há dois anos:
Seja muito bem vindo ao “Agorandroid”!

sábado, 6 de julho de 2013

Quanto tempo demora para aprender programação de computadores?

  Estive pensando sobre o tema após ler sobre a opinião do Peter Norvig sobre o assunto.
  Resumindo, Norvig diz que precisa de 10 anos ou 10.000 horas de dedicação.
  Para quem desejar ler o artigo acesse aqui: http://www.norvig.com/21-days.html
  Concordo com a opinião dele. Quem sou eu para discordar do cara??? Heheheh!!!
  Na verdade, concordo plenamente, ele está se referindo ao programador de software básico, aquele que desenvolve sistemas operacionais, compiladores, algoritmos de AI, etc.
  Mas, e os programadores de sistemas ditos "comerciais", precisam do mesmo tempo?
  Se considerarmos os quatro ou cinco anos de graduação, estágio, trainee, junior, pleno e senior deve dar os dez anos!
  Um detalhe importante: conta muito o quanto você se dedica em praticar/estudar fora do seu trabalho normal.
  Outro detalhe, nada substitui o estudar/testar/praticar/medir, neste nível o "achômetro" tem muito pouco espaço!
  Então, se você está começando agora, esteja preparado pelos próximos dez anos!

Abraços

quinta-feira, 20 de junho de 2013

Programação de Games para Android - AndEngine

Mudança de planos.
Estou iniciando um estudo do AndEngine. A ideia inicial era deixar esse estudo para uma etapa posterior, mas, acho que será mais produtivo não gastar muito tempo reinventando a roda.

Abraços

quarta-feira, 5 de junho de 2013

Dois Anos de Android

Estou completando dois anos de Android.

Como comecei do zero, me dediquei a estudar a parte básica da plataforma. Entender os conceitos e a arquitetura.
Tenho um fator limitante que me dedico ao Android em tempo parcial, nos momentos livres. Então, tenho mais estudado, do que praticado programação Android!

No momento, estou entrando numa área totalmente nova para mim: a programação de games.
Já tinha feito um estudo básico, agora estou me aprofundando no tema.
A ideia é desenvolver uns games "na raça" em Java, sem usar nenhuma engine.
Como estou no início dessa caminhada, não sei se não me levará ao C++...

Abraços!


sexta-feira, 24 de maio de 2013

Welcome Android Studio

Android Studio é um novo ambiente de desenvolvimento para o Android, baseado no IntelliJ IDEA.

Pelo que vi no video de apresentação, promete!

Abraços

sábado, 18 de maio de 2013

Programação de Games para Android


Estou retomando os estudos sobre desenvolvimento de games para o Android.
Como texto base, estou usando o livro Beginning Android Games, do Mario Zechner e Robert Green.
O foco inicial será a programação de games, mas, pretendo estudar todo o ciclo de desenvolvimento de um game.

domingo, 5 de maio de 2013

Novo blog


Estou criando outro blog.
Nele pretendo concentrar os posts sobre os meus aplicativos.
Lá devo colocar os anúncios de publicação no Google Play, atualizações e dicas de uso.


Abraços

sábado, 4 de maio de 2013

Exemplo: Work fragment com thread e retainInstance

 Este é um exemplo interessante que retirei dos Samples do Android (ApiDemos).

 É o exemplo de um fragment que usa um work fragment (sem UI) que usa uma thread para simular um serviço de longa duração.
 É interessante por:
 -uso de um work fragment no lugar de um service ou de uma AsyncTask.
 -uso da opção setRetainInstance(true) para manter o fragment durante o processo de recriação da activity.
 -uso de uma thread com o ciclo de vida controlado pelo ciclo de vida dos fragments envolvidos.
 -técnica de construção de um work fragment thread-safe, com o uso do wait-notify.

 Seguem os códigos:

 fragment_retain_instance.xml



FragmentRetainInstance.java



Abraços

PS: O código abaixo deveria ter um tratamento diferente, a primeira linha deveria estar logo após criar o ProgressBar, e a seguinte deveria ser executada na UI Thread (p.e, com um runOnUiThread).
                        max = mProgressBar.getMax();
                        mProgressBar.setProgress(mPosition);






sexta-feira, 3 de maio de 2013

Dica: evite erros de concorrência no Android

Uma das áreas que tenho dedicado atenção, estudos e testes é a programação concorrente no Android.
É, com certeza, uma das áreas mais difíceis de se programar e de se entender.
É, também, uma das áreas em que se cometem mais erros.
Tem muito código rodando com falhas prestes a ocorrer por aí.
Tenho encontrado erros em exemplos, tutoriais, etc. Inclusive em exemplos que justamente tratam de concorrência!
Mais cedo ou mais tarde vão implementar melhorias no Dalvik, por exemplo, que vão trazer à luz essas falhas.
Quem viver, verá!

Abraços

PS: essa dica não está baseada apenas nos erros dos outros, também está baseada nos erros que cometo!

domingo, 28 de abril de 2013

Dois Anos de Java

  Só para não passar em branco, estou completando dois anos de Java.

  No primeiro ano escrevi esse post:  http://agorandroid.blogspot.com.br/2012/04/um-ano-de-java.html

  Terminava, assim:
"Agora estou tentando me aprofundar em processamento concorrente em Java e começando a estudar o Android 3.x para frente."
  Neste último ano, dediquei bastante tempo estudando concorrência e boas práticas em Java. E iniciei os estudos sobre "Design Patterns".

  No Android, consolidei os estudos da parte básica e já fiz uma base nas APIs mais recentes.

  Para o próximo ano, espero continuar os estudos sobre padrões, refatoração e consolidar os estudos sobre programação concorrente em Java.

  Abraços!


Nova versão da Calculadora de materiais para concreto - CalcMat


O nova versão tem uma nova opção para informar o traço: Tudo em volume - areia úmida

Na versão anterior precisávamos fazer uma série de cálculos para converter um traço tudo em volume para um traço proporcional a 1 kg de cimento.

Vejam aqui como era: http://agorandroid.blogspot.com.br/2013/04/como-usar-calcmat.html

Como nesse traço é tudo em volume e proporcional a 1 litro de cimento, precisamos informar a quantidade de água proporcional a 1 L de cimento:
Vamos pegar daquele post duas informações: 1 saco de cimento equivale a aproximadamente 36L e que precisamos de 21,5 L de água para 1 saco de cimento.
Então basta dividir 21,5 por 36, que é igual a aproximadamente 0,60.

Vamos entrar com o traço: 1:2,5:3 e água 0,60




sábado, 27 de abril de 2013

Teste do Fragments BackStack

  Este é um teste que fiz para verificar como funciona o BackStack de Fragments.

  Tem também um exemplo de má prática de como construir um fragment acoplado a uma activity (impede reaproveitamento).

  O objetivo era só testar o funcionamento do BackStack.

 Seguem os códigos.

 activity_main.xml


 fragment1.xml


Fragment1.java


MainActivity.java





Para testar, avance com o botão "Next Frag" e para voltar use o "Back".

Abraços.






sexta-feira, 26 de abril de 2013

Livro indicado em promoção

Agora eu posso dizer: eu li, então posso indicar o livro do Ricardo Lecheta.

No Portal Android, tem uma promoção de 20% de desconto.

Bons estudos!

quinta-feira, 25 de abril de 2013

Impressões sobre a leitura do Livro Google Android, R. Lecheta, 3ª edição


Terminei hoje o que chamei de "maratona de leitura' do livro Google Android, 3ª edição. Do capítulo 1 ao final do capítulo 15, na página 500.
Devo explicar os motivos para ler até a página 500 e também os "porquês" da leitura.
O primeiro é fácil, nesse livro a parte de conhecimentos básicos termina justamente na página 500.
Os motivos da leitura foram para responder duas questões:
1. Como estava o meu nível de conhecimento em relação aos assuntos tratados no livro, até essa página?
2. Poderia continuar a indicar o livro para um iniciante em programação Android?

Os que me acompanham pelo blog ou pelos foruns sabem que usei a segunda edição desse livro como base para meus estudos iniciais sobre a plataforma Android, e sempre o indiquei como um dos melhores livros para um iniciante.
O problema é que já se passaram quase dois anos desde que iniciei os meus estudos. Além disso, o Google já lançou quase uma dezena de versões novas da plataforma Android.
Iniciei com a API 8 e já estamos na 17.
Aproveitando o fato de que a terceira edição acaba de ser lançada, resolvi encarar o desafio para poder responder as questões acima.

Quanto à primeira pergunta, devo dizer que me surpreendi, pois, antes da leitura, não sabia nem quantificar o quanto conhecia sobre os assuntos tratados. Depois da leitura, posso dizer que somente dois assuntos não tinha conhecimento (ViewPager e Notification.Builder).
Mas, isso foi para me avaliar, não ao livro!

Os assuntos tratados nessas páginas continuam fazendo parte do que chamo de infraestrutura básica de conhecimentos necessários para um desenvolvedor Android.
Notem que são necessários, mas já não são suficientes. Com as novas versões do Android e os tablets, pode-se incluir a API Fragments, ActionBar e mais alguns tópicos como conhecimentos básicos para um desenvolvedor estar capacitado para fazer apps que suportem os diversos dispositivos disponíveis no momento.
Mas, esses novos conhecimentos devem ser adquiridos somente após os conhecimentos tratados nesse livro estarem consolidados.
Então, para resumir, o livro continua sendo indicado para um iniciante. Somente por esses capítulos, sem falar dos outros!

O livro, não é indicado apenas para um iniciante, pelos capítulos que chamo de exemplos-de-uso, servem até para os mais avançados. Eu, de minha parte, espero fazer bom proveito das novidades!

Parabenizo ambos o autor Ricardo Lecheta e a editora Novatec por mais esse livro.
Sucesso!


Android ArrayAdapter is thread-unsafe

  Estava dando uma verificada no fonte do ArrayAdapter e encontrei uma falha conceitual de concorrência, no código está sendo protegido por uma trava as operações de alteração da lista mas não as de leitura.
Então, a classe não é thread-safe.


terça-feira, 23 de abril de 2013

Roteiro para estudar o livro Google Android, R.Lecheta


  Sugestão de roteiro para estudar o livro Google Android, R.Lecheta.

  Se você é um iniciante em Android e já tem um nível razoável em Java, minha sugestão para estudo é a seguinte sequência de capítulos:


Capítulo 01 - Introdução


Capítulo 02 - Configuração do ambiente


Capítulo 03 - Conceitos básicos do Android


Capítulo 04 - Activity


Capítulo 05 - Intent


Capítulo 06 - Interface gráfica – gerenciadores de layout.


Capítulo 07 - Interface gráfica – View


Capítulo 08 - Intent Filter


Capítulo 13 - Handler, Threads e AsyncTask

Sugestão: estude sobre Threads em algum livro de Java básico.


Capítulo 14 - Banco de Dados


Capítulo 09 - BroadcastReceiver


Capítulo 10 - Notification


Capítulo 11 - Service


Capítulo 12 - AlarmManager


  Neste ponto você terá uma boa base sobre a plataforma Android.
  Estude os outros capítulos de acordo com a sua necessidade ou interesse.

 Bons estudos!

Dica: Como ler código e aprender mais


  Aprendi essa técnica de ler códigos fazendo longas jornadas de depuração de códigos com problemas.

  A técnica consiste no seguinte: ao ler o código você assume um papel de um pré-compilador e de uma VM (virtual Machine)!

  Só que de um modo customizável, dependendo do foco. Explico, num momento você seta o modo de leitura, noutro o modo prospecção (nível maior de atenção, como procurando "pepitas de ouro" e/ou "lixo" no código), e finalmente o modo debug, que é o nível em que todos os sensores estão ligados verificando cada ponto, vírgula, colchetes, parenteses e ponto-e-vírgula!
  Outro detalhe, você muitas vezes deve alternar esses "modos" de trabalho num mesmo código.

  Você assume o papel de pré-compilador, quando procura possíveis erros no código.
  Você assume o papel de uma VM, quando imagina a execução do código.

  Quanto mais treinado estiver nesta técnica, maior será o sua capacidade de resolver problemas. Com um efeito colateral positivo, você vai (literalmente) aprender direto na fonte!

Abraços!

segunda-feira, 22 de abril de 2013

"THE DONATE LICENSE"

Estou adotando a seguinte licença de uso:


/*
 * -----------------------------------------------------------------------------
 * "THE DONATE LICENSE" (Revision 1):
 * <A H Gusukuma>  <escreveu este tutorial>.
 * Qualquer material sob essa licença é de uso livre, se for para publicar em
 * qualquer meio basta manter esta notificação.
 * Os exemplos de código não tem garantia de nenhum tipo, o uso é de sua inteira
 * responsabilidade.
 *
 * Se lhe foi útil e se desejar e tiver condições de contribuir, faça uma doação
 * para <alguém próximo de você>.
 *
 * -----------------------------------------------------------------------------
 */

O objetivo é chamar a atenção para um fato que ocorre com a maioria de nós: a correria do dia a dia  nos faz ficar tão centrados em nós mesmos que acabamos esquecendo dos problemas do próximo e em quanto podemos ajudar com muito pouco, bastando tomarmos a iniciativa!

Abraços!

Maratona de leitura, livro Google Android 3ª edição, R. Lecheta

  Estou iniciando uma "maratona de leitura" do livro do Lecheta.
  Na verdade uma releitura, se é que posso usar o termo, já que o livro acaba de ser lançado. Mas, como já li a 2ª edição, acho que posso falar assim.
  Pretendo fazer uma leitura direta até o capítulo sobre content provider, umas 500 páginas...
  O tamanho do livro impressiona, 800 e tantas páginas!
  Se tudo "correr" bem, até o final da semana escrevo minhas impressões sobre a leitura.

Abraços

domingo, 21 de abril de 2013

Implementando o padrão MVC no Android, usando a API Fragments

  Comecei este tutorial com o objetivo de mostrar um exemplo de uso da API Fragments, algo simples sem grandes pretensões.
  Depois acrescentei um exemplo de uso de um Singleton. Como essa classe poderia mais tarde ser usada concorrentemente (com Threads ou AsyncTasks) usei um modelo de Singleton thread-safe.
  Para demonstrar a comunicação fragment-activity, adotei o modelo implementado via interface, conhecido como "listener". Coloquei as três formas mais comuns de usar esse padrão: Passar dados para a activity-host, consultar uma informação da activity-host e informar um evento ocorrido no fragment para que a activity-host possa tratá-lo.
  Só estava faltando a comunicação activity-fragment, então incluí isso também no exemplo.
  No final, acabei com um exemplo do padrão MVC em uma app android. Onde o M ficou por conta do Singleton, o C por conta das activities e o V com os fragments.
 Também estou testando o uso da biblioteca de compatibilidade, o agora conhecido por Android Support Library.
  Como não vou comentar o código por ser bem simples, vou dar uma visão geral do projeto.
  O projeto ficou bem simples, apesar de implementar tudo que disse aí em cima, chamei-o de ListaDe, por pura falta de inspiração, mas dá uma verificada quantas listas você tem contato no dia a dia. É composto de duas telas, uma para entrar com os dados e outra um ListView.
  Para mostrar o poder da possibilidade de reutilização de código usando fragments, coloquei três situações de uso do aplicativo:
 -Large retrato - com dois fragments na vertical;
 -Large paisagem - com dois fragments na horizontal;
 -outros casos - um fragment por tela.

  Observem que da maneira como foi implementado, toda a coordenação é exclusiva das activities (Controller), ela que atualiza os dados, ela que avisa que os dados foram alterados e ela que chama outra activity para trocar de tela.
  Por outro lado, os fragments foram implementados de tal forma que ficassem desacoplados das activities, permitindo reutilização de código.


  Aviso que só coloquei o básico, o essencial para facilitar o entendimento e deixar outros detalhes para quem desejar implementar.
  Seguem os códigos:

 string.xml


layout\fragment1.xml


layout\activity1.xml


layout\activity2.xml


layout-large-land\activity1.xml


layout-large-port\activity1.xml


MySingleton.java
Fragment1.java

Fragment2.java

Activity1.java

Activity2.java



Rodando num celular:

























Num tablet posição retrato:






































Num tablet posição paisagem:





















Pessoal, não comentei o código mas estejam à vontade para comentar, solicitar uma ou outra explicação, que na medida do possível tentarei responder.

Obrigado!

segunda-feira, 15 de abril de 2013

Como estudar um livro técnico


  Esse é um assunto interessante, como você estuda o conteúdo de um livro?
  Se você já conhece bem os assuntos tratados no livro e está interessado num tópico específico é fácil: basta ir direto no capítulo que trata sobre o tópico.
  Mas, e no caso de não conhecer assim tão bem, como você faz? Le tudo, pula alguma coisa, le fora de ordem, como faz? Já parou para se avaliar?
  Eu costumo ler tudo, dos agradecimentos ao posfácio. Passando pelo prefácio, introdução, resenhas, recomendações, etc.
  Pode parecer estranho, mas o que procuro são informações do tipo: para que serve, para que não serve, qual ou quais as motivações do autor, quem leu o que achou, que partes são fundamentais ler, qual sequencia deve ser seguida, se pode pular alguma parte sem prejuízo, etc.
  Tudo para obter um alto rendimento no estudo.
 
  É isso!
  E como você estuda?

quinta-feira, 11 de abril de 2013

Meus estudos

Dei uma pausa nos estudos sobre Design Patterns.

Me dediquei um pouco em praticar programação Android, fazendo o CalcMat.
Esse era um projetinho que estava engavetado por uns bons dois anos!
Aproveitei e dei uma boa revisada na API Fragments e fiz o app todo baseado nessa API.
Continuo me aprofundando nos estudos sobre programação concorrente.

Agora estou repensando sobre o que postar no Blog nos próximos meses...
Toda ajuda em forma de sugestões e idéias serão apreciadas.

Abraços

segunda-feira, 8 de abril de 2013

Como usar a CalcMat

  Pergunta:  Como calcular os materiais necessários para fazer uma certa quantidade de concreto?
  Resposta: Usando a CalcMat, é claro! Link para o Google play aí do lado direito em meus apps.

  Para usar a CalcMat precisamos de duas informações básicas: o traço e o volume do concreto a ser calculado.

  Para o traço, vamos usar, por exemplo, o traço em volume 1:2,5:3

  Isso traduzido significa o seguinte:
  1 volume de cimento, 2,5 volumes de areia, 3 volumes de pedra (brita 1)

  Como o programa solicita que os dados sejam proporcionais a 1 kg de cimento e areia seca, precisamos fazer umas conversões.

  Primeiro vamos converter esse traço para um saco de cimento (50 kg):
  Um saco de cimento equivale a 2 baldes de 18 litros (aproximadamente)
  Então, basta multiplicar por 36:
cimento= 1x36=36 L
areia=2,5x36=90 L
pedra 1=3x36=108 L

  Devo mencionar que essas medidas são utilizadas para fazer o concreto na própria obra, é o famoso "concreto virado na obra". E nesse caso a areia normalmente está úmida, e a areia quando úmida sofre um fenômeno físico chamado de inchamento, molhada a areia aumenta de volume.

  Vamos usar um indice de umidade de 5% e um inchamento de 27%. (São valores médios).

  Então, se a areia fosse seca, teriamos um volume menor, dividindo 90 por 1,27 = 70,9 L

  Vamos dividir tudo por 50 kg que é o peso de 1 saco de cimento:
cimento= 1x36=36 L => 50 kg : 50 = 1 kg
areia=2,5x36=90 L  - inchamento => 90:1,27 = 70,9 L : 50 = 1,42 L
pedra 1=3x36=108 L : 50 = 2,16 L

  Pronto, temos o traço em volume, proporcional a 1 kg de cimento: 1:1,42:2,16

  Falta informar  a quantidade de água, ela é informada como um fator proporcional a 1 kg de cimento, vamos usar para o exemplo o fator 0,54.

 Vamos usar como volume 1 m³, assim teremos a informação dos materiais para 1 metro cúbico de concreto.

  É complicado, não é? É muito mais tranquilo e seguro pegar os dados com o responsável técnico da obra!

  É só digitar e teremos as telas abaixo.





Notem, que na última tela do lado direito, temos os materiais para 1 saco de cimento que são os mesmos dados que usamos para chegar ao traço unitário, confirmando que fizemos as contas certas!

IMPORTANTE: esse é um exemplo, não é uma sugestão de traço.


Abraços!

PS: Nova versão: http://agorandroid.blogspot.com.br/2013/04/nova-versao-da-calculadora-de-materiais.html